diff --git a/providers/dns/pdns/internal/client.go b/providers/dns/pdns/internal/client.go index 7eed57e3034..bc525c57895 100644 --- a/providers/dns/pdns/internal/client.go +++ b/providers/dns/pdns/internal/client.go @@ -117,7 +117,7 @@ func (c *Client) GetHostedZone(ctx context.Context, authZone string) (*HostedZon } func (c *Client) UpdateRecords(ctx context.Context, zone *HostedZone, sets RRSets) error { - endpoint := c.joinPath("/", zone.URL) + endpoint := c.joinPath("/", "servers", c.serverName, "zones", zone.ID) req, err := newJSONRequest(ctx, http.MethodPatch, endpoint, sets) if err != nil { @@ -137,7 +137,7 @@ func (c *Client) Notify(ctx context.Context, zone *HostedZone) error { return nil } - endpoint := c.joinPath("/", zone.URL, "/notify") + endpoint := c.joinPath("/", "servers", c.serverName, "zones", zone.ID, "notify") req, err := newJSONRequest(ctx, http.MethodPut, endpoint, nil) if err != nil { diff --git a/providers/dns/pdns/internal/client_test.go b/providers/dns/pdns/internal/client_test.go index 4e17a4fd764..f2ebabe2c2e 100644 --- a/providers/dns/pdns/internal/client_test.go +++ b/providers/dns/pdns/internal/client_test.go @@ -255,13 +255,43 @@ func TestClient_GetHostedZone_v0(t *testing.T) { } func TestClient_UpdateRecords(t *testing.T) { - client := setupTest(t, http.MethodPatch, "/api/v1/servers/localhost/zones/example.org.", http.StatusOK, "zone.json") + client := setupTest(t, http.MethodPatch, "/api/v1/servers/server/zones/example.org.", http.StatusOK, "zone.json") client.apiVersion = 1 zone := &HostedZone{ ID: "example.org.", Name: "example.org.", - URL: "api/v1/servers/localhost/zones/example.org.", + URL: "api/v1/servers/server/zones/example.org.", + Kind: "Master", + } + + rrSets := RRSets{ + RRSets: []RRSet{{ + Name: "example.org.", + Type: "NS", + ChangeType: "REPLACE", + Records: []Record{{ + Content: "192.0.2.5", + Name: "ns1.example.org.", + TTL: 86400, + Type: "A", + }}, + }}, + } + + err := client.UpdateRecords(context.Background(), zone, rrSets) + require.NoError(t, err) +} + +func TestClient_UpdateRecords_NonRootApi(t *testing.T) { + client := setupTest(t, http.MethodPatch, "/some/path/api/v1/servers/server/zones/example.org.", http.StatusOK, "zone.json") + client.Host = client.Host.JoinPath("some", "path") + client.apiVersion = 1 + + zone := &HostedZone{ + ID: "example.org.", + Name: "example.org.", + URL: "some/path/api/v1/servers/server/zones/example.org.", Kind: "Master", } @@ -284,13 +314,13 @@ func TestClient_UpdateRecords(t *testing.T) { } func TestClient_UpdateRecords_v0(t *testing.T) { - client := setupTest(t, http.MethodPatch, "/servers/localhost/zones/example.org.", http.StatusOK, "zone.json") + client := setupTest(t, http.MethodPatch, "/servers/server/zones/example.org.", http.StatusOK, "zone.json") client.apiVersion = 0 zone := &HostedZone{ ID: "example.org.", Name: "example.org.", - URL: "servers/localhost/zones/example.org.", + URL: "servers/server/zones/example.org.", Kind: "Master", } @@ -313,13 +343,29 @@ func TestClient_UpdateRecords_v0(t *testing.T) { } func TestClient_Notify(t *testing.T) { - client := setupTest(t, http.MethodPut, "/api/v1/servers/localhost/zones/example.org./notify", http.StatusOK, "") + client := setupTest(t, http.MethodPut, "/api/v1/servers/server/zones/example.org./notify", http.StatusOK, "") client.apiVersion = 1 zone := &HostedZone{ ID: "example.org.", Name: "example.org.", - URL: "api/v1/servers/localhost/zones/example.org.", + URL: "api/v1/servers/server/zones/example.org.", + Kind: "Master", + } + + err := client.Notify(context.Background(), zone) + require.NoError(t, err) +} + +func TestClient_Notify_NonRootApi(t *testing.T) { + client := setupTest(t, http.MethodPut, "/some/path/api/v1/servers/server/zones/example.org./notify", http.StatusOK, "") + client.Host = client.Host.JoinPath("some", "path") + client.apiVersion = 1 + + zone := &HostedZone{ + ID: "example.org.", + Name: "example.org.", + URL: "/some/path/api/v1/servers/server/zones/example.org.", Kind: "Master", } @@ -328,12 +374,13 @@ func TestClient_Notify(t *testing.T) { } func TestClient_Notify_v0(t *testing.T) { - client := setupTest(t, http.MethodPut, "/api/v1/servers/localhost/zones/example.org./notify", http.StatusOK, "") + client := setupTest(t, http.MethodPut, "/not/queried/for/api/version/0", http.StatusOK, "") + client.apiVersion = 0 zone := &HostedZone{ ID: "example.org.", Name: "example.org.", - URL: "servers/localhost/zones/example.org.", + URL: "servers/server/zones/example.org.", Kind: "Master", }