Skip to content

Commit 2a8a4c7

Browse files
committed
chore(sfs): migrate to new sdk structure
- use v1api for SFS service.
1 parent cb9405d commit 2a8a4c7

File tree

16 files changed

+132
-128
lines changed

16 files changed

+132
-128
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ bin/
66
*.so
77
*.dylib
88

9+
# OS generated files
10+
.DS_Store
11+
912
## IDE
1013
*.idea/
1114
*.vscode/

stackit/internal/services/sfs/export-policy/datasource.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import (
1212
"github.com/hashicorp/terraform-plugin-framework/types"
1313
"github.com/hashicorp/terraform-plugin-log/tflog"
1414
"github.com/stackitcloud/stackit-sdk-go/core/oapierror"
15-
"github.com/stackitcloud/stackit-sdk-go/services/sfs"
15+
sfs "github.com/stackitcloud/stackit-sdk-go/services/sfs/v1api"
1616

1717
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/conversion"
1818
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
@@ -79,7 +79,7 @@ func (d *exportPolicyDataSource) Read(ctx context.Context, req datasource.ReadRe
7979
ctx = core.InitProviderContext(ctx)
8080

8181
// get export policy
82-
exportPolicyResp, err := d.client.GetShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
82+
exportPolicyResp, err := d.client.DefaultAPI.GetShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
8383
if err != nil {
8484
var openapiError *oapierror.GenericOpenAPIError
8585
if errors.As(err, &openapiError) {
@@ -155,7 +155,7 @@ func (d *exportPolicyDataSource) Schema(_ context.Context, _ datasource.SchemaRe
155155
Computed: true,
156156
Description: `IP access control list; IPs must have a subnet mask (e.g. "172.16.0.0/24" for a range of IPs, or "172.16.0.250/32" for a specific IP).`,
157157
},
158-
"order": schema.Int64Attribute{
158+
"order": schema.Int32Attribute{
159159
Description: "Order of the rule within a Share Export Policy. The order is used so that when a client IP matches multiple rules, the first rule is applied",
160160
Computed: true,
161161
},

stackit/internal/services/sfs/export-policy/resource.go

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ import (
3131
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/validate"
3232

3333
"github.com/hashicorp/terraform-plugin-framework/resource"
34-
"github.com/stackitcloud/stackit-sdk-go/services/sfs"
34+
sfs "github.com/stackitcloud/stackit-sdk-go/services/sfs/v1api"
3535
)
3636

3737
// Ensure the implementation satisfies the expected interfaces.
@@ -54,7 +54,7 @@ type Model struct {
5454
type rulesModel struct {
5555
Description types.String `tfsdk:"description"`
5656
IpAcl types.List `tfsdk:"ip_acl"`
57-
Order types.Int64 `tfsdk:"order"`
57+
Order types.Int32 `tfsdk:"order"`
5858
ReadOnly types.Bool `tfsdk:"read_only"`
5959
SetUuid types.Bool `tfsdk:"set_uuid"`
6060
SuperUser types.Bool `tfsdk:"super_user"`
@@ -64,7 +64,7 @@ type rulesModel struct {
6464
var rulesTypes = map[string]attr.Type{
6565
"description": types.StringType,
6666
"ip_acl": types.ListType{ElemType: types.StringType},
67-
"order": types.Int64Type,
67+
"order": types.Int32Type,
6868
"read_only": types.BoolType,
6969
"set_uuid": types.BoolType,
7070
"super_user": types.BoolType,
@@ -206,7 +206,7 @@ func (r *exportPolicyResource) Schema(_ context.Context, _ resource.SchemaReques
206206
listvalidator.ValueStringsAre(validate.CIDR()),
207207
},
208208
},
209-
"order": schema.Int64Attribute{
209+
"order": schema.Int32Attribute{
210210
Description: "Order of the rule within a Share Export Policy. The order is used so that when a client IP matches multiple rules, the first rule is applied",
211211
Required: true,
212212
},
@@ -275,7 +275,7 @@ func (r *exportPolicyResource) Create(ctx context.Context, req resource.CreateRe
275275
return
276276
}
277277

278-
createResp, err := r.client.CreateShareExportPolicy(ctx, projectId, region).CreateShareExportPolicyPayload(*payload).Execute()
278+
createResp, err := r.client.DefaultAPI.CreateShareExportPolicy(ctx, projectId, region).CreateShareExportPolicyPayload(*payload).Execute()
279279
if err != nil {
280280
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating export policy", fmt.Sprintf("Calling API: %v", err))
281281
return
@@ -298,7 +298,7 @@ func (r *exportPolicyResource) Create(ctx context.Context, req resource.CreateRe
298298
}
299299

300300
// get export policy
301-
getResp, err := r.client.GetShareExportPolicy(ctx, projectId, region, *createResp.ShareExportPolicy.Id).Execute()
301+
getResp, err := r.client.DefaultAPI.GetShareExportPolicy(ctx, projectId, region, *createResp.ShareExportPolicy.Id).Execute()
302302
if err != nil {
303303
core.LogAndAddError(ctx, &resp.Diagnostics, "Error creating export policy", fmt.Sprintf("Calling API to get export policy: %v", err))
304304
return
@@ -337,7 +337,7 @@ func (r *exportPolicyResource) Read(ctx context.Context, req resource.ReadReques
337337
ctx = core.InitProviderContext(ctx)
338338

339339
// get export policy
340-
exportPolicyResp, err := r.client.GetShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
340+
exportPolicyResp, err := r.client.DefaultAPI.GetShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
341341
if err != nil {
342342
var openapiError *oapierror.GenericOpenAPIError
343343
if errors.As(err, &openapiError) {
@@ -401,7 +401,7 @@ func (r *exportPolicyResource) Update(ctx context.Context, req resource.UpdateRe
401401
return
402402
}
403403

404-
_, err = r.client.UpdateShareExportPolicy(ctx, projectId, region, exportPolicyId).UpdateShareExportPolicyPayload(*payload).Execute()
404+
_, err = r.client.DefaultAPI.UpdateShareExportPolicy(ctx, projectId, region, exportPolicyId).UpdateShareExportPolicyPayload(*payload).Execute()
405405
if err != nil {
406406
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating export policy", fmt.Sprintf("Calling API to update export policy: %v", err))
407407
return
@@ -410,7 +410,7 @@ func (r *exportPolicyResource) Update(ctx context.Context, req resource.UpdateRe
410410
ctx = core.LogResponse(ctx)
411411

412412
// get export policy
413-
exportPolicyResp, err := r.client.GetShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
413+
exportPolicyResp, err := r.client.DefaultAPI.GetShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
414414
if err != nil {
415415
core.LogAndAddError(ctx, &resp.Diagnostics, "Error updating export policy", fmt.Sprintf("Calling API to get export policy: %v", err))
416416
return
@@ -450,7 +450,7 @@ func (r *exportPolicyResource) Delete(ctx context.Context, req resource.DeleteRe
450450

451451
ctx = core.InitProviderContext(ctx)
452452

453-
_, err := r.client.DeleteShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
453+
_, err := r.client.DefaultAPI.DeleteShareExportPolicy(ctx, projectId, region, exportPolicyId).Execute()
454454
if err != nil {
455455
core.LogAndAddError(ctx, &resp.Diagnostics, "Error deleting export policy", fmt.Sprintf("Calling API: %v", err))
456456
}
@@ -502,7 +502,7 @@ func mapFields(ctx context.Context, resp *sfs.GetShareExportPolicyResponse, mode
502502
// iterate over Rules from response
503503
if resp.ShareExportPolicy.Rules != nil {
504504
rulesList := []attr.Value{}
505-
for _, rule := range *resp.ShareExportPolicy.Rules {
505+
for _, rule := range resp.ShareExportPolicy.Rules {
506506
var ipAcl basetypes.ListValue
507507
if rule.IpAcl != nil {
508508
var diags diag.Diagnostics
@@ -515,9 +515,9 @@ func mapFields(ctx context.Context, resp *sfs.GetShareExportPolicyResponse, mode
515515
}
516516

517517
rulesValues := map[string]attr.Value{
518-
"description": types.StringPointerValue(rule.GetDescription()),
518+
"description": types.StringPointerValue(rule.Description.Get()),
519519
"ip_acl": ipAcl,
520-
"order": types.Int64PointerValue(rule.Order),
520+
"order": types.Int32PointerValue(rule.Order),
521521
"read_only": types.BoolPointerValue(rule.ReadOnly),
522522
"set_uuid": types.BoolPointerValue(rule.SetUuid),
523523
"super_user": types.BoolPointerValue(rule.SuperUser),
@@ -564,14 +564,14 @@ func toCreatePayload(model *Model, rules []rulesModel) (*sfs.CreateShareExportPo
564564
var tempRules []sfs.CreateShareExportPolicyRequestRule
565565
for _, rule := range rules {
566566
// convert list
567-
convertedList, err := conversion.StringListToPointer(rule.IpAcl)
567+
convertedList, err := conversion.StringListToSlice(rule.IpAcl)
568568
if err != nil {
569569
return nil, fmt.Errorf("conversion of rule failed")
570570
}
571571
tempRule := sfs.CreateShareExportPolicyRequestRule{
572-
Description: sfs.NewNullableString(conversion.StringValueToPointer(rule.Description)),
572+
Description: *sfs.NewNullableString(conversion.StringValueToPointer(rule.Description)),
573573
IpAcl: convertedList,
574-
Order: conversion.Int64ValueToPointer(rule.Order),
574+
Order: conversion.Int32ValueToPointer(rule.Order),
575575
ReadOnly: conversion.BoolValueToPointer(rule.ReadOnly),
576576
SetUuid: conversion.BoolValueToPointer(rule.SetUuid),
577577
SuperUser: conversion.BoolValueToPointer(rule.SuperUser),
@@ -581,12 +581,12 @@ func toCreatePayload(model *Model, rules []rulesModel) (*sfs.CreateShareExportPo
581581

582582
// name and rules
583583
result := &sfs.CreateShareExportPolicyPayload{
584-
Name: model.Name.ValueStringPointer(),
584+
Name: model.Name.ValueString(),
585585
}
586586

587587
// Rules should only be set if tempRules has value. Otherwise, the payload would contain `{ "rules": null }` what should be prevented
588588
if tempRules != nil {
589-
result.Rules = &tempRules
589+
result.Rules = tempRules
590590
}
591591

592592
return result, nil
@@ -604,14 +604,14 @@ func toUpdatePayload(model *Model, rules []rulesModel) (*sfs.UpdateShareExportPo
604604
tempRules := make([]sfs.UpdateShareExportPolicyBodyRule, len(rules))
605605
for i, rule := range rules {
606606
// convert list
607-
convertedList, err := conversion.StringListToPointer(rule.IpAcl)
607+
convertedList, err := conversion.StringListToSlice(rule.IpAcl)
608608
if err != nil {
609609
return nil, fmt.Errorf("conversion of rule failed")
610610
}
611611
tempRule := sfs.UpdateShareExportPolicyBodyRule{
612-
Description: sfs.NewNullableString(conversion.StringValueToPointer(rule.Description)),
612+
Description: *sfs.NewNullableString(conversion.StringValueToPointer(rule.Description)),
613613
IpAcl: convertedList,
614-
Order: conversion.Int64ValueToPointer(rule.Order),
614+
Order: conversion.Int32ValueToPointer(rule.Order),
615615
ReadOnly: conversion.BoolValueToPointer(rule.ReadOnly),
616616
SetUuid: conversion.BoolValueToPointer(rule.SetUuid),
617617
SuperUser: conversion.BoolValueToPointer(rule.SuperUser),
@@ -623,7 +623,7 @@ func toUpdatePayload(model *Model, rules []rulesModel) (*sfs.UpdateShareExportPo
623623
result := &sfs.UpdateShareExportPolicyPayload{
624624
// Rules should *+never** result in a payload where they are defined as null, e.g. `{ "rules": null }`. Instead,
625625
// they should either be set to an array (with values or empty) or they shouldn't be present in the payload.
626-
Rules: &tempRules,
626+
Rules: tempRules,
627627
}
628628
return result, nil
629629
}

stackit/internal/services/sfs/export-policy/resource_test.go

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -10,26 +10,26 @@ import (
1010
"github.com/hashicorp/terraform-plugin-framework/attr"
1111
"github.com/hashicorp/terraform-plugin-framework/types"
1212
"github.com/hashicorp/terraform-plugin-framework/types/basetypes"
13-
"github.com/stackitcloud/stackit-sdk-go/services/sfs"
13+
sfs "github.com/stackitcloud/stackit-sdk-go/services/sfs/v1api"
1414
)
1515

1616
// global stuff
1717
var project_id = "project_id"
1818

19-
func fixtureRulesResponse() *[]sfs.ShareExportPolicyRule {
20-
return &[]sfs.ShareExportPolicyRule{
19+
func fixtureRulesResponse() []sfs.ShareExportPolicyRule {
20+
return []sfs.ShareExportPolicyRule{
2121
{
22-
Description: sfs.NewNullableString(new("description")),
23-
IpAcl: new([]string{"172.16.0.0/24", "172.16.0.251/32"}),
24-
Order: new(int64(0)),
22+
Description: *sfs.NewNullableString(new("description")),
23+
IpAcl: *new([]string{"172.16.0.0/24", "172.16.0.251/32"}),
24+
Order: new(int32(0)),
2525
ReadOnly: new(false),
2626
SetUuid: new(false),
2727
SuperUser: new(false),
2828
},
2929
{
30-
Description: sfs.NewNullableString(new("description")),
31-
IpAcl: new([]string{"172.32.0.0/24", "172.32.0.251/32"}),
32-
Order: new(int64(1)),
30+
Description: *sfs.NewNullableString(new("description")),
31+
IpAcl: *new([]string{"172.32.0.0/24", "172.32.0.251/32"}),
32+
Order: new(int32(1)),
3333
ReadOnly: new(false),
3434
SetUuid: new(false),
3535
SuperUser: new(false),
@@ -78,23 +78,23 @@ func fixtureResponseModel(rulesModel basetypes.ListValue) *Model {
7878
func fixtureRulesCreatePayload() []sfs.CreateShareExportPolicyRequestRule {
7979
return []sfs.CreateShareExportPolicyRequestRule{
8080
{
81-
Description: sfs.NewNullableString(new("description")),
82-
IpAcl: &[]string{
81+
Description: *sfs.NewNullableString(new("description")),
82+
IpAcl: []string{
8383
"172.32.0.0/24",
8484
"172.32.0.251/32",
8585
},
86-
Order: new(int64(0)),
86+
Order: new(int32(0)),
8787
ReadOnly: new(false),
8888
SetUuid: new(false),
8989
SuperUser: new(false),
9090
},
9191
{
92-
Description: sfs.NewNullableString(new("description")),
93-
IpAcl: &[]string{
92+
Description: *sfs.NewNullableString(new("description")),
93+
IpAcl: []string{
9494
"172.16.0.0/24",
9595
"172.16.0.251/32",
9696
},
97-
Order: new(int64(1)),
97+
Order: new(int32(1)),
9898
ReadOnly: new(false),
9999
SetUuid: new(false),
100100
SuperUser: new(false),
@@ -105,23 +105,23 @@ func fixtureRulesCreatePayload() []sfs.CreateShareExportPolicyRequestRule {
105105
func fixtureRulesUpdatePayload() []sfs.UpdateShareExportPolicyBodyRule {
106106
return []sfs.UpdateShareExportPolicyBodyRule{
107107
{
108-
Description: sfs.NewNullableString(new("description")),
109-
IpAcl: &[]string{
108+
Description: *sfs.NewNullableString(new("description")),
109+
IpAcl: []string{
110110
"172.32.0.0/24",
111111
"172.32.0.251/32",
112112
},
113-
Order: new(int64(0)),
113+
Order: new(int32(0)),
114114
ReadOnly: new(false),
115115
SetUuid: new(false),
116116
SuperUser: new(false),
117117
},
118118
{
119-
Description: sfs.NewNullableString(new("description")),
120-
IpAcl: &[]string{
119+
Description: *sfs.NewNullableString(new("description")),
120+
IpAcl: []string{
121121
"172.16.0.0/24",
122122
"172.16.0.251/32",
123123
},
124-
Order: new(int64(1)),
124+
Order: new(int32(1)),
125125
ReadOnly: new(false),
126126
SetUuid: new(false),
127127
SuperUser: new(false),
@@ -134,15 +134,15 @@ func fixtureRulesPayloadModel() []rulesModel {
134134
{
135135
Description: types.StringValue("description"),
136136
IpAcl: types.ListValueMust(types.StringType, []attr.Value{types.StringValue("172.32.0.0/24"), types.StringValue("172.32.0.251/32")}),
137-
Order: types.Int64Value(0),
137+
Order: types.Int32Value(0),
138138
ReadOnly: types.BoolValue(false),
139139
SetUuid: types.BoolValue(false),
140140
SuperUser: types.BoolValue(false),
141141
},
142142
{
143143
Description: types.StringValue("description"),
144144
IpAcl: types.ListValueMust(types.StringType, []attr.Value{types.StringValue("172.16.0.0/24"), types.StringValue("172.16.0.251/32")}),
145-
Order: types.Int64Value(1),
145+
Order: types.Int32Value(1),
146146
ReadOnly: types.BoolValue(false),
147147
SetUuid: types.BoolValue(false),
148148
SuperUser: types.BoolValue(false),
@@ -152,14 +152,14 @@ func fixtureRulesPayloadModel() []rulesModel {
152152

153153
func fixtureExportPolicyCreatePayload(rules *[]sfs.CreateShareExportPolicyRequestRule) *sfs.CreateShareExportPolicyPayload {
154154
return &sfs.CreateShareExportPolicyPayload{
155-
Name: new("createPayloadName"),
156-
Rules: rules,
155+
Name: *new("createPayloadName"),
156+
Rules: *rules,
157157
}
158158
}
159159

160160
func fixtureExportPolicyUpdatePayload(rules []sfs.UpdateShareExportPolicyBodyRule) *sfs.UpdateShareExportPolicyPayload {
161161
return &sfs.UpdateShareExportPolicyPayload{
162-
Rules: &rules,
162+
Rules: rules,
163163
}
164164
}
165165

@@ -197,9 +197,9 @@ func TestMapFields(t *testing.T) {
197197
ProjectId: types.StringValue(project_id),
198198
},
199199
input: &sfs.GetShareExportPolicyResponse{
200-
ShareExportPolicy: &sfs.GetShareExportPolicyResponseShareExportPolicy{
200+
ShareExportPolicy: &sfs.ShareExportPolicy{
201201
Id: new("uuid1"),
202-
Rules: &[]sfs.ShareExportPolicyRule{},
202+
Rules: []sfs.ShareExportPolicyRule{},
203203
},
204204
},
205205
expectedModel: fixtureResponseModel(types.ListValueMust(types.ObjectType{AttrTypes: rulesTypes}, []attr.Value{})),
@@ -212,7 +212,7 @@ func TestMapFields(t *testing.T) {
212212
ProjectId: types.StringValue(project_id),
213213
},
214214
input: &sfs.GetShareExportPolicyResponse{
215-
ShareExportPolicy: &sfs.GetShareExportPolicyResponseShareExportPolicy{
215+
ShareExportPolicy: &sfs.ShareExportPolicy{
216216
Id: new("uuid1"),
217217
Rules: fixtureRulesResponse(),
218218
},

0 commit comments

Comments
 (0)