From 5e5404b459e26f7adc6a85ed884c206c0d159f3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ruben=20H=C3=B6nle?= Date: Fri, 6 Jun 2025 16:17:02 +0200 Subject: [PATCH] chore(terraform): refactor region overrides in mapping funcs (#872) --- stackit/internal/core/core.go | 9 ++ stackit/internal/core/core_test.go | 100 ++++++++++++++++++ .../loadbalancer/loadbalancer/datasource.go | 7 +- .../loadbalancer/loadbalancer/resource.go | 5 +- .../observability-credential/resource.go | 5 +- .../services/modelserving/token/resource.go | 29 +---- .../objectstorage/bucket/datasource.go | 7 +- .../services/objectstorage/bucket/resource.go | 5 +- .../objectstorage/credential/datasource.go | 7 +- .../objectstorage/credential/resource.go | 5 +- .../credentialsgroup/datasource.go | 8 +- .../credentialsgroup/resource.go | 5 +- .../postgresflex/database/datasource.go | 7 +- .../postgresflex/database/resource.go | 5 +- .../postgresflex/instance/datasource.go | 7 +- .../postgresflex/instance/resource.go | 5 +- .../services/postgresflex/user/datasource.go | 7 +- .../services/postgresflex/user/resource.go | 5 +- .../serverbackup/schedule/resource.go | 42 ++------ .../schedule/schedule_datasource.go | 7 +- .../schedule/schedules_datasource.go | 7 +- .../serverupdate/schedule/resource.go | 5 +- .../schedule/schedule_datasource.go | 7 +- .../schedule/schedules_datasource.go | 7 +- .../services/ske/cluster/datasource.go | 7 +- .../internal/services/ske/cluster/resource.go | 5 +- .../sqlserverflex/instance/datasource.go | 7 +- .../sqlserverflex/instance/resource.go | 5 +- .../services/sqlserverflex/user/datasource.go | 7 +- .../services/sqlserverflex/user/resource.go | 5 +- stackit/internal/utils/utils_test.go | 40 +++++++ 31 files changed, 185 insertions(+), 194 deletions(-) create mode 100644 stackit/internal/core/core_test.go diff --git a/stackit/internal/core/core.go b/stackit/internal/core/core.go index 57e6ce84..9235da2a 100644 --- a/stackit/internal/core/core.go +++ b/stackit/internal/core/core.go @@ -6,6 +6,8 @@ import ( "net/http" "strings" + "github.com/hashicorp/terraform-plugin-framework/types" + "github.com/hashicorp/terraform-plugin-framework/diag" "github.com/hashicorp/terraform-plugin-log/tflog" ) @@ -61,6 +63,13 @@ func (pd *ProviderData) GetRegion() string { return "eu01" } +func (pd *ProviderData) GetRegionWithOverride(overrideRegion types.String) string { + if overrideRegion.IsUnknown() || overrideRegion.IsNull() { + return pd.GetRegion() + } + return overrideRegion.ValueString() +} + // DiagsToError Converts TF diagnostics' errors into an error with a human-readable description. // If there are no errors, the output is nil func DiagsToError(diags diag.Diagnostics) error { diff --git a/stackit/internal/core/core_test.go b/stackit/internal/core/core_test.go new file mode 100644 index 00000000..8824e870 --- /dev/null +++ b/stackit/internal/core/core_test.go @@ -0,0 +1,100 @@ +package core + +import ( + "testing" + + "github.com/hashicorp/terraform-plugin-framework/types" +) + +func TestProviderData_GetRegionWithOverride(t *testing.T) { + type args struct { + overrideRegion types.String + } + tests := []struct { + name string + providerData *ProviderData + args args + want string + }{ + { + name: "override region is null string", + providerData: &ProviderData{ + DefaultRegion: "eu02", + }, + args: args{ + types.StringNull(), + }, + want: "eu02", + }, + { + name: "override region is unknown string", + providerData: &ProviderData{ + DefaultRegion: "eu02", + }, + args: args{ + types.StringUnknown(), + }, + want: "eu02", + }, + { + name: "override region is set", + providerData: &ProviderData{ + DefaultRegion: "eu02", + }, + args: args{ + types.StringValue("eu01"), + }, + want: "eu01", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.providerData.GetRegionWithOverride(tt.args.overrideRegion); got != tt.want { + t.Errorf("GetRegionWithOverride() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestProviderData_GetRegion(t *testing.T) { + tests := []struct { + name string + providerData *ProviderData + want string + }{ + { + name: "default region is set", + providerData: &ProviderData{ + DefaultRegion: "eu02", + }, + want: "eu02", + }, + { + name: "(legacy) region is set", + providerData: &ProviderData{ + Region: "eu02", + }, + want: "eu02", + }, + { + name: "default region wins over (legacy) region", + providerData: &ProviderData{ + DefaultRegion: "eu02", + Region: "eu01", + }, + want: "eu02", + }, + { + name: "final fallback - neither region (legacy) nor default region is set", + providerData: &ProviderData{}, + want: "eu01", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := tt.providerData.GetRegion(); got != tt.want { + t.Errorf("GetRegion() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/stackit/internal/services/loadbalancer/loadbalancer/datasource.go b/stackit/internal/services/loadbalancer/loadbalancer/datasource.go index 6bf9651d..9fab8c8c 100644 --- a/stackit/internal/services/loadbalancer/loadbalancer/datasource.go +++ b/stackit/internal/services/loadbalancer/loadbalancer/datasource.go @@ -346,12 +346,7 @@ func (r *loadBalancerDataSource) Read(ctx context.Context, req datasource.ReadRe } projectId := model.ProjectId.ValueString() name := model.Name.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "name", name) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/loadbalancer/loadbalancer/resource.go b/stackit/internal/services/loadbalancer/loadbalancer/resource.go index 82692d85..ad86fe31 100644 --- a/stackit/internal/services/loadbalancer/loadbalancer/resource.go +++ b/stackit/internal/services/loadbalancer/loadbalancer/resource.go @@ -723,10 +723,7 @@ func (r *loadBalancerResource) Read(ctx context.Context, req resource.ReadReques } projectId := model.ProjectId.ValueString() name := model.Name.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "name", name) diff --git a/stackit/internal/services/loadbalancer/observability-credential/resource.go b/stackit/internal/services/loadbalancer/observability-credential/resource.go index ac9fd625..4470c76f 100644 --- a/stackit/internal/services/loadbalancer/observability-credential/resource.go +++ b/stackit/internal/services/loadbalancer/observability-credential/resource.go @@ -235,10 +235,7 @@ func (r *observabilityCredentialResource) Read(ctx context.Context, req resource } projectId := model.ProjectId.ValueString() credentialsRef := model.CredentialsRef.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "credentials_ref", credentialsRef) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/modelserving/token/resource.go b/stackit/internal/services/modelserving/token/resource.go index f3108e42..186e088b 100644 --- a/stackit/internal/services/modelserving/token/resource.go +++ b/stackit/internal/services/modelserving/token/resource.go @@ -240,12 +240,7 @@ func (r *tokenResource) Create(ctx context.Context, req resource.CreateRequest, projectId := model.ProjectId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "region", region) @@ -339,13 +334,7 @@ func (r *tokenResource) Read(ctx context.Context, req resource.ReadRequest, resp projectId := model.ProjectId.ValueString() tokenId := model.TokenId.ValueString() - - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "token_id", tokenId) @@ -412,12 +401,7 @@ func (r *tokenResource) Update(ctx context.Context, req resource.UpdateRequest, projectId := state.ProjectId.ValueString() tokenId := state.TokenId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "token_id", tokenId) @@ -500,12 +484,7 @@ func (r *tokenResource) Delete(ctx context.Context, req resource.DeleteRequest, projectId := model.ProjectId.ValueString() tokenId := model.TokenId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "token_id", tokenId) diff --git a/stackit/internal/services/objectstorage/bucket/datasource.go b/stackit/internal/services/objectstorage/bucket/datasource.go index 3b5d71d7..c541830e 100644 --- a/stackit/internal/services/objectstorage/bucket/datasource.go +++ b/stackit/internal/services/objectstorage/bucket/datasource.go @@ -115,12 +115,7 @@ func (r *bucketDataSource) Read(ctx context.Context, req datasource.ReadRequest, } projectId := model.ProjectId.ValueString() bucketName := model.Name.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "name", bucketName) diff --git a/stackit/internal/services/objectstorage/bucket/resource.go b/stackit/internal/services/objectstorage/bucket/resource.go index d18ab1b0..47f584f5 100644 --- a/stackit/internal/services/objectstorage/bucket/resource.go +++ b/stackit/internal/services/objectstorage/bucket/resource.go @@ -230,10 +230,7 @@ func (r *bucketResource) Read(ctx context.Context, req resource.ReadRequest, res } projectId := model.ProjectId.ValueString() bucketName := model.Name.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "name", bucketName) diff --git a/stackit/internal/services/objectstorage/credential/datasource.go b/stackit/internal/services/objectstorage/credential/datasource.go index 85f3e95d..3a7131f4 100644 --- a/stackit/internal/services/objectstorage/credential/datasource.go +++ b/stackit/internal/services/objectstorage/credential/datasource.go @@ -124,12 +124,7 @@ func (r *credentialDataSource) Read(ctx context.Context, req datasource.ReadRequ projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() credentialId := model.CredentialId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "credentials_group_id", credentialsGroupId) diff --git a/stackit/internal/services/objectstorage/credential/resource.go b/stackit/internal/services/objectstorage/credential/resource.go index 967736c6..9fb5aaf9 100644 --- a/stackit/internal/services/objectstorage/credential/resource.go +++ b/stackit/internal/services/objectstorage/credential/resource.go @@ -328,10 +328,7 @@ func (r *credentialResource) Read(ctx context.Context, req resource.ReadRequest, projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() credentialId := model.CredentialId.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "credentials_group_id", credentialsGroupId) diff --git a/stackit/internal/services/objectstorage/credentialsgroup/datasource.go b/stackit/internal/services/objectstorage/credentialsgroup/datasource.go index 24c0bc30..72c57d2a 100644 --- a/stackit/internal/services/objectstorage/credentialsgroup/datasource.go +++ b/stackit/internal/services/objectstorage/credentialsgroup/datasource.go @@ -12,7 +12,6 @@ import ( "github.com/hashicorp/terraform-plugin-framework/types" "github.com/hashicorp/terraform-plugin-log/tflog" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/core" - "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/utils" "github.com/stackitcloud/terraform-provider-stackit/stackit/internal/validate" "github.com/hashicorp/terraform-plugin-framework/datasource/schema" @@ -114,12 +113,7 @@ func (r *credentialsGroupDataSource) Read(ctx context.Context, req datasource.Re } projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "credentials_group_id", credentialsGroupId) diff --git a/stackit/internal/services/objectstorage/credentialsgroup/resource.go b/stackit/internal/services/objectstorage/credentialsgroup/resource.go index efb66ec8..ead38610 100644 --- a/stackit/internal/services/objectstorage/credentialsgroup/resource.go +++ b/stackit/internal/services/objectstorage/credentialsgroup/resource.go @@ -226,14 +226,11 @@ func (r *credentialsGroupResource) Read(ctx context.Context, req resource.ReadRe } projectId := model.ProjectId.ValueString() credentialsGroupId := model.CredentialsGroupId.ValueString() - region := model.Region.ValueString() + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "credentials_group_id", credentialsGroupId) ctx = tflog.SetField(ctx, "region", region) - if region == "" { - region = r.providerData.GetRegion() - } found, err := readCredentialsGroups(ctx, &model, region, r.client) if err != nil { diff --git a/stackit/internal/services/postgresflex/database/datasource.go b/stackit/internal/services/postgresflex/database/datasource.go index d98f49c3..f1d8b1e9 100644 --- a/stackit/internal/services/postgresflex/database/datasource.go +++ b/stackit/internal/services/postgresflex/database/datasource.go @@ -127,12 +127,7 @@ func (r *databaseDataSource) Read(ctx context.Context, req datasource.ReadReques projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() databaseId := model.DatabaseId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "database_id", databaseId) diff --git a/stackit/internal/services/postgresflex/database/resource.go b/stackit/internal/services/postgresflex/database/resource.go index 21ee05f2..3338d593 100644 --- a/stackit/internal/services/postgresflex/database/resource.go +++ b/stackit/internal/services/postgresflex/database/resource.go @@ -256,10 +256,7 @@ func (r *databaseResource) Read(ctx context.Context, req resource.ReadRequest, r projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() databaseId := model.DatabaseId.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "database_id", databaseId) diff --git a/stackit/internal/services/postgresflex/instance/datasource.go b/stackit/internal/services/postgresflex/instance/datasource.go index 917de1d5..b411713b 100644 --- a/stackit/internal/services/postgresflex/instance/datasource.go +++ b/stackit/internal/services/postgresflex/instance/datasource.go @@ -160,12 +160,7 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/postgresflex/instance/resource.go b/stackit/internal/services/postgresflex/instance/resource.go index 5bf31499..ff0357f6 100644 --- a/stackit/internal/services/postgresflex/instance/resource.go +++ b/stackit/internal/services/postgresflex/instance/resource.go @@ -353,10 +353,7 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r } projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/postgresflex/user/datasource.go b/stackit/internal/services/postgresflex/user/datasource.go index 697bb4bb..d4a41c1d 100644 --- a/stackit/internal/services/postgresflex/user/datasource.go +++ b/stackit/internal/services/postgresflex/user/datasource.go @@ -145,12 +145,7 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "user_id", userId) diff --git a/stackit/internal/services/postgresflex/user/resource.go b/stackit/internal/services/postgresflex/user/resource.go index 884daae4..3db12667 100644 --- a/stackit/internal/services/postgresflex/user/resource.go +++ b/stackit/internal/services/postgresflex/user/resource.go @@ -283,10 +283,7 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "user_id", userId) diff --git a/stackit/internal/services/serverbackup/schedule/resource.go b/stackit/internal/services/serverbackup/schedule/resource.go index 8eeac2ef..03ca1b80 100644 --- a/stackit/internal/services/serverbackup/schedule/resource.go +++ b/stackit/internal/services/serverbackup/schedule/resource.go @@ -241,12 +241,7 @@ func (r *scheduleResource) Create(ctx context.Context, req resource.CreateReques } projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -297,12 +292,7 @@ func (r *scheduleResource) Read(ctx context.Context, req resource.ReadRequest, r projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -347,12 +337,7 @@ func (r *scheduleResource) Update(ctx context.Context, req resource.UpdateReques projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -397,12 +382,7 @@ func (r *scheduleResource) Delete(ctx context.Context, req resource.DeleteReques projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) @@ -497,12 +477,7 @@ func mapFields(ctx context.Context, schedule *serverbackup.BackupSchedule, model func (r *scheduleResource) enableBackupsService(ctx context.Context, model *Model) error { projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) tflog.Debug(ctx, "Enabling server backup service") request := r.client.EnableServiceResource(ctx, projectId, serverId, region). @@ -525,12 +500,7 @@ func (r *scheduleResource) disableBackupsService(ctx context.Context, model *Mod projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) tflog.Debug(ctx, "Checking for existing backups") backups, err := r.client.ListBackups(ctx, projectId, serverId, region).Execute() diff --git a/stackit/internal/services/serverbackup/schedule/schedule_datasource.go b/stackit/internal/services/serverbackup/schedule/schedule_datasource.go index bf5eec25..d05fc807 100644 --- a/stackit/internal/services/serverbackup/schedule/schedule_datasource.go +++ b/stackit/internal/services/serverbackup/schedule/schedule_datasource.go @@ -151,12 +151,7 @@ func (r *scheduleDataSource) Read(ctx context.Context, req datasource.ReadReques projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() backupScheduleId := model.BackupScheduleId.ValueInt64() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) diff --git a/stackit/internal/services/serverbackup/schedule/schedules_datasource.go b/stackit/internal/services/serverbackup/schedule/schedules_datasource.go index 5b9c45da..9ff3d075 100644 --- a/stackit/internal/services/serverbackup/schedule/schedules_datasource.go +++ b/stackit/internal/services/serverbackup/schedule/schedules_datasource.go @@ -174,12 +174,7 @@ func (r *schedulesDataSource) Read(ctx context.Context, req datasource.ReadReque } projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/serverupdate/schedule/resource.go b/stackit/internal/services/serverupdate/schedule/resource.go index 9e5f6a3a..bc880348 100644 --- a/stackit/internal/services/serverupdate/schedule/resource.go +++ b/stackit/internal/services/serverupdate/schedule/resource.go @@ -273,10 +273,7 @@ func (r *scheduleResource) Read(ctx context.Context, req resource.ReadRequest, r projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() updateScheduleId := model.UpdateScheduleId.ValueInt64() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/serverupdate/schedule/schedule_datasource.go b/stackit/internal/services/serverupdate/schedule/schedule_datasource.go index 561bf914..ef42b376 100644 --- a/stackit/internal/services/serverupdate/schedule/schedule_datasource.go +++ b/stackit/internal/services/serverupdate/schedule/schedule_datasource.go @@ -138,12 +138,7 @@ func (r *scheduleDataSource) Read(ctx context.Context, req datasource.ReadReques projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() updateScheduleId := model.UpdateScheduleId.ValueInt64() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) ctx = tflog.SetField(ctx, "update_schedule_id", updateScheduleId) diff --git a/stackit/internal/services/serverupdate/schedule/schedules_datasource.go b/stackit/internal/services/serverupdate/schedule/schedules_datasource.go index 1b4cf068..60b00704 100644 --- a/stackit/internal/services/serverupdate/schedule/schedules_datasource.go +++ b/stackit/internal/services/serverupdate/schedule/schedules_datasource.go @@ -161,12 +161,7 @@ func (r *schedulesDataSource) Read(ctx context.Context, req datasource.ReadReque } projectId := model.ProjectId.ValueString() serverId := model.ServerId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "server_id", serverId) diff --git a/stackit/internal/services/ske/cluster/datasource.go b/stackit/internal/services/ske/cluster/datasource.go index 3214220b..2a0f9ac1 100644 --- a/stackit/internal/services/ske/cluster/datasource.go +++ b/stackit/internal/services/ske/cluster/datasource.go @@ -322,12 +322,7 @@ func (r *clusterDataSource) Read(ctx context.Context, req datasource.ReadRequest projectId := state.ProjectId.ValueString() name := state.Name.ValueString() - var region string - if utils.IsUndefined(state.Region) { - region = r.providerData.GetRegion() - } else { - region = state.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(state.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "name", name) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/ske/cluster/resource.go b/stackit/internal/services/ske/cluster/resource.go index 7d79f123..661529b7 100644 --- a/stackit/internal/services/ske/cluster/resource.go +++ b/stackit/internal/services/ske/cluster/resource.go @@ -2055,10 +2055,7 @@ func (r *clusterResource) Read(ctx context.Context, req resource.ReadRequest, re } projectId := state.ProjectId.ValueString() name := state.Name.ValueString() - region := state.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(state.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "name", name) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/sqlserverflex/instance/datasource.go b/stackit/internal/services/sqlserverflex/instance/datasource.go index f1af60fc..f88c0800 100644 --- a/stackit/internal/services/sqlserverflex/instance/datasource.go +++ b/stackit/internal/services/sqlserverflex/instance/datasource.go @@ -174,12 +174,7 @@ func (r *instanceDataSource) Read(ctx context.Context, req datasource.ReadReques projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "region", region) diff --git a/stackit/internal/services/sqlserverflex/instance/resource.go b/stackit/internal/services/sqlserverflex/instance/resource.go index 08413861..0224f1e5 100644 --- a/stackit/internal/services/sqlserverflex/instance/resource.go +++ b/stackit/internal/services/sqlserverflex/instance/resource.go @@ -441,10 +441,7 @@ func (r *instanceResource) Read(ctx context.Context, req resource.ReadRequest, r } projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() - region := model.Region.ValueString() - if region == "" { - region = r.providerData.GetRegion() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) diff --git a/stackit/internal/services/sqlserverflex/user/datasource.go b/stackit/internal/services/sqlserverflex/user/datasource.go index 4a9429d3..98232059 100644 --- a/stackit/internal/services/sqlserverflex/user/datasource.go +++ b/stackit/internal/services/sqlserverflex/user/datasource.go @@ -150,12 +150,7 @@ func (r *userDataSource) Read(ctx context.Context, req datasource.ReadRequest, r projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() - var region string - if utils.IsUndefined(model.Region) { - region = r.providerData.GetRegion() - } else { - region = model.Region.ValueString() - } + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "user_id", userId) diff --git a/stackit/internal/services/sqlserverflex/user/resource.go b/stackit/internal/services/sqlserverflex/user/resource.go index 3dc7c89b..4b1f48f3 100644 --- a/stackit/internal/services/sqlserverflex/user/resource.go +++ b/stackit/internal/services/sqlserverflex/user/resource.go @@ -277,14 +277,11 @@ func (r *userResource) Read(ctx context.Context, req resource.ReadRequest, resp projectId := model.ProjectId.ValueString() instanceId := model.InstanceId.ValueString() userId := model.UserId.ValueString() - region := model.Region.ValueString() + region := r.providerData.GetRegionWithOverride(model.Region) ctx = tflog.SetField(ctx, "project_id", projectId) ctx = tflog.SetField(ctx, "instance_id", instanceId) ctx = tflog.SetField(ctx, "user_id", userId) ctx = tflog.SetField(ctx, "region", region) - if region == "" { - region = r.providerData.GetRegion() - } recordSetResp, err := r.client.GetUser(ctx, projectId, instanceId, userId, region).Execute() if err != nil { diff --git a/stackit/internal/utils/utils_test.go b/stackit/internal/utils/utils_test.go index a1be01b2..de0c114e 100644 --- a/stackit/internal/utils/utils_test.go +++ b/stackit/internal/utils/utils_test.go @@ -304,3 +304,43 @@ func TestFormatPossibleValues(t *testing.T) { }) } } + +func TestIsUndefined(t *testing.T) { + type args struct { + val value + } + tests := []struct { + name string + args args + want bool + }{ + { + name: "undefined value", + args: args{ + val: types.StringNull(), + }, + want: true, + }, + { + name: "unknown value", + args: args{ + val: types.StringUnknown(), + }, + want: true, + }, + { + name: "string value", + args: args{ + val: types.StringValue(""), + }, + want: false, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := IsUndefined(tt.args.val); got != tt.want { + t.Errorf("IsUndefined() = %v, want %v", got, tt.want) + } + }) + } +}