From 7fa9d7f81f15cb58f836b73804e43a86d5f030eb Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 26 Nov 2025 09:53:21 +0000 Subject: [PATCH] Fix firewall rules to read back state after Create/Update operations Co-authored-by: oscarhermoso <23239955+oscarhermoso@users.noreply.github.com> --- .../server_firewall_rules_resource.go | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/internal/provider/server_firewall_rules_resource.go b/internal/provider/server_firewall_rules_resource.go index bb0df40..e92c8aa 100644 --- a/internal/provider/server_firewall_rules_resource.go +++ b/internal/provider/server_firewall_rules_resource.go @@ -121,6 +121,29 @@ func (r *serverFirewallRulesResource) Create(ctx context.Context, req resource.C return } + // Read back the firewall rules to get the actual state from the API + readResp, err := r.bc.client.GetServersServerIdAdvancedFirewallRulesWithResponse(ctx, data.ServerId.ValueInt64()) + if err != nil { + resp.Diagnostics.AddError( + fmt.Sprintf("Error reading server firewall rules after create: server_id=%d", data.ServerId.ValueInt64()), + err.Error(), + ) + return + } + if readResp.StatusCode() != http.StatusOK { + resp.Diagnostics.AddError( + "Unexpected HTTP status code reading server firewall rules after create", + fmt.Sprintf("Received %s reading server firewall rules: server_id=%d. Details: %s", readResp.Status(), data.ServerId.ValueInt64(), readResp.Body)) + return + } + + firewallRulesValue, diags := GetFirewallRulesState(ctx, &readResp.JSON200.FirewallRules) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } + data.FirewallRules = firewallRulesValue + // Save data into Terraform state resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) } @@ -207,6 +230,29 @@ func (r *serverFirewallRulesResource) Update(ctx context.Context, req resource.U return } + // Read back the firewall rules to get the actual state from the API + readResp, err := r.bc.client.GetServersServerIdAdvancedFirewallRulesWithResponse(ctx, data.ServerId.ValueInt64()) + if err != nil { + resp.Diagnostics.AddError( + fmt.Sprintf("Error reading server firewall rules after update: server_id=%d", data.ServerId.ValueInt64()), + err.Error(), + ) + return + } + if readResp.StatusCode() != http.StatusOK { + resp.Diagnostics.AddError( + "Unexpected HTTP status code reading server firewall rules after update", + fmt.Sprintf("Received %s reading server firewall rules: server_id=%d. Details: %s", readResp.Status(), data.ServerId.ValueInt64(), readResp.Body)) + return + } + + firewallRulesValue, diags := GetFirewallRulesState(ctx, &readResp.JSON200.FirewallRules) + resp.Diagnostics.Append(diags...) + if resp.Diagnostics.HasError() { + return + } + data.FirewallRules = firewallRulesValue + // Save updated data into Terraform state resp.Diagnostics.Append(resp.State.Set(ctx, &data)...) }