diff --git a/.github/docs/contribution-guide/resource.go b/.github/docs/contribution-guide/resource.go index ff44c7c61..d12f50a28 100644 --- a/.github/docs/contribution-guide/resource.go +++ b/.github/docs/contribution-guide/resource.go @@ -184,6 +184,9 @@ func (r *barResource) Create(ctx context.Context, req resource.CreateRequest, re if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() // not needed for global APIs ctx = tflog.SetField(ctx, "project_id", projectId) @@ -203,6 +206,8 @@ func (r *barResource) Create(ctx context.Context, req resource.CreateRequest, re return } + ctx = core.LogResponse(ctx) + // only in case the create bar API call is asynchronous (Make sure to include *ALL* fields which are part of the // internal terraform resource id! And please include the comment below in your code): // Write id attributes to state before polling via the wait handler - just in case anything goes wrong during the wait handler @@ -244,6 +249,9 @@ func (r *barResource) Read(ctx context.Context, req resource.ReadRequest, resp * if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) barId := model.BarId.ValueString() @@ -257,6 +265,8 @@ func (r *barResource) Read(ctx context.Context, req resource.ReadRequest, resp * return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(barResp, &model) if err != nil { @@ -285,6 +295,9 @@ func (r *barResource) Delete(ctx context.Context, req resource.DeleteRequest, re if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() barId := model.BarId.ValueString() @@ -298,6 +311,8 @@ func (r *barResource) Delete(ctx context.Context, req resource.DeleteRequest, re core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting bar", fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + // only in case the bar delete API endpoint is asynchronous: use a wait handler to wait for the delete operation to complete _, err = wait.DeleteBarWaitHandler(ctx, r.client, projectId, region, barId).WaitWithContext(ctx) if err != nil { diff --git a/go.mod b/go.mod index 3a3b65a6d..ffd2c117d 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/hashicorp/terraform-plugin-go v0.29.0 github.com/hashicorp/terraform-plugin-log v0.10.0 github.com/hashicorp/terraform-plugin-testing v1.13.3 - github.com/stackitcloud/stackit-sdk-go/core v0.19.0 + github.com/stackitcloud/stackit-sdk-go/core v0.20.0 github.com/stackitcloud/stackit-sdk-go/services/cdn v1.6.0 github.com/stackitcloud/stackit-sdk-go/services/dns v0.17.1 github.com/stackitcloud/stackit-sdk-go/services/git v0.8.0 diff --git a/go.sum b/go.sum index 6d10aae8c..78f1c3bf1 100644 --- a/go.sum +++ b/go.sum @@ -152,8 +152,8 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= -github.com/stackitcloud/stackit-sdk-go/core v0.19.0 h1:dtJcs6/TTCzzb2RKI7HJugDrbCkaFEDmn1pOeFe8qnI= -github.com/stackitcloud/stackit-sdk-go/core v0.19.0/go.mod h1:fqto7M82ynGhEnpZU6VkQKYWYoFG5goC076JWXTUPRQ= +github.com/stackitcloud/stackit-sdk-go/core v0.20.0 h1:4rrUk6uT1g4nOn5/g1uXukP07Tux/o5xbMz/f/qE1rY= +github.com/stackitcloud/stackit-sdk-go/core v0.20.0/go.mod h1:fqto7M82ynGhEnpZU6VkQKYWYoFG5goC076JWXTUPRQ= github.com/stackitcloud/stackit-sdk-go/services/authorization v0.9.0 h1:7ZKd3b+E/R4TEVShLTXxx5FrsuDuJBOyuVOuKTMa4mo= github.com/stackitcloud/stackit-sdk-go/services/authorization v0.9.0/go.mod h1:/FoXa6hF77Gv8brrvLBCKa5ie1Xy9xn39yfHwaln9Tw= github.com/stackitcloud/stackit-sdk-go/services/cdn v1.6.0 h1:Q+qIdejeMsYMkbtVoI9BpGlKGdSVFRBhH/zj44SP8TM= diff --git a/stackit/internal/core/core.go b/stackit/internal/core/core.go index 405bf0c90..733274074 100644 --- a/stackit/internal/core/core.go +++ b/stackit/internal/core/core.go @@ -7,6 +7,7 @@ import ( "strings" "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/stackitcloud/stackit-sdk-go/core/runtime" "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-log/tflog" @@ -102,12 +103,20 @@ func DiagsToError(diags diag.Diagnostics) error { // LogAndAddError Logs the error and adds it to the diags func LogAndAddError(ctx context.Context, diags *diag.Diagnostics, summary, detail string) { + if traceId := runtime.GetTraceId(ctx); traceId != "" { + detail = fmt.Sprintf("%s\nTrace ID: %q", detail, traceId) + } + tflog.Error(ctx, fmt.Sprintf("%s | %s", summary, detail)) diags.AddError(summary, detail) } // LogAndAddWarning Logs the warning and adds it to the diags func LogAndAddWarning(ctx context.Context, diags *diag.Diagnostics, summary, detail string) { + if traceId := runtime.GetTraceId(ctx); traceId != "" { + detail = fmt.Sprintf("%s\nTrace ID: %q", detail, traceId) + } + tflog.Warn(ctx, fmt.Sprintf("%s | %s", summary, detail)) diags.AddWarning(summary, detail) } @@ -125,3 +134,22 @@ func LogAndAddErrorBeta(ctx context.Context, diags *diag.Diagnostics, name strin tflog.Error(ctx, fmt.Sprintf("%s | %s", errTitle, errContent)) diags.AddError(errTitle, errContent) } + +// InitProviderContext extends the context to capture the http response +func InitProviderContext(ctx context.Context) context.Context { + // Capture http response to get trace-id + var httpResp *http.Response + return runtime.WithCaptureHTTPResponse(ctx, &httpResp) +} + +// LogResponse logs the trace-id of the last request +func LogResponse(ctx context.Context) context.Context { + // Logs the trace-id of the request + traceId := runtime.GetTraceId(ctx) + ctx = tflog.SetField(ctx, "x-trace-id", traceId) + + tflog.Info(ctx, "response data", map[string]interface{}{ + "x-trace-id": traceId, + }) + return ctx +} diff --git a/stackit/internal/services/authorization/roleassignments/resource.go b/stackit/internal/services/authorization/roleassignments/resource.go index 32d5909df..cd29fdb0a 100644 --- a/stackit/internal/services/authorization/roleassignments/resource.go +++ b/stackit/internal/services/authorization/roleassignments/resource.go @@ -152,6 +152,8 @@ func (r *roleAssignmentResource) Create(ctx context.Context, req resource.Create return } + ctx = core.InitProviderContext(ctx) + ctx = r.annotateLogger(ctx, &model) if err := r.checkDuplicate(ctx, model); err != nil { @@ -171,6 +173,8 @@ func (r *roleAssignmentResource) Create(ctx context.Context, req resource.Create return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapMembersResponse(createResp, &model) if err != nil { @@ -194,6 +198,8 @@ func (r *roleAssignmentResource) Read(ctx context.Context, req resource.ReadRequ return } + ctx = core.InitProviderContext(ctx) + ctx = r.annotateLogger(ctx, &model) listResp, err := r.authorizationClient.ListMembers(ctx, r.apiName, model.ResourceId.ValueString()).Subject(model.Subject.ValueString()).Execute() @@ -202,6 +208,8 @@ func (r *roleAssignmentResource) Read(ctx context.Context, req resource.ReadRequ return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapListMembersResponse(listResp, &model) if err != nil { @@ -232,6 +240,8 @@ func (r *roleAssignmentResource) Delete(ctx context.Context, req resource.Delete return } + ctx = core.InitProviderContext(ctx) + ctx = r.annotateLogger(ctx, &model) payload := authorization.RemoveMembersPayload{ @@ -247,6 +257,8 @@ func (r *roleAssignmentResource) Delete(ctx context.Context, req resource.Delete core.LogAndAddError(ctx, &resp.Diagnostics, fmt.Sprintf("Error deleting %s role assignment", r.apiName), fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, fmt.Sprintf("%s role assignment deleted", r.apiName)) } diff --git a/stackit/internal/services/cdn/customdomain/datasource.go b/stackit/internal/services/cdn/customdomain/datasource.go index 14946b1e4..6f5dfa792 100644 --- a/stackit/internal/services/cdn/customdomain/datasource.go +++ b/stackit/internal/services/cdn/customdomain/datasource.go @@ -126,6 +126,8 @@ func (r *customDomainDataSource) Read(ctx context.Context, req datasource.ReadRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) distributionId := model.DistributionId.ValueString() @@ -146,6 +148,8 @@ func (r *customDomainDataSource) Read(ctx context.Context, req datasource.ReadRe return } + ctx = core.LogResponse(ctx) + // Call the new data source mapping function err = mapCustomDomainDataSourceFields(customDomainResp, &model, projectId, distributionId) if err != nil { diff --git a/stackit/internal/services/cdn/customdomain/resource.go b/stackit/internal/services/cdn/customdomain/resource.go index f974348e8..c031bd93a 100644 --- a/stackit/internal/services/cdn/customdomain/resource.go +++ b/stackit/internal/services/cdn/customdomain/resource.go @@ -186,6 +186,9 @@ func (r *customDomainResource) Create(ctx context.Context, req resource.CreateRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) distributionId := model.DistributionId.ValueString() @@ -207,6 +210,9 @@ func (r *customDomainResource) Create(ctx context.Context, req resource.CreateRe core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating CDN custom domain", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.CreateCDNCustomDomainWaitHandler(ctx, r.client, projectId, distributionId, name).SetTimeout(5 * time.Minute).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating CDN custom domain", fmt.Sprintf("Waiting for create: %v", err)) @@ -240,6 +246,8 @@ func (r *customDomainResource) Read(ctx context.Context, req resource.ReadReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) distributionId := model.DistributionId.ValueString() @@ -248,7 +256,6 @@ func (r *customDomainResource) Read(ctx context.Context, req resource.ReadReques ctx = tflog.SetField(ctx, "name", name) customDomainResp, err := r.client.GetCustomDomain(ctx, projectId, distributionId, name).Execute() - if err != nil { var oapiErr *oapierror.GenericOpenAPIError // n.b. err is caught here if of type *oapierror.GenericOpenAPIError, which the stackit SDK client returns @@ -261,6 +268,9 @@ func (r *customDomainResource) Read(ctx context.Context, req resource.ReadReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading CDN custom domain", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + err = mapCustomDomainResourceFields(customDomainResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading CDN custom domain", fmt.Sprintf("Processing API payload: %v", err)) @@ -283,6 +293,8 @@ func (r *customDomainResource) Update(ctx context.Context, req resource.UpdateRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) distributionId := model.DistributionId.ValueString() @@ -306,6 +318,8 @@ func (r *customDomainResource) Update(ctx context.Context, req resource.UpdateRe return } + ctx = core.LogResponse(ctx) + _, err = wait.CreateCDNCustomDomainWaitHandler(ctx, r.client, projectId, distributionId, name).SetTimeout(5 * time.Minute).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating CDN custom domain certificate", fmt.Sprintf("Waiting for update: %v", err)) @@ -338,6 +352,8 @@ func (r *customDomainResource) Delete(ctx context.Context, req resource.DeleteRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) distributionId := model.DistributionId.ValueString() @@ -349,6 +365,9 @@ func (r *customDomainResource) Delete(ctx context.Context, req resource.DeleteRe if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Delete CDN custom domain", fmt.Sprintf("Delete custom domain: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteCDNCustomDomainWaitHandler(ctx, r.client, projectId, distributionId, name).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Delete CDN custom domain", fmt.Sprintf("Waiting for deletion: %v", err)) diff --git a/stackit/internal/services/cdn/distribution/datasource.go b/stackit/internal/services/cdn/distribution/datasource.go index 0f1b085ba..ce3f749c7 100644 --- a/stackit/internal/services/cdn/distribution/datasource.go +++ b/stackit/internal/services/cdn/distribution/datasource.go @@ -184,6 +184,8 @@ func (r *distributionDataSource) Read(ctx context.Context, req datasource.ReadRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() distributionId := model.DistributionId.ValueString() distributionResp, err := r.client.GetDistributionExecute(ctx, projectId, distributionId) @@ -199,6 +201,9 @@ func (r *distributionDataSource) Read(ctx context.Context, req datasource.ReadRe resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + err = mapFields(ctx, distributionResp.Distribution, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading CDN distribution", fmt.Sprintf("Error processing API response: %v", err)) diff --git a/stackit/internal/services/cdn/distribution/resource.go b/stackit/internal/services/cdn/distribution/resource.go index 2cfdd114b..4b24968fa 100644 --- a/stackit/internal/services/cdn/distribution/resource.go +++ b/stackit/internal/services/cdn/distribution/resource.go @@ -334,6 +334,9 @@ func (r *distributionResource) Create(ctx context.Context, req resource.CreateRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -348,6 +351,9 @@ func (r *distributionResource) Create(ctx context.Context, req resource.CreateRe core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating CDN distribution", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.CreateDistributionPoolWaitHandler(ctx, r.client, projectId, *createResp.Distribution.Id).SetTimeout(5 * time.Minute).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating CDN distribution", fmt.Sprintf("Waiting for create: %v", err)) @@ -376,6 +382,8 @@ func (r *distributionResource) Read(ctx context.Context, req resource.ReadReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() distributionId := model.DistributionId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -394,6 +402,9 @@ func (r *distributionResource) Read(ctx context.Context, req resource.ReadReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading CDN distribution", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + err = mapFields(ctx, cdnResp.Distribution, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading CDN ditribution", fmt.Sprintf("Processing API payload: %v", err)) @@ -416,6 +427,8 @@ func (r *distributionResource) Update(ctx context.Context, req resource.UpdateRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() distributionId := model.DistributionId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -516,6 +529,8 @@ func (r *distributionResource) Update(ctx context.Context, req resource.UpdateRe return } + ctx = core.LogResponse(ctx) + waitResp, err := wait.UpdateDistributionWaitHandler(ctx, r.client, projectId, distributionId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Update CDN distribution", fmt.Sprintf("Waiting for update: %v", err)) @@ -543,6 +558,9 @@ func (r *distributionResource) Delete(ctx context.Context, req resource.DeleteRe if resp.Diagnostics.HasError() { return } + + ctx = core.LogResponse(ctx) + projectId := model.ProjectId.ValueString() distributionId := model.DistributionId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -552,6 +570,9 @@ func (r *distributionResource) Delete(ctx context.Context, req resource.DeleteRe if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Delete CDN distribution", fmt.Sprintf("Delete distribution: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteDistributionWaitHandler(ctx, r.client, projectId, distributionId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Delete CDN distribution", fmt.Sprintf("Waiting for deletion: %v", err)) diff --git a/stackit/internal/services/dns/recordset/datasource.go b/stackit/internal/services/dns/recordset/datasource.go index 792872611..b7fb1b1cd 100644 --- a/stackit/internal/services/dns/recordset/datasource.go +++ b/stackit/internal/services/dns/recordset/datasource.go @@ -136,6 +136,9 @@ func (d *recordSetDataSource) Read(ctx context.Context, req datasource.ReadReque if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() recordSetId := model.RecordSetId.ValueString() @@ -157,6 +160,9 @@ func (d *recordSetDataSource) Read(ctx context.Context, req datasource.ReadReque resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + if recordSetResp != nil && recordSetResp.Rrset.State != nil && *recordSetResp.Rrset.State == dns.RECORDSETSTATE_DELETE_SUCCEEDED { resp.State.RemoveResource(ctx) core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading record set", "Record set was deleted successfully") diff --git a/stackit/internal/services/dns/recordset/resource.go b/stackit/internal/services/dns/recordset/resource.go index 9a9046350..2077e09f0 100644 --- a/stackit/internal/services/dns/recordset/resource.go +++ b/stackit/internal/services/dns/recordset/resource.go @@ -200,6 +200,8 @@ func (r *recordSetResource) Create(ctx context.Context, req resource.CreateReque return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -218,6 +220,8 @@ func (r *recordSetResource) Create(ctx context.Context, req resource.CreateReque return } + ctx = core.LogResponse(ctx) + // Write id attributes to state before polling via the wait handler - just in case anything goes wrong during the wait handler utils.SetAndLogStateFields(ctx, &resp.Diagnostics, &resp.State, map[string]any{ "project_id": projectId, @@ -257,6 +261,9 @@ func (r *recordSetResource) Read(ctx context.Context, req resource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() recordSetId := model.RecordSetId.ValueString() @@ -274,6 +281,8 @@ func (r *recordSetResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { @@ -300,6 +309,8 @@ func (r *recordSetResource) Update(ctx context.Context, req resource.UpdateReque return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() recordSetId := model.RecordSetId.ValueString() @@ -319,6 +330,9 @@ func (r *recordSetResource) Update(ctx context.Context, req resource.UpdateReque core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating record set", err.Error()) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.PartialUpdateRecordSetWaitHandler(ctx, r.client, projectId, zoneId, recordSetId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating record set", fmt.Sprintf("Instance update waiting: %v", err)) @@ -348,6 +362,8 @@ func (r *recordSetResource) Delete(ctx context.Context, req resource.DeleteReque return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() recordSetId := model.RecordSetId.ValueString() @@ -360,6 +376,9 @@ func (r *recordSetResource) Delete(ctx context.Context, req resource.DeleteReque if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting record set", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteRecordSetWaitHandler(ctx, r.client, projectId, zoneId, recordSetId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting record set", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/dns/zone/datasource.go b/stackit/internal/services/dns/zone/datasource.go index 682c87df2..645ae9433 100644 --- a/stackit/internal/services/dns/zone/datasource.go +++ b/stackit/internal/services/dns/zone/datasource.go @@ -179,6 +179,9 @@ func (d *zoneDataSource) Read(ctx context.Context, req datasource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() dnsName := model.DnsName.ValueString() @@ -205,6 +208,8 @@ func (d *zoneDataSource) Read(ctx context.Context, req datasource.ReadRequest, r resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) } else { listZoneResp, err := d.client.ListZones(ctx, projectId). DnsNameEq(dnsName). @@ -224,6 +229,9 @@ func (d *zoneDataSource) Read(ctx context.Context, req datasource.ReadRequest, r resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + if *listZoneResp.TotalItems != 1 { utils.LogError( ctx, diff --git a/stackit/internal/services/dns/zone/resource.go b/stackit/internal/services/dns/zone/resource.go index cfddeafea..9fd924366 100644 --- a/stackit/internal/services/dns/zone/resource.go +++ b/stackit/internal/services/dns/zone/resource.go @@ -284,6 +284,8 @@ func (r *zoneResource) Create(ctx context.Context, req resource.CreateRequest, r return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -300,6 +302,8 @@ func (r *zoneResource) Create(ctx context.Context, req resource.CreateRequest, r return } + ctx = core.LogResponse(ctx) + // Write id attributes to state before polling via the wait handler - just in case anything goes wrong during the wait handler zoneId := *createResp.Zone.Id utils.SetAndLogStateFields(ctx, &resp.Diagnostics, &resp.State, map[string]interface{}{ @@ -338,6 +342,9 @@ func (r *zoneResource) Read(ctx context.Context, req resource.ReadRequest, resp if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -348,6 +355,9 @@ func (r *zoneResource) Read(ctx context.Context, req resource.ReadRequest, resp core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading zone", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if zoneResp != nil && zoneResp.Zone.State != nil && *zoneResp.Zone.State == dns.ZONESTATE_DELETE_SUCCEEDED { resp.State.RemoveResource(ctx) return @@ -377,6 +387,9 @@ func (r *zoneResource) Update(ctx context.Context, req resource.UpdateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -394,6 +407,9 @@ func (r *zoneResource) Update(ctx context.Context, req resource.UpdateRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating zone", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.PartialUpdateZoneWaitHandler(ctx, r.client, projectId, zoneId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating zone", fmt.Sprintf("Zone update waiting: %v", err)) @@ -423,6 +439,8 @@ func (r *zoneResource) Delete(ctx context.Context, req resource.DeleteRequest, r return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() zoneId := model.ZoneId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -434,6 +452,9 @@ func (r *zoneResource) Delete(ctx context.Context, req resource.DeleteRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting zone", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteZoneWaitHandler(ctx, r.client, projectId, zoneId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting zone", fmt.Sprintf("Zone deletion waiting: %v", err)) diff --git a/stackit/internal/services/git/instance/datasource.go b/stackit/internal/services/git/instance/datasource.go index d331810c1..65aad54b1 100644 --- a/stackit/internal/services/git/instance/datasource.go +++ b/stackit/internal/services/git/instance/datasource.go @@ -132,6 +132,8 @@ func (g *gitDataSource) Read(ctx context.Context, req datasource.ReadRequest, re return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID and instance id of the model projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() @@ -149,6 +151,8 @@ func (g *gitDataSource) Read(ctx context.Context, req datasource.ReadRequest, re return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, gitInstanceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading git instance", fmt.Sprintf("Processing API response: %v", err)) diff --git a/stackit/internal/services/git/instance/resource.go b/stackit/internal/services/git/instance/resource.go index 178ce1fe9..5811e5e32 100644 --- a/stackit/internal/services/git/instance/resource.go +++ b/stackit/internal/services/git/instance/resource.go @@ -195,6 +195,8 @@ func (g *gitResource) Create(ctx context.Context, req resource.CreateRequest, re return } + ctx = core.InitProviderContext(ctx) + // Set logging context with the project ID and instance ID. projectId := model.ProjectId.ValueString() instanceName := model.Name.ValueString() @@ -216,6 +218,8 @@ func (g *gitResource) Create(ctx context.Context, req resource.CreateRequest, re return } + ctx = core.LogResponse(ctx) + gitInstanceId := *gitInstanceResp.Id _, err = wait.CreateGitInstanceWaitHandler(ctx, g.client, projectId, gitInstanceId).WaitWithContext(ctx) if err != nil { @@ -248,6 +252,8 @@ func (g *gitResource) Read(ctx context.Context, req resource.ReadRequest, resp * return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID and instance id of the model projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() @@ -265,6 +271,8 @@ func (g *gitResource) Read(ctx context.Context, req resource.ReadRequest, resp * return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, gitInstanceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading git instance", fmt.Sprintf("Processing API response: %v", err)) @@ -298,6 +306,8 @@ func (g *gitResource) Delete(ctx context.Context, req resource.DeleteRequest, re return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -310,6 +320,8 @@ func (g *gitResource) Delete(ctx context.Context, req resource.DeleteRequest, re return } + ctx = core.LogResponse(ctx) + _, err = wait.DeleteGitInstanceWaitHandler(ctx, g.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error waiting for instance deletion", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/iaas/affinitygroup/datasource.go b/stackit/internal/services/iaas/affinitygroup/datasource.go index ed4507001..9a43e18d3 100644 --- a/stackit/internal/services/iaas/affinitygroup/datasource.go +++ b/stackit/internal/services/iaas/affinitygroup/datasource.go @@ -118,6 +118,9 @@ func (d *affinityGroupDatasource) Read(ctx context.Context, req datasource.ReadR } projectId := model.ProjectId.ValueString() affinityGroupId := model.AffinityGroupId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "affinity_group_id", affinityGroupId) @@ -137,6 +140,8 @@ func (d *affinityGroupDatasource) Read(ctx context.Context, req datasource.ReadR return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, affinityGroupResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading affinity group", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/affinitygroup/resource.go b/stackit/internal/services/iaas/affinitygroup/resource.go index 1110e4296..ff4a6e52c 100644 --- a/stackit/internal/services/iaas/affinitygroup/resource.go +++ b/stackit/internal/services/iaas/affinitygroup/resource.go @@ -154,6 +154,9 @@ func (r *affinityGroupResource) Create(ctx context.Context, req resource.CreateR return } projectId := model.ProjectId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) // Create new affinityGroup @@ -167,6 +170,9 @@ func (r *affinityGroupResource) Create(ctx context.Context, req resource.CreateR core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating affinity group", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + ctx = tflog.SetField(ctx, "affinity_group_id", affinityGroupResp.Id) // Map response body to schema @@ -194,6 +200,9 @@ func (r *affinityGroupResource) Read(ctx context.Context, req resource.ReadReque } projectId := model.ProjectId.ValueString() affinityGroupId := model.AffinityGroupId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "affinity_group_id", affinityGroupId) @@ -208,6 +217,8 @@ func (r *affinityGroupResource) Read(ctx context.Context, req resource.ReadReque return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, affinityGroupResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading affinity group", fmt.Sprintf("Processing API payload: %v", err)) @@ -237,6 +248,9 @@ func (r *affinityGroupResource) Delete(ctx context.Context, req resource.DeleteR projectId := model.ProjectId.ValueString() affinityGroupId := model.AffinityGroupId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "affinity_group_id", affinityGroupId) @@ -247,6 +261,8 @@ func (r *affinityGroupResource) Delete(ctx context.Context, req resource.DeleteR return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Affinity group deleted") } diff --git a/stackit/internal/services/iaas/image/datasource.go b/stackit/internal/services/iaas/image/datasource.go index 4b24a8ff7..1f398d9f8 100644 --- a/stackit/internal/services/iaas/image/datasource.go +++ b/stackit/internal/services/iaas/image/datasource.go @@ -213,6 +213,9 @@ func (r *imageDataSource) Read(ctx context.Context, req datasource.ReadRequest, } projectId := model.ProjectId.ValueString() imageId := model.ImageId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "image_id", imageId) @@ -232,6 +235,8 @@ func (r *imageDataSource) Read(ctx context.Context, req datasource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapDataSourceFields(ctx, imageResp, &model) if err != nil { diff --git a/stackit/internal/services/iaas/image/resource.go b/stackit/internal/services/iaas/image/resource.go index 2d9716836..a1e764cc5 100644 --- a/stackit/internal/services/iaas/image/resource.go +++ b/stackit/internal/services/iaas/image/resource.go @@ -378,6 +378,9 @@ func (r *imageResource) Create(ctx context.Context, req resource.CreateRequest, } projectId := model.ProjectId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) // Generate API request body from model @@ -393,6 +396,9 @@ func (r *imageResource) Create(ctx context.Context, req resource.CreateRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating image", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + ctx = tflog.SetField(ctx, "image_id", *imageCreateResp.Id) // Get the image object, as the create response does not contain all fields @@ -458,6 +464,9 @@ func (r *imageResource) Read(ctx context.Context, req resource.ReadRequest, resp } projectId := model.ProjectId.ValueString() imageId := model.ImageId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "image_id", imageId) @@ -472,6 +481,8 @@ func (r *imageResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, imageResp, &model) if err != nil { @@ -498,6 +509,9 @@ func (r *imageResource) Update(ctx context.Context, req resource.UpdateRequest, } projectId := model.ProjectId.ValueString() imageId := model.ImageId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "image_id", imageId) @@ -522,6 +536,8 @@ func (r *imageResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, updatedImage, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating image", fmt.Sprintf("Processing API payload: %v", err)) @@ -547,6 +563,9 @@ func (r *imageResource) Delete(ctx context.Context, req resource.DeleteRequest, projectId := model.ProjectId.ValueString() imageId := model.ImageId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "image_id", imageId) @@ -556,6 +575,9 @@ func (r *imageResource) Delete(ctx context.Context, req resource.DeleteRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting image", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteImageWaitHandler(ctx, r.client, projectId, imageId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting image", fmt.Sprintf("image deletion waiting: %v", err)) diff --git a/stackit/internal/services/iaas/imagev2/datasource.go b/stackit/internal/services/iaas/imagev2/datasource.go index e39562393..88c5509b8 100644 --- a/stackit/internal/services/iaas/imagev2/datasource.go +++ b/stackit/internal/services/iaas/imagev2/datasource.go @@ -370,6 +370,8 @@ func (d *imageDataV2Source) Read(ctx context.Context, req datasource.ReadRequest } } + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectID) ctx = tflog.SetField(ctx, "image_id", imageID) ctx = tflog.SetField(ctx, "name", name) @@ -391,6 +393,8 @@ func (d *imageDataV2Source) Read(ctx context.Context, req datasource.ReadRequest resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) } else { // Case 2: Lookup by name or name_regex @@ -411,6 +415,8 @@ func (d *imageDataV2Source) Read(ctx context.Context, req datasource.ReadRequest return } + ctx = core.LogResponse(ctx) + // Step 1: Match images by name or regular expression (name or name_regex, if provided) var matchedImages []*iaas.Image for i := range *imageList.Items { diff --git a/stackit/internal/services/iaas/keypair/datasource.go b/stackit/internal/services/iaas/keypair/datasource.go index 513607f5b..d65ca6f19 100644 --- a/stackit/internal/services/iaas/keypair/datasource.go +++ b/stackit/internal/services/iaas/keypair/datasource.go @@ -92,6 +92,9 @@ func (r *keyPairDataSource) Read(ctx context.Context, req datasource.ReadRequest return } name := model.Name.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "name", name) keypairResp, err := r.client.GetKeyPair(ctx, name).Execute() @@ -108,6 +111,8 @@ func (r *keyPairDataSource) Read(ctx context.Context, req datasource.ReadRequest return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, keypairResp, &model) if err != nil { diff --git a/stackit/internal/services/iaas/keypair/resource.go b/stackit/internal/services/iaas/keypair/resource.go index ccae2565c..4c709b33d 100644 --- a/stackit/internal/services/iaas/keypair/resource.go +++ b/stackit/internal/services/iaas/keypair/resource.go @@ -146,6 +146,9 @@ func (r *keyPairResource) Create(ctx context.Context, req resource.CreateRequest } name := model.Name.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "name", name) // Generate API request body from model @@ -163,6 +166,8 @@ func (r *keyPairResource) Create(ctx context.Context, req resource.CreateRequest return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, keyPair, &model) if err != nil { @@ -187,6 +192,9 @@ func (r *keyPairResource) Read(ctx context.Context, req resource.ReadRequest, re return } name := model.Name.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "name", name) keyPairResp, err := r.client.GetKeyPair(ctx, name).Execute() @@ -200,6 +208,8 @@ func (r *keyPairResource) Read(ctx context.Context, req resource.ReadRequest, re return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, keyPairResp, &model) if err != nil { @@ -225,6 +235,9 @@ func (r *keyPairResource) Update(ctx context.Context, req resource.UpdateRequest return } name := model.Name.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "name", name) // Retrieve values from state @@ -248,6 +261,8 @@ func (r *keyPairResource) Update(ctx context.Context, req resource.UpdateRequest return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, updatedKeyPair, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating key pair", fmt.Sprintf("Processing API payload: %v", err)) @@ -272,6 +287,9 @@ func (r *keyPairResource) Delete(ctx context.Context, req resource.DeleteRequest } name := model.Name.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "name", name) // Delete existing key pair @@ -281,6 +299,8 @@ func (r *keyPairResource) Delete(ctx context.Context, req resource.DeleteRequest return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Key pair deleted") } diff --git a/stackit/internal/services/iaas/machinetype/datasource.go b/stackit/internal/services/iaas/machinetype/datasource.go index ed2c1c9d1..88ad22705 100644 --- a/stackit/internal/services/iaas/machinetype/datasource.go +++ b/stackit/internal/services/iaas/machinetype/datasource.go @@ -144,6 +144,8 @@ func (d *machineTypeDataSource) Read(ctx context.Context, req datasource.ReadReq projectId := model.ProjectId.ValueString() sortAscending := model.SortAscending.ValueBool() + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "filter_is_null", model.Filter.IsNull()) ctx = tflog.SetField(ctx, "filter_is_unknown", model.Filter.IsUnknown()) @@ -166,6 +168,8 @@ func (d *machineTypeDataSource) Read(ctx context.Context, req datasource.ReadReq return } + ctx = core.LogResponse(ctx) + if apiResp.Items == nil || len(*apiResp.Items) == 0 { core.LogAndAddWarning(ctx, &resp.Diagnostics, "No machine types found", "No matching machine types.") return diff --git a/stackit/internal/services/iaas/network/utils/v1network/datasource.go b/stackit/internal/services/iaas/network/utils/v1network/datasource.go index 08f8da5bd..ee4097afa 100644 --- a/stackit/internal/services/iaas/network/utils/v1network/datasource.go +++ b/stackit/internal/services/iaas/network/utils/v1network/datasource.go @@ -23,6 +23,9 @@ func DatasourceRead(ctx context.Context, req datasource.ReadRequest, resp *datas if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -44,6 +47,8 @@ func DatasourceRead(ctx context.Context, req datasource.ReadRequest, resp *datas return } + ctx = core.LogResponse(ctx) + err = mapDataSourceFields(ctx, networkResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading network", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/network/utils/v1network/resource.go b/stackit/internal/services/iaas/network/utils/v1network/resource.go index fa21084d2..4830d052f 100644 --- a/stackit/internal/services/iaas/network/utils/v1network/resource.go +++ b/stackit/internal/services/iaas/network/utils/v1network/resource.go @@ -32,6 +32,9 @@ func Create(ctx context.Context, req resource.CreateRequest, resp *resource.Crea } projectId := model.ProjectId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) // Generate API request body from model @@ -49,6 +52,8 @@ func Create(ctx context.Context, req resource.CreateRequest, resp *resource.Crea return } + ctx = core.LogResponse(ctx) + networkId := *network.NetworkId network, err = wait.CreateNetworkWaitHandler(ctx, client, projectId, networkId).WaitWithContext(ctx) if err != nil { @@ -82,6 +87,9 @@ func Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResp } projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) @@ -96,6 +104,8 @@ func Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, networkResp, &model) if err != nil { @@ -121,6 +131,9 @@ func Update(ctx context.Context, req resource.UpdateRequest, resp *resource.Upda } projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) @@ -144,6 +157,9 @@ func Update(ctx context.Context, req resource.UpdateRequest, resp *resource.Upda core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.UpdateNetworkWaitHandler(ctx, client, projectId, networkId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network", fmt.Sprintf("Network update waiting: %v", err)) @@ -174,6 +190,9 @@ func Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.Dele projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) @@ -183,6 +202,9 @@ func Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.Dele core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting network", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteNetworkWaitHandler(ctx, client, projectId, networkId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting network", fmt.Sprintf("Network deletion waiting: %v", err)) diff --git a/stackit/internal/services/iaas/network/utils/v2network/datasource.go b/stackit/internal/services/iaas/network/utils/v2network/datasource.go index bc447b825..c3acb3d40 100644 --- a/stackit/internal/services/iaas/network/utils/v2network/datasource.go +++ b/stackit/internal/services/iaas/network/utils/v2network/datasource.go @@ -26,6 +26,9 @@ func DatasourceRead(ctx context.Context, req datasource.ReadRequest, resp *datas projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() region := providerData.GetRegionWithOverride(model.Region) + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) @@ -45,6 +48,8 @@ func DatasourceRead(ctx context.Context, req datasource.ReadRequest, resp *datas return } + ctx = core.LogResponse(ctx) + err = mapDataSourceFields(ctx, networkResp, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading network", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/network/utils/v2network/resource.go b/stackit/internal/services/iaas/network/utils/v2network/resource.go index dbf318209..adf2ab8b1 100644 --- a/stackit/internal/services/iaas/network/utils/v2network/resource.go +++ b/stackit/internal/services/iaas/network/utils/v2network/resource.go @@ -33,6 +33,9 @@ func Create(ctx context.Context, req resource.CreateRequest, resp *resource.Crea projectId := model.ProjectId.ValueString() region := model.Region.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "region", region) @@ -51,6 +54,8 @@ func Create(ctx context.Context, req resource.CreateRequest, resp *resource.Crea return } + ctx = core.LogResponse(ctx) + networkId := *network.Id network, err = wait.CreateNetworkWaitHandler(ctx, client, projectId, region, networkId).WaitWithContext(ctx) if err != nil { @@ -85,6 +90,9 @@ func Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResp projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() region := providerData.GetRegionWithOverride(model.Region) + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) ctx = tflog.SetField(ctx, "region", region) @@ -100,6 +108,8 @@ func Read(ctx context.Context, req resource.ReadRequest, resp *resource.ReadResp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, networkResp, &model, region) if err != nil { @@ -126,6 +136,9 @@ func Update(ctx context.Context, req resource.UpdateRequest, resp *resource.Upda projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() region := model.Region.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) ctx = tflog.SetField(ctx, "region", region) @@ -150,6 +163,9 @@ func Update(ctx context.Context, req resource.UpdateRequest, resp *resource.Upda core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.UpdateNetworkWaitHandler(ctx, client, projectId, region, networkId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network", fmt.Sprintf("Network update waiting: %v", err)) @@ -181,6 +197,9 @@ func Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.Dele projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() region := model.Region.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) ctx = tflog.SetField(ctx, "region", region) @@ -191,6 +210,9 @@ func Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.Dele core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting network", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteNetworkWaitHandler(ctx, client, projectId, region, networkId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting network", fmt.Sprintf("Network deletion waiting: %v", err)) diff --git a/stackit/internal/services/iaas/networkarea/datasource.go b/stackit/internal/services/iaas/networkarea/datasource.go index 15deb0886..f5ac30d97 100644 --- a/stackit/internal/services/iaas/networkarea/datasource.go +++ b/stackit/internal/services/iaas/networkarea/datasource.go @@ -172,6 +172,9 @@ func (d *networkAreaDataSource) Read(ctx context.Context, req datasource.ReadReq } organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) @@ -191,6 +194,8 @@ func (d *networkAreaDataSource) Read(ctx context.Context, req datasource.ReadReq return } + ctx = core.LogResponse(ctx) + networkAreaRanges := networkAreaResp.Ipv4.NetworkRanges err = mapFields(ctx, networkAreaResp, networkAreaRanges, &model) diff --git a/stackit/internal/services/iaas/networkarea/resource.go b/stackit/internal/services/iaas/networkarea/resource.go index a688e7d88..621ad9b2c 100644 --- a/stackit/internal/services/iaas/networkarea/resource.go +++ b/stackit/internal/services/iaas/networkarea/resource.go @@ -240,6 +240,9 @@ func (r *networkAreaResource) Create(ctx context.Context, req resource.CreateReq } organizationId := model.OrganizationId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) // Generate API request body from model @@ -256,6 +259,8 @@ func (r *networkAreaResource) Create(ctx context.Context, req resource.CreateReq return } + ctx = core.LogResponse(ctx) + networkArea, err := wait.CreateNetworkAreaWaitHandler(ctx, r.client, organizationId, *area.AreaId).WaitWithContext(context.Background()) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating network area", fmt.Sprintf("Network area creation waiting: %v", err)) @@ -291,6 +296,9 @@ func (r *networkAreaResource) Read(ctx context.Context, req resource.ReadRequest } organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) @@ -305,6 +313,8 @@ func (r *networkAreaResource) Read(ctx context.Context, req resource.ReadRequest return } + ctx = core.LogResponse(ctx) + networkAreaRanges := networkAreaResp.Ipv4.NetworkRanges // Map response body to schema @@ -333,6 +343,9 @@ func (r *networkAreaResource) Update(ctx context.Context, req resource.UpdateReq } organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) @@ -365,6 +378,9 @@ func (r *networkAreaResource) Update(ctx context.Context, req resource.UpdateReq core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network area", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.UpdateNetworkAreaWaitHandler(ctx, r.client, organizationId, networkAreaId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network area", fmt.Sprintf("Network area update waiting: %v", err)) @@ -416,6 +432,9 @@ func (r *networkAreaResource) Delete(ctx context.Context, req resource.DeleteReq organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) @@ -431,6 +450,9 @@ func (r *networkAreaResource) Delete(ctx context.Context, req resource.DeleteReq core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting network area", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteNetworkAreaWaitHandler(ctx, r.client, organizationId, networkAreaId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting network area", fmt.Sprintf("Network area deletion waiting: %v", err)) diff --git a/stackit/internal/services/iaas/networkarearoute/datasource.go b/stackit/internal/services/iaas/networkarearoute/datasource.go index 19b139d3f..dd76947ba 100644 --- a/stackit/internal/services/iaas/networkarearoute/datasource.go +++ b/stackit/internal/services/iaas/networkarearoute/datasource.go @@ -116,6 +116,9 @@ func (d *networkAreaRouteDataSource) Read(ctx context.Context, req datasource.Re organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() networkAreaRouteId := model.NetworkAreaRouteId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) ctx = tflog.SetField(ctx, "network_area_route_id", networkAreaRouteId) @@ -136,6 +139,8 @@ func (d *networkAreaRouteDataSource) Read(ctx context.Context, req datasource.Re return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, networkAreaRouteResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading network area route", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/networkarearoute/resource.go b/stackit/internal/services/iaas/networkarearoute/resource.go index e29b3fdc0..4b74fdd51 100644 --- a/stackit/internal/services/iaas/networkarearoute/resource.go +++ b/stackit/internal/services/iaas/networkarearoute/resource.go @@ -160,6 +160,8 @@ func (r *networkAreaRouteResource) Create(ctx context.Context, req resource.Crea return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() ctx = tflog.SetField(ctx, "organization_id", organizationId) networkAreaId := model.NetworkAreaId.ValueString() @@ -178,6 +180,9 @@ func (r *networkAreaRouteResource) Create(ctx context.Context, req resource.Crea core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating network area route", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if routes.Items == nil || len(*routes.Items) == 0 { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating network area route.", "Empty response from API") return @@ -221,6 +226,9 @@ func (r *networkAreaRouteResource) Read(ctx context.Context, req resource.ReadRe organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() networkAreaRouteId := model.NetworkAreaRouteId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) ctx = tflog.SetField(ctx, "network_area_route_id", networkAreaRouteId) @@ -236,6 +244,8 @@ func (r *networkAreaRouteResource) Read(ctx context.Context, req resource.ReadRe return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, networkAreaRouteResp, &model) if err != nil { @@ -264,6 +274,9 @@ func (r *networkAreaRouteResource) Delete(ctx context.Context, req resource.Dele organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() networkAreaRouteId := model.NetworkAreaRouteId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) ctx = tflog.SetField(ctx, "network_area_route_id", networkAreaRouteId) @@ -275,6 +288,8 @@ func (r *networkAreaRouteResource) Delete(ctx context.Context, req resource.Dele return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Network area route deleted") } @@ -291,6 +306,9 @@ func (r *networkAreaRouteResource) Update(ctx context.Context, req resource.Upda organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() networkAreaRouteId := model.NetworkAreaRouteId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "organization_id", organizationId) ctx = tflog.SetField(ctx, "network_area_id", networkAreaId) ctx = tflog.SetField(ctx, "network_area_route_id", networkAreaRouteId) @@ -316,6 +334,8 @@ func (r *networkAreaRouteResource) Update(ctx context.Context, req resource.Upda return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, networkAreaRouteResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network area route", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/networkinterface/datasource.go b/stackit/internal/services/iaas/networkinterface/datasource.go index 710cac526..6ca523273 100644 --- a/stackit/internal/services/iaas/networkinterface/datasource.go +++ b/stackit/internal/services/iaas/networkinterface/datasource.go @@ -144,6 +144,9 @@ func (d *networkInterfaceDataSource) Read(ctx context.Context, req datasource.Re projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() networkInterfaceId := model.NetworkInterfaceId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -164,6 +167,8 @@ func (d *networkInterfaceDataSource) Read(ctx context.Context, req datasource.Re return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, networkInterfaceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading network interface", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/networkinterface/resource.go b/stackit/internal/services/iaas/networkinterface/resource.go index d84d1a938..15ccb3618 100644 --- a/stackit/internal/services/iaas/networkinterface/resource.go +++ b/stackit/internal/services/iaas/networkinterface/resource.go @@ -257,6 +257,8 @@ func (r *networkInterfaceResource) Create(ctx context.Context, req resource.Crea return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) networkId := model.NetworkId.ValueString() @@ -276,6 +278,8 @@ func (r *networkInterfaceResource) Create(ctx context.Context, req resource.Crea return } + ctx = core.LogResponse(ctx) + networkInterfaceId := *networkInterface.Id ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -306,6 +310,9 @@ func (r *networkInterfaceResource) Read(ctx context.Context, req resource.ReadRe projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() networkInterfaceId := model.NetworkInterfaceId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -321,6 +328,8 @@ func (r *networkInterfaceResource) Read(ctx context.Context, req resource.ReadRe return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, networkInterfaceResp, &model) if err != nil { @@ -348,6 +357,9 @@ func (r *networkInterfaceResource) Update(ctx context.Context, req resource.Upda projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() networkInterfaceId := model.NetworkInterfaceId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -373,6 +385,8 @@ func (r *networkInterfaceResource) Update(ctx context.Context, req resource.Upda return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, nicResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating network interface", fmt.Sprintf("Processing API payload: %v", err)) @@ -399,6 +413,9 @@ func (r *networkInterfaceResource) Delete(ctx context.Context, req resource.Dele projectId := model.ProjectId.ValueString() networkId := model.NetworkId.ValueString() networkInterfaceId := model.NetworkInterfaceId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "network_id", networkId) ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -410,6 +427,8 @@ func (r *networkInterfaceResource) Delete(ctx context.Context, req resource.Dele return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Network interface deleted") } diff --git a/stackit/internal/services/iaas/networkinterfaceattach/resource.go b/stackit/internal/services/iaas/networkinterfaceattach/resource.go index 1517dd80f..73082a909 100644 --- a/stackit/internal/services/iaas/networkinterfaceattach/resource.go +++ b/stackit/internal/services/iaas/networkinterfaceattach/resource.go @@ -130,6 +130,8 @@ func (r *networkInterfaceAttachResource) Create(ctx context.Context, req resourc return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -144,6 +146,8 @@ func (r *networkInterfaceAttachResource) Create(ctx context.Context, req resourc return } + ctx = core.LogResponse(ctx) + model.Id = utils.BuildInternalTerraformId(projectId, serverId, networkInterfaceId) // Set state to fully populated data @@ -163,6 +167,9 @@ func (r *networkInterfaceAttachResource) Read(ctx context.Context, req resource. if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -181,6 +188,8 @@ func (r *networkInterfaceAttachResource) Read(ctx context.Context, req resource. return } + ctx = core.LogResponse(ctx) + if nics == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading network interface attachment", "List of network interfaces attached to the server is nil") return @@ -221,6 +230,8 @@ func (r *networkInterfaceAttachResource) Delete(ctx context.Context, req resourc return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -235,6 +246,8 @@ func (r *networkInterfaceAttachResource) Delete(ctx context.Context, req resourc return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Network interface attachment deleted") } diff --git a/stackit/internal/services/iaas/project/datasource.go b/stackit/internal/services/iaas/project/datasource.go index c5be5e8a0..03d26fa64 100644 --- a/stackit/internal/services/iaas/project/datasource.go +++ b/stackit/internal/services/iaas/project/datasource.go @@ -123,6 +123,9 @@ func (d *projectDataSource) Read(ctx context.Context, req datasource.ReadRequest return } projectId := model.ProjectId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) projectResp, err := d.client.GetProjectDetailsExecute(ctx, projectId) @@ -139,6 +142,8 @@ func (d *projectDataSource) Read(ctx context.Context, req datasource.ReadRequest return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapDataSourceFields(projectResp, &model) if err != nil { diff --git a/stackit/internal/services/iaas/publicip/datasource.go b/stackit/internal/services/iaas/publicip/datasource.go index b9e177cf0..12e602ad5 100644 --- a/stackit/internal/services/iaas/publicip/datasource.go +++ b/stackit/internal/services/iaas/publicip/datasource.go @@ -111,6 +111,9 @@ func (d *publicIpDataSource) Read(ctx context.Context, req datasource.ReadReques } projectId := model.ProjectId.ValueString() publicIpId := model.PublicIpId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "public_ip_id", publicIpId) @@ -130,6 +133,8 @@ func (d *publicIpDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, publicIpResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading public IP", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/publicip/resource.go b/stackit/internal/services/iaas/publicip/resource.go index 04e84a663..b1a408650 100644 --- a/stackit/internal/services/iaas/publicip/resource.go +++ b/stackit/internal/services/iaas/publicip/resource.go @@ -145,6 +145,8 @@ func (r *publicIpResource) Create(ctx context.Context, req resource.CreateReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -163,6 +165,8 @@ func (r *publicIpResource) Create(ctx context.Context, req resource.CreateReques return } + ctx = core.LogResponse(ctx) + ctx = tflog.SetField(ctx, "public_ip_id", *publicIp.Id) // Map response body to schema @@ -190,6 +194,9 @@ func (r *publicIpResource) Read(ctx context.Context, req resource.ReadRequest, r } projectId := model.ProjectId.ValueString() publicIpId := model.PublicIpId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "public_ip_id", publicIpId) @@ -204,6 +211,8 @@ func (r *publicIpResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, publicIpResp, &model) if err != nil { @@ -230,6 +239,9 @@ func (r *publicIpResource) Update(ctx context.Context, req resource.UpdateReques } projectId := model.ProjectId.ValueString() publicIpId := model.PublicIpId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "public_ip_id", publicIpId) @@ -254,6 +266,8 @@ func (r *publicIpResource) Update(ctx context.Context, req resource.UpdateReques return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, updatedPublicIp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating public IP", fmt.Sprintf("Processing API payload: %v", err)) @@ -279,6 +293,9 @@ func (r *publicIpResource) Delete(ctx context.Context, req resource.DeleteReques projectId := model.ProjectId.ValueString() publicIpId := model.PublicIpId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "public_ip_id", publicIpId) @@ -289,6 +306,8 @@ func (r *publicIpResource) Delete(ctx context.Context, req resource.DeleteReques return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "public IP deleted") } diff --git a/stackit/internal/services/iaas/publicipassociate/resource.go b/stackit/internal/services/iaas/publicipassociate/resource.go index d19c5de4b..483a7762a 100644 --- a/stackit/internal/services/iaas/publicipassociate/resource.go +++ b/stackit/internal/services/iaas/publicipassociate/resource.go @@ -153,6 +153,9 @@ func (r *publicIpAssociateResource) Create(ctx context.Context, req resource.Cre projectId := model.ProjectId.ValueString() publicIpId := model.PublicIpId.ValueString() networkInterfaceId := model.NetworkInterfaceId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "public_ip_id", publicIpId) ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -170,6 +173,8 @@ func (r *publicIpAssociateResource) Create(ctx context.Context, req resource.Cre return } + ctx = core.LogResponse(ctx) + err = mapFields(updatedPublicIp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error associating public IP to network interface", fmt.Sprintf("Processing API payload: %v", err)) @@ -194,6 +199,9 @@ func (r *publicIpAssociateResource) Read(ctx context.Context, req resource.ReadR projectId := model.ProjectId.ValueString() publicIpId := model.PublicIpId.ValueString() networkInterfaceId := model.NetworkInterfaceId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "public_ip_id", publicIpId) ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -209,6 +217,8 @@ func (r *publicIpAssociateResource) Read(ctx context.Context, req resource.ReadR return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(publicIpResp, &model) if err != nil { @@ -242,6 +252,9 @@ func (r *publicIpAssociateResource) Delete(ctx context.Context, req resource.Del projectId := model.ProjectId.ValueString() publicIpId := model.PublicIpId.ValueString() networkInterfaceId := model.NetworkInterfaceId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "public_ip_id", publicIpId) ctx = tflog.SetField(ctx, "network_interface_id", networkInterfaceId) @@ -256,6 +269,8 @@ func (r *publicIpAssociateResource) Delete(ctx context.Context, req resource.Del return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "public IP association deleted") } diff --git a/stackit/internal/services/iaas/publicipranges/datasource.go b/stackit/internal/services/iaas/publicipranges/datasource.go index 3daebaaa5..1d3709a9c 100644 --- a/stackit/internal/services/iaas/publicipranges/datasource.go +++ b/stackit/internal/services/iaas/publicipranges/datasource.go @@ -115,6 +115,9 @@ func (d *publicIpRangesDataSource) Read(ctx context.Context, req datasource.Read if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + publicIpRangeResp, err := d.client.ListPublicIPRangesExecute(ctx) if err != nil { utils.LogError( @@ -131,6 +134,8 @@ func (d *publicIpRangesDataSource) Read(ctx context.Context, req datasource.Read return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, publicIpRangeResp, &model) if err != nil { diff --git a/stackit/internal/services/iaas/securitygroup/datasource.go b/stackit/internal/services/iaas/securitygroup/datasource.go index 171f5aba6..bb117f755 100644 --- a/stackit/internal/services/iaas/securitygroup/datasource.go +++ b/stackit/internal/services/iaas/securitygroup/datasource.go @@ -111,6 +111,9 @@ func (d *securityGroupDataSource) Read(ctx context.Context, req datasource.ReadR } projectId := model.ProjectId.ValueString() securityGroupId := model.SecurityGroupId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "security_group_id", securityGroupId) @@ -130,6 +133,8 @@ func (d *securityGroupDataSource) Read(ctx context.Context, req datasource.ReadR return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, securityGroupResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading security group", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/securitygroup/resource.go b/stackit/internal/services/iaas/securitygroup/resource.go index 3663c25b3..7641ee7b0 100644 --- a/stackit/internal/services/iaas/securitygroup/resource.go +++ b/stackit/internal/services/iaas/securitygroup/resource.go @@ -162,6 +162,8 @@ func (r *securityGroupResource) Create(ctx context.Context, req resource.CreateR return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -180,6 +182,8 @@ func (r *securityGroupResource) Create(ctx context.Context, req resource.CreateR return } + ctx = core.LogResponse(ctx) + securityGroupId := *securityGroup.Id ctx = tflog.SetField(ctx, "security_group_id", securityGroupId) @@ -209,6 +213,9 @@ func (r *securityGroupResource) Read(ctx context.Context, req resource.ReadReque } projectId := model.ProjectId.ValueString() securityGroupId := model.SecurityGroupId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "security_id", securityGroupId) @@ -223,6 +230,8 @@ func (r *securityGroupResource) Read(ctx context.Context, req resource.ReadReque return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, securityGroupResp, &model) if err != nil { @@ -249,6 +258,9 @@ func (r *securityGroupResource) Update(ctx context.Context, req resource.UpdateR } projectId := model.ProjectId.ValueString() securityGroupId := model.SecurityGroupId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "security_group_id", securityGroupId) @@ -273,6 +285,8 @@ func (r *securityGroupResource) Update(ctx context.Context, req resource.UpdateR return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, updatedSecurityGroup, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating security group", fmt.Sprintf("Processing API payload: %v", err)) @@ -298,6 +312,9 @@ func (r *securityGroupResource) Delete(ctx context.Context, req resource.DeleteR projectId := model.ProjectId.ValueString() securityGroupId := model.SecurityGroupId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "security_group_id", securityGroupId) @@ -308,6 +325,8 @@ func (r *securityGroupResource) Delete(ctx context.Context, req resource.DeleteR return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "security group deleted") } diff --git a/stackit/internal/services/iaas/securitygrouprule/datasource.go b/stackit/internal/services/iaas/securitygrouprule/datasource.go index c286fcc4b..0861e9a6f 100644 --- a/stackit/internal/services/iaas/securitygrouprule/datasource.go +++ b/stackit/internal/services/iaas/securitygrouprule/datasource.go @@ -166,6 +166,9 @@ func (d *securityGroupRuleDataSource) Read(ctx context.Context, req datasource.R projectId := model.ProjectId.ValueString() securityGroupId := model.SecurityGroupId.ValueString() securityGroupRuleId := model.SecurityGroupRuleId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "security_group_id", securityGroupId) ctx = tflog.SetField(ctx, "security_group_rule_id", securityGroupRuleId) @@ -186,6 +189,8 @@ func (d *securityGroupRuleDataSource) Read(ctx context.Context, req datasource.R return } + ctx = core.LogResponse(ctx) + err = mapFields(securityGroupRuleResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading security group rule", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/securitygrouprule/resource.go b/stackit/internal/services/iaas/securitygrouprule/resource.go index 00b24a5c0..56a15bd65 100644 --- a/stackit/internal/services/iaas/securitygrouprule/resource.go +++ b/stackit/internal/services/iaas/securitygrouprule/resource.go @@ -389,6 +389,8 @@ func (r *securityGroupRuleResource) Create(ctx context.Context, req resource.Cre return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) securityGroupId := model.SecurityGroupId.ValueString() @@ -438,6 +440,8 @@ func (r *securityGroupRuleResource) Create(ctx context.Context, req resource.Cre return } + ctx = core.LogResponse(ctx) + ctx = tflog.SetField(ctx, "security_group_rule_id", *securityGroupRule.Id) // Map response body to schema @@ -466,6 +470,9 @@ func (r *securityGroupRuleResource) Read(ctx context.Context, req resource.ReadR projectId := model.ProjectId.ValueString() securityGroupId := model.SecurityGroupId.ValueString() securityGroupRuleId := model.SecurityGroupRuleId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "security_group_id", securityGroupId) ctx = tflog.SetField(ctx, "security_group_rule_id", securityGroupRuleId) @@ -481,6 +488,8 @@ func (r *securityGroupRuleResource) Read(ctx context.Context, req resource.ReadR return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(securityGroupRuleResp, &model) if err != nil { @@ -515,6 +524,9 @@ func (r *securityGroupRuleResource) Delete(ctx context.Context, req resource.Del projectId := model.ProjectId.ValueString() securityGroupId := model.SecurityGroupId.ValueString() securityGroupRuleId := model.SecurityGroupRuleId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "security_group_id", securityGroupId) ctx = tflog.SetField(ctx, "security_group_rule_id", securityGroupRuleId) @@ -526,6 +538,8 @@ func (r *securityGroupRuleResource) Delete(ctx context.Context, req resource.Del return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "security group rule deleted") } diff --git a/stackit/internal/services/iaas/server/datasource.go b/stackit/internal/services/iaas/server/datasource.go index ce2159613..aa99bc1c2 100644 --- a/stackit/internal/services/iaas/server/datasource.go +++ b/stackit/internal/services/iaas/server/datasource.go @@ -185,6 +185,9 @@ func (r *serverDataSource) Read(ctx context.Context, req datasource.ReadRequest, } projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -206,6 +209,8 @@ func (r *serverDataSource) Read(ctx context.Context, req datasource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapDataSourceFields(ctx, serverResp, &model) if err != nil { diff --git a/stackit/internal/services/iaas/server/resource.go b/stackit/internal/services/iaas/server/resource.go index a32561196..0c179ae5b 100644 --- a/stackit/internal/services/iaas/server/resource.go +++ b/stackit/internal/services/iaas/server/resource.go @@ -428,6 +428,9 @@ func (r *serverResource) Create(ctx context.Context, req resource.CreateRequest, } projectId := model.ProjectId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) // Generate API request body from model @@ -445,6 +448,8 @@ func (r *serverResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.LogResponse(ctx) + serverId := *server.Id _, err = wait.CreateServerWaitHandler(ctx, r.client, projectId, serverId).WaitWithContext(ctx) if err != nil { @@ -603,6 +608,9 @@ func (r *serverResource) Read(ctx context.Context, req resource.ReadRequest, res } projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -619,6 +627,8 @@ func (r *serverResource) Read(ctx context.Context, req resource.ReadRequest, res return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, serverResp, &model) if err != nil { @@ -682,6 +692,9 @@ func (r *serverResource) Update(ctx context.Context, req resource.UpdateRequest, } projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -710,6 +723,8 @@ func (r *serverResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.LogResponse(ctx) + if err := updateServerStatus(ctx, r.client, server.Status, &model); err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating server", err.Error()) return @@ -726,6 +741,8 @@ func (r *serverResource) Update(ctx context.Context, req resource.UpdateRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating server", err.Error()) return } + + ctx = core.LogResponse(ctx) } // Re-fetch the server data, to get the details values. @@ -763,6 +780,9 @@ func (r *serverResource) Delete(ctx context.Context, req resource.DeleteRequest, projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -772,6 +792,9 @@ func (r *serverResource) Delete(ctx context.Context, req resource.DeleteRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting server", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteServerWaitHandler(ctx, r.client, projectId, serverId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting server", fmt.Sprintf("server deletion waiting: %v", err)) diff --git a/stackit/internal/services/iaas/serviceaccountattach/resource.go b/stackit/internal/services/iaas/serviceaccountattach/resource.go index f5eaed4d2..bf7338eae 100644 --- a/stackit/internal/services/iaas/serviceaccountattach/resource.go +++ b/stackit/internal/services/iaas/serviceaccountattach/resource.go @@ -126,6 +126,8 @@ func (r *networkInterfaceAttachResource) Create(ctx context.Context, req resourc return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -140,6 +142,8 @@ func (r *networkInterfaceAttachResource) Create(ctx context.Context, req resourc return } + ctx = core.LogResponse(ctx) + model.Id = utils.BuildInternalTerraformId(projectId, serverId, serviceAccountEmail) // Set state to fully populated data @@ -159,6 +163,9 @@ func (r *networkInterfaceAttachResource) Read(ctx context.Context, req resource. if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -177,6 +184,8 @@ func (r *networkInterfaceAttachResource) Read(ctx context.Context, req resource. return } + ctx = core.LogResponse(ctx) + if serviceAccounts == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading service account attachment", "List of service accounts attached to the server is nil") return @@ -217,6 +226,8 @@ func (r *networkInterfaceAttachResource) Delete(ctx context.Context, req resourc return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -231,6 +242,8 @@ func (r *networkInterfaceAttachResource) Delete(ctx context.Context, req resourc return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Service account attachment deleted") } diff --git a/stackit/internal/services/iaas/volume/datasource.go b/stackit/internal/services/iaas/volume/datasource.go index ff89d2732..c8adbeaaa 100644 --- a/stackit/internal/services/iaas/volume/datasource.go +++ b/stackit/internal/services/iaas/volume/datasource.go @@ -141,6 +141,9 @@ func (d *volumeDataSource) Read(ctx context.Context, req datasource.ReadRequest, } projectId := model.ProjectId.ValueString() volumeId := model.VolumeId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "volume_id", volumeId) @@ -160,6 +163,8 @@ func (d *volumeDataSource) Read(ctx context.Context, req datasource.ReadRequest, return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, volumeResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading volume", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaas/volume/resource.go b/stackit/internal/services/iaas/volume/resource.go index 8f6bd16b2..4a6bfcf45 100644 --- a/stackit/internal/services/iaas/volume/resource.go +++ b/stackit/internal/services/iaas/volume/resource.go @@ -287,6 +287,8 @@ func (r *volumeResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -314,6 +316,8 @@ func (r *volumeResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.LogResponse(ctx) + volumeId := *volume.Id volume, err = wait.CreateVolumeWaitHandler(ctx, r.client, projectId, volumeId).WaitWithContext(ctx) if err != nil { @@ -348,6 +352,9 @@ func (r *volumeResource) Read(ctx context.Context, req resource.ReadRequest, res } projectId := model.ProjectId.ValueString() volumeId := model.VolumeId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "volume_id", volumeId) @@ -362,6 +369,8 @@ func (r *volumeResource) Read(ctx context.Context, req resource.ReadRequest, res return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, volumeResp, &model) if err != nil { @@ -386,6 +395,9 @@ func (r *volumeResource) Update(ctx context.Context, req resource.UpdateRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() volumeId := model.VolumeId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -412,6 +424,8 @@ func (r *volumeResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.LogResponse(ctx) + // Resize existing volume modelSize := conversion.Int64ValueToPointer(model.Size) if modelSize != nil && updatedVolume.Size != nil { @@ -455,6 +469,9 @@ func (r *volumeResource) Delete(ctx context.Context, req resource.DeleteRequest, projectId := model.ProjectId.ValueString() volumeId := model.VolumeId.ValueString() + + ctx = core.InitProviderContext(ctx) + ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "volume_id", volumeId) @@ -464,6 +481,9 @@ func (r *volumeResource) Delete(ctx context.Context, req resource.DeleteRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting volume", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteVolumeWaitHandler(ctx, r.client, projectId, volumeId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting volume", fmt.Sprintf("volume deletion waiting: %v", err)) diff --git a/stackit/internal/services/iaas/volumeattach/resource.go b/stackit/internal/services/iaas/volumeattach/resource.go index c5a851cf3..30167c442 100644 --- a/stackit/internal/services/iaas/volumeattach/resource.go +++ b/stackit/internal/services/iaas/volumeattach/resource.go @@ -132,6 +132,8 @@ func (r *volumeAttachResource) Create(ctx context.Context, req resource.CreateRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -150,6 +152,8 @@ func (r *volumeAttachResource) Create(ctx context.Context, req resource.CreateRe return } + ctx = core.LogResponse(ctx) + _, err = wait.AddVolumeToServerWaitHandler(ctx, r.client, projectId, serverId, volumeId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error attaching volume to server", fmt.Sprintf("volume attachment waiting: %v", err)) @@ -175,6 +179,9 @@ func (r *volumeAttachResource) Read(ctx context.Context, req resource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -193,6 +200,8 @@ func (r *volumeAttachResource) Read(ctx context.Context, req resource.ReadReques return } + ctx = core.LogResponse(ctx) + // Set refreshed state diags = resp.State.Set(ctx, model) resp.Diagnostics.Append(diags...) @@ -217,6 +226,8 @@ func (r *volumeAttachResource) Delete(ctx context.Context, req resource.DeleteRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) serverId := model.ServerId.ValueString() @@ -231,6 +242,8 @@ func (r *volumeAttachResource) Delete(ctx context.Context, req resource.DeleteRe return } + ctx = core.LogResponse(ctx) + _, err = wait.RemoveVolumeFromServerWaitHandler(ctx, r.client, projectId, serverId, volumeId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error removing volume from server", fmt.Sprintf("volume removal waiting: %v", err)) diff --git a/stackit/internal/services/iaasalpha/routingtable/route/datasource.go b/stackit/internal/services/iaasalpha/routingtable/route/datasource.go index 51846f69f..bd978c073 100644 --- a/stackit/internal/services/iaasalpha/routingtable/route/datasource.go +++ b/stackit/internal/services/iaasalpha/routingtable/route/datasource.go @@ -78,6 +78,8 @@ func (d *routingTableRouteDataSource) Read(ctx context.Context, req datasource.R return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() region := d.providerData.GetRegionWithOverride(model.Region) routingTableId := model.RoutingTableId.ValueString() @@ -106,6 +108,8 @@ func (d *routingTableRouteDataSource) Read(ctx context.Context, req datasource.R return } + ctx = core.LogResponse(ctx) + err = shared.MapRouteModel(ctx, routeResp, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading routing table route", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaasalpha/routingtable/route/resource.go b/stackit/internal/services/iaasalpha/routingtable/route/resource.go index a7fb1025e..c9f496906 100644 --- a/stackit/internal/services/iaasalpha/routingtable/route/resource.go +++ b/stackit/internal/services/iaasalpha/routingtable/route/resource.go @@ -237,6 +237,8 @@ func (r *routeResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() routingTableId := model.RoutingTableId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() @@ -260,6 +262,8 @@ func (r *routeResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFieldsFromList(ctx, routeResp, &model, region) if err != nil { @@ -284,6 +288,9 @@ func (r *routeResource) Read(ctx context.Context, req resource.ReadRequest, resp if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() routingTableId := model.RoutingTableId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() @@ -302,6 +309,8 @@ func (r *routeResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = shared.MapRouteModel(ctx, routeResp, &model, region) if err != nil { @@ -328,6 +337,8 @@ func (r *routeResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() routingTableId := model.RoutingTableId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() @@ -361,6 +372,8 @@ func (r *routeResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = shared.MapRouteModel(ctx, route, &model, region) if err != nil { @@ -385,6 +398,8 @@ func (r *routeResource) Delete(ctx context.Context, req resource.DeleteRequest, return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() routingTableId := model.RoutingTableId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() @@ -403,6 +418,8 @@ func (r *routeResource) Delete(ctx context.Context, req resource.DeleteRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error routing table route", fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Routing table route deleted") } diff --git a/stackit/internal/services/iaasalpha/routingtable/routes/datasource.go b/stackit/internal/services/iaasalpha/routingtable/routes/datasource.go index 26ea2d8a1..dd3e34f08 100644 --- a/stackit/internal/services/iaasalpha/routingtable/routes/datasource.go +++ b/stackit/internal/services/iaasalpha/routingtable/routes/datasource.go @@ -89,6 +89,8 @@ func (d *routingTableRoutesDataSource) Read(ctx context.Context, req datasource. return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() region := d.providerData.GetRegionWithOverride(model.Region) networkAreaId := model.NetworkAreaId.ValueString() @@ -114,6 +116,8 @@ func (d *routingTableRoutesDataSource) Read(ctx context.Context, req datasource. return } + ctx = core.LogResponse(ctx) + err = mapDataSourceRoutingTableRoutes(ctx, routesResp, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading routing table routes", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaasalpha/routingtable/table/datasource.go b/stackit/internal/services/iaasalpha/routingtable/table/datasource.go index 61b4ddbe4..fbfb7950b 100644 --- a/stackit/internal/services/iaasalpha/routingtable/table/datasource.go +++ b/stackit/internal/services/iaasalpha/routingtable/table/datasource.go @@ -81,6 +81,8 @@ func (d *routingTableDataSource) Read(ctx context.Context, req datasource.ReadRe return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() region := d.providerData.GetRegionWithOverride(model.Region) routingTableId := model.RoutingTableId.ValueString() @@ -106,6 +108,8 @@ func (d *routingTableDataSource) Read(ctx context.Context, req datasource.ReadRe return } + ctx = core.LogResponse(ctx) + err = mapDatasourceFields(ctx, routingTableResp, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading routing table", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/iaasalpha/routingtable/table/resource.go b/stackit/internal/services/iaasalpha/routingtable/table/resource.go index 43d6d9070..4b9fb1b06 100644 --- a/stackit/internal/services/iaasalpha/routingtable/table/resource.go +++ b/stackit/internal/services/iaasalpha/routingtable/table/resource.go @@ -228,6 +228,8 @@ func (r *routingTableResource) Create(ctx context.Context, req resource.CreateRe return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -249,6 +251,8 @@ func (r *routingTableResource) Create(ctx context.Context, req resource.CreateRe return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, routingTable, &model, region) if err != nil { @@ -273,6 +277,8 @@ func (r *routingTableResource) Read(ctx context.Context, req resource.ReadReques return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() routingTableId := model.RoutingTableId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() @@ -299,6 +305,8 @@ func (r *routingTableResource) Read(ctx context.Context, req resource.ReadReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, routingTableResp, &model, region) if err != nil { @@ -324,6 +332,8 @@ func (r *routingTableResource) Update(ctx context.Context, req resource.UpdateRe return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() routingTableId := model.RoutingTableId.ValueString() networkAreaId := model.NetworkAreaId.ValueString() @@ -355,6 +365,8 @@ func (r *routingTableResource) Update(ctx context.Context, req resource.UpdateRe return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, routingTable, &model, region) if err != nil { @@ -380,6 +392,8 @@ func (r *routingTableResource) Delete(ctx context.Context, req resource.DeleteRe return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) routingTableId := model.RoutingTableId.ValueString() @@ -396,6 +410,8 @@ func (r *routingTableResource) Delete(ctx context.Context, req resource.DeleteRe return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Routing table deleted") } diff --git a/stackit/internal/services/iaasalpha/routingtable/tables/datasource.go b/stackit/internal/services/iaasalpha/routingtable/tables/datasource.go index eac2257c3..c6ef9268d 100644 --- a/stackit/internal/services/iaasalpha/routingtable/tables/datasource.go +++ b/stackit/internal/services/iaasalpha/routingtable/tables/datasource.go @@ -123,6 +123,8 @@ func (d *routingTablesDataSource) Read(ctx context.Context, req datasource.ReadR return } + ctx = core.InitProviderContext(ctx) + organizationId := model.OrganizationId.ValueString() region := d.providerData.GetRegionWithOverride(model.Region) networkAreaId := model.NetworkAreaId.ValueString() @@ -146,6 +148,8 @@ func (d *routingTablesDataSource) Read(ctx context.Context, req datasource.ReadR return } + ctx = core.LogResponse(ctx) + err = mapDataSourceRoutingTables(ctx, routingTablesResp, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading routing table", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/kms/key/datasource.go b/stackit/internal/services/kms/key/datasource.go index c9f20fee8..97dba1974 100644 --- a/stackit/internal/services/kms/key/datasource.go +++ b/stackit/internal/services/kms/key/datasource.go @@ -147,6 +147,8 @@ func (k *keyDataSource) Read(ctx context.Context, req datasource.ReadRequest, re return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := k.providerData.GetRegionWithOverride(model.Region) @@ -173,6 +175,8 @@ func (k *keyDataSource) Read(ctx context.Context, req datasource.ReadRequest, re return } + ctx = core.LogResponse(ctx) + err = mapFields(keyResponse, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading key", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/kms/key/resource.go b/stackit/internal/services/kms/key/resource.go index 4310ec6f5..9f56669b9 100644 --- a/stackit/internal/services/kms/key/resource.go +++ b/stackit/internal/services/kms/key/resource.go @@ -243,6 +243,8 @@ func (r *keyResource) Create(ctx context.Context, req resource.CreateRequest, re return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) keyRingId := model.KeyRingId.ValueString() @@ -263,6 +265,8 @@ func (r *keyResource) Create(ctx context.Context, req resource.CreateRequest, re return } + ctx = core.LogResponse(ctx) + if createResponse == nil || createResponse.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating key", "API returned empty response") return @@ -305,6 +309,8 @@ func (r *keyResource) Read(ctx context.Context, req resource.ReadRequest, resp * return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -327,6 +333,8 @@ func (r *keyResource) Read(ctx context.Context, req resource.ReadRequest, resp * return } + ctx = core.LogResponse(ctx) + err = mapFields(keyResponse, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading key", fmt.Sprintf("Processing API payload: %v", err)) @@ -353,6 +361,8 @@ func (r *keyResource) Delete(ctx context.Context, req resource.DeleteRequest, re return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -363,6 +373,8 @@ func (r *keyResource) Delete(ctx context.Context, req resource.DeleteRequest, re core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting key", fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + // The keys can't be deleted instantly by Terraform, they can only be scheduled for deletion via the API. core.LogAndAddWarning(ctx, &resp.Diagnostics, "Key scheduled for deletion on API side", deletionWarning) diff --git a/stackit/internal/services/kms/keyring/datasource.go b/stackit/internal/services/kms/keyring/datasource.go index 55398f820..a89944bf8 100644 --- a/stackit/internal/services/kms/keyring/datasource.go +++ b/stackit/internal/services/kms/keyring/datasource.go @@ -100,6 +100,9 @@ func (k *keyRingDataSource) Read(ctx context.Context, request datasource.ReadReq if response.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := k.providerData.GetRegionWithOverride(model.Region) @@ -124,6 +127,8 @@ func (k *keyRingDataSource) Read(ctx context.Context, request datasource.ReadReq return } + ctx = core.LogResponse(ctx) + err = mapFields(keyRingResponse, &model, region) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading keyring", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/kms/keyring/resource.go b/stackit/internal/services/kms/keyring/resource.go index 93da26cf1..3627f3f99 100644 --- a/stackit/internal/services/kms/keyring/resource.go +++ b/stackit/internal/services/kms/keyring/resource.go @@ -178,6 +178,8 @@ func (r *keyRingResource) Create(ctx context.Context, req resource.CreateRequest return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -195,6 +197,8 @@ func (r *keyRingResource) Create(ctx context.Context, req resource.CreateRequest return } + ctx = core.LogResponse(ctx) + if createResponse == nil || createResponse.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating keyring", "API returned empty response") return @@ -236,6 +240,8 @@ func (r *keyRingResource) Read(ctx context.Context, req resource.ReadRequest, re return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -256,6 +262,8 @@ func (r *keyRingResource) Read(ctx context.Context, req resource.ReadRequest, re return } + ctx = core.LogResponse(ctx) + err = mapFields(keyRingResponse, &model, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading keyring", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/kms/wrapping-key/datasource.go b/stackit/internal/services/kms/wrapping-key/datasource.go index cca9a2558..396e6f12a 100644 --- a/stackit/internal/services/kms/wrapping-key/datasource.go +++ b/stackit/internal/services/kms/wrapping-key/datasource.go @@ -135,6 +135,8 @@ func (w *wrappingKeyDataSource) Read(ctx context.Context, request datasource.Rea return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := w.providerData.GetRegionWithOverride(model.Region) @@ -161,6 +163,8 @@ func (w *wrappingKeyDataSource) Read(ctx context.Context, request datasource.Rea return } + ctx = core.LogResponse(ctx) + err = mapFields(wrappingKeyResponse, &model, region) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading wrapping key", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/kms/wrapping-key/resource.go b/stackit/internal/services/kms/wrapping-key/resource.go index 021997bfa..d534b1150 100644 --- a/stackit/internal/services/kms/wrapping-key/resource.go +++ b/stackit/internal/services/kms/wrapping-key/resource.go @@ -248,6 +248,8 @@ func (r *wrappingKeyResource) Create(ctx context.Context, req resource.CreateReq return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) keyRingId := model.KeyRingId.ValueString() @@ -268,6 +270,8 @@ func (r *wrappingKeyResource) Create(ctx context.Context, req resource.CreateReq return } + ctx = core.LogResponse(ctx) + if createWrappingKeyResp == nil || createWrappingKeyResp.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating wrapping key", "API returned empty response") return @@ -311,6 +315,8 @@ func (r *wrappingKeyResource) Read(ctx context.Context, request resource.ReadReq return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -333,6 +339,8 @@ func (r *wrappingKeyResource) Read(ctx context.Context, request resource.ReadReq return } + ctx = core.LogResponse(ctx) + err = mapFields(wrappingKeyResponse, &model, region) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading wrapping key", fmt.Sprintf("Processing API payload: %v", err)) @@ -359,6 +367,8 @@ func (r *wrappingKeyResource) Delete(ctx context.Context, request resource.Delet return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() keyRingId := model.KeyRingId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -369,6 +379,8 @@ func (r *wrappingKeyResource) Delete(ctx context.Context, request resource.Delet core.LogAndAddError(ctx, &response.Diagnostics, "Error deleting wrapping key", fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "wrapping key deleted") } diff --git a/stackit/internal/services/loadbalancer/loadbalancer/datasource.go b/stackit/internal/services/loadbalancer/loadbalancer/datasource.go index 393ba022c..8a6884de2 100644 --- a/stackit/internal/services/loadbalancer/loadbalancer/datasource.go +++ b/stackit/internal/services/loadbalancer/loadbalancer/datasource.go @@ -385,6 +385,9 @@ func (r *loadBalancerDataSource) Read(ctx context.Context, req datasource.ReadRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() name := model.Name.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -408,6 +411,8 @@ func (r *loadBalancerDataSource) Read(ctx context.Context, req datasource.ReadRe return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, lbResp, &model, region) if err != nil { diff --git a/stackit/internal/services/loadbalancer/loadbalancer/resource.go b/stackit/internal/services/loadbalancer/loadbalancer/resource.go index e7f38248c..f062fc4a8 100644 --- a/stackit/internal/services/loadbalancer/loadbalancer/resource.go +++ b/stackit/internal/services/loadbalancer/loadbalancer/resource.go @@ -8,7 +8,6 @@ import ( "time" "github.com/hashicorp/terraform-plugin-framework/resource/schema/booldefault" - loadbalancerUtils "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/loadbalancer/utils" "github.com/google/uuid" @@ -750,6 +749,9 @@ func (r *loadBalancerResource) Create(ctx context.Context, req resource.CreateRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -769,6 +771,8 @@ func (r *loadBalancerResource) Create(ctx context.Context, req resource.CreateRe return } + ctx = core.LogResponse(ctx) + waitResp, err := wait.CreateLoadBalancerWaitHandler(ctx, r.client, projectId, region, *createResp.Name).SetTimeout(90 * time.Minute).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating load balancer", fmt.Sprintf("Load balancer creation waiting: %v", err)) @@ -800,6 +804,9 @@ func (r *loadBalancerResource) Read(ctx context.Context, req resource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() name := model.Name.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -819,6 +826,8 @@ func (r *loadBalancerResource) Read(ctx context.Context, req resource.ReadReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, lbResp, &model, region) if err != nil { @@ -844,6 +853,9 @@ func (r *loadBalancerResource) Update(ctx context.Context, req resource.UpdateRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() name := model.Name.ValueString() region := model.Region.ValueString() @@ -875,6 +887,8 @@ func (r *loadBalancerResource) Update(ctx context.Context, req resource.UpdateRe core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating load balancer", fmt.Sprintf("Calling API for target pool: %v", err)) return } + + ctx = core.LogResponse(ctx) } ctx = tflog.SetField(ctx, "target_pool_name", nil) @@ -910,6 +924,9 @@ func (r *loadBalancerResource) Delete(ctx context.Context, req resource.DeleteRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() name := model.Name.ValueString() region := model.Region.ValueString() @@ -924,6 +941,8 @@ func (r *loadBalancerResource) Delete(ctx context.Context, req resource.DeleteRe return } + ctx = core.LogResponse(ctx) + _, err = wait.DeleteLoadBalancerWaitHandler(ctx, r.client, projectId, region, name).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting load balancer", fmt.Sprintf("Load balancer deleting waiting: %v", err)) diff --git a/stackit/internal/services/loadbalancer/observability-credential/resource.go b/stackit/internal/services/loadbalancer/observability-credential/resource.go index 8ac96211d..e4613c062 100644 --- a/stackit/internal/services/loadbalancer/observability-credential/resource.go +++ b/stackit/internal/services/loadbalancer/observability-credential/resource.go @@ -188,6 +188,9 @@ func (r *observabilityCredentialResource) Create(ctx context.Context, req resour if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -206,6 +209,9 @@ func (r *observabilityCredentialResource) Create(ctx context.Context, req resour core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating observability credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + ctx = tflog.SetField(ctx, "credentials_ref", createResp.Credential.CredentialsRef) // Map response body to schema @@ -233,6 +239,9 @@ func (r *observabilityCredentialResource) Read(ctx context.Context, req resource if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsRef := model.CredentialsRef.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -252,6 +261,8 @@ func (r *observabilityCredentialResource) Read(ctx context.Context, req resource return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(credResp.Credential, &model, region) if err != nil { @@ -281,6 +292,9 @@ func (r *observabilityCredentialResource) Delete(ctx context.Context, req resour if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsRef := model.CredentialsRef.ValueString() region := model.Region.ValueString() @@ -295,6 +309,8 @@ func (r *observabilityCredentialResource) Delete(ctx context.Context, req resour return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Load balancer observability credential deleted") } diff --git a/stackit/internal/services/logme/credential/datasource.go b/stackit/internal/services/logme/credential/datasource.go index 90f652942..450845fe0 100644 --- a/stackit/internal/services/logme/credential/datasource.go +++ b/stackit/internal/services/logme/credential/datasource.go @@ -124,6 +124,9 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -147,6 +150,8 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(recordSetResp, &model) if err != nil { diff --git a/stackit/internal/services/logme/credential/resource.go b/stackit/internal/services/logme/credential/resource.go index f98668225..babd4b978 100644 --- a/stackit/internal/services/logme/credential/resource.go +++ b/stackit/internal/services/logme/credential/resource.go @@ -160,6 +160,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -171,6 +174,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if credentialsResp.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", "Got empty credential id") return @@ -206,6 +212,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -224,6 +233,8 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(recordSetResp, &model) if err != nil { @@ -255,6 +266,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -267,6 +280,9 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteCredentialsWaitHandler(ctx, r.client, projectId, instanceId, credentialId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/logme/instance/datasource.go b/stackit/internal/services/logme/instance/datasource.go index a7f94ca35..7ad2ef2b9 100644 --- a/stackit/internal/services/logme/instance/datasource.go +++ b/stackit/internal/services/logme/instance/datasource.go @@ -246,6 +246,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -268,6 +271,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + err = mapFields(instanceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/logme/instance/resource.go b/stackit/internal/services/logme/instance/resource.go index 8c1234b33..ffcd0fb8d 100644 --- a/stackit/internal/services/logme/instance/resource.go +++ b/stackit/internal/services/logme/instance/resource.go @@ -389,6 +389,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -420,6 +423,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.InstanceId ctx = tflog.SetField(ctx, "instance_id", instanceId) waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, projectId, instanceId).SetTimeout(90 * time.Minute).WaitWithContext(ctx) @@ -452,6 +458,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -468,6 +477,8 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(instanceResp, &model) if err != nil { @@ -499,6 +510,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -532,6 +546,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.PartialUpdateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -562,6 +579,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -573,6 +593,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/mariadb/credential/datasource.go b/stackit/internal/services/mariadb/credential/datasource.go index d97209c85..b5b37fcfe 100644 --- a/stackit/internal/services/mariadb/credential/datasource.go +++ b/stackit/internal/services/mariadb/credential/datasource.go @@ -132,6 +132,9 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -155,6 +158,8 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { diff --git a/stackit/internal/services/mariadb/credential/resource.go b/stackit/internal/services/mariadb/credential/resource.go index 15a7c52ad..d106d9d4a 100644 --- a/stackit/internal/services/mariadb/credential/resource.go +++ b/stackit/internal/services/mariadb/credential/resource.go @@ -168,6 +168,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -179,6 +182,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if credentialsResp.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", "Got empty credential id") return @@ -214,6 +220,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -232,6 +241,8 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { @@ -263,6 +274,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -275,6 +288,9 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteCredentialsWaitHandler(ctx, r.client, projectId, instanceId, credentialId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/mariadb/instance/datasource.go b/stackit/internal/services/mariadb/instance/datasource.go index 39fe12703..70640000e 100644 --- a/stackit/internal/services/mariadb/instance/datasource.go +++ b/stackit/internal/services/mariadb/instance/datasource.go @@ -182,6 +182,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -204,6 +207,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + err = mapFields(instanceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/mariadb/instance/resource.go b/stackit/internal/services/mariadb/instance/resource.go index 39d2f3ecf..de563b789 100644 --- a/stackit/internal/services/mariadb/instance/resource.go +++ b/stackit/internal/services/mariadb/instance/resource.go @@ -282,6 +282,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -313,6 +316,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.InstanceId ctx = tflog.SetField(ctx, "instance_id", instanceId) waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) @@ -345,6 +351,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -361,6 +370,8 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(instanceResp, &model) if err != nil { @@ -392,6 +403,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -425,6 +439,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.PartialUpdateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -455,6 +472,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -466,6 +486,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/modelserving/token/resource.go b/stackit/internal/services/modelserving/token/resource.go index 0bdb79f38..c55ba150c 100644 --- a/stackit/internal/services/modelserving/token/resource.go +++ b/stackit/internal/services/modelserving/token/resource.go @@ -237,8 +237,9 @@ func (r *tokenResource) Create(ctx context.Context, req resource.CreateRequest, return } - projectId := model.ProjectId.ValueString() + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) @@ -299,6 +300,8 @@ func (r *tokenResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.LogResponse(ctx) + waitResp, err := wait.CreateModelServingWaitHandler(ctx, r.client, region, projectId, *createTokenResp.Token.Id).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating AI model serving auth token", fmt.Sprintf("Waiting for token to be active: %v", err)) @@ -331,6 +334,8 @@ func (r *tokenResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() tokenId := model.TokenId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -355,6 +360,8 @@ func (r *tokenResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.LogResponse(ctx) + if getTokenResp != nil && getTokenResp.Token.State != nil && *getTokenResp.Token.State == inactiveState { resp.State.RemoveResource(ctx) @@ -397,6 +404,8 @@ func (r *tokenResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.InitProviderContext(ctx) + projectId := state.ProjectId.ValueString() tokenId := state.TokenId.ValueString() @@ -440,6 +449,8 @@ func (r *tokenResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.LogResponse(ctx) + if updateTokenResp != nil && updateTokenResp.Token.State != nil && *updateTokenResp.Token.State == inactiveState { resp.State.RemoveResource(ctx) @@ -480,6 +491,8 @@ func (r *tokenResource) Delete(ctx context.Context, req resource.DeleteRequest, return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() tokenId := model.TokenId.ValueString() @@ -504,6 +517,8 @@ func (r *tokenResource) Delete(ctx context.Context, req resource.DeleteRequest, return } + ctx = core.LogResponse(ctx) + _, err = wait.DeleteModelServingWaitHandler(ctx, r.client, region, projectId, tokenId). WaitWithContext(ctx) if err != nil { diff --git a/stackit/internal/services/mongodbflex/instance/datasource.go b/stackit/internal/services/mongodbflex/instance/datasource.go index 3ce92a3f5..84d7563cb 100644 --- a/stackit/internal/services/mongodbflex/instance/datasource.go +++ b/stackit/internal/services/mongodbflex/instance/datasource.go @@ -197,6 +197,8 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := d.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -219,6 +221,8 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + var flavor = &flavorModel{} if !(model.Flavor.IsNull() || model.Flavor.IsUnknown()) { diags = model.Flavor.As(ctx, flavor, basetypes.ObjectAsOptions{}) diff --git a/stackit/internal/services/mongodbflex/instance/resource.go b/stackit/internal/services/mongodbflex/instance/resource.go index e3b4d2262..3f8600375 100644 --- a/stackit/internal/services/mongodbflex/instance/resource.go +++ b/stackit/internal/services/mongodbflex/instance/resource.go @@ -355,6 +355,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) @@ -411,6 +414,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if createResp == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", "API response is empty") return @@ -484,6 +490,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -528,6 +537,8 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, instanceResp, &model, flavor, storage, options, region) if err != nil { @@ -552,6 +563,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -610,6 +624,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", err.Error()) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.UpdateInstanceWaitHandler(ctx, r.client, projectId, instanceId, region).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -657,6 +674,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -670,6 +690,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, instanceId, region).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/mongodbflex/user/datasource.go b/stackit/internal/services/mongodbflex/user/datasource.go index 3a7e9f029..d9defbb10 100644 --- a/stackit/internal/services/mongodbflex/user/datasource.go +++ b/stackit/internal/services/mongodbflex/user/datasource.go @@ -146,6 +146,9 @@ func (d *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := d.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -171,6 +174,8 @@ func (d *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema and populate Computed attribute values err = mapDataSourceFields(recordSetResp, &model, region) if err != nil { diff --git a/stackit/internal/services/mongodbflex/user/resource.go b/stackit/internal/services/mongodbflex/user/resource.go index 4a763e175..85096f23e 100644 --- a/stackit/internal/services/mongodbflex/user/resource.go +++ b/stackit/internal/services/mongodbflex/user/resource.go @@ -222,6 +222,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -250,6 +253,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if userResp == nil || userResp.Item == nil || userResp.Item.Id == nil || *userResp.Item.Id == "" { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", "API didn't return user ID. A user might have been created") return @@ -280,6 +286,9 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -300,6 +309,8 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(recordSetResp, &model, region) if err != nil { @@ -325,6 +336,9 @@ func (r *userResource) Update(ctx context.Context, req resource.UpdateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -365,6 +379,8 @@ func (r *userResource) Update(ctx context.Context, req resource.UpdateRequest, r return } + ctx = core.LogResponse(ctx) + userResp, err := r.client.GetUser(ctx, projectId, instanceId, userId, region).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating user", fmt.Sprintf("Calling API: %v", err)) @@ -397,6 +413,8 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) instanceId := model.InstanceId.ValueString() @@ -412,6 +430,9 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting user", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "MongoDB Flex user deleted") } diff --git a/stackit/internal/services/objectstorage/bucket/datasource.go b/stackit/internal/services/objectstorage/bucket/datasource.go index c541830e5..52a981b08 100644 --- a/stackit/internal/services/objectstorage/bucket/datasource.go +++ b/stackit/internal/services/objectstorage/bucket/datasource.go @@ -113,6 +113,9 @@ func (r *bucketDataSource) Read(ctx context.Context, req datasource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() bucketName := model.Name.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -137,6 +140,8 @@ func (r *bucketDataSource) Read(ctx context.Context, req datasource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(bucketResp, &model, region) if err != nil { diff --git a/stackit/internal/services/objectstorage/bucket/resource.go b/stackit/internal/services/objectstorage/bucket/resource.go index 52e15e7f5..f1b8f371d 100644 --- a/stackit/internal/services/objectstorage/bucket/resource.go +++ b/stackit/internal/services/objectstorage/bucket/resource.go @@ -178,6 +178,9 @@ func (r *bucketResource) Create(ctx context.Context, req resource.CreateRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() bucketName := model.Name.ValueString() region := model.Region.ValueString() @@ -200,6 +203,8 @@ func (r *bucketResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.LogResponse(ctx) + waitResp, err := wait.CreateBucketWaitHandler(ctx, r.client, projectId, region, bucketName).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating bucket", fmt.Sprintf("Bucket creation waiting: %v", err)) @@ -228,6 +233,9 @@ func (r *bucketResource) Read(ctx context.Context, req resource.ReadRequest, res if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() bucketName := model.Name.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -247,6 +255,8 @@ func (r *bucketResource) Read(ctx context.Context, req resource.ReadRequest, res return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(bucketResp, &model, region) if err != nil { @@ -277,6 +287,9 @@ func (r *bucketResource) Delete(ctx context.Context, req resource.DeleteRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() bucketName := model.Name.ValueString() region := model.Region.ValueString() @@ -297,6 +310,9 @@ func (r *bucketResource) Delete(ctx context.Context, req resource.DeleteRequest, } core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting bucket", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteBucketWaitHandler(ctx, r.client, projectId, region, bucketName).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting bucket", fmt.Sprintf("Bucket deletion waiting: %v", err)) diff --git a/stackit/internal/services/objectstorage/credential/datasource.go b/stackit/internal/services/objectstorage/credential/datasource.go index 0a0df7887..27841de82 100644 --- a/stackit/internal/services/objectstorage/credential/datasource.go +++ b/stackit/internal/services/objectstorage/credential/datasource.go @@ -120,6 +120,8 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() credentialId := model.CredentialId.ValueString() @@ -145,6 +147,9 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + if credentialsGroupResp == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Reading credentials", fmt.Sprintf("Response is nil: %v", err)) return diff --git a/stackit/internal/services/objectstorage/credential/resource.go b/stackit/internal/services/objectstorage/credential/resource.go index e2f4cea0b..a2125a1e1 100644 --- a/stackit/internal/services/objectstorage/credential/resource.go +++ b/stackit/internal/services/objectstorage/credential/resource.go @@ -248,6 +248,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() region := model.Region.ValueString() @@ -275,6 +278,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if credentialResp.KeyId == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", "Got empty credential id") return @@ -326,6 +332,8 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() credentialId := model.CredentialId.ValueString() @@ -341,6 +349,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading credential", fmt.Sprintf("Finding credential: %v", err)) return } + + ctx = core.LogResponse(ctx) + if !found { resp.State.RemoveResource(ctx) return @@ -399,6 +410,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() credentialId := model.CredentialId.ValueString() @@ -415,6 +428,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "ObjectStorage credential deleted") } diff --git a/stackit/internal/services/objectstorage/credentialsgroup/datasource.go b/stackit/internal/services/objectstorage/credentialsgroup/datasource.go index 72c57d2af..de690b5da 100644 --- a/stackit/internal/services/objectstorage/credentialsgroup/datasource.go +++ b/stackit/internal/services/objectstorage/credentialsgroup/datasource.go @@ -111,6 +111,9 @@ func (r *credentialsGroupDataSource) Read(ctx context.Context, req datasource.Re if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -124,6 +127,9 @@ func (r *credentialsGroupDataSource) Read(ctx context.Context, req datasource.Re core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading credentials group", fmt.Sprintf("getting credential group from list of credentials groups: %v", err)) return } + + ctx = core.LogResponse(ctx) + if !found { resp.State.RemoveResource(ctx) core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading credentials group", fmt.Sprintf("Credentials group with ID %q does not exists in project %q", credentialsGroupId, projectId)) diff --git a/stackit/internal/services/objectstorage/credentialsgroup/resource.go b/stackit/internal/services/objectstorage/credentialsgroup/resource.go index 7008d77b2..9973ba800 100644 --- a/stackit/internal/services/objectstorage/credentialsgroup/resource.go +++ b/stackit/internal/services/objectstorage/credentialsgroup/resource.go @@ -176,6 +176,9 @@ func (r *credentialsGroupResource) Create(ctx context.Context, req resource.Crea if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupName := model.Name.ValueString() region := model.Region.ValueString() @@ -202,6 +205,8 @@ func (r *credentialsGroupResource) Create(ctx context.Context, req resource.Crea return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(got, &model, region) if err != nil { @@ -224,6 +229,9 @@ func (r *credentialsGroupResource) Read(ctx context.Context, req resource.ReadRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -237,6 +245,9 @@ func (r *credentialsGroupResource) Read(ctx context.Context, req resource.ReadRe core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading credentialsGroup", fmt.Sprintf("getting credential group from list of credentials groups: %v", err)) return } + + ctx = core.LogResponse(ctx) + if !found { resp.State.RemoveResource(ctx) return @@ -267,6 +278,9 @@ func (r *credentialsGroupResource) Delete(ctx context.Context, req resource.Dele if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() region := model.Region.ValueString() @@ -281,6 +295,8 @@ func (r *credentialsGroupResource) Delete(ctx context.Context, req resource.Dele core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credentials group", fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "ObjectStorage credentials group deleted") } diff --git a/stackit/internal/services/observability/alertgroup/datasource.go b/stackit/internal/services/observability/alertgroup/datasource.go index df7467372..998151e5d 100644 --- a/stackit/internal/services/observability/alertgroup/datasource.go +++ b/stackit/internal/services/observability/alertgroup/datasource.go @@ -138,6 +138,8 @@ func (a *alertGroupDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -157,6 +159,8 @@ func (a *alertGroupDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, readAlertGroupResp.Data, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading alert group", fmt.Sprintf("Error processing API response: %v", err)) diff --git a/stackit/internal/services/observability/alertgroup/resource.go b/stackit/internal/services/observability/alertgroup/resource.go index 81295320a..e91d9f680 100644 --- a/stackit/internal/services/observability/alertgroup/resource.go +++ b/stackit/internal/services/observability/alertgroup/resource.go @@ -239,6 +239,8 @@ func (a *alertGroupResource) Create(ctx context.Context, req resource.CreateRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -258,6 +260,8 @@ func (a *alertGroupResource) Create(ctx context.Context, req resource.CreateRequ return } + ctx = core.LogResponse(ctx) + // all alert groups are returned. We have to search the map for the one corresponding to our name for _, alertGroup := range *createAlertGroupResp.Data { if model.Name.ValueString() != *alertGroup.Name { @@ -289,6 +293,8 @@ func (a *alertGroupResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -308,6 +314,8 @@ func (a *alertGroupResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, readAlertGroupResp.Data, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading alert group", fmt.Sprintf("Error processing API response: %v", err)) @@ -337,6 +345,8 @@ func (a *alertGroupResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -350,6 +360,8 @@ func (a *alertGroupResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Alert group deleted") } diff --git a/stackit/internal/services/observability/credential/resource.go b/stackit/internal/services/observability/credential/resource.go index 8b5ca3f99..fc989d878 100644 --- a/stackit/internal/services/observability/credential/resource.go +++ b/stackit/internal/services/observability/credential/resource.go @@ -136,6 +136,8 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() description := model.Description.ValueStringPointer() @@ -149,6 +151,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + err = mapFields(got.Credentials, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Processing API payload: %v", err)) @@ -193,6 +198,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userName := model.Username.ValueString() @@ -211,6 +219,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + diags = resp.State.Set(ctx, model) resp.Diagnostics.Append(diags...) if resp.Diagnostics.HasError() { @@ -233,6 +244,9 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userName := model.Username.ValueString() @@ -241,5 +255,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Observability credential deleted") } diff --git a/stackit/internal/services/observability/instance/datasource.go b/stackit/internal/services/observability/instance/datasource.go index 7352b6d10..31b6cbd59 100644 --- a/stackit/internal/services/observability/instance/datasource.go +++ b/stackit/internal/services/observability/instance/datasource.go @@ -381,6 +381,9 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() instanceResp, err := d.client.GetInstance(ctx, instanceId, projectId).Execute() @@ -398,6 +401,9 @@ func (d *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + if instanceResp != nil && instanceResp.Status != nil && *instanceResp.Status == observability.GETINSTANCERESPONSESTATUS_DELETE_SUCCEEDED { resp.State.RemoveResource(ctx) core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", "Instance was deleted successfully") diff --git a/stackit/internal/services/observability/instance/resource.go b/stackit/internal/services/observability/instance/resource.go index 8cae47bf5..ee89a5a95 100644 --- a/stackit/internal/services/observability/instance/resource.go +++ b/stackit/internal/services/observability/instance/resource.go @@ -897,6 +897,8 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques return } + ctx = core.InitProviderContext(ctx) + acl := []string{} if !(model.ACL.IsNull() || model.ACL.IsUnknown()) { diags = model.ACL.ElementsAs(ctx, &acl, false) @@ -934,6 +936,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := createResp.InstanceId ctx = tflog.SetField(ctx, "instance_id", instanceId) waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, *instanceId, projectId).WaitWithContext(ctx) @@ -1064,6 +1069,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -1079,6 +1087,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if instanceResp != nil && instanceResp.Status != nil && *instanceResp.Status == observability.GETINSTANCERESPONSESTATUS_DELETE_SUCCEEDED { resp.State.RemoveResource(ctx) return @@ -1215,6 +1226,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() @@ -1268,6 +1282,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instance, err = wait.UpdateInstanceWaitHandler(ctx, r.client, instanceId, projectId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -1401,6 +1418,8 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() @@ -1410,6 +1429,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, instanceId, projectId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/observability/log-alertgroup/datasource.go b/stackit/internal/services/observability/log-alertgroup/datasource.go index 040899bcb..77a554763 100644 --- a/stackit/internal/services/observability/log-alertgroup/datasource.go +++ b/stackit/internal/services/observability/log-alertgroup/datasource.go @@ -138,6 +138,8 @@ func (l *logAlertGroupDataSource) Read(ctx context.Context, req datasource.ReadR return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -157,6 +159,8 @@ func (l *logAlertGroupDataSource) Read(ctx context.Context, req datasource.ReadR return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, readAlertGroupResp.Data, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading log alert group", fmt.Sprintf("Error processing API response: %v", err)) diff --git a/stackit/internal/services/observability/log-alertgroup/resource.go b/stackit/internal/services/observability/log-alertgroup/resource.go index c8427718f..855b6300a 100644 --- a/stackit/internal/services/observability/log-alertgroup/resource.go +++ b/stackit/internal/services/observability/log-alertgroup/resource.go @@ -239,6 +239,8 @@ func (l *logAlertGroupResource) Create(ctx context.Context, req resource.CreateR return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -258,6 +260,8 @@ func (l *logAlertGroupResource) Create(ctx context.Context, req resource.CreateR return } + ctx = core.LogResponse(ctx) + // all log alert groups are returned. We have to search the map for the one corresponding to our name for _, alertGroup := range *createAlertGroupResp.Data { if model.Name.ValueString() != *alertGroup.Name { @@ -289,6 +293,8 @@ func (l *logAlertGroupResource) Read(ctx context.Context, req resource.ReadReque return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -308,6 +314,8 @@ func (l *logAlertGroupResource) Read(ctx context.Context, req resource.ReadReque return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, readAlertGroupResp.Data, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading log alert group", fmt.Sprintf("Error processing API response: %v", err)) @@ -337,6 +345,8 @@ func (l *logAlertGroupResource) Delete(ctx context.Context, req resource.DeleteR return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() alertGroupName := model.Name.ValueString() @@ -350,6 +360,8 @@ func (l *logAlertGroupResource) Delete(ctx context.Context, req resource.DeleteR return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "log alert group deleted") } diff --git a/stackit/internal/services/observability/scrapeconfig/datasource.go b/stackit/internal/services/observability/scrapeconfig/datasource.go index 552d320b3..32d38a7b9 100644 --- a/stackit/internal/services/observability/scrapeconfig/datasource.go +++ b/stackit/internal/services/observability/scrapeconfig/datasource.go @@ -190,6 +190,9 @@ func (d *scrapeConfigDataSource) Read(ctx context.Context, req datasource.ReadRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() scName := model.Name.ValueString() @@ -210,6 +213,8 @@ func (d *scrapeConfigDataSource) Read(ctx context.Context, req datasource.ReadRe return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, scResp.Data, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Mapping fields", err.Error()) diff --git a/stackit/internal/services/observability/scrapeconfig/resource.go b/stackit/internal/services/observability/scrapeconfig/resource.go index c8c3629ea..2fc2e999d 100644 --- a/stackit/internal/services/observability/scrapeconfig/resource.go +++ b/stackit/internal/services/observability/scrapeconfig/resource.go @@ -305,6 +305,8 @@ func (r *scrapeConfigResource) Create(ctx context.Context, req resource.CreateRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() scName := model.Name.ValueString() @@ -347,6 +349,9 @@ func (r *scrapeConfigResource) Create(ctx context.Context, req resource.CreateRe core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating scrape config", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.CreateScrapeConfigWaitHandler(ctx, r.client, instanceId, scName, projectId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating scrape config", fmt.Sprintf("Scrape config creation waiting: %v", err)) @@ -379,6 +384,9 @@ func (r *scrapeConfigResource) Read(ctx context.Context, req resource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() scName := model.Name.ValueString() @@ -394,6 +402,8 @@ func (r *scrapeConfigResource) Read(ctx context.Context, req resource.ReadReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, scResp.Data, &model) if err != nil { @@ -418,6 +428,9 @@ func (r *scrapeConfigResource) Update(ctx context.Context, req resource.UpdateRe if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() scName := model.Name.ValueString() @@ -460,6 +473,9 @@ func (r *scrapeConfigResource) Update(ctx context.Context, req resource.UpdateRe core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating scrape config", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + // We do not have an update status provided by the observability scrape config api, so we cannot use a waiter here, hence a simple sleep is used. time.Sleep(15 * time.Second) @@ -492,6 +508,8 @@ func (r *scrapeConfigResource) Delete(ctx context.Context, req resource.DeleteRe return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() scName := model.Name.ValueString() @@ -502,6 +520,9 @@ func (r *scrapeConfigResource) Delete(ctx context.Context, req resource.DeleteRe core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting scrape config", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteScrapeConfigWaitHandler(ctx, r.client, instanceId, scName, projectId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting scrape config", fmt.Sprintf("Scrape config deletion waiting: %v", err)) diff --git a/stackit/internal/services/opensearch/credential/datasource.go b/stackit/internal/services/opensearch/credential/datasource.go index c38dbd538..86350f600 100644 --- a/stackit/internal/services/opensearch/credential/datasource.go +++ b/stackit/internal/services/opensearch/credential/datasource.go @@ -132,6 +132,9 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -155,6 +158,8 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { diff --git a/stackit/internal/services/opensearch/credential/resource.go b/stackit/internal/services/opensearch/credential/resource.go index 5c4d27832..041718dd4 100644 --- a/stackit/internal/services/opensearch/credential/resource.go +++ b/stackit/internal/services/opensearch/credential/resource.go @@ -168,6 +168,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -179,6 +182,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if credentialsResp.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", "Got empty credential id") return @@ -214,6 +220,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -232,6 +241,8 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { @@ -263,6 +274,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -275,6 +288,9 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteCredentialsWaitHandler(ctx, r.client, projectId, instanceId, credentialId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/opensearch/instance/datasource.go b/stackit/internal/services/opensearch/instance/datasource.go index e2b43b47a..6e5a25950 100644 --- a/stackit/internal/services/opensearch/instance/datasource.go +++ b/stackit/internal/services/opensearch/instance/datasource.go @@ -215,6 +215,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -237,6 +240,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + err = mapFields(instanceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/opensearch/instance/resource.go b/stackit/internal/services/opensearch/instance/resource.go index 68999e682..e23554952 100644 --- a/stackit/internal/services/opensearch/instance/resource.go +++ b/stackit/internal/services/opensearch/instance/resource.go @@ -330,6 +330,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -361,6 +364,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.InstanceId ctx = tflog.SetField(ctx, "instance_id", instanceId) waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) @@ -393,6 +399,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -409,6 +418,8 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(instanceResp, &model) if err != nil { @@ -440,6 +451,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -479,6 +493,8 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(waitResp, &model) if err != nil { @@ -503,6 +519,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -514,6 +533,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/postgresflex/database/datasource.go b/stackit/internal/services/postgresflex/database/datasource.go index f1d8b1e96..7eec59fb5 100644 --- a/stackit/internal/services/postgresflex/database/datasource.go +++ b/stackit/internal/services/postgresflex/database/datasource.go @@ -124,6 +124,9 @@ func (r *databaseDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() databaseId := model.DatabaseId.ValueString() @@ -149,6 +152,8 @@ func (r *databaseDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema and populate Computed attribute values err = mapFields(databaseResp, &model, region) if err != nil { diff --git a/stackit/internal/services/postgresflex/database/resource.go b/stackit/internal/services/postgresflex/database/resource.go index 024e18e96..809d7d23d 100644 --- a/stackit/internal/services/postgresflex/database/resource.go +++ b/stackit/internal/services/postgresflex/database/resource.go @@ -198,6 +198,9 @@ func (r *databaseResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() instanceId := model.InstanceId.ValueString() @@ -217,6 +220,9 @@ func (r *databaseResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating database", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if databaseResp == nil || databaseResp.Id == nil || *databaseResp.Id == "" { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating database", "API didn't return database Id. A database might have been created") return @@ -253,6 +259,9 @@ func (r *databaseResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() databaseId := model.DatabaseId.ValueString() @@ -273,6 +282,8 @@ func (r *databaseResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(databaseResp, &model, region) if err != nil { @@ -305,6 +316,8 @@ func (r *databaseResource) Delete(ctx context.Context, req resource.DeleteReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() databaseId := model.DatabaseId.ValueString() @@ -319,6 +332,9 @@ func (r *databaseResource) Delete(ctx context.Context, req resource.DeleteReques if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting database", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Postgres Flex database deleted") } diff --git a/stackit/internal/services/postgresflex/instance/datasource.go b/stackit/internal/services/postgresflex/instance/datasource.go index b411713be..8f5cea1ed 100644 --- a/stackit/internal/services/postgresflex/instance/datasource.go +++ b/stackit/internal/services/postgresflex/instance/datasource.go @@ -158,6 +158,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -179,6 +181,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + if instanceResp != nil && instanceResp.Item != nil && instanceResp.Item.Status != nil && *instanceResp.Item.Status == wait.InstanceStateDeleted { resp.State.RemoveResource(ctx) core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", "Instance was deleted successfully") diff --git a/stackit/internal/services/postgresflex/instance/resource.go b/stackit/internal/services/postgresflex/instance/resource.go index 4bb653afb..a4526e08e 100644 --- a/stackit/internal/services/postgresflex/instance/resource.go +++ b/stackit/internal/services/postgresflex/instance/resource.go @@ -273,6 +273,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -320,6 +323,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.Id ctx = tflog.SetField(ctx, "instance_id", instanceId) waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, projectId, region, instanceId).WaitWithContext(ctx) @@ -351,6 +357,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -385,6 +394,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", err.Error()) return } + + ctx = core.LogResponse(ctx) + if instanceResp != nil && instanceResp.Item != nil && instanceResp.Item.Status != nil && *instanceResp.Item.Status == wait.InstanceStateDeleted { resp.State.RemoveResource(ctx) return @@ -414,6 +426,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := model.Region.ValueString() @@ -463,6 +478,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", err.Error()) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.PartialUpdateInstanceWaitHandler(ctx, r.client, projectId, region, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -492,6 +510,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := model.Region.ValueString() @@ -505,6 +526,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, region, instanceId).SetTimeout(45 * time.Minute).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/postgresflex/user/datasource.go b/stackit/internal/services/postgresflex/user/datasource.go index a0fb8c3bc..ea43c85dc 100644 --- a/stackit/internal/services/postgresflex/user/datasource.go +++ b/stackit/internal/services/postgresflex/user/datasource.go @@ -141,6 +141,9 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -166,6 +169,8 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema and populate Computed attribute values err = mapDataSourceFields(recordSetResp, &model, region) if err != nil { diff --git a/stackit/internal/services/postgresflex/user/resource.go b/stackit/internal/services/postgresflex/user/resource.go index a67966ca6..2b1416e3b 100644 --- a/stackit/internal/services/postgresflex/user/resource.go +++ b/stackit/internal/services/postgresflex/user/resource.go @@ -222,6 +222,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := model.Region.ValueString() @@ -250,6 +253,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if userResp == nil || userResp.Item == nil || userResp.Item.Id == nil || *userResp.Item.Id == "" { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", "API didn't return user Id. A user might have been created") return @@ -280,6 +286,9 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -300,6 +309,8 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(recordSetResp, &model, region) if err != nil { @@ -325,6 +336,9 @@ func (r *userResource) Update(ctx context.Context, req resource.UpdateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -365,6 +379,8 @@ func (r *userResource) Update(ctx context.Context, req resource.UpdateRequest, r return } + ctx = core.LogResponse(ctx) + userResp, err := r.client.GetUser(ctx, projectId, region, instanceId, userId).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating user", fmt.Sprintf("Calling API: %v", err)) @@ -397,6 +413,8 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -411,6 +429,9 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting user", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteUserWaitHandler(ctx, r.client, projectId, region, instanceId, userId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting user", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/rabbitmq/credential/datasource.go b/stackit/internal/services/rabbitmq/credential/datasource.go index 428a93067..be84cf0ff 100644 --- a/stackit/internal/services/rabbitmq/credential/datasource.go +++ b/stackit/internal/services/rabbitmq/credential/datasource.go @@ -143,6 +143,9 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -166,6 +169,8 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { diff --git a/stackit/internal/services/rabbitmq/credential/resource.go b/stackit/internal/services/rabbitmq/credential/resource.go index b16e47df9..5fac9becf 100644 --- a/stackit/internal/services/rabbitmq/credential/resource.go +++ b/stackit/internal/services/rabbitmq/credential/resource.go @@ -182,6 +182,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -193,6 +196,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if credentialsResp.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", "Got empty credential id") return @@ -228,6 +234,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -246,6 +255,8 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { @@ -277,6 +288,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -289,6 +302,9 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteCredentialsWaitHandler(ctx, r.client, projectId, instanceId, credentialId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/rabbitmq/instance/datasource.go b/stackit/internal/services/rabbitmq/instance/datasource.go index 1f7439a31..7cd256413 100644 --- a/stackit/internal/services/rabbitmq/instance/datasource.go +++ b/stackit/internal/services/rabbitmq/instance/datasource.go @@ -211,6 +211,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -232,6 +235,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + err = mapFields(instanceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/rabbitmq/instance/resource.go b/stackit/internal/services/rabbitmq/instance/resource.go index d012858c9..10b8d3404 100644 --- a/stackit/internal/services/rabbitmq/instance/resource.go +++ b/stackit/internal/services/rabbitmq/instance/resource.go @@ -325,6 +325,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -356,6 +359,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.InstanceId ctx = tflog.SetField(ctx, "instance_id", instanceId) waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) @@ -388,6 +394,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -404,6 +413,8 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(instanceResp, &model) if err != nil { @@ -435,6 +446,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -468,6 +482,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.PartialUpdateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -498,6 +515,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -509,6 +529,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/redis/credential/datasource.go b/stackit/internal/services/redis/credential/datasource.go index 17f257755..d27ff1e20 100644 --- a/stackit/internal/services/redis/credential/datasource.go +++ b/stackit/internal/services/redis/credential/datasource.go @@ -134,6 +134,9 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -157,6 +160,8 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { diff --git a/stackit/internal/services/redis/credential/resource.go b/stackit/internal/services/redis/credential/resource.go index bc5f2b31c..11641c97d 100644 --- a/stackit/internal/services/redis/credential/resource.go +++ b/stackit/internal/services/redis/credential/resource.go @@ -170,6 +170,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -181,6 +184,9 @@ func (r *credentialResource) Create(ctx context.Context, req resource.CreateRequ core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if credentialsResp.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating credential", "Got empty credential id") return @@ -216,6 +222,9 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -234,6 +243,8 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, recordSetResp, &model) if err != nil { @@ -265,6 +276,8 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() credentialId := model.CredentialId.ValueString() @@ -277,6 +290,9 @@ func (r *credentialResource) Delete(ctx context.Context, req resource.DeleteRequ if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Calling API: %v", err)) } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteCredentialsWaitHandler(ctx, r.client, projectId, instanceId, credentialId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting credential", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/redis/instance/datasource.go b/stackit/internal/services/redis/instance/datasource.go index baae95a20..d9e4d4603 100644 --- a/stackit/internal/services/redis/instance/datasource.go +++ b/stackit/internal/services/redis/instance/datasource.go @@ -259,6 +259,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -281,6 +284,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + err = mapFields(instanceResp, &model) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/redis/instance/resource.go b/stackit/internal/services/redis/instance/resource.go index 589d54979..1dbb407b9 100644 --- a/stackit/internal/services/redis/instance/resource.go +++ b/stackit/internal/services/redis/instance/resource.go @@ -396,6 +396,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -427,6 +430,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.InstanceId ctx = tflog.SetField(ctx, "instance_id", instanceId) waitResp, err := wait.CreateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) @@ -459,6 +465,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -475,6 +484,8 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(instanceResp, &model) if err != nil { @@ -506,6 +517,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -539,6 +553,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.PartialUpdateInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -569,6 +586,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -580,6 +600,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, instanceId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/resourcemanager/folder/datasource.go b/stackit/internal/services/resourcemanager/folder/datasource.go index f01e6df03..702d76d3e 100644 --- a/stackit/internal/services/resourcemanager/folder/datasource.go +++ b/stackit/internal/services/resourcemanager/folder/datasource.go @@ -145,6 +145,8 @@ func (d *folderDataSource) Read(ctx context.Context, req datasource.ReadRequest, return } + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() ctx = tflog.SetField(ctx, "container_id", containerId) @@ -164,6 +166,8 @@ func (d *folderDataSource) Read(ctx context.Context, req datasource.ReadRequest, return } + ctx = core.LogResponse(ctx) + err = mapFolderFields(ctx, folderResp, &model, &resp.State) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading folder", fmt.Sprintf("Processing API response: %v", err)) diff --git a/stackit/internal/services/resourcemanager/folder/resource.go b/stackit/internal/services/resourcemanager/folder/resource.go index 8e80593af..4a6b0b9ef 100644 --- a/stackit/internal/services/resourcemanager/folder/resource.go +++ b/stackit/internal/services/resourcemanager/folder/resource.go @@ -191,6 +191,8 @@ func (r *folderResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.InitProviderContext(ctx) + containerParentId := model.ContainerParentId.ValueString() folderName := model.Name.ValueString() ctx = tflog.SetField(ctx, "container_parent_id", containerParentId) @@ -209,6 +211,8 @@ func (r *folderResource) Create(ctx context.Context, req resource.CreateRequest, return } + ctx = core.LogResponse(ctx) + if folderCreateResp.ContainerId == nil || *folderCreateResp.ContainerId == "" { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating folder", "Container ID is missing") return @@ -242,6 +246,8 @@ func (r *folderResource) Read(ctx context.Context, req resource.ReadRequest, res return } + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() folderName := model.Name.ValueString() ctx = tflog.SetField(ctx, "folder_name", folderName) @@ -258,6 +264,8 @@ func (r *folderResource) Read(ctx context.Context, req resource.ReadRequest, res return } + ctx = core.LogResponse(ctx) + err = mapFolderFields(ctx, folderResp, &model.Model, &resp.State) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading folder", fmt.Sprintf("Processing API response: %v", err)) @@ -282,6 +290,9 @@ func (r *folderResource) Update(ctx context.Context, req resource.UpdateRequest, if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() ctx = tflog.SetField(ctx, "container_id", containerId) @@ -298,6 +309,8 @@ func (r *folderResource) Update(ctx context.Context, req resource.UpdateRequest, return } + ctx = core.LogResponse(ctx) + // Fetch updated folder folderResp, err := r.client.GetFolderDetails(ctx, containerId).Execute() if err != nil { @@ -329,6 +342,8 @@ func (r *folderResource) Delete(ctx context.Context, req resource.DeleteRequest, return } + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() ctx = tflog.SetField(ctx, "container_id", containerId) @@ -344,6 +359,8 @@ func (r *folderResource) Delete(ctx context.Context, req resource.DeleteRequest, return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Resource Manager folder deleted") } diff --git a/stackit/internal/services/resourcemanager/project/datasource.go b/stackit/internal/services/resourcemanager/project/datasource.go index 0af3f8168..0f25d34be 100644 --- a/stackit/internal/services/resourcemanager/project/datasource.go +++ b/stackit/internal/services/resourcemanager/project/datasource.go @@ -146,6 +146,8 @@ func (d *projectDataSource) Read(ctx context.Context, req datasource.ReadRequest return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -181,6 +183,8 @@ func (d *projectDataSource) Read(ctx context.Context, req datasource.ReadRequest return } + ctx = core.LogResponse(ctx) + err = mapProjectFields(ctx, projectResp, &model, &resp.State) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading project", fmt.Sprintf("Processing API response: %v", err)) diff --git a/stackit/internal/services/resourcemanager/project/resource.go b/stackit/internal/services/resourcemanager/project/resource.go index 228c437d2..d0cd06c1d 100644 --- a/stackit/internal/services/resourcemanager/project/resource.go +++ b/stackit/internal/services/resourcemanager/project/resource.go @@ -196,6 +196,8 @@ func (r *projectResource) Create(ctx context.Context, req resource.CreateRequest return } + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() ctx = tflog.SetField(ctx, "project_container_id", containerId) @@ -211,6 +213,9 @@ func (r *projectResource) Create(ctx context.Context, req resource.CreateRequest core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating project", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + respContainerId := *createResp.ContainerId // If the request has not been processed yet and the containerId doesn't exist, @@ -244,6 +249,9 @@ func (r *projectResource) Read(ctx context.Context, req resource.ReadRequest, re if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() ctx = tflog.SetField(ctx, "container_id", containerId) @@ -258,6 +266,8 @@ func (r *projectResource) Read(ctx context.Context, req resource.ReadRequest, re return } + ctx = core.LogResponse(ctx) + err = mapProjectFields(ctx, projectResp, &model.Model, &resp.State) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading project", fmt.Sprintf("Processing API response: %v", err)) @@ -282,6 +292,9 @@ func (r *projectResource) Update(ctx context.Context, req resource.UpdateRequest if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() ctx = tflog.SetField(ctx, "container_id", containerId) @@ -298,6 +311,8 @@ func (r *projectResource) Update(ctx context.Context, req resource.UpdateRequest return } + ctx = core.LogResponse(ctx) + // Fetch updated project projectResp, err := r.client.GetProject(ctx, containerId).Execute() if err != nil { @@ -329,6 +344,8 @@ func (r *projectResource) Delete(ctx context.Context, req resource.DeleteRequest return } + ctx = core.InitProviderContext(ctx) + containerId := model.ContainerId.ValueString() ctx = tflog.SetField(ctx, "container_id", containerId) @@ -339,6 +356,8 @@ func (r *projectResource) Delete(ctx context.Context, req resource.DeleteRequest return } + ctx = core.LogResponse(ctx) + _, err = wait.DeleteProjectWaitHandler(ctx, r.client, containerId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting project", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/scf/organization/datasource.go b/stackit/internal/services/scf/organization/datasource.go index 528e46da9..6d8b32ade 100644 --- a/stackit/internal/services/scf/organization/datasource.go +++ b/stackit/internal/services/scf/organization/datasource.go @@ -136,6 +136,8 @@ func (s *scfOrganizationDataSource) Read(ctx context.Context, request datasource return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID and instance id of the model projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() @@ -163,6 +165,8 @@ func (s *scfOrganizationDataSource) Read(ctx context.Context, request datasource return } + ctx = core.LogResponse(ctx) + err = mapFields(scfOrgResponse, &model) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading scf organization", fmt.Sprintf("Processing API response: %v", err)) diff --git a/stackit/internal/services/scf/organization/resource.go b/stackit/internal/services/scf/organization/resource.go index bdec91405..4ae7f9b94 100644 --- a/stackit/internal/services/scf/organization/resource.go +++ b/stackit/internal/services/scf/organization/resource.go @@ -232,6 +232,8 @@ func (s *scfOrganizationResource) Create(ctx context.Context, request resource.C return } + ctx = core.InitProviderContext(ctx) + // Set logging context with the project ID and instance ID. region := model.Region.ValueString() projectId := model.ProjectId.ValueString() @@ -255,6 +257,9 @@ func (s *scfOrganizationResource) Create(ctx context.Context, request resource.C core.LogAndAddError(ctx, &response.Diagnostics, "Error creating scf organization", fmt.Sprintf("Calling API to create org: %v", err)) return } + + ctx = core.LogResponse(ctx) + orgId := *scfOrgCreateResponse.Guid // Apply the org quota if provided @@ -314,6 +319,8 @@ func (s *scfOrganizationResource) Read(ctx context.Context, request resource.Rea return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID and instance id of the model projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() @@ -335,6 +342,8 @@ func (s *scfOrganizationResource) Read(ctx context.Context, request resource.Rea return } + ctx = core.LogResponse(ctx) + err = mapFields(scfOrgResponse, &model) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading scf organization", fmt.Sprintf("Processing API response: %v", err)) @@ -356,6 +365,9 @@ func (s *scfOrganizationResource) Update(ctx context.Context, request resource.U if response.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + region := model.Region.ValueString() projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() @@ -385,6 +397,8 @@ func (s *scfOrganizationResource) Update(ctx context.Context, request resource.U return } org = updatedOrg + + ctx = core.LogResponse(ctx) } // handle a quota change of the org @@ -424,6 +438,8 @@ func (s *scfOrganizationResource) Delete(ctx context.Context, request resource.D return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() @@ -441,6 +457,8 @@ func (s *scfOrganizationResource) Delete(ctx context.Context, request resource.D return } + ctx = core.LogResponse(ctx) + _, err = wait.DeleteOrganizationWaitHandler(ctx, s.client, projectId, model.Region.ValueString(), orgId).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error waiting for scf org deletion", fmt.Sprintf("SCFOrganization deleting waiting: %v", err)) diff --git a/stackit/internal/services/scf/organizationmanager/datasource.go b/stackit/internal/services/scf/organizationmanager/datasource.go index bf64b31e7..2f0a19262 100644 --- a/stackit/internal/services/scf/organizationmanager/datasource.go +++ b/stackit/internal/services/scf/organizationmanager/datasource.go @@ -141,6 +141,8 @@ func (s *scfOrganizationManagerDataSource) Read(ctx context.Context, request dat return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID and instance id of the model projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() @@ -166,6 +168,8 @@ func (s *scfOrganizationManagerDataSource) Read(ctx context.Context, request dat return } + ctx = core.LogResponse(ctx) + err = mapFieldsDataSource(ScfOrgManager, &model) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading scf organization manager", fmt.Sprintf("Processing API response: %v", err)) diff --git a/stackit/internal/services/scf/organizationmanager/resource.go b/stackit/internal/services/scf/organizationmanager/resource.go index d57894a82..027fe6c9e 100644 --- a/stackit/internal/services/scf/organizationmanager/resource.go +++ b/stackit/internal/services/scf/organizationmanager/resource.go @@ -214,6 +214,8 @@ func (s *scfOrganizationManagerResource) Create(ctx context.Context, request res return } + ctx = core.InitProviderContext(ctx) + // Set logging context with the project ID and username. projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() @@ -235,6 +237,8 @@ func (s *scfOrganizationManagerResource) Create(ctx context.Context, request res return } + ctx = core.LogResponse(ctx) + err = mapFieldsCreate(scfOrgManagerCreateResponse, &model) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error creating scf organization manager", fmt.Sprintf("Mapping fields: %v", err)) @@ -259,6 +263,8 @@ func (s *scfOrganizationManagerResource) Read(ctx context.Context, request resou return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID, region and org id of the model projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() @@ -281,6 +287,8 @@ func (s *scfOrganizationManagerResource) Read(ctx context.Context, request resou return } + ctx = core.LogResponse(ctx) + err = mapFieldsRead(scfOrgManager, &model) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading scf organization manager", fmt.Sprintf("Processing API response: %v", err)) @@ -307,6 +315,8 @@ func (s *scfOrganizationManagerResource) Delete(ctx context.Context, request res return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() orgId := model.OrgId.ValueString() region := model.Region.ValueString() @@ -326,6 +336,9 @@ func (s *scfOrganizationManagerResource) Delete(ctx context.Context, request res core.LogAndAddError(ctx, &response.Diagnostics, "Error deleting scf organization manager", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Scf organization manager deleted") } diff --git a/stackit/internal/services/scf/platform/datasource.go b/stackit/internal/services/scf/platform/datasource.go index a4bfacc1e..5deb1b627 100644 --- a/stackit/internal/services/scf/platform/datasource.go +++ b/stackit/internal/services/scf/platform/datasource.go @@ -136,6 +136,8 @@ func (s *scfPlatformDataSource) Read(ctx context.Context, request datasource.Rea return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID region and platform id of the model projectId := model.ProjectId.ValueString() platformId := model.PlatformId.ValueString() @@ -161,6 +163,8 @@ func (s *scfPlatformDataSource) Read(ctx context.Context, request datasource.Rea return } + ctx = core.LogResponse(ctx) + err = mapFields(scfPlatformResponse, &model) if err != nil { core.LogAndAddError(ctx, &response.Diagnostics, "Error reading scf platform", fmt.Sprintf("Processing API response: %v", err)) diff --git a/stackit/internal/services/secretsmanager/instance/datasource.go b/stackit/internal/services/secretsmanager/instance/datasource.go index 6cb409aca..d17f40016 100644 --- a/stackit/internal/services/secretsmanager/instance/datasource.go +++ b/stackit/internal/services/secretsmanager/instance/datasource.go @@ -110,6 +110,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -130,6 +133,9 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques resp.State.RemoveResource(ctx) return } + + ctx = core.LogResponse(ctx) + aclList, err := r.client.ListACLs(ctx, projectId, instanceId).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Calling API for ACLs data: %v", err)) diff --git a/stackit/internal/services/secretsmanager/instance/resource.go b/stackit/internal/services/secretsmanager/instance/resource.go index 5f7bbc2f9..576da2f3f 100644 --- a/stackit/internal/services/secretsmanager/instance/resource.go +++ b/stackit/internal/services/secretsmanager/instance/resource.go @@ -150,6 +150,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -174,6 +177,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.Id ctx = tflog.SetField(ctx, "instance_id", instanceId) @@ -213,6 +219,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -228,6 +237,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + aclList, err := r.client.ListACLs(ctx, projectId, instanceId).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading instance", fmt.Sprintf("Calling API for ACLs data: %v", err)) @@ -258,6 +270,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -284,6 +299,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + aclList, err := r.client.ListACLs(ctx, projectId, instanceId).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Calling API for ACLs data: %v", err)) @@ -314,6 +332,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -325,6 +346,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Secrets Manager instance deleted") } diff --git a/stackit/internal/services/secretsmanager/user/datasource.go b/stackit/internal/services/secretsmanager/user/datasource.go index 9fa1e5000..e3b40f591 100644 --- a/stackit/internal/services/secretsmanager/user/datasource.go +++ b/stackit/internal/services/secretsmanager/user/datasource.go @@ -133,6 +133,9 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -156,6 +159,8 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema and populate Computed attribute values err = mapDataSourceFields(userResp, &model) if err != nil { diff --git a/stackit/internal/services/secretsmanager/user/resource.go b/stackit/internal/services/secretsmanager/user/resource.go index 12c4a6add..b76fce38b 100644 --- a/stackit/internal/services/secretsmanager/user/resource.go +++ b/stackit/internal/services/secretsmanager/user/resource.go @@ -163,6 +163,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -180,6 +183,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if userResp.Id == nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", "Got empty user id") return @@ -209,6 +215,9 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -227,6 +236,8 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(userResp, &model) if err != nil { @@ -252,6 +263,9 @@ func (r *userResource) Update(ctx context.Context, req resource.UpdateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -271,6 +285,9 @@ func (r *userResource) Update(ctx context.Context, req resource.UpdateRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating user", err.Error()) return } + + ctx = core.LogResponse(ctx) + user, err := r.client.GetUser(ctx, projectId, instanceId, userId).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating user", fmt.Sprintf("Calling API to get user's current state: %v", err)) @@ -306,6 +323,8 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -319,6 +338,8 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting user", fmt.Sprintf("Calling API: %v", err)) } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Secrets Manager user deleted") } diff --git a/stackit/internal/services/serverbackup/schedule/resource.go b/stackit/internal/services/serverbackup/schedule/resource.go index 5ba73f481..ac69087e2 100644 --- a/stackit/internal/services/serverbackup/schedule/resource.go +++ b/stackit/internal/services/serverbackup/schedule/resource.go @@ -244,6 +244,9 @@ func (r *scheduleResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -270,6 +273,9 @@ func (r *scheduleResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating server backup schedule", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + ctx = tflog.SetField(ctx, "backup_schedule_id", *scheduleResp.Id) // Map response body to schema @@ -294,6 +300,9 @@ func (r *scheduleResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() @@ -315,6 +324,8 @@ func (r *scheduleResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, scheduleResp, &model, region) if err != nil { @@ -339,6 +350,9 @@ func (r *scheduleResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() @@ -362,6 +376,8 @@ func (r *scheduleResource) Update(ctx context.Context, req resource.UpdateReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, scheduleResp, &model, region) if err != nil { @@ -384,6 +400,9 @@ func (r *scheduleResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() @@ -399,6 +418,9 @@ func (r *scheduleResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting server backup schedule", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Server backup schedule deleted.") // Disable backups service in case there are no backups and no backup schedules. diff --git a/stackit/internal/services/serverbackup/schedule/schedule_datasource.go b/stackit/internal/services/serverbackup/schedule/schedule_datasource.go index 2d3f82cf8..89691fafd 100644 --- a/stackit/internal/services/serverbackup/schedule/schedule_datasource.go +++ b/stackit/internal/services/serverbackup/schedule/schedule_datasource.go @@ -148,6 +148,9 @@ func (r *scheduleDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() @@ -174,6 +177,8 @@ func (r *scheduleDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, scheduleResp, &model, region) if err != nil { diff --git a/stackit/internal/services/serverbackup/schedule/schedules_datasource.go b/stackit/internal/services/serverbackup/schedule/schedules_datasource.go index 81cd5ade3..23f0a2e8e 100644 --- a/stackit/internal/services/serverbackup/schedule/schedules_datasource.go +++ b/stackit/internal/services/serverbackup/schedule/schedules_datasource.go @@ -171,6 +171,9 @@ func (r *schedulesDataSource) Read(ctx context.Context, req datasource.ReadReque if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -194,6 +197,8 @@ func (r *schedulesDataSource) Read(ctx context.Context, req datasource.ReadReque return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapSchedulesDatasourceFields(ctx, schedules, &model, region) if err != nil { diff --git a/stackit/internal/services/serverupdate/schedule/resource.go b/stackit/internal/services/serverupdate/schedule/resource.go index 2ef4e705b..c6a20d36d 100644 --- a/stackit/internal/services/serverupdate/schedule/resource.go +++ b/stackit/internal/services/serverupdate/schedule/resource.go @@ -221,6 +221,9 @@ func (r *scheduleResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() region := model.Region.ValueString() @@ -246,6 +249,9 @@ func (r *scheduleResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating server update schedule", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + ctx = tflog.SetField(ctx, "update_schedule_id", *scheduleResp.Id) // Map response body to schema @@ -270,6 +276,9 @@ func (r *scheduleResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() updateScheduleId := model.UpdateScheduleId.ValueInt64() @@ -290,6 +299,8 @@ func (r *scheduleResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(scheduleResp, &model, region) if err != nil { @@ -314,6 +325,9 @@ func (r *scheduleResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() updateScheduleId := model.UpdateScheduleId.ValueInt64() @@ -336,6 +350,8 @@ func (r *scheduleResource) Update(ctx context.Context, req resource.UpdateReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(scheduleResp, &model, region) if err != nil { @@ -358,6 +374,9 @@ func (r *scheduleResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() updateScheduleId := model.UpdateScheduleId.ValueInt64() @@ -372,6 +391,9 @@ func (r *scheduleResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting server update schedule", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Server update schedule deleted.") } diff --git a/stackit/internal/services/serverupdate/schedule/schedule_datasource.go b/stackit/internal/services/serverupdate/schedule/schedule_datasource.go index b0b17e65b..837681644 100644 --- a/stackit/internal/services/serverupdate/schedule/schedule_datasource.go +++ b/stackit/internal/services/serverupdate/schedule/schedule_datasource.go @@ -135,6 +135,9 @@ func (r *scheduleDataSource) Read(ctx context.Context, req datasource.ReadReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() updateScheduleId := model.UpdateScheduleId.ValueInt64() @@ -160,6 +163,8 @@ func (r *scheduleDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(scheduleResp, &model, region) if err != nil { diff --git a/stackit/internal/services/serverupdate/schedule/schedules_datasource.go b/stackit/internal/services/serverupdate/schedule/schedules_datasource.go index 4ea9a469e..117f20590 100644 --- a/stackit/internal/services/serverupdate/schedule/schedules_datasource.go +++ b/stackit/internal/services/serverupdate/schedule/schedules_datasource.go @@ -158,6 +158,9 @@ func (r *schedulesDataSource) Read(ctx context.Context, req datasource.ReadReque if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -180,6 +183,8 @@ func (r *schedulesDataSource) Read(ctx context.Context, req datasource.ReadReque return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapSchedulesDatasourceFields(ctx, schedules, &model, region) if err != nil { diff --git a/stackit/internal/services/serviceaccount/account/datasource.go b/stackit/internal/services/serviceaccount/account/datasource.go index 9f3430110..be6e0cca5 100644 --- a/stackit/internal/services/serviceaccount/account/datasource.go +++ b/stackit/internal/services/serviceaccount/account/datasource.go @@ -102,6 +102,8 @@ func (r *serviceAccountDataSource) Read(ctx context.Context, req datasource.Read return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID from the model configuration projectId := model.ProjectId.ValueString() @@ -120,6 +122,8 @@ func (r *serviceAccountDataSource) Read(ctx context.Context, req datasource.Read return } + ctx = core.LogResponse(ctx) + // Iterate over the service accounts returned by the API to find the one matching the email serviceAccounts := *listSaResp.Items for i := range serviceAccounts { diff --git a/stackit/internal/services/serviceaccount/account/resource.go b/stackit/internal/services/serviceaccount/account/resource.go index 1a779a816..1be909e01 100644 --- a/stackit/internal/services/serviceaccount/account/resource.go +++ b/stackit/internal/services/serviceaccount/account/resource.go @@ -128,6 +128,8 @@ func (r *serviceAccountResource) Create(ctx context.Context, req resource.Create return } + ctx = core.InitProviderContext(ctx) + // Set logging context with the project ID and service account name. projectId := model.ProjectId.ValueString() serviceAccountName := model.Name.ValueString() @@ -148,6 +150,8 @@ func (r *serviceAccountResource) Create(ctx context.Context, req resource.Create return } + ctx = core.LogResponse(ctx) + // Set the service account name and map the response to the resource schema. model.Name = types.StringValue(serviceAccountName) err = mapFields(serviceAccountResp, &model) @@ -178,6 +182,8 @@ func (r *serviceAccountResource) Read(ctx context.Context, req resource.ReadRequ return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID for the service account. projectId := model.ProjectId.ValueString() @@ -188,6 +194,8 @@ func (r *serviceAccountResource) Read(ctx context.Context, req resource.ReadRequ return } + ctx = core.LogResponse(ctx) + // Iterate over the list of service accounts to find the one that matches the email from the state. serviceAccounts := *listSaResp.Items for i := range serviceAccounts { @@ -233,6 +241,8 @@ func (r *serviceAccountResource) Delete(ctx context.Context, req resource.Delete return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serviceAccountName := model.Name.ValueString() serviceAccountEmail := model.Email.ValueString() @@ -245,6 +255,9 @@ func (r *serviceAccountResource) Delete(ctx context.Context, req resource.Delete core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting service account", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Service account deleted") } diff --git a/stackit/internal/services/serviceaccount/key/resource.go b/stackit/internal/services/serviceaccount/key/resource.go index 4e8565335..ea254c94c 100644 --- a/stackit/internal/services/serviceaccount/key/resource.go +++ b/stackit/internal/services/serviceaccount/key/resource.go @@ -162,6 +162,8 @@ func (r *serviceAccountKeyResource) Create(ctx context.Context, req resource.Cre return } + ctx = core.InitProviderContext(ctx) + // Set logging context with the project ID and service account email. projectId := model.ProjectId.ValueString() serviceAccountEmail := model.ServiceAccountEmail.ValueString() @@ -182,6 +184,8 @@ func (r *serviceAccountKeyResource) Create(ctx context.Context, req resource.Cre // Initialize the API request with the required parameters. saAccountKeyResp, err := r.client.CreateServiceAccountKey(ctx, projectId, serviceAccountEmail).CreateServiceAccountKeyPayload(*payload).Execute() + ctx = core.LogResponse(ctx) + if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Failed to create service account key", fmt.Sprintf("API call error: %v", err)) return @@ -213,6 +217,8 @@ func (r *serviceAccountKeyResource) Read(ctx context.Context, req resource.ReadR return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serviceAccountEmail := model.ServiceAccountEmail.ValueString() keyId := model.KeyId.ValueString() @@ -230,6 +236,8 @@ func (r *serviceAccountKeyResource) Read(ctx context.Context, req resource.ReadR return } + ctx = core.LogResponse(ctx) + // No mapping needed for read response, as private_key is excluded and ID remains unchanged. diags = resp.State.Set(ctx, &model) resp.Diagnostics.Append(diags...) @@ -260,6 +268,8 @@ func (r *serviceAccountKeyResource) Delete(ctx context.Context, req resource.Del return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serviceAccountEmail := model.ServiceAccountEmail.ValueString() keyId := model.KeyId.ValueString() @@ -274,6 +284,8 @@ func (r *serviceAccountKeyResource) Delete(ctx context.Context, req resource.Del return } + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Service account key deleted") } diff --git a/stackit/internal/services/serviceaccount/token/resource.go b/stackit/internal/services/serviceaccount/token/resource.go index 86a7135cb..6e1f99fd2 100644 --- a/stackit/internal/services/serviceaccount/token/resource.go +++ b/stackit/internal/services/serviceaccount/token/resource.go @@ -179,6 +179,8 @@ func (r *serviceAccountTokenResource) Create(ctx context.Context, req resource.C return } + ctx = core.InitProviderContext(ctx) + // Set logging context with the project ID and service account email. projectId := model.ProjectId.ValueString() serviceAccountEmail := model.ServiceAccountEmail.ValueString() @@ -194,12 +196,13 @@ func (r *serviceAccountTokenResource) Create(ctx context.Context, req resource.C // Initialize the API request with the required parameters. serviceAccountAccessTokenResp, err := r.client.CreateAccessToken(ctx, projectId, serviceAccountEmail).CreateAccessTokenPayload(*payload).Execute() - if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Failed to create service account access token", fmt.Sprintf("API call error: %v", err)) return } + ctx = core.LogResponse(ctx) + // Map the response to the resource schema. err = mapCreateResponse(serviceAccountAccessTokenResp, &model) if err != nil { @@ -227,6 +230,8 @@ func (r *serviceAccountTokenResource) Read(ctx context.Context, req resource.Rea return } + ctx = core.InitProviderContext(ctx) + // Extract the project ID and serviceAccountEmail for the service account. projectId := model.ProjectId.ValueString() serviceAccountEmail := model.ServiceAccountEmail.ValueString() @@ -245,6 +250,8 @@ func (r *serviceAccountTokenResource) Read(ctx context.Context, req resource.Rea return } + ctx = core.LogResponse(ctx) + // Iterate over the list of service account tokens to find the one that matches the ID from the state. saTokens := *listSaTokensResp.Items for i := range saTokens { @@ -296,6 +303,8 @@ func (r *serviceAccountTokenResource) Delete(ctx context.Context, req resource.D return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() serviceAccountEmail := model.ServiceAccountEmail.ValueString() accessTokenId := model.AccessTokenId.ValueString() @@ -309,6 +318,9 @@ func (r *serviceAccountTokenResource) Delete(ctx context.Context, req resource.D core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting service account token", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "Service account token deleted") } diff --git a/stackit/internal/services/ske/cluster/datasource.go b/stackit/internal/services/ske/cluster/datasource.go index 655011613..2a7feca9c 100644 --- a/stackit/internal/services/ske/cluster/datasource.go +++ b/stackit/internal/services/ske/cluster/datasource.go @@ -330,6 +330,8 @@ func (r *clusterDataSource) Read(ctx context.Context, req datasource.ReadRequest return } + ctx = core.InitProviderContext(ctx) + projectId := state.ProjectId.ValueString() name := state.Name.ValueString() region := r.providerData.GetRegionWithOverride(state.Region) @@ -352,6 +354,8 @@ func (r *clusterDataSource) Read(ctx context.Context, req datasource.ReadRequest return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, clusterResp, &state, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading cluster", fmt.Sprintf("Processing API payload: %v", err)) diff --git a/stackit/internal/services/ske/cluster/resource.go b/stackit/internal/services/ske/cluster/resource.go index a944161c0..e722ebfb4 100644 --- a/stackit/internal/services/ske/cluster/resource.go +++ b/stackit/internal/services/ske/cluster/resource.go @@ -721,6 +721,8 @@ func (r *clusterResource) Create(ctx context.Context, req resource.CreateRequest return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() clusterName := model.Name.ValueString() @@ -890,6 +892,12 @@ func (r *clusterResource) createOrUpdateCluster(ctx context.Context, diags *diag return } + ctx = core.LogResponse(ctx) + + // The passed context to createOrUpdateCluster will not be updated outside of this function. + // Call tflog.Info here, to log the information of the updated context + tflog.Info(ctx, "Triggered create/update cluster") + waitResp, err := skeWait.CreateOrUpdateClusterWaitHandler(ctx, r.skeClient, projectId, region, name).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, diags, "Error creating/updating cluster", fmt.Sprintf("Cluster creation waiting: %v", err)) @@ -2104,6 +2112,9 @@ func (r *clusterResource) Read(ctx context.Context, req resource.ReadRequest, re if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := state.ProjectId.ValueString() name := state.Name.ValueString() region := r.providerData.GetRegionWithOverride(state.Region) @@ -2122,6 +2133,8 @@ func (r *clusterResource) Read(ctx context.Context, req resource.ReadRequest, re return } + ctx = core.LogResponse(ctx) + err = mapFields(ctx, clResp, &state, region) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error reading cluster", fmt.Sprintf("Processing API payload: %v", err)) @@ -2144,6 +2157,8 @@ func (r *clusterResource) Update(ctx context.Context, req resource.UpdateRequest return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() clName := model.Name.ValueString() region := model.Region.ValueString() @@ -2178,6 +2193,9 @@ func (r *clusterResource) Delete(ctx context.Context, req resource.DeleteRequest if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() name := model.Name.ValueString() region := model.Region.ValueString() @@ -2191,6 +2209,9 @@ func (r *clusterResource) Delete(ctx context.Context, req resource.DeleteRequest core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting cluster", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = skeWait.DeleteClusterWaitHandler(ctx, r.skeClient, projectId, region, name).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting cluster", fmt.Sprintf("Cluster deletion waiting: %v", err)) diff --git a/stackit/internal/services/ske/kubeconfig/resource.go b/stackit/internal/services/ske/kubeconfig/resource.go index c4637b76d..dc87d995a 100644 --- a/stackit/internal/services/ske/kubeconfig/resource.go +++ b/stackit/internal/services/ske/kubeconfig/resource.go @@ -245,6 +245,9 @@ func (r *kubeconfigResource) Create(ctx context.Context, req resource.CreateRequ if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() clusterName := model.ClusterName.ValueString() kubeconfigUUID := uuid.New().String() @@ -258,6 +261,9 @@ func (r *kubeconfigResource) Create(ctx context.Context, req resource.CreateRequ ctx = tflog.SetField(ctx, "region", region) err := r.createKubeconfig(ctx, &model) + + ctx = core.LogResponse(ctx) + if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating kubeconfig", fmt.Sprintf("Creating kubeconfig: %v", err)) return @@ -285,6 +291,8 @@ func (r *kubeconfigResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() clusterName := model.ClusterName.ValueString() kubeconfigUUID := model.KubeconfigId.ValueString() @@ -318,6 +326,8 @@ func (r *kubeconfigResource) Read(ctx context.Context, req resource.ReadRequest, return } + ctx = core.LogResponse(ctx) + // check if kubeconfig has expired hasExpired, err := checkHasExpired(&model, time.Now()) if err != nil { diff --git a/stackit/internal/services/sqlserverflex/instance/datasource.go b/stackit/internal/services/sqlserverflex/instance/datasource.go index f88c0800d..8ad7afc93 100644 --- a/stackit/internal/services/sqlserverflex/instance/datasource.go +++ b/stackit/internal/services/sqlserverflex/instance/datasource.go @@ -172,6 +172,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -194,6 +196,8 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques return } + ctx = core.LogResponse(ctx) + var flavor = &flavorModel{} if !(model.Flavor.IsNull() || model.Flavor.IsUnknown()) { diags = model.Flavor.As(ctx, flavor, basetypes.ObjectAsOptions{}) diff --git a/stackit/internal/services/sqlserverflex/instance/resource.go b/stackit/internal/services/sqlserverflex/instance/resource.go index 9bc2069c0..72a0de305 100644 --- a/stackit/internal/services/sqlserverflex/instance/resource.go +++ b/stackit/internal/services/sqlserverflex/instance/resource.go @@ -345,6 +345,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() region := model.Region.ValueString() ctx = tflog.SetField(ctx, "project_id", projectId) @@ -401,6 +404,9 @@ func (r *instanceResource) Create(ctx context.Context, req resource.CreateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + instanceId := *createResp.Id ctx = tflog.SetField(ctx, "instance_id", instanceId) // The creation waiter sometimes returns an error from the API: "instance with id xxx has unexpected status Failure" @@ -439,6 +445,9 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := r.providerData.GetRegionWithOverride(model.Region) @@ -484,6 +493,8 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(ctx, instanceResp, &model, flavor, storage, options, region) if err != nil { @@ -508,6 +519,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := model.Region.ValueString() @@ -567,6 +581,9 @@ func (r *instanceResource) Update(ctx context.Context, req resource.UpdateReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", err.Error()) return } + + ctx = core.LogResponse(ctx) + waitResp, err := wait.UpdateInstanceWaitHandler(ctx, r.client, projectId, instanceId, region).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating instance", fmt.Sprintf("Instance update waiting: %v", err)) @@ -596,6 +613,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := model.Region.ValueString() @@ -609,6 +629,9 @@ func (r *instanceResource) Delete(ctx context.Context, req resource.DeleteReques core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + _, err = wait.DeleteInstanceWaitHandler(ctx, r.client, projectId, instanceId, region).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting instance", fmt.Sprintf("Instance deletion waiting: %v", err)) diff --git a/stackit/internal/services/sqlserverflex/user/datasource.go b/stackit/internal/services/sqlserverflex/user/datasource.go index ffb94c4b0..cb0980f84 100644 --- a/stackit/internal/services/sqlserverflex/user/datasource.go +++ b/stackit/internal/services/sqlserverflex/user/datasource.go @@ -146,6 +146,9 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -171,6 +174,8 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r return } + ctx = core.LogResponse(ctx) + // Map response body to schema and populate Computed attribute values err = mapDataSourceFields(recordSetResp, &model, region) if err != nil { diff --git a/stackit/internal/services/sqlserverflex/user/resource.go b/stackit/internal/services/sqlserverflex/user/resource.go index 153750c78..e73fb9b06 100644 --- a/stackit/internal/services/sqlserverflex/user/resource.go +++ b/stackit/internal/services/sqlserverflex/user/resource.go @@ -215,6 +215,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() region := model.Region.ValueString() @@ -244,6 +247,9 @@ func (r *userResource) Create(ctx context.Context, req resource.CreateRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + if userResp == nil || userResp.Item == nil || userResp.Item.Id == nil || *userResp.Item.Id == "" { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating user", "API didn't return user Id. A user might have been created") return @@ -274,6 +280,9 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp if resp.Diagnostics.HasError() { return } + + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -294,6 +303,8 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp return } + ctx = core.LogResponse(ctx) + // Map response body to schema err = mapFields(recordSetResp, &model, region) if err != nil { @@ -326,6 +337,8 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r return } + ctx = core.InitProviderContext(ctx) + projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() @@ -341,6 +354,9 @@ func (r *userResource) Delete(ctx context.Context, req resource.DeleteRequest, r core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting user", fmt.Sprintf("Calling API: %v", err)) return } + + ctx = core.LogResponse(ctx) + tflog.Info(ctx, "SQLServer Flex user deleted") }