From 821dc055c1ecedacd17eebf1babb5689e1cdbc76 Mon Sep 17 00:00:00 2001 From: beatz174-bit Date: Wed, 29 Apr 2026 13:46:17 +1000 Subject: [PATCH] Fix Dynu DNS record updates to use POST endpoint --- internal/dynuclient/client.go | 2 +- internal/dynuclient/client_test.go | 2 +- internal/provider/resource_dns_record_integration_test.go | 4 ++-- internal/provider/resource_dns_record_test.go | 6 +++--- internal/testutil/fakedynu/server.go | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/dynuclient/client.go b/internal/dynuclient/client.go index 0111fe1..fcc4eb8 100644 --- a/internal/dynuclient/client.go +++ b/internal/dynuclient/client.go @@ -216,7 +216,7 @@ func (c *Client) CreateDNSRecord(ctx context.Context, domainID int64, req Create func (c *Client) UpdateDNSRecord(ctx context.Context, domainID int64, recordID int64, req UpdateDNSRecordRequest) (*DNSRecord, error) { var resp getDNSRecordResponse - if err := c.doRequest(ctx, http.MethodPut, fmt.Sprintf("/dns/%d/record/%d", domainID, recordID), buildDNSRecordUpsertPayload(req.RecordType, req.NodeName, req.Content, req.TTL, req.State, req.Group, req.Host), &resp); err != nil { + if err := c.doRequest(ctx, http.MethodPost, fmt.Sprintf("/dns/%d/record/%d", domainID, recordID), buildDNSRecordUpsertPayload(req.RecordType, req.NodeName, req.Content, req.TTL, req.State, req.Group, req.Host), &resp); err != nil { return nil, err } normalizeDNSRecord(&resp.DNSRecord) diff --git a/internal/dynuclient/client_test.go b/internal/dynuclient/client_test.go index e2f22e0..e64bac0 100644 --- a/internal/dynuclient/client_test.go +++ b/internal/dynuclient/client_test.go @@ -200,7 +200,7 @@ func TestClientCreateDNSRecordSendsIPv4AddressForARecord(t *testing.T) { func TestClientUpdateDNSRecordSendsIPv6AddressForAAAARecord(t *testing.T) { var captured map[string]any server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - if r.Method != http.MethodPut || r.URL.Path != "/dns/1001/record/2002" { + if r.Method != http.MethodPost || r.URL.Path != "/dns/1001/record/2002" { t.Fatalf("unexpected request %s %s", r.Method, r.URL.Path) } if err := json.NewDecoder(r.Body).Decode(&captured); err != nil { diff --git a/internal/provider/resource_dns_record_integration_test.go b/internal/provider/resource_dns_record_integration_test.go index 7cf7efb..05504c9 100644 --- a/internal/provider/resource_dns_record_integration_test.go +++ b/internal/provider/resource_dns_record_integration_test.go @@ -195,7 +195,7 @@ func TestIntegrationResourceDNSRecordDynamicAStateStableAndTransitionToStatic(t } updatePlan := state - updatePlan.Content = types.StringValue("192.0.2.42") + updatePlan.Content = types.StringValue("1.1.1.1") updatePlan.Dynamic = types.BoolValue(false) plan = tfsdk.Plan{Schema: schemaResp.Schema} @@ -214,7 +214,7 @@ func TestIntegrationResourceDNSRecordDynamicAStateStableAndTransitionToStatic(t if state.Dynamic.ValueBool() { t.Fatalf("expected static A after setting content") } - if state.Content.ValueString() != "192.0.2.42" { + if state.Content.ValueString() != "1.1.1.1" { t.Fatalf("expected static content after update, got %q", state.Content.ValueString()) } } diff --git a/internal/provider/resource_dns_record_test.go b/internal/provider/resource_dns_record_test.go index eb9f702..7fc59c4 100644 --- a/internal/provider/resource_dns_record_test.go +++ b/internal/provider/resource_dns_record_test.go @@ -26,8 +26,8 @@ func TestParseDNSRecordIDInvalid(t *testing.T) { } func TestValidateDNSRecordContentForType(t *testing.T) { - ipv4 := "192.0.2.123" - ipv6 := "2001:db8::123" + ipv4 := "8.8.8.8" + ipv6 := "2606:4700:4700::1111" nonEmpty := "hello" blank := "" @@ -75,7 +75,7 @@ func TestResolveDynamicIntent(t *testing.T) { } diags = diag.Diagnostics{} - dynamic, ok = resolveDynamicIntent("A", types.StringValue("192.0.2.10"), types.BoolNull(), &diags) + dynamic, ok = resolveDynamicIntent("A", types.StringValue("8.8.4.4"), types.BoolNull(), &diags) if !ok || dynamic || diags.HasError() { t.Fatalf("expected static A content to resolve to dynamic=false, got dynamic=%v ok=%v diags=%v", dynamic, ok, diags) } diff --git a/internal/testutil/fakedynu/server.go b/internal/testutil/fakedynu/server.go index 008f5e7..64628fb 100644 --- a/internal/testutil/fakedynu/server.go +++ b/internal/testutil/fakedynu/server.go @@ -241,7 +241,7 @@ func (s *Server) serveRecordRoutes(w http.ResponseWriter, r *http.Request, segme case http.MethodGet: s.handleGetRecord(w, domainID, recordID) return - case http.MethodPut: + case http.MethodPut, http.MethodPost: s.handleUpdateRecord(w, r, domainID, recordID) return case http.MethodDelete: