From a8aa15592572efbbe587509de42d4476fbde39d0 Mon Sep 17 00:00:00 2001 From: Ruben Hoenle Date: Wed, 4 Mar 2026 16:37:07 +0100 Subject: [PATCH 1/3] chore(logs): switch to multi API version support SDK structure relates to STACKITSDK-341 --- go.mod | 2 +- stackit/internal/conversion/conversion.go | 10 ++++ .../services/logs/accesstoken/datasource.go | 18 +++--- .../logs/accesstoken/datasource_test.go | 24 +++++--- .../services/logs/accesstoken/resource.go | 52 +++++++--------- .../logs/accesstoken/resource_test.go | 36 ++++++----- .../services/logs/instance/datasource.go | 6 +- .../services/logs/instance/resource.go | 51 +++++++--------- .../services/logs/instance/resource_test.go | 60 ++++++++----------- .../internal/services/logs/logs_acc_test.go | 14 ++--- stackit/internal/services/logs/utils/utils.go | 2 +- .../services/logs/utils/utils_test.go | 2 +- 12 files changed, 138 insertions(+), 139 deletions(-) diff --git a/go.mod b/go.mod index 02cf1d08b..401a37188 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/stackitcloud/stackit-sdk-go/services/kms v1.3.2 github.com/stackitcloud/stackit-sdk-go/services/loadbalancer v1.8.0 github.com/stackitcloud/stackit-sdk-go/services/logme v0.25.6 - github.com/stackitcloud/stackit-sdk-go/services/logs v0.5.2 + github.com/stackitcloud/stackit-sdk-go/services/logs v0.6.0 github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.25.6 github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.6.5 github.com/stackitcloud/stackit-sdk-go/services/mongodbflex v1.5.8 diff --git a/stackit/internal/conversion/conversion.go b/stackit/internal/conversion/conversion.go index 619e82bff..e6721ac17 100644 --- a/stackit/internal/conversion/conversion.go +++ b/stackit/internal/conversion/conversion.go @@ -88,6 +88,16 @@ func StringValueToPointer(s basetypes.StringValue) *string { return &value } +// Int32ValueToPointer converts basetypes.Int32Value to a pointer to int32. +// It returns nil if the value is null or unknown. +func Int32ValueToPointer(s basetypes.Int32Value) *int32 { + if s.IsNull() || s.IsUnknown() { + return nil + } + value := s.ValueInt32() + return &value +} + // Int64ValueToPointer converts basetypes.Int64Value to a pointer to int64. // It returns nil if the value is null or unknown. func Int64ValueToPointer(s basetypes.Int64Value) *int64 { diff --git a/stackit/internal/services/logs/accesstoken/datasource.go b/stackit/internal/services/logs/accesstoken/datasource.go index fab7ca75a..fd04e4ced 100644 --- a/stackit/internal/services/logs/accesstoken/datasource.go +++ b/stackit/internal/services/logs/accesstoken/datasource.go @@ -13,7 +13,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/schema/validator" "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-log/tflog" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/logs/utils" @@ -160,7 +160,7 @@ func (d *logsAccessTokenDataSource) Read(ctx context.Context, req datasource.Rea ctx = tflog.SetField(ctx, "instance_id", instanceID) ctx = tflog.SetField(ctx, "access_token_id", accessTokenID) - accessTokenResponse, err := d.client.GetAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() + accessTokenResponse, err := d.client.DefaultAPI.GetAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() if err != nil { tfutils.LogError( ctx, @@ -203,8 +203,8 @@ func mapDataSourceFields(ctx context.Context, accessToken *logs.AccessToken, mod var accessTokenID string if model.AccessTokenID.ValueString() != "" { accessTokenID = model.AccessTokenID.ValueString() - } else if accessToken.Id != nil { - accessTokenID = *accessToken.Id + } else if accessToken.Id != "" { + accessTokenID = accessToken.Id } else { return fmt.Errorf("access token id not present") } @@ -212,11 +212,11 @@ func mapDataSourceFields(ctx context.Context, accessToken *logs.AccessToken, mod model.ID = tfutils.BuildInternalTerraformId(model.ProjectID.ValueString(), model.Region.ValueString(), model.InstanceID.ValueString(), accessTokenID) model.AccessTokenID = types.StringValue(accessTokenID) model.Region = types.StringValue(model.Region.ValueString()) - model.Creator = types.StringPointerValue(accessToken.Creator) + model.Creator = types.StringValue(accessToken.Creator) model.Description = types.StringPointerValue(accessToken.Description) - model.DisplayName = types.StringPointerValue(accessToken.DisplayName) - model.Expires = types.BoolPointerValue(accessToken.Expires) - model.Status = types.StringValue(string(*accessToken.Status)) + model.DisplayName = types.StringValue(accessToken.DisplayName) + model.Expires = types.BoolValue(accessToken.Expires) + model.Status = types.StringValue(accessToken.Status) model.ValidUntil = types.StringNull() if accessToken.ValidUntil != nil { @@ -225,7 +225,7 @@ func mapDataSourceFields(ctx context.Context, accessToken *logs.AccessToken, mod permissionList := types.ListNull(types.StringType) var diags diag.Diagnostics - if accessToken.Permissions != nil && len(*accessToken.Permissions) > 0 { + if accessToken.Permissions != nil && len(accessToken.Permissions) > 0 { permissionList, diags = types.ListValueFrom(ctx, types.StringType, accessToken.Permissions) if diags.HasError() { return fmt.Errorf("mapping permissions: %w", core.DiagsToError(diags)) diff --git a/stackit/internal/services/logs/accesstoken/datasource_test.go b/stackit/internal/services/logs/accesstoken/datasource_test.go index 92de252da..a32d70c84 100644 --- a/stackit/internal/services/logs/accesstoken/datasource_test.go +++ b/stackit/internal/services/logs/accesstoken/datasource_test.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/attr" "github.com/hashicorp/terraform-plugin-framework/types" "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) func fixtureDataSourceModel(mods ...func(model *DataSourceModel)) *DataSourceModel { @@ -25,7 +25,7 @@ func fixtureDataSourceModel(mods ...func(model *DataSourceModel)) *DataSourceMod Expires: types.Bool{}, ValidUntil: types.String{}, Permissions: types.ListNull(types.StringType), - Status: types.StringValue(string(logs.ACCESSTOKENSTATUS_ACTIVE)), + Status: types.StringValue("active"), } for _, mod := range mods { mod(model) @@ -42,18 +42,24 @@ func TestMapDataSourceFields(t *testing.T) { }{ { description: "min values", - input: fixtureAccessToken(), - expected: fixtureDataSourceModel(), + input: fixtureAccessToken(func(accessToken *logs.AccessToken) { + accessToken.DisplayName = "display-name" + }), + expected: fixtureDataSourceModel(func(model *DataSourceModel) { + model.Creator = types.StringValue("") + model.DisplayName = types.StringValue("display-name") + model.Expires = types.BoolValue(false) + }), }, { description: "max values", input: fixtureAccessToken(func(accessToken *logs.AccessToken) { - accessToken.Permissions = &[]string{"write"} + accessToken.Permissions = []string{"write"} accessToken.AccessToken = utils.Ptr("") accessToken.Description = utils.Ptr("description") - accessToken.DisplayName = utils.Ptr("display-name") - accessToken.Creator = utils.Ptr("testUser") - accessToken.Expires = utils.Ptr(false) + accessToken.DisplayName = "display-name" + accessToken.Creator = "testUser" + accessToken.Expires = false accessToken.ValidUntil = utils.Ptr(testTime) }), expected: fixtureDataSourceModel(func(model *DataSourceModel) { @@ -94,7 +100,7 @@ func TestMapDataSourceFields(t *testing.T) { t.Fatalf("Should not have failed: %v", err) } if !tt.wantErr { - diff := cmp.Diff(state, tt.expected) + diff := cmp.Diff(tt.expected, state) if diff != "" { t.Fatalf("Data does not match: %s", diff) } diff --git a/stackit/internal/services/logs/accesstoken/resource.go b/stackit/internal/services/logs/accesstoken/resource.go index 326823774..9844c4e3c 100644 --- a/stackit/internal/services/logs/accesstoken/resource.go +++ b/stackit/internal/services/logs/accesstoken/resource.go @@ -13,7 +13,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/path" "github.com/hashicorp/terraform-plugin-framework/resource" "github.com/hashicorp/terraform-plugin-framework/resource/schema" - "github.com/hashicorp/terraform-plugin-framework/resource/schema/int64planmodifier" + "github.com/hashicorp/terraform-plugin-framework/resource/schema/int32planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/listplanmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/planmodifier" "github.com/hashicorp/terraform-plugin-framework/resource/schema/stringplanmodifier" @@ -21,8 +21,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - sdkUtils "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/logs/utils" @@ -53,7 +52,7 @@ var schemaDescriptions = map[string]string{ "permissions": "The access permissions granted to the access token. Possible values: `read`, `write`.", "status": fmt.Sprintf( "The status of the access token. %s", - tfutils.FormatPossibleValues(sdkUtils.EnumSliceToStringSlice(logs.AllowedAccessTokenStatusEnumValues)...), + tfutils.FormatPossibleValues("active", "expired"), ), } @@ -69,7 +68,7 @@ type Model struct { AccessToken types.String `tfsdk:"access_token"` Expires types.Bool `tfsdk:"expires"` ValidUntil types.String `tfsdk:"valid_until"` - Lifetime types.Int64 `tfsdk:"lifetime"` + Lifetime types.Int32 `tfsdk:"lifetime"` Permissions types.List `tfsdk:"permissions"` Status types.String `tfsdk:"status"` } @@ -211,11 +210,11 @@ func (r *logsAccessTokenResource) Schema(_ context.Context, _ resource.SchemaReq Description: schemaDescriptions["valid_until"], Computed: true, }, - "lifetime": schema.Int64Attribute{ + "lifetime": schema.Int32Attribute{ Description: schemaDescriptions["lifetime"], Optional: true, - PlanModifiers: []planmodifier.Int64{ - int64planmodifier.RequiresReplace(), + PlanModifiers: []planmodifier.Int32{ + int32planmodifier.RequiresReplace(), }, }, "permissions": schema.ListAttribute{ @@ -260,7 +259,7 @@ func (r *logsAccessTokenResource) Create(ctx context.Context, req resource.Creat return } - createResp, err := r.client.CreateAccessToken(ctx, projectId, region, instanceId).CreateAccessTokenPayload(*payload).Execute() + createResp, err := r.client.DefaultAPI.CreateAccessToken(ctx, projectId, region, instanceId).CreateAccessTokenPayload(*payload).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating Logs access token", fmt.Sprintf("Calling API: %v", err)) return @@ -268,12 +267,7 @@ func (r *logsAccessTokenResource) Create(ctx context.Context, req resource.Creat ctx = core.LogResponse(ctx) - if createResp.Id == nil { - core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating Logs access token", "Got empty credential id") - return - } - accessTokenId := *createResp.Id - ctx = tflog.SetField(ctx, "access_token_id", accessTokenId) + ctx = tflog.SetField(ctx, "access_token_id", createResp.Id) err = mapFields(ctx, createResp, &model) if err != nil { @@ -308,7 +302,7 @@ func (r *logsAccessTokenResource) Read(ctx context.Context, req resource.ReadReq ctx = tflog.SetField(ctx, "instance_id", instanceID) ctx = tflog.SetField(ctx, "access_token_id", accessTokenID) - accessTokenResponse, err := r.client.GetAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() + accessTokenResponse, err := r.client.DefaultAPI.GetAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() if err != nil { var oapiErr *oapierror.GenericOpenAPIError ok := errors.As(err, &oapiErr) @@ -362,7 +356,7 @@ func (r *logsAccessTokenResource) Update(ctx context.Context, req resource.Updat return } - err = r.client.UpdateAccessToken(ctx, projectID, region, instanceID, accessTokenID).UpdateAccessTokenPayload(*payload).Execute() + err = r.client.DefaultAPI.UpdateAccessToken(ctx, projectID, region, instanceID, accessTokenID).UpdateAccessTokenPayload(*payload).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating Logs access token", fmt.Sprintf("Calling API: %v", err)) return @@ -370,7 +364,7 @@ func (r *logsAccessTokenResource) Update(ctx context.Context, req resource.Updat ctx = core.LogResponse(ctx) - accessTokenResponse, err := r.client.GetAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() + accessTokenResponse, err := r.client.DefaultAPI.GetAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating Logs access token", fmt.Sprintf("Calling API: %v", err)) return @@ -412,7 +406,7 @@ func (r *logsAccessTokenResource) Delete(ctx context.Context, req resource.Delet ctx = tflog.SetField(ctx, "instance_id", instanceID) ctx = tflog.SetField(ctx, "access_token_id", accessTokenID) - err := r.client.DeleteAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() + err := r.client.DefaultAPI.DeleteAccessToken(ctx, projectID, region, instanceID, accessTokenID).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting Logs access token", fmt.Sprintf("Calling API: %v", err)) return @@ -449,8 +443,8 @@ func toCreatePayload(ctx context.Context, diagnostics diag.Diagnostics, model *M payload := &logs.CreateAccessTokenPayload{ Description: conversion.StringValueToPointer(model.Description), - DisplayName: conversion.StringValueToPointer(model.DisplayName), - Lifetime: conversion.Int64ValueToPointer(model.Lifetime), + DisplayName: model.DisplayName.ValueString(), + Lifetime: conversion.Int32ValueToPointer(model.Lifetime), } if !(tfutils.IsUndefined(model.Permissions)) { @@ -458,7 +452,7 @@ func toCreatePayload(ctx context.Context, diagnostics diag.Diagnostics, model *M permissionDiags := model.Permissions.ElementsAs(ctx, &permissions, false) diagnostics.Append(permissionDiags...) if !permissionDiags.HasError() { - payload.Permissions = &permissions + payload.Permissions = permissions } } @@ -476,8 +470,8 @@ func mapFields(ctx context.Context, accessToken *logs.AccessToken, model *Model) var accessTokenID string if model.AccessTokenID.ValueString() != "" { accessTokenID = model.AccessTokenID.ValueString() - } else if accessToken.Id != nil { - accessTokenID = *accessToken.Id + } else if accessToken.Id != "" { + accessTokenID = accessToken.Id } else { return fmt.Errorf("access token id not present") } @@ -485,11 +479,11 @@ func mapFields(ctx context.Context, accessToken *logs.AccessToken, model *Model) model.ID = tfutils.BuildInternalTerraformId(model.ProjectID.ValueString(), model.Region.ValueString(), model.InstanceID.ValueString(), accessTokenID) model.AccessTokenID = types.StringValue(accessTokenID) model.Region = types.StringValue(model.Region.ValueString()) - model.Creator = types.StringPointerValue(accessToken.Creator) + model.Creator = types.StringValue(accessToken.Creator) model.Description = types.StringPointerValue(accessToken.Description) - model.DisplayName = types.StringPointerValue(accessToken.DisplayName) - model.Expires = types.BoolPointerValue(accessToken.Expires) - model.Status = types.StringValue(string(*accessToken.Status)) + model.DisplayName = types.StringValue(accessToken.DisplayName) + model.Expires = types.BoolValue(accessToken.Expires) + model.Status = types.StringValue(accessToken.Status) model.ValidUntil = types.StringNull() if accessToken.ValidUntil != nil { @@ -502,7 +496,7 @@ func mapFields(ctx context.Context, accessToken *logs.AccessToken, model *Model) permissionList := types.ListNull(types.StringType) var diags diag.Diagnostics - if accessToken.Permissions != nil && len(*accessToken.Permissions) > 0 { + if accessToken.Permissions != nil && len(accessToken.Permissions) > 0 { permissionList, diags = types.ListValueFrom(ctx, types.StringType, accessToken.Permissions) if diags.HasError() { return fmt.Errorf("mapping permissions: %w", core.DiagsToError(diags)) diff --git a/stackit/internal/services/logs/accesstoken/resource_test.go b/stackit/internal/services/logs/accesstoken/resource_test.go index a29cc8f06..c85be225f 100644 --- a/stackit/internal/services/logs/accesstoken/resource_test.go +++ b/stackit/internal/services/logs/accesstoken/resource_test.go @@ -10,15 +10,15 @@ import ( "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/types" "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) var testTime = time.Now() func fixtureAccessToken(mods ...func(accessToken *logs.AccessToken)) *logs.AccessToken { accessToken := &logs.AccessToken{ - Id: utils.Ptr("atid"), - Status: utils.Ptr(logs.ACCESSTOKENSTATUS_ACTIVE), + Id: "atid", + Status: "active", } for _, mod := range mods { mod(accessToken) @@ -39,9 +39,9 @@ func fixtureModel(mods ...func(model *Model)) *Model { DisplayName: types.String{}, Expires: types.Bool{}, ValidUntil: types.String{}, - Lifetime: types.Int64{}, + Lifetime: types.Int32{}, Permissions: types.ListNull(types.StringType), - Status: types.StringValue(string(logs.ACCESSTOKENSTATUS_ACTIVE)), + Status: types.StringValue("active"), } for _, mod := range mods { mod(model) @@ -58,18 +58,24 @@ func TestMapFields(t *testing.T) { }{ { description: "min values", - input: fixtureAccessToken(), - expected: fixtureModel(), + input: fixtureAccessToken(func(accessToken *logs.AccessToken) { + accessToken.DisplayName = "display-name" + }), + expected: fixtureModel(func(model *Model) { + model.DisplayName = types.StringValue("display-name") + model.Creator = types.StringValue("") + model.Expires = types.BoolValue(false) + }), }, { description: "max values", input: fixtureAccessToken(func(accessToken *logs.AccessToken) { - accessToken.Permissions = &[]string{"write"} + accessToken.Permissions = []string{"write"} accessToken.AccessToken = utils.Ptr("") accessToken.Description = utils.Ptr("description") - accessToken.DisplayName = utils.Ptr("display-name") - accessToken.Creator = utils.Ptr("testUser") - accessToken.Expires = utils.Ptr(false) + accessToken.DisplayName = "display-name" + accessToken.Creator = "testUser" + accessToken.Expires = false accessToken.ValidUntil = utils.Ptr(testTime) }), expected: fixtureModel(func(model *Model) { @@ -141,13 +147,13 @@ func TestToCreatePayload(t *testing.T) { }) model.Description = types.StringValue("description") model.DisplayName = types.StringValue("display-name") - model.Lifetime = types.Int64Value(7) + model.Lifetime = types.Int32Value(7) }), expected: &logs.CreateAccessTokenPayload{ - Permissions: &[]string{"read", "write"}, + Permissions: []string{"read", "write"}, Description: utils.Ptr("description"), - DisplayName: utils.Ptr("display-name"), - Lifetime: utils.Ptr(int64(7)), + DisplayName: "display-name", + Lifetime: utils.Ptr(int32(7)), }, }, { diff --git a/stackit/internal/services/logs/instance/datasource.go b/stackit/internal/services/logs/instance/datasource.go index a5939b7cf..899ab5b39 100644 --- a/stackit/internal/services/logs/instance/datasource.go +++ b/stackit/internal/services/logs/instance/datasource.go @@ -13,7 +13,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/logs/utils" @@ -119,7 +119,7 @@ func (d *logsInstanceDataSource) Schema(_ context.Context, _ datasource.SchemaRe Description: schemaDescriptions["query_url"], Computed: true, }, - "retention_days": schema.Int64Attribute{ + "retention_days": schema.Int32Attribute{ Description: schemaDescriptions["retention_days"], Computed: true, }, @@ -149,7 +149,7 @@ func (d *logsInstanceDataSource) Read(ctx context.Context, req datasource.ReadRe ctx = tflog.SetField(ctx, "region", region) ctx = tflog.SetField(ctx, "instance_id", instanceID) - instanceResponse, err := d.client.GetLogsInstance(ctx, projectID, region, instanceID).Execute() + instanceResponse, err := d.client.DefaultAPI.GetLogsInstance(ctx, projectID, region, instanceID).Execute() if err != nil { var oapiErr *oapierror.GenericOpenAPIError ok := errors.As(err, &oapiErr) diff --git a/stackit/internal/services/logs/instance/resource.go b/stackit/internal/services/logs/instance/resource.go index 7d4fe60dd..9e1186d1b 100644 --- a/stackit/internal/services/logs/instance/resource.go +++ b/stackit/internal/services/logs/instance/resource.go @@ -17,9 +17,8 @@ import ( "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - sdkUtils "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/logs" - "github.com/stackitcloud/stackit-sdk-go/services/logs/wait" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" + wait "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api/wait" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/logs/utils" @@ -51,7 +50,7 @@ var schemaDescriptions = map[string]string{ "retention_days": "The log retention time in days", "status": fmt.Sprintf( "The status of the Logs instance, possible values: %s", - tfutils.FormatPossibleValues(sdkUtils.EnumSliceToStringSlice(logs.AllowedLogsInstanceStatusEnumValues)...), + tfutils.FormatPossibleValues("active", "deleting", "reconciling"), ), } @@ -69,7 +68,7 @@ type Model struct { IngestURL types.String `tfsdk:"ingest_url"` QueryRangeURL types.String `tfsdk:"query_range_url"` QueryURL types.String `tfsdk:"query_url"` - RetentionDays types.Int64 `tfsdk:"retention_days"` + RetentionDays types.Int32 `tfsdk:"retention_days"` Status types.String `tfsdk:"status"` } @@ -207,7 +206,7 @@ func (r *logsInstanceResource) Schema(_ context.Context, _ resource.SchemaReques Description: schemaDescriptions["query_url"], Computed: true, }, - "retention_days": schema.Int64Attribute{ + "retention_days": schema.Int32Attribute{ Description: schemaDescriptions["retention_days"], Required: true, }, @@ -242,7 +241,7 @@ func (r *logsInstanceResource) Create(ctx context.Context, req resource.CreateRe regionId := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "region", regionId) - createResp, err := r.client.CreateLogsInstance(ctx, projectId, regionId).CreateLogsInstancePayload(*payload).Execute() + createResp, err := r.client.DefaultAPI.CreateLogsInstance(ctx, projectId, regionId).CreateLogsInstancePayload(*payload).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating Logs Instance", fmt.Sprintf("Calling API: %v", err)) return @@ -250,7 +249,7 @@ func (r *logsInstanceResource) Create(ctx context.Context, req resource.CreateRe ctx = core.LogResponse(ctx) - waitResp, err := wait.CreateLogsInstanceWaitHandler(ctx, r.client, projectId, regionId, *createResp.Id).WaitWithContext(ctx) + waitResp, err := wait.CreateLogsInstanceWaitHandler(ctx, r.client.DefaultAPI, projectId, regionId, createResp.Id).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating Logs Instance", fmt.Sprintf("Waiting for Logs Instance to become active: %v", err)) return @@ -287,7 +286,7 @@ func (r *logsInstanceResource) Read(ctx context.Context, req resource.ReadReques ctx = tflog.SetField(ctx, "region", region) ctx = tflog.SetField(ctx, "instance_id", instanceID) - instanceResponse, err := r.client.GetLogsInstance(ctx, projectID, region, instanceID).Execute() + instanceResponse, err := r.client.DefaultAPI.GetLogsInstance(ctx, projectID, region, instanceID).Execute() if err != nil { var oapiErr *oapierror.GenericOpenAPIError ok := errors.As(err, &oapiErr) @@ -339,7 +338,7 @@ func (r *logsInstanceResource) Update(ctx context.Context, req resource.UpdateRe return } - updateResp, err := r.client.UpdateLogsInstance(ctx, projectID, region, instanceID).UpdateLogsInstancePayload(*payload).Execute() + updateResp, err := r.client.DefaultAPI.UpdateLogsInstance(ctx, projectID, region, instanceID).UpdateLogsInstancePayload(*payload).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating Logs Instance", fmt.Sprintf("Calling API: %v", err)) return @@ -381,7 +380,7 @@ func (r *logsInstanceResource) Delete(ctx context.Context, req resource.DeleteRe ctx = tflog.SetField(ctx, "region", region) ctx = tflog.SetField(ctx, "instance_id", instanceID) - err := r.client.DeleteLogsInstance(ctx, projectID, region, instanceID).Execute() + err := r.client.DefaultAPI.DeleteLogsInstance(ctx, projectID, region, instanceID).Execute() if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting Logs Instance", fmt.Sprintf("Calling API: %v", err)) return @@ -389,7 +388,7 @@ func (r *logsInstanceResource) Delete(ctx context.Context, req resource.DeleteRe ctx = core.LogResponse(ctx) - _, err = wait.DeleteLogsInstanceWaitHandler(ctx, r.client, projectID, region, instanceID).WaitWithContext(ctx) + _, err = wait.DeleteLogsInstanceWaitHandler(ctx, r.client.DefaultAPI, projectID, region, instanceID).WaitWithContext(ctx) if err != nil { core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting Logs Instance", fmt.Sprintf("Waiting for Logs Instance to be deleted: %v", err)) return @@ -417,8 +416,8 @@ func toCreatePayload(ctx context.Context, diagnostics diag.Diagnostics, model *M payload := &logs.CreateLogsInstancePayload{ Description: conversion.StringValueToPointer(model.Description), - DisplayName: conversion.StringValueToPointer(model.DisplayName), - RetentionDays: conversion.Int64ValueToPointer(model.RetentionDays), + DisplayName: model.DisplayName.ValueString(), + RetentionDays: model.RetentionDays.ValueInt32(), } if !(model.ACL.IsNull() || model.ACL.IsUnknown()) { @@ -426,7 +425,7 @@ func toCreatePayload(ctx context.Context, diagnostics diag.Diagnostics, model *M aclDiags := model.ACL.ElementsAs(ctx, &acl, false) diagnostics.Append(aclDiags...) if !aclDiags.HasError() { - payload.Acl = &acl + payload.Acl = acl } } @@ -440,24 +439,18 @@ func mapFields(ctx context.Context, instance *logs.LogsInstance, model *Model) e if model == nil { return fmt.Errorf("model is nil") } - if instance.Status == nil { - return fmt.Errorf("instance status is nil") - } - if instance.Created == nil { - return fmt.Errorf("instance created is nil") - } var instanceID string if model.InstanceID.ValueString() != "" { instanceID = model.InstanceID.ValueString() - } else if instance.Id != nil { - instanceID = *instance.Id + } else if instance.Id != "" { + instanceID = instance.Id } else { return fmt.Errorf("instance id not present") } aclList := types.ListNull(types.StringType) var diags diag.Diagnostics - if instance.Acl != nil && len(*instance.Acl) > 0 { + if instance.Acl != nil && len(instance.Acl) > 0 { aclList, diags = types.ListValueFrom(ctx, types.StringType, instance.Acl) if diags.HasError() { return fmt.Errorf("mapping ACL: %w", core.DiagsToError(diags)) @@ -470,13 +463,13 @@ func mapFields(ctx context.Context, instance *logs.LogsInstance, model *Model) e model.Created = types.StringValue(instance.Created.String()) model.DatasourceURL = types.StringPointerValue(instance.DatasourceUrl) model.Description = types.StringPointerValue(instance.Description) - model.DisplayName = types.StringPointerValue(instance.DisplayName) + model.DisplayName = types.StringValue(instance.DisplayName) model.IngestOTLPURL = types.StringPointerValue(instance.IngestOtlpUrl) model.IngestURL = types.StringPointerValue(instance.IngestUrl) model.QueryRangeURL = types.StringPointerValue(instance.QueryRangeUrl) model.QueryURL = types.StringPointerValue(instance.QueryUrl) - model.RetentionDays = types.Int64PointerValue(instance.RetentionDays) - model.Status = types.StringValue(string(*instance.Status)) + model.RetentionDays = types.Int32Value(instance.RetentionDays) + model.Status = types.StringValue(instance.Status) return nil } @@ -489,7 +482,7 @@ func toUpdatePayload(ctx context.Context, diagnostics diag.Diagnostics, model *M payload := &logs.UpdateLogsInstancePayload{ Description: conversion.StringValueToPointer(model.Description), DisplayName: conversion.StringValueToPointer(model.DisplayName), - RetentionDays: conversion.Int64ValueToPointer(model.RetentionDays), + RetentionDays: model.RetentionDays.ValueInt32Pointer(), } if !(model.ACL.IsNull() || model.ACL.IsUnknown()) { @@ -497,7 +490,7 @@ func toUpdatePayload(ctx context.Context, diagnostics diag.Diagnostics, model *M aclDiags := model.ACL.ElementsAs(ctx, &acl, false) diagnostics.Append(aclDiags...) if !aclDiags.HasError() { - payload.Acl = &acl + payload.Acl = acl } } diff --git a/stackit/internal/services/logs/instance/resource_test.go b/stackit/internal/services/logs/instance/resource_test.go index c8d6d5a43..0131e75d4 100644 --- a/stackit/internal/services/logs/instance/resource_test.go +++ b/stackit/internal/services/logs/instance/resource_test.go @@ -10,16 +10,16 @@ import ( "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-framework/types" "github.com/stackitcloud/stackit-sdk-go/core/utils" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" ) var testTime = time.Now() func fixtureInstance(mods ...func(instance *logs.LogsInstance)) *logs.LogsInstance { instance := &logs.LogsInstance{ - Id: utils.Ptr("iid"), - Created: utils.Ptr(testTime), - Status: utils.Ptr(logs.LOGSINSTANCESTATUS_ACTIVE), + Id: "iid", + Created: testTime, + Status: "active", } for _, mod := range mods { mod(instance) @@ -42,8 +42,8 @@ func fixtureModel(mods ...func(model *Model)) *Model { IngestURL: types.String{}, QueryRangeURL: types.String{}, QueryURL: types.String{}, - RetentionDays: types.Int64{}, - Status: types.StringValue(string(logs.LOGSINSTANCESTATUS_ACTIVE)), + RetentionDays: types.Int32{}, + Status: types.StringValue("active"), } for _, mod := range mods { mod(model) @@ -60,21 +60,27 @@ func TestMapFields(t *testing.T) { }{ { description: "min values", - input: fixtureInstance(), - expected: fixtureModel(), + input: fixtureInstance(func(instance *logs.LogsInstance) { + instance.DisplayName = "display-name" + instance.RetentionDays = 30 + }), + expected: fixtureModel(func(model *Model) { + model.DisplayName = types.StringValue("display-name") + model.RetentionDays = types.Int32Value(30) + }), }, { description: "max values", input: fixtureInstance(func(instance *logs.LogsInstance) { - instance.Acl = &[]string{"acl-entry-1", "acl-entry-2"} + instance.Acl = []string{"acl-entry-1", "acl-entry-2"} instance.DatasourceUrl = utils.Ptr("datasource-url") instance.Description = utils.Ptr("description") - instance.DisplayName = utils.Ptr("display-name") + instance.DisplayName = "display-name" instance.IngestOtlpUrl = utils.Ptr("ingest-otlp-url") instance.IngestUrl = utils.Ptr("ingest-url") instance.QueryRangeUrl = utils.Ptr("query-range-url") instance.QueryUrl = utils.Ptr("query-url") - instance.RetentionDays = utils.Ptr(int64(7)) + instance.RetentionDays = int32(7) }), expected: fixtureModel(func(model *Model) { model.ACL = types.ListValueMust(types.StringType, []attr.Value{ @@ -88,7 +94,7 @@ func TestMapFields(t *testing.T) { model.IngestURL = types.StringValue("ingest-url") model.QueryRangeURL = types.StringValue("query-range-url") model.QueryURL = types.StringValue("query-url") - model.RetentionDays = types.Int64Value(7) + model.RetentionDays = types.Int32Value(7) }), }, { @@ -96,22 +102,6 @@ func TestMapFields(t *testing.T) { wantErr: true, expected: fixtureModel(), }, - { - description: "nil status", - input: fixtureInstance(func(instance *logs.LogsInstance) { - instance.Status = nil - }), - expected: fixtureModel(), - wantErr: true, - }, - { - description: "nil created", - input: fixtureInstance(func(instance *logs.LogsInstance) { - instance.Created = nil - }), - expected: fixtureModel(), - wantErr: true, - }, } for _, tt := range tests { t.Run(tt.description, func(t *testing.T) { @@ -157,13 +147,13 @@ func TestToCreatePayload(t *testing.T) { }) model.Description = types.StringValue("description") model.DisplayName = types.StringValue("display-name") - model.RetentionDays = types.Int64Value(7) + model.RetentionDays = types.Int32Value(7) }), expected: &logs.CreateLogsInstancePayload{ - Acl: &[]string{"acl-entry-1", "acl-entry-2"}, + Acl: []string{"acl-entry-1", "acl-entry-2"}, Description: utils.Ptr("description"), - DisplayName: utils.Ptr("display-name"), - RetentionDays: utils.Ptr(int64(7)), + DisplayName: "display-name", + RetentionDays: int32(7), }, }, { @@ -209,13 +199,13 @@ func TestToUpdatePayload(t *testing.T) { }) model.Description = types.StringValue("description") model.DisplayName = types.StringValue("display-name") - model.RetentionDays = types.Int64Value(7) + model.RetentionDays = types.Int32Value(7) }), expected: &logs.UpdateLogsInstancePayload{ - Acl: &[]string{"acl-entry-1", "acl-entry-2"}, + Acl: []string{"acl-entry-1", "acl-entry-2"}, Description: utils.Ptr("description"), DisplayName: utils.Ptr("display-name"), - RetentionDays: utils.Ptr(int64(7)), + RetentionDays: utils.Ptr(int32(7)), }, }, { diff --git a/stackit/internal/services/logs/logs_acc_test.go b/stackit/internal/services/logs/logs_acc_test.go index c1e4f973c..845f79a21 100644 --- a/stackit/internal/services/logs/logs_acc_test.go +++ b/stackit/internal/services/logs/logs_acc_test.go @@ -17,7 +17,7 @@ import ( "github.com/hashicorp/terraform-plugin-testing/terraform" coreConfig "github.com/stackitcloud/stackit-sdk-go/core/config" "github.com/stackitcloud/stackit-sdk-go/core/oapierror" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil" ) @@ -666,17 +666,17 @@ func testAccCheckLogsInstanceDestroy(s *terraform.State) error { instancesToDestroy = append(instancesToDestroy, instanceId) } - response, err := client.ListLogsInstances(ctx, testutil.ProjectId, "eu01").Execute() + response, err := client.DefaultAPI.ListLogsInstances(ctx, testutil.ProjectId, "eu01").Execute() if err != nil { return fmt.Errorf("getting instances: %w", err) } - for _, i := range *response.Instances { - if !slices.Contains(instancesToDestroy, *i.Id) { + for _, i := range response.Instances { + if !slices.Contains(instancesToDestroy, i.Id) { continue } - err := client.DeleteLogsInstance(ctx, testutil.ProjectId, "eu01", *i.Id).Execute() + err := client.DefaultAPI.DeleteLogsInstance(ctx, testutil.ProjectId, "eu01", i.Id).Execute() if err != nil { - return fmt.Errorf("deleting instance %s: %w", *i.Id, err) + return fmt.Errorf("deleting instance %s: %w", i.Id, err) } } return nil @@ -707,7 +707,7 @@ func testAccCheckLogsAccessTokenDestroy(s *terraform.State) error { instanceId := strings.Split(rs.Primary.ID, core.Separator)[2] region := strings.Split(rs.Primary.ID, core.Separator)[1] - err := client.DeleteAccessTokenExecute(ctx, testutil.ProjectId, region, instanceId, accessTokenId) + err := client.DefaultAPI.DeleteAccessToken(ctx, testutil.ProjectId, region, instanceId, accessTokenId).Execute() if err != nil { var oapiErr *oapierror.GenericOpenAPIError if errors.As(err, &oapiErr) { diff --git a/stackit/internal/services/logs/utils/utils.go b/stackit/internal/services/logs/utils/utils.go index 1d88cec60..cb276711e 100644 --- a/stackit/internal/services/logs/utils/utils.go +++ b/stackit/internal/services/logs/utils/utils.go @@ -6,7 +6,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/stackitcloud/stackit-sdk-go/core/config" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/utils" ) diff --git a/stackit/internal/services/logs/utils/utils_test.go b/stackit/internal/services/logs/utils/utils_test.go index 59678dffd..49059338c 100644 --- a/stackit/internal/services/logs/utils/utils_test.go +++ b/stackit/internal/services/logs/utils/utils_test.go @@ -9,7 +9,7 @@ import ( "github.com/hashicorp/terraform-plugin-framework/diag" sdkClients "github.com/stackitcloud/stackit-sdk-go/core/clients" "github.com/stackitcloud/stackit-sdk-go/core/config" - "github.com/stackitcloud/stackit-sdk-go/services/logs" + logs "github.com/stackitcloud/stackit-sdk-go/services/logs/v1api" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/utils" ) From bdb21bc20857d2e256f141fab279c86a3417b29b Mon Sep 17 00:00:00 2001 From: Ruben Hoenle Date: Wed, 11 Mar 2026 12:00:36 +0100 Subject: [PATCH 2/3] go mod tidy --- go.sum | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/go.sum b/go.sum index 22d1dc339..4acc33129 100644 --- a/go.sum +++ b/go.sum @@ -173,8 +173,8 @@ github.com/stackitcloud/stackit-sdk-go/services/loadbalancer v1.8.0 h1:DxrN85V73 github.com/stackitcloud/stackit-sdk-go/services/loadbalancer v1.8.0/go.mod h1:ClPE4TOM1FeaJiwTXvApq4gWaSgTLq6nU3PPHAIQDN4= github.com/stackitcloud/stackit-sdk-go/services/logme v0.25.6 h1:4x30lC+YBmo7XpsAzTn0W+C/oP5flnLVgIh5u3O/P0o= github.com/stackitcloud/stackit-sdk-go/services/logme v0.25.6/go.mod h1:ewaYUiZcBTSS6urE5zEJBPCqxu70w2IjnBHCvnKdFKE= -github.com/stackitcloud/stackit-sdk-go/services/logs v0.5.2 h1:vr4atxFRT+EL+DqONMT5R44f7AzEMbePa9U7PEE0THU= -github.com/stackitcloud/stackit-sdk-go/services/logs v0.5.2/go.mod h1:CAPsiTX7osAImfrG5RnIjaJ/Iz3QpoBKuH2fS346wuQ= +github.com/stackitcloud/stackit-sdk-go/services/logs v0.6.0 h1:+DD31EGej4/dOKHVNwvPJN4Fc6FaDJ9b3zCkI6T0Dxs= +github.com/stackitcloud/stackit-sdk-go/services/logs v0.6.0/go.mod h1:R+ct2jIl0VSwZJ5NF4wbh3IFr5AvdcHmQaytksDHu2I= github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.25.6 h1:Y/byRjX2u/OZl0gKS/Rau6ob2bDyv26xnw6A6JNkKJk= github.com/stackitcloud/stackit-sdk-go/services/mariadb v0.25.6/go.mod h1:sY66ZgCgBc1mScPV95ek5WtUEGYizdP1RMsGaqbdbhw= github.com/stackitcloud/stackit-sdk-go/services/modelserving v0.6.5 h1:nT/H4WvYaMKWtoE1QtXGuKjlmh7FW+efG3xElRsJhsI= From 2f5984b40b708f0c878a5d5d84ad2cea7092ae5e Mon Sep 17 00:00:00 2001 From: Ruben Hoenle Date: Wed, 11 Mar 2026 12:30:31 +0100 Subject: [PATCH 3/3] linter findings --- stackit/internal/services/logs/accesstoken/datasource.go | 2 +- stackit/internal/services/logs/accesstoken/resource.go | 2 +- stackit/internal/services/logs/instance/resource.go | 6 +++--- stackit/internal/services/logs/logs_acc_test.go | 9 +++++---- 4 files changed, 10 insertions(+), 9 deletions(-) diff --git a/stackit/internal/services/logs/accesstoken/datasource.go b/stackit/internal/services/logs/accesstoken/datasource.go index fd04e4ced..721c271bc 100644 --- a/stackit/internal/services/logs/accesstoken/datasource.go +++ b/stackit/internal/services/logs/accesstoken/datasource.go @@ -225,7 +225,7 @@ func mapDataSourceFields(ctx context.Context, accessToken *logs.AccessToken, mod permissionList := types.ListNull(types.StringType) var diags diag.Diagnostics - if accessToken.Permissions != nil && len(accessToken.Permissions) > 0 { + if len(accessToken.Permissions) > 0 { permissionList, diags = types.ListValueFrom(ctx, types.StringType, accessToken.Permissions) if diags.HasError() { return fmt.Errorf("mapping permissions: %w", core.DiagsToError(diags)) diff --git a/stackit/internal/services/logs/accesstoken/resource.go b/stackit/internal/services/logs/accesstoken/resource.go index 9844c4e3c..39301118e 100644 --- a/stackit/internal/services/logs/accesstoken/resource.go +++ b/stackit/internal/services/logs/accesstoken/resource.go @@ -496,7 +496,7 @@ func mapFields(ctx context.Context, accessToken *logs.AccessToken, model *Model) permissionList := types.ListNull(types.StringType) var diags diag.Diagnostics - if accessToken.Permissions != nil && len(accessToken.Permissions) > 0 { + if len(accessToken.Permissions) > 0 { permissionList, diags = types.ListValueFrom(ctx, types.StringType, accessToken.Permissions) if diags.HasError() { return fmt.Errorf("mapping permissions: %w", core.DiagsToError(diags)) diff --git a/stackit/internal/services/logs/instance/resource.go b/stackit/internal/services/logs/instance/resource.go index 9e1186d1b..eb89b1f83 100644 --- a/stackit/internal/services/logs/instance/resource.go +++ b/stackit/internal/services/logs/instance/resource.go @@ -309,7 +309,7 @@ func (r *logsInstanceResource) Read(ctx context.Context, req resource.ReadReques if resp.Diagnostics.HasError() { return } - tflog.Info(ctx, "Logs Instance read", map[string]interface{}{ + tflog.Info(ctx, "Logs Instance read", map[string]any{ "instance_id": instanceID, }) } @@ -357,7 +357,7 @@ func (r *logsInstanceResource) Update(ctx context.Context, req resource.UpdateRe if resp.Diagnostics.HasError() { return } - tflog.Info(ctx, "Logs Instance updated", map[string]interface{}{ + tflog.Info(ctx, "Logs Instance updated", map[string]any{ "instance_id": instanceID, }) } @@ -450,7 +450,7 @@ func mapFields(ctx context.Context, instance *logs.LogsInstance, model *Model) e aclList := types.ListNull(types.StringType) var diags diag.Diagnostics - if instance.Acl != nil && len(instance.Acl) > 0 { + if len(instance.Acl) > 0 { aclList, diags = types.ListValueFrom(ctx, types.StringType, instance.Acl) if diags.HasError() { return fmt.Errorf("mapping ACL: %w", core.DiagsToError(diags)) diff --git a/stackit/internal/services/logs/logs_acc_test.go b/stackit/internal/services/logs/logs_acc_test.go index 845f79a21..61bde900d 100644 --- a/stackit/internal/services/logs/logs_acc_test.go +++ b/stackit/internal/services/logs/logs_acc_test.go @@ -670,13 +670,14 @@ func testAccCheckLogsInstanceDestroy(s *terraform.State) error { if err != nil { return fmt.Errorf("getting instances: %w", err) } - for _, i := range response.Instances { - if !slices.Contains(instancesToDestroy, i.Id) { + for i := range response.Instances { + if !slices.Contains(instancesToDestroy, response.Instances[i].Id) { continue } - err := client.DefaultAPI.DeleteLogsInstance(ctx, testutil.ProjectId, "eu01", i.Id).Execute() + + err := client.DefaultAPI.DeleteLogsInstance(ctx, testutil.ProjectId, "eu01", response.Instances[i].Id).Execute() if err != nil { - return fmt.Errorf("deleting instance %s: %w", i.Id, err) + return fmt.Errorf("deleting instance %s: %w", response.Instances[i].Id, err) } } return nil