From 044fce3ae66a5e2a142877f11101f835338fdca6 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 10 Mar 2025 16:07:38 +0100 Subject: [PATCH 1/3] avoid inconsistent result after apply when transitioning from replica set to sharded --- internal/service/advancedclustertpf/plan_modifier.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/service/advancedclustertpf/plan_modifier.go b/internal/service/advancedclustertpf/plan_modifier.go index 7ac53854ae..cd70ac7e97 100644 --- a/internal/service/advancedclustertpf/plan_modifier.go +++ b/internal/service/advancedclustertpf/plan_modifier.go @@ -17,6 +17,7 @@ var ( "disk_size_gb": {}, // disk_size_gb can be change at any level/spec "replication_specs": {}, "mongo_db_major_version": {"mongo_db_version"}, + "cluster_type": {"config_server_management_mode", "config_server_type"}, // computed values of config server change when REPLICA_SET changes to SHARDED } attributeReplicationSpecChangeMapping = map[string][]string{ // All these fields can exist in specs that are computed, therefore, it is not safe to use them when they have changed. From a6bbdc9b998958a1d406ad5baf52a55ccea2f3c7 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Mon, 10 Mar 2025 16:36:11 +0100 Subject: [PATCH 2/3] adding test for replica set to sharded --- ...resource_advanced_cluster_migration_test.go | 4 ++-- .../resource_advanced_cluster_test.go | 18 +++++++++++------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go index 71f9af4dfe..619723d46b 100644 --- a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go +++ b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go @@ -52,12 +52,12 @@ func TestMigAdvancedCluster_replicaSetAWSProviderUpdate(t *testing.T) { Steps: []resource.TestStep{ { ExternalProviders: acc.ExternalProviders(versionBeforeISSRelease), - Config: configReplicaSetAWSProvider(t, false, projectID, clusterName, 60, 3), + Config: configAWSProvider(t, false, projectID, clusterName, "REPLICASET", 60, 3), Check: checkReplicaSetAWSProvider(false, projectID, clusterName, 60, 3, false, false), }, { ProtoV6ProviderFactories: acc.TestAccProviderV6Factories, - Config: configReplicaSetAWSProvider(t, false, projectID, clusterName, 60, 5), + Config: configAWSProvider(t, false, projectID, clusterName, "REPLICASET", 60, 5), Check: checkReplicaSetAWSProvider(false, projectID, clusterName, 60, 5, true, true), }, }, diff --git a/internal/service/advancedcluster/resource_advanced_cluster_test.go b/internal/service/advancedcluster/resource_advanced_cluster_test.go index 313808dbbc..e1da696b17 100644 --- a/internal/service/advancedcluster/resource_advanced_cluster_test.go +++ b/internal/service/advancedcluster/resource_advanced_cluster_test.go @@ -203,11 +203,15 @@ func replicaSetAWSProviderTestCase(t *testing.T, isAcc bool) resource.TestCase { CheckDestroy: acc.CheckDestroyCluster, Steps: []resource.TestStep{ { - Config: configReplicaSetAWSProvider(t, isAcc, projectID, clusterName, 60, 3), + Config: configAWSProvider(t, isAcc, projectID, clusterName, "REPLICASET", 60, 3), Check: checkReplicaSetAWSProvider(isAcc, projectID, clusterName, 60, 3, true, true), }, { - Config: configReplicaSetAWSProvider(t, isAcc, projectID, clusterName, 50, 5), + Config: configAWSProvider(t, isAcc, projectID, clusterName, "REPLICASET", 50, 5), + Check: checkReplicaSetAWSProvider(isAcc, projectID, clusterName, 50, 5, true, true), + }, + { // testing transition from replica set to sharded cluster + Config: configAWSProvider(t, isAcc, projectID, clusterName, "SHARDED", 50, 5), Check: checkReplicaSetAWSProvider(isAcc, projectID, clusterName, 50, 5, true, true), }, acc.TestStepImportCluster(resourceName, "replication_specs", "retain_backups_enabled"), @@ -1603,21 +1607,21 @@ func checkKeyValueBlocksPreviewProviderV2(isAcc, includeDataSources bool, blockN return resource.ComposeAggregateTestCheckFunc(checks...) } -func configReplicaSetAWSProvider(t *testing.T, isAcc bool, projectID, name string, diskSizeGB, nodeCountElectable int) string { +func configAWSProvider(t *testing.T, isAcc bool, projectID, name, clusterType string, diskSizeGB, nodeCountElectable int) string { t.Helper() return acc.ConvertAdvancedClusterToPreviewProviderV2(t, isAcc, fmt.Sprintf(` resource "mongodbatlas_advanced_cluster" "test" { project_id = %[1]q name = %[2]q - cluster_type = "REPLICASET" + cluster_type = %[3]q retain_backups_enabled = "true" - disk_size_gb = %[3]d + disk_size_gb = %[4]d replication_specs { region_configs { electable_specs { instance_size = "M10" - node_count = %[4]d + node_count = %[5]d } analytics_specs { instance_size = "M10" @@ -1629,7 +1633,7 @@ func configReplicaSetAWSProvider(t *testing.T, isAcc bool, projectID, name strin } } } - `, projectID, name, diskSizeGB, nodeCountElectable)) + dataSourcesTFOldSchema + `, projectID, name, clusterType, diskSizeGB, nodeCountElectable)) + dataSourcesTFOldSchema } func checkReplicaSetAWSProvider(isAcc bool, projectID, name string, diskSizeGB, nodeCountElectable int, checkDiskSizeGBInnerLevel, checkExternalID bool) resource.TestCheckFunc { From c5cfb578964a6f74c6f355d322af6e8d24166872 Mon Sep 17 00:00:00 2001 From: Agustin Bettati Date: Tue, 11 Mar 2025 18:05:15 +0100 Subject: [PATCH 3/3] include cluster type in migration test --- .../advancedcluster/resource_advanced_cluster_migration_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go index cc1f2b992d..8d61683347 100644 --- a/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go +++ b/internal/service/advancedcluster/resource_advanced_cluster_migration_test.go @@ -55,6 +55,7 @@ func TestMigAdvancedCluster_replicaSetAWSProviderUpdate(t *testing.T) { Config: configAWSProvider(t, false, ReplicaSetAWSConfig{ ProjectID: projectID, ClusterName: clusterName, + ClusterType: "REPLICASET", DiskSizeGB: 60, NodeCountElectable: 3, WithAnalyticsSpecs: true, @@ -66,6 +67,7 @@ func TestMigAdvancedCluster_replicaSetAWSProviderUpdate(t *testing.T) { Config: configAWSProvider(t, false, ReplicaSetAWSConfig{ ProjectID: projectID, ClusterName: clusterName, + ClusterType: "REPLICASET", DiskSizeGB: 60, NodeCountElectable: 5, WithAnalyticsSpecs: true,