Skip to content

Commit 5e5404b

Browse files
authored
chore(terraform): refactor region overrides in mapping funcs (#872)
1 parent 0272a86 commit 5e5404b

31 files changed

Lines changed: 185 additions & 194 deletions

File tree

stackit/internal/core/core.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"net/http"
77
"strings"
88

9+
"github.com/hashicorp/terraform-plugin-framework/types"
10+
911
"github.com/hashicorp/terraform-plugin-framework/diag"
1012
"github.com/hashicorp/terraform-plugin-log/tflog"
1113
)
@@ -61,6 +63,13 @@ func (pd *ProviderData) GetRegion() string {
6163
return "eu01"
6264
}
6365

66+
func (pd *ProviderData) GetRegionWithOverride(overrideRegion types.String) string {
67+
if overrideRegion.IsUnknown() || overrideRegion.IsNull() {
68+
return pd.GetRegion()
69+
}
70+
return overrideRegion.ValueString()
71+
}
72+
6473
// DiagsToError Converts TF diagnostics' errors into an error with a human-readable description.
6574
// If there are no errors, the output is nil
6675
func DiagsToError(diags diag.Diagnostics) error {

stackit/internal/core/core_test.go

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
package core
2+
3+
import (
4+
"testing"
5+
6+
"github.com/hashicorp/terraform-plugin-framework/types"
7+
)
8+
9+
func TestProviderData_GetRegionWithOverride(t *testing.T) {
10+
type args struct {
11+
overrideRegion types.String
12+
}
13+
tests := []struct {
14+
name string
15+
providerData *ProviderData
16+
args args
17+
want string
18+
}{
19+
{
20+
name: "override region is null string",
21+
providerData: &ProviderData{
22+
DefaultRegion: "eu02",
23+
},
24+
args: args{
25+
types.StringNull(),
26+
},
27+
want: "eu02",
28+
},
29+
{
30+
name: "override region is unknown string",
31+
providerData: &ProviderData{
32+
DefaultRegion: "eu02",
33+
},
34+
args: args{
35+
types.StringUnknown(),
36+
},
37+
want: "eu02",
38+
},
39+
{
40+
name: "override region is set",
41+
providerData: &ProviderData{
42+
DefaultRegion: "eu02",
43+
},
44+
args: args{
45+
types.StringValue("eu01"),
46+
},
47+
want: "eu01",
48+
},
49+
}
50+
for _, tt := range tests {
51+
t.Run(tt.name, func(t *testing.T) {
52+
if got := tt.providerData.GetRegionWithOverride(tt.args.overrideRegion); got != tt.want {
53+
t.Errorf("GetRegionWithOverride() = %v, want %v", got, tt.want)
54+
}
55+
})
56+
}
57+
}
58+
59+
func TestProviderData_GetRegion(t *testing.T) {
60+
tests := []struct {
61+
name string
62+
providerData *ProviderData
63+
want string
64+
}{
65+
{
66+
name: "default region is set",
67+
providerData: &ProviderData{
68+
DefaultRegion: "eu02",
69+
},
70+
want: "eu02",
71+
},
72+
{
73+
name: "(legacy) region is set",
74+
providerData: &ProviderData{
75+
Region: "eu02",
76+
},
77+
want: "eu02",
78+
},
79+
{
80+
name: "default region wins over (legacy) region",
81+
providerData: &ProviderData{
82+
DefaultRegion: "eu02",
83+
Region: "eu01",
84+
},
85+
want: "eu02",
86+
},
87+
{
88+
name: "final fallback - neither region (legacy) nor default region is set",
89+
providerData: &ProviderData{},
90+
want: "eu01",
91+
},
92+
}
93+
for _, tt := range tests {
94+
t.Run(tt.name, func(t *testing.T) {
95+
if got := tt.providerData.GetRegion(); got != tt.want {
96+
t.Errorf("GetRegion() = %v, want %v", got, tt.want)
97+
}
98+
})
99+
}
100+
}

stackit/internal/services/loadbalancer/loadbalancer/datasource.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -346,12 +346,7 @@ func (r *loadBalancerDataSource) Read(ctx context.Context, req datasource.ReadRe
346346
}
347347
projectId := model.ProjectId.ValueString()
348348
name := model.Name.ValueString()
349-
var region string
350-
if utils.IsUndefined(model.Region) {
351-
region = r.providerData.GetRegion()
352-
} else {
353-
region = model.Region.ValueString()
354-
}
349+
region := r.providerData.GetRegionWithOverride(model.Region)
355350
ctx = tflog.SetField(ctx, "project_id", projectId)
356351
ctx = tflog.SetField(ctx, "name", name)
357352
ctx = tflog.SetField(ctx, "region", region)

stackit/internal/services/loadbalancer/loadbalancer/resource.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -723,10 +723,7 @@ func (r *loadBalancerResource) Read(ctx context.Context, req resource.ReadReques
723723
}
724724
projectId := model.ProjectId.ValueString()
725725
name := model.Name.ValueString()
726-
region := model.Region.ValueString()
727-
if region == "" {
728-
region = r.providerData.GetRegion()
729-
}
726+
region := r.providerData.GetRegionWithOverride(model.Region)
730727

731728
ctx = tflog.SetField(ctx, "project_id", projectId)
732729
ctx = tflog.SetField(ctx, "name", name)

stackit/internal/services/loadbalancer/observability-credential/resource.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -235,10 +235,7 @@ func (r *observabilityCredentialResource) Read(ctx context.Context, req resource
235235
}
236236
projectId := model.ProjectId.ValueString()
237237
credentialsRef := model.CredentialsRef.ValueString()
238-
region := model.Region.ValueString()
239-
if region == "" {
240-
region = r.providerData.GetRegion()
241-
}
238+
region := r.providerData.GetRegionWithOverride(model.Region)
242239
ctx = tflog.SetField(ctx, "project_id", projectId)
243240
ctx = tflog.SetField(ctx, "credentials_ref", credentialsRef)
244241
ctx = tflog.SetField(ctx, "region", region)

stackit/internal/services/modelserving/token/resource.go

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -240,12 +240,7 @@ func (r *tokenResource) Create(ctx context.Context, req resource.CreateRequest,
240240

241241
projectId := model.ProjectId.ValueString()
242242

243-
var region string
244-
if utils.IsUndefined(model.Region) {
245-
region = r.providerData.GetRegion()
246-
} else {
247-
region = model.Region.ValueString()
248-
}
243+
region := r.providerData.GetRegionWithOverride(model.Region)
249244

250245
ctx = tflog.SetField(ctx, "project_id", projectId)
251246
ctx = tflog.SetField(ctx, "region", region)
@@ -339,13 +334,7 @@ func (r *tokenResource) Read(ctx context.Context, req resource.ReadRequest, resp
339334

340335
projectId := model.ProjectId.ValueString()
341336
tokenId := model.TokenId.ValueString()
342-
343-
var region string
344-
if utils.IsUndefined(model.Region) {
345-
region = r.providerData.GetRegion()
346-
} else {
347-
region = model.Region.ValueString()
348-
}
337+
region := r.providerData.GetRegionWithOverride(model.Region)
349338

350339
ctx = tflog.SetField(ctx, "project_id", projectId)
351340
ctx = tflog.SetField(ctx, "token_id", tokenId)
@@ -412,12 +401,7 @@ func (r *tokenResource) Update(ctx context.Context, req resource.UpdateRequest,
412401
projectId := state.ProjectId.ValueString()
413402
tokenId := state.TokenId.ValueString()
414403

415-
var region string
416-
if utils.IsUndefined(model.Region) {
417-
region = r.providerData.GetRegion()
418-
} else {
419-
region = model.Region.ValueString()
420-
}
404+
region := r.providerData.GetRegionWithOverride(model.Region)
421405

422406
ctx = tflog.SetField(ctx, "project_id", projectId)
423407
ctx = tflog.SetField(ctx, "token_id", tokenId)
@@ -500,12 +484,7 @@ func (r *tokenResource) Delete(ctx context.Context, req resource.DeleteRequest,
500484
projectId := model.ProjectId.ValueString()
501485
tokenId := model.TokenId.ValueString()
502486

503-
var region string
504-
if utils.IsUndefined(model.Region) {
505-
region = r.providerData.GetRegion()
506-
} else {
507-
region = model.Region.ValueString()
508-
}
487+
region := r.providerData.GetRegionWithOverride(model.Region)
509488

510489
ctx = tflog.SetField(ctx, "project_id", projectId)
511490
ctx = tflog.SetField(ctx, "token_id", tokenId)

stackit/internal/services/objectstorage/bucket/datasource.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -115,12 +115,7 @@ func (r *bucketDataSource) Read(ctx context.Context, req datasource.ReadRequest,
115115
}
116116
projectId := model.ProjectId.ValueString()
117117
bucketName := model.Name.ValueString()
118-
var region string
119-
if utils.IsUndefined(model.Region) {
120-
region = r.providerData.GetRegion()
121-
} else {
122-
region = model.Region.ValueString()
123-
}
118+
region := r.providerData.GetRegionWithOverride(model.Region)
124119

125120
ctx = tflog.SetField(ctx, "project_id", projectId)
126121
ctx = tflog.SetField(ctx, "name", bucketName)

stackit/internal/services/objectstorage/bucket/resource.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,10 +230,7 @@ func (r *bucketResource) Read(ctx context.Context, req resource.ReadRequest, res
230230
}
231231
projectId := model.ProjectId.ValueString()
232232
bucketName := model.Name.ValueString()
233-
region := model.Region.ValueString()
234-
if region == "" {
235-
region = r.providerData.GetRegion()
236-
}
233+
region := r.providerData.GetRegionWithOverride(model.Region)
237234

238235
ctx = tflog.SetField(ctx, "project_id", projectId)
239236
ctx = tflog.SetField(ctx, "name", bucketName)

stackit/internal/services/objectstorage/credential/datasource.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -124,12 +124,7 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ
124124
projectId := model.ProjectId.ValueString()
125125
credentialsGroupId := model.CredentialsGroupId.ValueString()
126126
credentialId := model.CredentialId.ValueString()
127-
var region string
128-
if utils.IsUndefined(model.Region) {
129-
region = r.providerData.GetRegion()
130-
} else {
131-
region = model.Region.ValueString()
132-
}
127+
region := r.providerData.GetRegionWithOverride(model.Region)
133128

134129
ctx = tflog.SetField(ctx, "project_id", projectId)
135130
ctx = tflog.SetField(ctx, "credentials_group_id", credentialsGroupId)

stackit/internal/services/objectstorage/credential/resource.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -328,10 +328,7 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest,
328328
projectId := model.ProjectId.ValueString()
329329
credentialsGroupId := model.CredentialsGroupId.ValueString()
330330
credentialId := model.CredentialId.ValueString()
331-
region := model.Region.ValueString()
332-
if region == "" {
333-
region = r.providerData.GetRegion()
334-
}
331+
region := r.providerData.GetRegionWithOverride(model.Region)
335332

336333
ctx = tflog.SetField(ctx, "project_id", projectId)
337334
ctx = tflog.SetField(ctx, "credentials_group_id", credentialsGroupId)

0 commit comments

Comments
 (0)