Skip to content

Commit 24eac4d

Browse files
feat(alb) migrate to versioned sdk (#1327)
relates to STACKITTPR-533
1 parent 645ac84 commit 24eac4d

File tree

10 files changed

+273
-205
lines changed

10 files changed

+273
-205
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ require (
1212
github.com/hashicorp/terraform-plugin-log v0.10.0
1313
github.com/hashicorp/terraform-plugin-testing v1.14.0
1414
github.com/stackitcloud/stackit-sdk-go/core v0.23.0
15-
github.com/stackitcloud/stackit-sdk-go/services/alb v0.9.3
15+
github.com/stackitcloud/stackit-sdk-go/services/alb v0.12.1
1616
github.com/stackitcloud/stackit-sdk-go/services/cdn v1.13.0
1717
github.com/stackitcloud/stackit-sdk-go/services/dns v0.19.1
1818
github.com/stackitcloud/stackit-sdk-go/services/edge v0.7.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,8 @@ github.com/stackitcloud/stackit-sdk-go/core v0.23.0 h1:zPrOhf3Xe47rKRs1fg/AqKYUi
155155
github.com/stackitcloud/stackit-sdk-go/core v0.23.0/go.mod h1:osMglDby4csGZ5sIfhNyYq1bS1TxIdPY88+skE/kkmI=
156156
github.com/stackitcloud/stackit-sdk-go/services/alb v0.9.3 h1:X82TZfc6lg8ZoYdckiv5+OsV0d+81Q2TFMJh1TfxGWk=
157157
github.com/stackitcloud/stackit-sdk-go/services/alb v0.9.3/go.mod h1:V6+MolxM/M2FWyWZA+FRFKEzzUe10MU9eEVfMvxHGi8=
158+
github.com/stackitcloud/stackit-sdk-go/services/alb v0.12.1 h1:RKaxAymxlyxxE0Gta3yRuQWf07LnlcX+mfGnVB96NHA=
159+
github.com/stackitcloud/stackit-sdk-go/services/alb v0.12.1/go.mod h1:FHkV5L9vCQha+5MX+NdMdYjQIHXcLr95+bu1FN91QOM=
158160
github.com/stackitcloud/stackit-sdk-go/services/authorization v0.12.0 h1:HxPgBu04j5tj6nfZ2r0l6v4VXC0/tYOGe4sA5Addra8=
159161
github.com/stackitcloud/stackit-sdk-go/services/authorization v0.12.0/go.mod h1:uYI9pHAA2g84jJN25ejFUxa0/JtfpPZqMDkctQ1BzJk=
160162
github.com/stackitcloud/stackit-sdk-go/services/cdn v1.13.0 h1:iRJK2d3I2QqWp8hqhxlkCtQDNb7fwKHkik9ogmcx2o8=

stackit/internal/conversion/conversion.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -151,10 +151,17 @@ func StringListToPointer(list basetypes.ListValue) (*[]string, error) {
151151
// It returns nil if the value is null or unknown.
152152
// Note: It sorts the resulting slice to ensure deterministic behavior.
153153
func StringSetToPointer(set basetypes.SetValue) (*[]string, error) {
154+
result, err := StringSetToSlice(set)
155+
return &result, err
156+
}
157+
158+
// StringSetToSlice converts basetypes.SetValue to a slice of strings.
159+
// It returns nil if the value is null or unknown.
160+
// Note: It sorts the resulting slice to ensure deterministic behavior.
161+
func StringSetToSlice(set basetypes.SetValue) ([]string, error) {
154162
if set.IsNull() || set.IsUnknown() {
155163
return nil, nil
156164
}
157-
158165
elements := set.Elements()
159166
result := make([]string, 0, len(elements))
160167

@@ -170,7 +177,7 @@ func StringSetToPointer(set basetypes.SetValue) (*[]string, error) {
170177
// prevent non-deterministic behavior in the provider logic or API calls.
171178
sort.Strings(result)
172179

173-
return &result, nil
180+
return result, nil
174181
}
175182

176183
// ToJSONMApPartialUpdatePayload returns a map[string]interface{} to be used in a PATCH request payload.

stackit/internal/conversion/conversion_test.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,3 +393,59 @@ func TestParseEphemeralProviderData(t *testing.T) {
393393
})
394394
}
395395
}
396+
397+
func TestStringSetToSlice(t *testing.T) {
398+
t.Parallel()
399+
tests := []struct {
400+
name string
401+
in basetypes.SetValue
402+
want []string
403+
wantErr bool
404+
}{
405+
{
406+
name: "unknown",
407+
in: basetypes.NewSetUnknown(types.StringType),
408+
want: nil,
409+
},
410+
{
411+
name: "null",
412+
in: basetypes.NewSetNull(types.StringType),
413+
want: nil,
414+
},
415+
{
416+
name: "invalid type",
417+
in: basetypes.NewSetValueMust(types.Int64Type, []attr.Value{types.Int64Value(123)}),
418+
wantErr: true,
419+
},
420+
{
421+
name: "some values, sorting",
422+
in: basetypes.NewSetValueMust(
423+
types.StringType,
424+
[]attr.Value{
425+
types.StringValue("xyz"),
426+
types.StringValue("abc"),
427+
},
428+
),
429+
want: []string{
430+
"abc",
431+
"xyz",
432+
},
433+
},
434+
}
435+
436+
for _, tt := range tests {
437+
t.Run(tt.name, func(t *testing.T) {
438+
t.Parallel()
439+
got, err := StringSetToSlice(tt.in)
440+
if tt.wantErr && err == nil {
441+
t.Fatal("expected error")
442+
}
443+
if !tt.wantErr && err != nil {
444+
t.Fatalf("expected no error, got: %v", err)
445+
}
446+
if d := cmp.Diff(got, tt.want); d != "" {
447+
t.Fatalf("no match, diff: %s", d)
448+
}
449+
})
450+
}
451+
}

stackit/internal/services/alb/alb_acc_test.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ import (
1212
"github.com/hashicorp/terraform-plugin-testing/helper/acctest"
1313
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
1414
"github.com/hashicorp/terraform-plugin-testing/terraform"
15-
"github.com/stackitcloud/stackit-sdk-go/services/alb/wait"
15+
"github.com/stackitcloud/stackit-sdk-go/services/alb/v2api/wait"
1616
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
1717

1818
stackitSdkConfig "github.com/stackitcloud/stackit-sdk-go/core/config"
1919
"github.com/stackitcloud/stackit-sdk-go/core/utils"
20-
"github.com/stackitcloud/stackit-sdk-go/services/alb"
20+
albSdk "github.com/stackitcloud/stackit-sdk-go/services/alb/v2api"
2121
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/testutil"
2222
)
2323

@@ -621,12 +621,12 @@ func TestAccALBResourceMax(t *testing.T) {
621621

622622
func testAccCheckALBDestroy(s *terraform.State) error {
623623
ctx := context.Background()
624-
var client *alb.APIClient
624+
var client *albSdk.APIClient
625625
var err error
626626
if testutil.ALBCustomEndpoint == "" {
627-
client, err = alb.NewAPIClient()
627+
client, err = albSdk.NewAPIClient()
628628
} else {
629-
client, err = alb.NewAPIClient(
629+
client, err = albSdk.NewAPIClient(
630630
stackitSdkConfig.WithEndpoint(testutil.ALBCustomEndpoint),
631631
)
632632
}
@@ -648,27 +648,27 @@ func testAccCheckALBDestroy(s *terraform.State) error {
648648
loadbalancersToDestroy = append(loadbalancersToDestroy, loadbalancerName)
649649
}
650650

651-
loadbalancersResp, err := client.ListLoadBalancers(ctx, testutil.ProjectId, region).Execute()
651+
loadbalancersResp, err := client.DefaultAPI.ListLoadBalancers(ctx, testutil.ProjectId, region).Execute()
652652
if err != nil {
653653
return fmt.Errorf("getting loadbalancersResp: %w", err)
654654
}
655655

656-
if loadbalancersResp.LoadBalancers == nil || (loadbalancersResp.LoadBalancers != nil && len(*loadbalancersResp.LoadBalancers) == 0) {
656+
if loadbalancersResp.LoadBalancers == nil || (loadbalancersResp.LoadBalancers != nil && len(loadbalancersResp.LoadBalancers) == 0) {
657657
fmt.Print("No load balancers found for project \n")
658658
return nil
659659
}
660660

661-
items := *loadbalancersResp.LoadBalancers
661+
items := loadbalancersResp.LoadBalancers
662662
for i := range items {
663663
if items[i].Name == nil {
664664
continue
665665
}
666666
if utils.Contains(loadbalancersToDestroy, *items[i].Name) {
667-
_, err := client.DeleteLoadBalancerExecute(ctx, testutil.ProjectId, region, *items[i].Name)
667+
_, err := client.DefaultAPI.DeleteLoadBalancer(ctx, testutil.ProjectId, region, *items[i].Name).Execute()
668668
if err != nil {
669669
return fmt.Errorf("destroying load balancer %s during CheckDestroy: %w", *items[i].Name, err)
670670
}
671-
_, err = wait.DeleteLoadbalancerWaitHandler(ctx, client, testutil.ProjectId, region, *items[i].Name).WaitWithContext(ctx)
671+
_, err = wait.DeleteLoadbalancerWaitHandler(ctx, client.DefaultAPI, testutil.ProjectId, region, *items[i].Name).WaitWithContext(ctx)
672672
if err != nil {
673673
return fmt.Errorf("destroying load balancer %s during CheckDestroy: waiting for deletion %w", *items[i].Name, err)
674674
}

stackit/internal/services/alb/applicationloadbalancer/datasource.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ import (
1313
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
1414
"github.com/hashicorp/terraform-plugin-framework/types"
1515
"github.com/hashicorp/terraform-plugin-log/tflog"
16-
albSdk "github.com/stackitcloud/stackit-sdk-go/services/alb"
16+
legacyAlb "github.com/stackitcloud/stackit-sdk-go/services/alb"
17+
albSdk "github.com/stackitcloud/stackit-sdk-go/services/alb/v2api"
1718
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core"
1819
"github.com/stackitcloud/terraform-provider-stackit/stackit/internal/utils"
1920
)
@@ -57,9 +58,9 @@ func (r *albDataSource) Configure(ctx context.Context, req datasource.ConfigureR
5758

5859
// Schema defines the schema for the resource.
5960
func (r *albDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, resp *datasource.SchemaResponse) {
60-
protocolOptions := sdkUtils.EnumSliceToStringSlice(albSdk.AllowedListenerProtocolEnumValues)
61-
roleOptions := sdkUtils.EnumSliceToStringSlice(albSdk.AllowedNetworkRoleEnumValues)
62-
errorOptions := sdkUtils.EnumSliceToStringSlice(albSdk.AllowedLoadBalancerErrorTypesEnumValues)
61+
protocolOptions := sdkUtils.EnumSliceToStringSlice(legacyAlb.AllowedListenerProtocolEnumValues)
62+
roleOptions := sdkUtils.EnumSliceToStringSlice(legacyAlb.AllowedNetworkRoleEnumValues)
63+
errorOptions := sdkUtils.EnumSliceToStringSlice(legacyAlb.AllowedLoadBalancerErrorTypesEnumValues)
6364

6465
descriptions := map[string]string{
6566
"main": "Application Load Balancer resource schema.",
@@ -201,7 +202,7 @@ func (r *albDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, re
201202
Description: descriptions["listeners.name"],
202203
Computed: true,
203204
},
204-
"port": schema.Int64Attribute{
205+
"port": schema.Int32Attribute{
205206
Description: descriptions["port"],
206207
Computed: true,
207208
},
@@ -433,7 +434,7 @@ func (r *albDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, re
433434
Description: descriptions["active_health_check"],
434435
Computed: true,
435436
Attributes: map[string]schema.Attribute{
436-
"healthy_threshold": schema.Int64Attribute{
437+
"healthy_threshold": schema.Int32Attribute{
437438
Description: descriptions["healthy_threshold"],
438439
Computed: true,
439440
},
@@ -449,7 +450,7 @@ func (r *albDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, re
449450
Description: descriptions["timeout"],
450451
Computed: true,
451452
},
452-
"unhealthy_threshold": schema.Int64Attribute{
453+
"unhealthy_threshold": schema.Int32Attribute{
453454
Description: descriptions["unhealthy_threshold"],
454455
Computed: true,
455456
},
@@ -474,7 +475,7 @@ func (r *albDataSource) Schema(_ context.Context, _ datasource.SchemaRequest, re
474475
Description: descriptions["target_pools.name"],
475476
Computed: true,
476477
},
477-
"target_port": schema.Int64Attribute{
478+
"target_port": schema.Int32Attribute{
478479
Description: descriptions["target_port"],
479480
Computed: true,
480481
},
@@ -555,7 +556,7 @@ func (r *albDataSource) Read(ctx context.Context, req datasource.ReadRequest, re
555556
ctx = tflog.SetField(ctx, "name", name)
556557
ctx = tflog.SetField(ctx, "region", region)
557558

558-
albResp, err := r.client.GetLoadBalancer(ctx, projectId, region, name).Execute()
559+
albResp, err := r.client.DefaultAPI.GetLoadBalancer(ctx, projectId, region, name).Execute()
559560
if err != nil {
560561
utils.LogError(
561562
ctx,

0 commit comments

Comments
 (0)