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)...) }