Skip to content

Commit

Permalink
chore: Aligns schema with existing SDKv2 adv_cluster except Type and …
Browse files Browse the repository at this point in the history
…PlanModifications (#2790)

* feat: Initial schema aligment without planModifications workaround and remove new attributes

* chore: add deprecation messages

* rename bi_connector to have same name as sdk_v2

* consistent computability
  • Loading branch information
EspenAlbert authored Nov 12, 2024
1 parent 2b2280a commit 4b15775
Show file tree
Hide file tree
Showing 6 changed files with 137 additions and 249 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
)

func NewTFModel(ctx context.Context, input *admin.ClusterDescription20240805, timeout timeouts.Value, diags *diag.Diagnostics) *TFModel {
biConnector := NewBiConnectorObjType(ctx, input.BiConnector, diags)
biConnector := NewBiConnectorConfigObjType(ctx, input.BiConnector, diags)
connectionStrings := NewConnectionStringsObjType(ctx, input.ConnectionStrings, diags)
labels := NewLabelsObjType(ctx, input.Labels, diags)
replicationSpecs := NewReplicationSpecsObjType(ctx, input.ReplicationSpecs, diags)
Expand All @@ -21,47 +21,44 @@ func NewTFModel(ctx context.Context, input *admin.ClusterDescription20240805, ti
}
return &TFModel{
AcceptDataRisksAndForceReplicaSetReconfig: types.StringPointerValue(conversion.TimePtrToStringPtr(input.AcceptDataRisksAndForceReplicaSetReconfig)),
BackupEnabled: types.BoolPointerValue(input.BackupEnabled),
BiConnector: biConnector,
ClusterType: types.StringPointerValue(input.ClusterType),
ConfigServerManagementMode: types.StringPointerValue(input.ConfigServerManagementMode),
ConfigServerType: types.StringPointerValue(input.ConfigServerType),
ConnectionStrings: connectionStrings,
CreateDate: types.StringPointerValue(conversion.TimePtrToStringPtr(input.CreateDate)),
DiskWarmingMode: types.StringPointerValue(input.DiskWarmingMode),
EncryptionAtRestProvider: types.StringPointerValue(input.EncryptionAtRestProvider),
FeatureCompatibilityVersion: types.StringPointerValue(input.FeatureCompatibilityVersion),
FeatureCompatibilityVersionExpirationDate: types.StringPointerValue(conversion.TimePtrToStringPtr(input.FeatureCompatibilityVersionExpirationDate)),
GlobalClusterSelfManagedSharding: types.BoolPointerValue(input.GlobalClusterSelfManagedSharding),
ProjectID: types.StringPointerValue(input.GroupId),
ClusterID: types.StringPointerValue(input.Id),
Labels: labels,
MongoDBMajorVersion: types.StringPointerValue(input.MongoDBMajorVersion),
MongoDBVersion: types.StringPointerValue(input.MongoDBVersion),
Name: types.StringPointerValue(input.Name),
Paused: types.BoolPointerValue(input.Paused),
PitEnabled: types.BoolPointerValue(input.PitEnabled),
RedactClientLogData: types.BoolPointerValue(input.RedactClientLogData),
ReplicaSetScalingStrategy: types.StringPointerValue(input.ReplicaSetScalingStrategy),
ReplicationSpecs: replicationSpecs,
RootCertType: types.StringPointerValue(input.RootCertType),
StateName: types.StringPointerValue(input.StateName),
Tags: tags,
TerminationProtectionEnabled: types.BoolPointerValue(input.TerminationProtectionEnabled),
VersionReleaseSystem: types.StringPointerValue(input.VersionReleaseSystem),
Timeouts: timeout,
BackupEnabled: types.BoolPointerValue(input.BackupEnabled),
BiConnectorConfig: biConnector,
ClusterType: types.StringPointerValue(input.ClusterType),
ConfigServerManagementMode: types.StringPointerValue(input.ConfigServerManagementMode),
ConfigServerType: types.StringPointerValue(input.ConfigServerType),
ConnectionStrings: connectionStrings,
CreateDate: types.StringPointerValue(conversion.TimePtrToStringPtr(input.CreateDate)),
EncryptionAtRestProvider: types.StringPointerValue(input.EncryptionAtRestProvider),
GlobalClusterSelfManagedSharding: types.BoolPointerValue(input.GlobalClusterSelfManagedSharding),
ProjectID: types.StringPointerValue(input.GroupId),
ClusterID: types.StringPointerValue(input.Id),
Labels: labels,
MongoDBMajorVersion: types.StringPointerValue(input.MongoDBMajorVersion),
MongoDBVersion: types.StringPointerValue(input.MongoDBVersion),
Name: types.StringPointerValue(input.Name),
Paused: types.BoolPointerValue(input.Paused),
PitEnabled: types.BoolPointerValue(input.PitEnabled),
RedactClientLogData: types.BoolPointerValue(input.RedactClientLogData),
ReplicaSetScalingStrategy: types.StringPointerValue(input.ReplicaSetScalingStrategy),
ReplicationSpecs: replicationSpecs,
RootCertType: types.StringPointerValue(input.RootCertType),
StateName: types.StringPointerValue(input.StateName),
Tags: tags,
TerminationProtectionEnabled: types.BoolPointerValue(input.TerminationProtectionEnabled),
VersionReleaseSystem: types.StringPointerValue(input.VersionReleaseSystem),
Timeouts: timeout,
}
}

