Skip to content

Commit 5eec4cd

Browse files
authored
chore(resourcemanager): use new multi API version support SDK structure (#1271)
relates to STACKITSDK-351
1 parent 96688e4 commit 5eec4cd

File tree

14 files changed

+259
-165
lines changed

14 files changed

+259
-165
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ require (
3131
github.com/stackitcloud/stackit-sdk-go/services/postgresflex v1.3.5
3232
github.com/stackitcloud/stackit-sdk-go/services/rabbitmq v0.26.0
3333
github.com/stackitcloud/stackit-sdk-go/services/redis v0.25.6
34-
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.18.5
34+
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.19.0
3535
github.com/stackitcloud/stackit-sdk-go/services/scf v0.4.3
3636
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.14.3
3737
github.com/stackitcloud/stackit-sdk-go/services/serverbackup v1.3.8

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,8 +193,8 @@ github.com/stackitcloud/stackit-sdk-go/services/rabbitmq v0.26.0 h1:/8lmviszgrB+
193193
github.com/stackitcloud/stackit-sdk-go/services/rabbitmq v0.26.0/go.mod h1:hnhvlLX1Y71R8KIQqLBeoSZqkU5ZJOG0J4wz0LeUdaw=
194194
github.com/stackitcloud/stackit-sdk-go/services/redis v0.25.6 h1:CXM9cZ9WeTyJd+Aw/hnJnDsKRVAQi4qgtd0RJ3zoPwo=
195195
github.com/stackitcloud/stackit-sdk-go/services/redis v0.25.6/go.mod h1:KJNceOHRefjku1oVBoHG7idCS/SeW42WJ+55bN3AxrQ=
196-
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.18.5 h1:MZ5aTO2NQ1Jecmi67ByGskve5nKXHl91fE+z+vFjxt4=
197-
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.18.5/go.mod h1:CJLmdqWvJm5/3+lXPDKu8k4WXs2UG8euGoqQX5xE79k=
196+
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.19.0 h1:OcjYHjTsKLlOz8GF2owYdJK0cUqGGzjHRQLYUH0vMnQ=
197+
github.com/stackitcloud/stackit-sdk-go/services/resourcemanager v0.19.0/go.mod h1:jiPIzF8lcm5Dx0TkDK2CBgeRBHSRUqwyX+z/zqo1bes=
198198
github.com/stackitcloud/stackit-sdk-go/services/scf v0.4.3 h1:ZM3V8ON60jbQuSQsXP+7pdw7uleGfNYrM2dc/mNob9Y=
199199
github.com/stackitcloud/stackit-sdk-go/services/scf v0.4.3/go.mod h1:VYD+ErIhDLulexh3vpDTRhPTYQVoVfyW8DPD79Q8I+s=
200200
github.com/stackitcloud/stackit-sdk-go/services/secretsmanager v0.14.3 h1:3hZSg3z+4AXa5LbR2Vl38VmSA83ABItE63E53LuyWv8=

golang-ci.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,3 +93,8 @@ linters:
9393
- unparam # false positives
9494
issues:
9595
exclude-use-default: false
96+
# disable deprecation errors while we switch over to the SDK structure with multi API version support
97+
exclude-rules:
98+
- linters:
99+
- staticcheck
100+
text: "SA1019:"

stackit/internal/services/iaas/networkarea/resource.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,16 +159,16 @@ func (r *networkAreaResource) Configure(ctx context.Context, req resource.Config
159159
return
160160
}
161161

162-
apiClient := iaasUtils.ConfigureClient(ctx, &providerData, &resp.Diagnostics)
162+
r.client = iaasUtils.ConfigureClient(ctx, &providerData, &resp.Diagnostics)
163163
if resp.Diagnostics.HasError() {
164164
return
165165
}
166-
r.client = apiClient
167-
resourceManagerClient := resourcemanagerUtils.ConfigureClient(ctx, &providerData, &resp.Diagnostics)
166+
167+
r.resourceManagerClient = resourcemanagerUtils.ConfigureClientLegacy(ctx, &providerData, &resp.Diagnostics)
168168
if resp.Diagnostics.HasError() {
169169
return
170170
}
171-
r.resourceManagerClient = resourceManagerClient
171+
172172
tflog.Info(ctx, "IaaS client configured")
173173
}
174174

stackit/internal/services/iaas/networkarearegion/resource.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func (r *networkAreaRegionResource) Configure(ctx context.Context, req resource.
126126
return
127127
}
128128

129-
r.resourceManagerClient = resourcemanagerUtils.ConfigureClient(ctx, &r.providerData, &resp.Diagnostics)
129+
r.resourceManagerClient = resourcemanagerUtils.ConfigureClientLegacy(ctx, &r.providerData, &resp.Diagnostics)
130130
if resp.Diagnostics.HasError() {
131131
return
132132
}

stackit/internal/services/resourcemanager/folder/datasource.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
1414
"github.com/hashicorp/terraform-plugin-framework/types"
1515
"github.com/hashicorp/terraform-plugin-log/tflog"
16-
"github.com/stackitcloud/stackit-sdk-go/services/resourcemanager"
16+
resourcemanager "github.com/stackitcloud/stackit-sdk-go/services/resourcemanager/v0api"
1717
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
1818
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
1919
resourcemanagerUtils "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/resourcemanager/utils"
@@ -150,7 +150,7 @@ func (d *folderDataSource) Read(ctx context.Context, req datasource.ReadRequest,
150150
containerId := model.ContainerId.ValueString()
151151
ctx = tflog.SetField(ctx, "container_id", containerId)
152152

153-
folderResp, err := d.client.GetFolderDetails(ctx, containerId).Execute()
153+
folderResp, err := d.client.DefaultAPI.GetFolderDetails(ctx, containerId).Execute()
154154
if err != nil {
155155
utils.LogError(
156156
ctx,

stackit/internal/services/resourcemanager/folder/resource.go

Lines changed: 27 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ import (
2323
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
2424
"github.com/hashicorp/terraform-plugin-log/tflog"
2525
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
26-
sdkUtils "github.com/stackitcloud/stackit-sdk-go/core/utils"
27-
"github.com/stackitcloud/stackit-sdk-go/services/resourcemanager"
26+
resourcemanager "github.com/stackitcloud/stackit-sdk-go/services/resourcemanager/v0api"
2827
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
2928
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
3029
resourcemanagerUtils "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/services/resourcemanager/utils"
@@ -86,6 +85,7 @@ func (r *folderResource) Configure(ctx context.Context, req resource.ConfigureRe
8685
return
8786
}
8887
r.client = apiClient
88+
8989
tflog.Info(ctx, "Resource Manager client configured")
9090
}
9191

@@ -206,21 +206,21 @@ func (r *folderResource) Create(ctx context.Context, req resource.CreateRequest,
206206
return
207207
}
208208

209-
folderCreateResp, err := r.client.CreateFolder(ctx).CreateFolderPayload(*payload).Execute()
209+
folderCreateResp, err := r.client.DefaultAPI.CreateFolder(ctx).CreateFolderPayload(*payload).Execute()
210210
if err != nil {
211211
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating folder", fmt.Sprintf("Calling API: %v", err))
212212
return
213213
}
214214

215215
ctx = core.LogResponse(ctx)
216216

217-
if folderCreateResp.ContainerId == nil || *folderCreateResp.ContainerId == "" {
217+
if folderCreateResp.ContainerId == "" {
218218
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating folder", "Container ID is missing")
219219
return
220220
}
221221

222222
ctx = utils.SetAndLogStateFields(ctx, &resp.Diagnostics, &resp.State, map[string]any{
223-
"container_id": *folderCreateResp.ContainerId,
223+
"container_id": folderCreateResp.ContainerId,
224224
})
225225

226226
select {
@@ -230,7 +230,7 @@ func (r *folderResource) Create(ctx context.Context, req resource.CreateRequest,
230230
// continue
231231
}
232232

233-
folderGetResponse, err := r.client.GetFolderDetails(ctx, *folderCreateResp.ContainerId).Execute()
233+
folderGetResponse, err := r.client.DefaultAPI.GetFolderDetails(ctx, folderCreateResp.ContainerId).Execute()
234234
if err != nil {
235235
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating folder", fmt.Sprintf("Calling API: %v", err))
236236
return
@@ -262,7 +262,7 @@ func (r *folderResource) Read(ctx context.Context, req resource.ReadRequest, res
262262
ctx = tflog.SetField(ctx, "folder_name", folderName)
263263
ctx = tflog.SetField(ctx, "container_id", containerId)
264264

265-
folderResp, err := r.client.GetFolderDetails(ctx, containerId).Execute()
265+
folderResp, err := r.client.DefaultAPI.GetFolderDetails(ctx, containerId).Execute()
266266
if err != nil {
267267
oapiErr, ok := err.(*oapierror.GenericOpenAPIError) //nolint:errorlint //complaining that error.As should be used to catch wrapped errors, but this error should not be wrapped
268268
if ok && oapiErr.StatusCode == http.StatusForbidden {
@@ -312,7 +312,7 @@ func (r *folderResource) Update(ctx context.Context, req resource.UpdateRequest,
312312
return
313313
}
314314
// Update existing folder
315-
_, err = r.client.PartialUpdateFolder(ctx, containerId).PartialUpdateFolderPayload(*payload).Execute()
315+
_, err = r.client.DefaultAPI.PartialUpdateFolder(ctx, containerId).PartialUpdateFolderPayload(*payload).Execute()
316316
if err != nil {
317317
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating folder", fmt.Sprintf("Calling API: %v", err))
318318
return
@@ -321,7 +321,7 @@ func (r *folderResource) Update(ctx context.Context, req resource.UpdateRequest,
321321
ctx = core.LogResponse(ctx)
322322

323323
// Fetch updated folder
324-
folderResp, err := r.client.GetFolderDetails(ctx, containerId).Execute()
324+
folderResp, err := r.client.DefaultAPI.GetFolderDetails(ctx, containerId).Execute()
325325
if err != nil {
326326
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating folder", fmt.Sprintf("Calling API for updated data: %v", err))
327327
return
@@ -357,7 +357,7 @@ func (r *folderResource) Delete(ctx context.Context, req resource.DeleteRequest,
357357
ctx = tflog.SetField(ctx, "container_id", containerId)
358358

359359
// Delete existing folder
360-
err := r.client.DeleteFolder(ctx, containerId).Execute()
360+
err := r.client.DefaultAPI.DeleteFolder(ctx, containerId).Execute()
361361
if err != nil {
362362
core.LogAndAddError(
363363
ctx,
@@ -405,17 +405,17 @@ func mapFolderFields(
405405
var folderId string
406406
if model.FolderId.ValueString() != "" {
407407
folderId = model.FolderId.ValueString()
408-
} else if folderGetResponse.FolderId != nil {
409-
folderId = *folderGetResponse.FolderId
408+
} else if folderGetResponse.FolderId != "" {
409+
folderId = folderGetResponse.FolderId
410410
} else {
411411
return fmt.Errorf("folder id not present")
412412
}
413413

414414
var containerId string
415415
if model.ContainerId.ValueString() != "" {
416416
containerId = model.ContainerId.ValueString()
417-
} else if folderGetResponse.ContainerId != nil {
418-
containerId = *folderGetResponse.ContainerId
417+
} else if folderGetResponse.ContainerId != "" {
418+
containerId = folderGetResponse.ContainerId
419419
} else {
420420
return fmt.Errorf("container id not present")
421421
}
@@ -431,24 +431,20 @@ func mapFolderFields(
431431
tfLabels = types.MapNull(types.StringType)
432432
}
433433

434-
var containerParentIdTF basetypes.StringValue
435-
if folderGetResponse.Parent != nil {
436-
if _, err := uuid.Parse(model.ContainerParentId.ValueString()); err == nil {
437-
// the provided containerParent is the UUID identifier
438-
containerParentIdTF = types.StringPointerValue(folderGetResponse.Parent.Id)
439-
} else {
440-
// the provided containerParent is the user-friendly container id
441-
containerParentIdTF = types.StringPointerValue(folderGetResponse.Parent.ContainerId)
442-
}
434+
var containerParentIdTF types.String
435+
if _, err := uuid.Parse(model.ContainerParentId.ValueString()); err == nil {
436+
// the provided containerParent is the UUID identifier
437+
containerParentIdTF = types.StringValue(folderGetResponse.Parent.Id)
443438
} else {
444-
containerParentIdTF = types.StringNull()
439+
// the provided containerParent is the user-friendly container id
440+
containerParentIdTF = types.StringValue(folderGetResponse.Parent.ContainerId)
445441
}
446442

447443
model.Id = types.StringValue(containerId)
448444
model.FolderId = types.StringValue(folderId)
449445
model.ContainerId = types.StringValue(containerId)
450446
model.ContainerParentId = containerParentIdTF
451-
model.Name = types.StringPointerValue(folderGetResponse.Name)
447+
model.Name = types.StringValue(folderGetResponse.Name)
452448
model.Labels = tfLabels
453449
model.CreationTime = types.StringValue(folderGetResponse.CreationTime.Format(time.RFC3339))
454450
model.UpdateTime = types.StringValue(folderGetResponse.UpdateTime.Format(time.RFC3339))
@@ -471,18 +467,18 @@ func mapFolderFields(
471467
return nil
472468
}
473469

474-
func toMembersPayload(model *ResourceModel) (*[]resourcemanager.Member, error) {
470+
func toMembersPayload(model *ResourceModel) ([]resourcemanager.Member, error) {
475471
if model == nil {
476472
return nil, fmt.Errorf("nil model")
477473
}
478474
if model.OwnerEmail.IsNull() {
479475
return nil, fmt.Errorf("owner_email is null")
480476
}
481477

482-
return &[]resourcemanager.Member{
478+
return []resourcemanager.Member{
483479
{
484-
Subject: model.OwnerEmail.ValueStringPointer(),
485-
Role: sdkUtils.Ptr(projectOwnerRole),
480+
Subject: model.OwnerEmail.ValueString(),
481+
Role: projectOwnerRole,
486482
},
487483
}, nil
488484
}
@@ -504,10 +500,10 @@ func toCreatePayload(model *ResourceModel) (*resourcemanager.CreateFolderPayload
504500
}
505501

506502
return &resourcemanager.CreateFolderPayload{
507-
ContainerParentId: conversion.StringValueToPointer(model.ContainerParentId),
503+
ContainerParentId: model.ContainerParentId.ValueString(),
508504
Labels: labels,
509505
Members: members,
510-
Name: conversion.StringValueToPointer(model.Name),
506+
Name: model.Name.ValueString(),
511507
}, nil
512508
}
513509

0 commit comments

Comments
 (0)