From bcc8be08226f1ea3eb4dedb88dff82761887e533 Mon Sep 17 00:00:00 2001 From: Marcel Jacek <72880145+marceljk@users.noreply.github.com> Date: Wed, 29 Jan 2025 11:18:02 +0100 Subject: [PATCH] fix: Updating values of "stackit_server" leads to an inconsistent result (#653) * fix: updating values of "stackit_server" leads to an inconsistent result, when network_interfaces is set --- stackit/internal/services/iaas/server/resource.go | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/stackit/internal/services/iaas/server/resource.go b/stackit/internal/services/iaas/server/resource.go index c099a6d6..a1c86e07 100644 --- a/stackit/internal/services/iaas/server/resource.go +++ b/stackit/internal/services/iaas/server/resource.go @@ -727,11 +727,10 @@ func (r *serverResource) Update(ctx context.Context, req resource.UpdateRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error retrieving server state", fmt.Sprintf("Getting server state: %v", err)) } - var updatedServer *iaas.Server if model.DesiredStatus.ValueString() == modelStateDeallocated { // if the target state is "deallocated", we have to perform the server update first // and then shelve it afterwards. A shelved server cannot be updated - updatedServer, err = r.updateServerAttributes(ctx, &model, &stateModel) + _, err = r.updateServerAttributes(ctx, &model, &stateModel) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating server", err.Error()) return @@ -748,13 +747,22 @@ func (r *serverResource) Update(ctx context.Context, req resource.UpdateRequest, return } - updatedServer, err = r.updateServerAttributes(ctx, &model, &stateModel) + _, err = r.updateServerAttributes(ctx, &model, &stateModel) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating server", err.Error()) return } } + // Re-fetch the server data, to get the details values. + serverReq := r.client.GetServer(ctx, projectId, serverId) + serverReq = serverReq.Details(true) + updatedServer, err := serverReq.Execute() + if err != nil { + core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating server", fmt.Sprintf("Calling API: %v", err)) + return + } + err = mapFields(ctx, updatedServer, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating server", fmt.Sprintf("Processing API payload: %v", err))