func NewBiConnectorObjType(ctx context.Context, input *admin.BiConnector, diags *diag.Diagnostics) types.Object {
func NewBiConnectorConfigObjType(ctx context.Context, input *admin.BiConnector, diags *diag.Diagnostics) types.Object {
if input == nil {
return types.ObjectNull(BiConnectorObjType.AttrTypes)
return types.ObjectNull(BiConnectorConfigObjType.AttrTypes)
}
tfModel := TFBiConnectorModel{
Enabled: types.BoolPointerValue(input.Enabled),
ReadPreference: types.StringPointerValue(input.ReadPreference),
}
objType, diagsLocal := types.ObjectValueFrom(ctx, BiConnectorObjType.AttrTypes, tfModel)
objType, diagsLocal := types.ObjectValueFrom(ctx, BiConnectorConfigObjType.AttrTypes, tfModel)
diags.Append(diagsLocal...)
return objType
}
Expand All @@ -72,13 +69,11 @@ func NewConnectionStringsObjType(ctx context.Context, input *admin.ClusterConnec
}
privateEndpoint := NewPrivateEndpointObjType(ctx, input.PrivateEndpoint, diags)
tfModel := TFConnectionStringsModel{
AwsPrivateLink: conversion.ToTFMapOfString(ctx, diags, input.AwsPrivateLink),
AwsPrivateLinkSrv: conversion.ToTFMapOfString(ctx, diags, input.AwsPrivateLinkSrv),
Private: types.StringPointerValue(input.Private),
PrivateEndpoint: privateEndpoint,
PrivateSrv: types.StringPointerValue(input.PrivateSrv),
Standard: types.StringPointerValue(input.Standard),
StandardSrv: types.StringPointerValue(input.StandardSrv),
Private: types.StringPointerValue(input.Private),
PrivateEndpoint: privateEndpoint,
PrivateSrv: types.StringPointerValue(input.PrivateSrv),
Standard: types.StringPointerValue(input.Standard),
StandardSrv: types.StringPointerValue(input.StandardSrv),
}
objType, diagsLocal := types.ObjectValueFrom(ctx, ConnectionStringsObjType.AttrTypes, tfModel)
diags.Append(diagsLocal...)
Expand Down Expand Up @@ -106,16 +101,13 @@ func NewReplicationSpecsObjType(ctx context.Context, input *[]admin.ReplicationS
return types.ListNull(ReplicationSpecsObjType)
}
tfModels := make([]TFReplicationSpecsModel, len(*input))
todoContainerID := map[string]string{
"AWS:US_EAST_1": "6728c725e12c976e3a21e204",
}
for i, item := range *input {
regionConfigs := NewRegionConfigsObjType(ctx, item.RegionConfigs, diags)
tfModels[i] = TFReplicationSpecsModel{
Id: types.StringPointerValue(item.Id),
ExternalId: types.StringValue("TODO_STATIC"),
NumShards: types.Int64Value(1), //TODO: Static
ContainerId: conversion.ToTFMapOfString(ctx, diags, &todoContainerID),
ExternalId: types.StringNull(), // TODO: Static
NumShards: types.Int64Value(1), // TODO: Static
ContainerId: conversion.ToTFMapOfString(ctx, diags, nil), // TODO: Static
RegionConfigs: regionConfigs,
ZoneId: types.StringPointerValue(item.ZoneId),
ZoneName: types.StringPointerValue(item.ZoneName),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,17 @@ func AddAdvancedConfig(ctx context.Context, tfModel *TFModel, input *admin.Clust
if input != nil {
advancedConfig = TFAdvancedConfigurationModel{
ChangeStreamOptionsPreAndPostImagesExpireAfterSeconds: types.Int64PointerValue(conversion.IntPtrToInt64Ptr(input.ChangeStreamOptionsPreAndPostImagesExpireAfterSeconds)),
ChunkMigrationConcurrency: types.Int64PointerValue(conversion.IntPtrToInt64Ptr(input.ChunkMigrationConcurrency)),
DefaultMaxTimeMs: types.Int64PointerValue(conversion.IntPtrToInt64Ptr(input.DefaultMaxTimeMS)),
DefaultWriteConcern: types.StringPointerValue(input.DefaultWriteConcern),
DefaultReadConcern: types.StringNull(), // TODO: static
FailIndexKeyTooLong: types.BoolNull(), // TODO: static,
JavascriptEnabled: types.BoolPointerValue(input.JavascriptEnabled),
MinimumEnabledTlsProtocol: types.StringPointerValue(input.MinimumEnabledTlsProtocol),
NoTableScan: types.BoolPointerValue(input.NoTableScan),
OplogMinRetentionHours: types.Float64PointerValue(input.OplogMinRetentionHours),
OplogSizeMb: types.Int64PointerValue(conversion.IntPtrToInt64Ptr(input.OplogSizeMB)),
QueryStatsLogVerbosity: types.Int64PointerValue(conversion.IntPtrToInt64Ptr(input.QueryStatsLogVerbosity)),
SampleSizeBiconnector: types.Int64Null(), // TODO: static
SampleRefreshIntervalBiconnector: types.Int64Null(), // TODO: static
TransactionLifetimeLimitSeconds: types.Int64PointerValue(input.TransactionLifetimeLimitSeconds),
DefaultWriteConcern: types.StringPointerValue(input.DefaultWriteConcern),
DefaultReadConcern: types.StringNull(), // TODO: static
FailIndexKeyTooLong: types.BoolNull(), // TODO: static,
JavascriptEnabled: types.BoolPointerValue(input.JavascriptEnabled),
MinimumEnabledTlsProtocol: types.StringPointerValue(input.MinimumEnabledTlsProtocol),
NoTableScan: types.BoolPointerValue(input.NoTableScan),
OplogMinRetentionHours: types.Float64PointerValue(input.OplogMinRetentionHours),
OplogSizeMb: types.Int64PointerValue(conversion.IntPtrToInt64Ptr(input.OplogSizeMB)),
SampleSizeBiconnector: types.Int64Null(), // TODO: static
SampleRefreshIntervalBiconnector: types.Int64Null(), // TODO: static
TransactionLifetimeLimitSeconds: types.Int64PointerValue(input.TransactionLifetimeLimitSeconds),
}
}
objType, diagsLocal := types.ObjectValueFrom(ctx, AdvancedConfigurationObjType.AttrTypes, advancedConfig)
Expand Down
9 changes: 8 additions & 1 deletion internal/service/advancedclustertpf/resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/hashicorp/terraform-plugin-framework-timeouts/resource/timeouts"
"github.com/hashicorp/terraform-plugin-framework/diag"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/constant"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
)
Expand All @@ -30,6 +31,8 @@ const (
DeprecationOldSchemaAction = "Please refer to our examples, documentation, and 1.18.0 migration guide for more details at https://registry.terraform.io/providers/mongodb/mongodbatlas/latest/docs/guides/1.18.0-upgrade-guide.html.markdown"
)

var DeprecationMsgOldSchema = fmt.Sprintf("%s %s", constant.DeprecationParam, DeprecationOldSchemaAction)

func Resource() resource.Resource {
return &rs{
RSCommon: config.RSCommon{
Expand Down Expand Up @@ -83,7 +86,11 @@ func (r *rs) Update(ctx context.Context, req resource.UpdateRequest, resp *resou
if resp.Diagnostics.HasError() {
return
}
resp.Diagnostics.Append(resp.State.Set(ctx, plan)...)
tfNewModel, shouldReturn := mockedSDK(ctx, &resp.Diagnostics, plan.Timeouts)
if shouldReturn {
return
}
resp.Diagnostics.Append(resp.State.Set(ctx, tfNewModel)...)
}

func (r *rs) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
Expand Down
Loading

0 comments on commit 4b15775

Please sign in to comment.