diff --git a/stackit/internal/services/postgresflexalpha/instance/functions.go b/stackit/internal/services/postgresflexalpha/instance/functions.go index 862f88ff..93fb544d 100644 --- a/stackit/internal/services/postgresflexalpha/instance/functions.go +++ b/stackit/internal/services/postgresflexalpha/instance/functions.go @@ -55,6 +55,22 @@ func mapGetInstanceResponseToModel( ) } + isConnectionInfoIncomplete := resp.ConnectionInfo == nil || + resp.ConnectionInfo.Host == nil || *resp.ConnectionInfo.Host == "" || + resp.ConnectionInfo.Port == nil || *resp.ConnectionInfo.Port == 0 + + if isConnectionInfoIncomplete { + m.ConnectionInfo = postgresflexalpharesource.NewConnectionInfoValueNull() + } else { + m.ConnectionInfo = postgresflexalpharesource.NewConnectionInfoValueMust( + postgresflexalpharesource.ConnectionInfoValue{}.AttributeTypes(ctx), + map[string]attr.Value{ + "host": types.StringPointerValue(resp.ConnectionInfo.Host), + "port": types.Int64PointerValue(resp.ConnectionInfo.Port), + }, + ) + } + m.ConnectionInfo.Host = types.StringValue("") if host, ok := resp.ConnectionInfo.GetHostOk(); ok { m.ConnectionInfo.Host = types.StringValue(host) @@ -138,8 +154,8 @@ func mapGetDataInstanceResponseToModel( ) error { m.BackupSchedule = types.StringValue(resp.GetBackupSchedule()) handleEncryption(m, resp) - m.ConnectionInfo.Host = types.StringValue(resp.ConnectionInfo.GetHost()) - m.ConnectionInfo.Port = types.Int64Value(resp.ConnectionInfo.GetPort()) + handleConnectionInfo(ctx, m, resp) + m.FlavorId = types.StringValue(resp.GetFlavorId()) m.Id = utils.BuildInternalTerraformId(m.ProjectId.ValueString(), m.Region.ValueString(), m.InstanceId.ValueString()) m.InstanceId = types.StringPointerValue(resp.Id) @@ -169,6 +185,24 @@ func mapGetDataInstanceResponseToModel( return nil } +func handleConnectionInfo(ctx context.Context, m *dataSourceModel, resp *postgresflex.GetInstanceResponse) { + isConnectionInfoIncomplete := resp.ConnectionInfo == nil || + resp.ConnectionInfo.Host == nil || *resp.ConnectionInfo.Host == "" || + resp.ConnectionInfo.Port == nil || *resp.ConnectionInfo.Port == 0 + + if isConnectionInfoIncomplete { + m.ConnectionInfo = postgresflexalphadatasource.NewConnectionInfoValueNull() + } else { + m.ConnectionInfo = postgresflexalphadatasource.NewConnectionInfoValueMust( + postgresflexalphadatasource.ConnectionInfoValue{}.AttributeTypes(ctx), + map[string]attr.Value{ + "host": types.StringPointerValue(resp.ConnectionInfo.Host), + "port": types.Int64PointerValue(resp.ConnectionInfo.Port), + }, + ) + } +} + func handleNetwork(ctx context.Context, m *dataSourceModel, resp *postgresflex.GetInstanceResponse) error { netAcl, diags := types.ListValueFrom(ctx, types.StringType, resp.Network.GetAcl()) if diags.HasError() { diff --git a/stackit/internal/services/postgresflexalpha/main.go b/stackit/internal/services/postgresflexalpha/main.go deleted file mode 100644 index 5e20f208..00000000 --- a/stackit/internal/services/postgresflexalpha/main.go +++ /dev/null @@ -1 +0,0 @@ -package postgresflexalpha diff --git a/stackit/internal/services/postgresflexalpha/user/mapper_test.go b/stackit/internal/services/postgresflexalpha/user/mapper_test.go index cad55bb7..37410b19 100644 --- a/stackit/internal/services/postgresflexalpha/user/mapper_test.go +++ b/stackit/internal/services/postgresflexalpha/user/mapper_test.go @@ -157,67 +157,70 @@ func TestMapFieldsCreate(t *testing.T) { expected resourceModel isValid bool }{ - //{ - // "default_values", - // &postgresflex.GetUserResponse{ - // Id: utils.Ptr(int64(1)), - // }, - // testRegion, - // resourceModel{ - // UserId: types.Int64Value(1), - // InstanceId: types.StringValue("iid"), - // ProjectId: types.StringValue("pid"), - // Name: types.StringNull(), - // Roles: types.List(types.SetNull(types.StringType)), - // Password: types.StringNull(), - // Region: types.StringValue(testRegion), - // Status: types.StringNull(), - // ConnectionString: types.StringNull(), - // }, - // true, - //}, - //{ - // "simple_values", - // &postgresflex.GetUserResponse{ - // Id: utils.Ptr(int64(1)), - // Name: utils.Ptr("username"), - // Status: utils.Ptr("status"), - // }, - // testRegion, - // resourceModel{ - // UserId: types.Int64Value(1), - // InstanceId: types.StringValue("iid"), - // ProjectId: types.StringValue("pid"), - // Name: types.StringValue("username"), - // Roles: types.List(types.SetNull(types.StringType)), - // Password: types.StringNull(), - // Region: types.StringValue(testRegion), - // Status: types.StringValue("status"), - // ConnectionString: types.StringValue("connection_string"), - // }, - // true, - //}, - //{ - // "null_fields_and_int_conversions", - // &postgresflex.GetUserResponse{ - // Id: utils.Ptr(int64(1)), - // Name: nil, - // Status: nil, - // }, - // testRegion, - // resourceModel{ - // UserId: types.Int64Value(1), - // InstanceId: types.StringValue("iid"), - // ProjectId: types.StringValue("pid"), - // Name: types.StringNull(), - // Roles: types.List(types.SetNull(types.StringType)), - // Password: types.StringNull(), - // Region: types.StringValue(testRegion), - // Status: types.StringNull(), - // ConnectionString: types.StringNull(), - // }, - // true, - //}, + { + "default_values", + &postgresflex.GetUserResponse{ + Id: utils.Ptr(int64(1)), + }, + testRegion, + resourceModel{ + Id: types.Int64Value(1), + UserId: types.Int64Value(1), + InstanceId: types.StringValue("iid"), + ProjectId: types.StringValue("pid"), + Name: types.StringNull(), + Roles: types.List(types.SetNull(types.StringType)), + Password: types.StringNull(), + Region: types.StringValue(testRegion), + Status: types.StringNull(), + ConnectionString: types.StringNull(), + }, + true, + }, + { + "simple_values", + &postgresflex.GetUserResponse{ + Id: utils.Ptr(int64(1)), + Name: utils.Ptr("username"), + Status: utils.Ptr("status"), + }, + testRegion, + resourceModel{ + Id: types.Int64Value(1), + UserId: types.Int64Value(1), + InstanceId: types.StringValue("iid"), + ProjectId: types.StringValue("pid"), + Name: types.StringValue("username"), + Roles: types.List(types.SetNull(types.StringType)), + Password: types.StringNull(), + Region: types.StringValue(testRegion), + Status: types.StringValue("status"), + ConnectionString: types.StringNull(), + }, + true, + }, + { + "null_fields_and_int_conversions", + &postgresflex.GetUserResponse{ + Id: utils.Ptr(int64(1)), + Name: nil, + Status: nil, + }, + testRegion, + resourceModel{ + Id: types.Int64Value(1), + UserId: types.Int64Value(1), + InstanceId: types.StringValue("iid"), + ProjectId: types.StringValue("pid"), + Name: types.StringNull(), + Roles: types.List(types.SetNull(types.StringType)), + Password: types.StringNull(), + Region: types.StringValue(testRegion), + Status: types.StringNull(), + ConnectionString: types.StringNull(), + }, + true, + }, { "nil_response", nil, diff --git a/stackit/internal/services/sqlserverflexalpha/main.go b/stackit/internal/services/sqlserverflexalpha/main.go deleted file mode 100644 index 7ec38cdc..00000000 --- a/stackit/internal/services/sqlserverflexalpha/main.go +++ /dev/null @@ -1 +0,0 @@ -package sqlserverflexalpha diff --git a/stackit/internal/services/sqlserverflexalpha/user/resource.go b/stackit/internal/services/sqlserverflexalpha/user/resource.go index 41e6e1c5..a24cad8b 100644 --- a/stackit/internal/services/sqlserverflexalpha/user/resource.go +++ b/stackit/internal/services/sqlserverflexalpha/user/resource.go @@ -416,6 +416,7 @@ func mapFieldsCreate(userResp *sqlserverflexalpha.CreateUserResponse, model *res return fmt.Errorf("user id not present") } userId := *user.Id + model.Id = types.Int64Value(userId) model.UserId = types.Int64Value(userId) model.Username = types.StringPointerValue(user.Username) @@ -467,6 +468,7 @@ func mapFields(userResp *sqlserverflexalpha.GetUserResponse, model *resourceMode return fmt.Errorf("user id not present") } + model.Id = types.Int64Value(userId) model.UserId = types.Int64Value(userId) model.Username = types.StringPointerValue(user.Username) diff --git a/stackit/internal/wait/postgresflexalpha/wait.go b/stackit/internal/wait/postgresflexalpha/wait.go index de67b945..c490b605 100644 --- a/stackit/internal/wait/postgresflexalpha/wait.go +++ b/stackit/internal/wait/postgresflexalpha/wait.go @@ -67,9 +67,11 @@ func CreateInstanceWaitHandler( if s == nil || s.Id == nil || *s.Id != instanceId || s.Status == nil { return false, nil, nil } - tflog.Debug(ctx, "waiting for instance ready", map[string]interface{}{ - "status": *s.Status, - }) + tflog.Debug( + ctx, "waiting for instance ready", map[string]interface{}{ + "status": *s.Status, + }, + ) switch *s.Status { default: return true, s, fmt.Errorf("instance with id %s has unexpected status %s", instanceId, *s.Status) @@ -118,13 +120,13 @@ func CreateInstanceWaitHandler( instanceCreated = true instanceGetResponse = s case InstanceStateSuccess: - if s.Network.AccessScope != nil && *s.Network.AccessScope == "SNA" { - if s.Network == nil || s.Network.InstanceAddress == nil || *s.Network.InstanceAddress == "" { + if s.Network != nil && s.Network.AccessScope != nil && *s.Network.AccessScope == "SNA" { + if s.Network.InstanceAddress == nil { tflog.Warn(ctx, "Waiting for instance_address") return false, nil, nil } - if s.Network.RouterAddress == nil || *s.Network.RouterAddress == "" { - tflog.Info(ctx, "Waiting for router_address") + if s.Network.RouterAddress == nil { + tflog.Warn(ctx, "Waiting for router_address") return false, nil, nil } }