Skip to content

Commit fd9edb3

Browse files
authored
fix replication_specs behaviour when update cluster (#573)
1 parent c008f6f commit fd9edb3

File tree

2 files changed

+46
-24
lines changed

2 files changed

+46
-24
lines changed

mongodbatlas/resource_mongodbatlas_cluster.go

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1168,6 +1168,7 @@ func expandReplicationSpecs(d *schema.ResourceData) ([]matlas.ReplicationSpec, e
11681168

11691169
replaceRegion := ""
11701170
originalRegion := ""
1171+
id := ""
11711172

11721173
if okPRName && d.Get("provider_name").(string) == "GCP" && cast.ToString(d.Get("cluster_type")) == "REPLICASET" {
11731174
if d.HasChange("provider_region_name") {
@@ -1177,13 +1178,25 @@ func expandReplicationSpecs(d *schema.ResourceData) ([]matlas.ReplicationSpec, e
11771178
}
11781179
}
11791180

1181+
if d.HasChange("replication_specs") {
1182+
// Get original and new object
1183+
original, _ := d.GetChange("replication_specs")
1184+
for _, s := range original.(*schema.Set).List() {
1185+
oldSpecs := s.(map[string]interface{})
1186+
if spec["zone_name"].(string) == cast.ToString(oldSpecs["zone_name"]) {
1187+
id = oldSpecs["id"].(string)
1188+
break
1189+
}
1190+
}
1191+
}
1192+
11801193
regionsConfig, err := expandRegionsConfig(spec["regions_config"].(*schema.Set).List(), originalRegion, replaceRegion)
11811194
if err != nil {
11821195
return rSpecs, err
11831196
}
11841197

11851198
rSpec := matlas.ReplicationSpec{
1186-
ID: cast.ToString(spec["id"]),
1199+
ID: id,
11871200
NumShards: pointy.Int64(cast.ToInt64(spec["num_shards"])),
11881201
ZoneName: cast.ToString(spec["zone_name"]),
11891202
RegionsConfig: regionsConfig,

mongodbatlas/resource_mongodbatlas_cluster_test.go

Lines changed: 32 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -461,13 +461,39 @@ func TestAccResourceMongoDBAtlasCluster_MultiRegion(t *testing.T) {
461461
name = fmt.Sprintf("test-acc-multi-%s", acctest.RandString(10))
462462
)
463463

464+
createRegionsConfig := `regions_config {
465+
region_name = "US_EAST_1"
466+
electable_nodes = 3
467+
priority = 7
468+
read_only_nodes = 0
469+
}`
470+
471+
updatedRegionsConfig := `regions_config {
472+
region_name = "US_WEST_2"
473+
electable_nodes = 3
474+
priority = 6
475+
read_only_nodes = 0
476+
}
477+
regions_config {
478+
region_name = "US_WEST_1"
479+
electable_nodes = 1
480+
priority = 5
481+
read_only_nodes = 0
482+
}
483+
regions_config {
484+
region_name = "US_EAST_1"
485+
electable_nodes = 3
486+
priority = 7
487+
read_only_nodes = 0
488+
}`
489+
464490
resource.ParallelTest(t, resource.TestCase{
465491
PreCheck: func() { testAccPreCheck(t) },
466492
ProviderFactories: testAccProviderFactories,
467493
CheckDestroy: testAccCheckMongoDBAtlasClusterDestroy,
468494
Steps: []resource.TestStep{
469495
{
470-
Config: testAccMongoDBAtlasClusterConfigMultiRegion(projectID, name, "true"),
496+
Config: testAccMongoDBAtlasClusterConfigMultiRegion(projectID, name, "true", createRegionsConfig),
471497
Check: resource.ComposeTestCheckFunc(
472498
testAccCheckMongoDBAtlasClusterExists(resourceName, &cluster),
473499
testAccCheckMongoDBAtlasClusterAttributes(&cluster, name),
@@ -479,11 +505,11 @@ func TestAccResourceMongoDBAtlasCluster_MultiRegion(t *testing.T) {
479505
resource.TestCheckResourceAttr(resourceName, "disk_size_gb", "100"),
480506
resource.TestCheckResourceAttr(resourceName, "cluster_type", "REPLICASET"),
481507
resource.TestCheckResourceAttr(resourceName, "replication_specs.#", "1"),
482-
resource.TestCheckResourceAttr(resourceName, "replication_specs.0.regions_config.#", "3"),
508+
resource.TestCheckResourceAttr(resourceName, "replication_specs.0.regions_config.#", "1"),
483509
),
484510
},
485511
{
486-
Config: testAccMongoDBAtlasClusterConfigMultiRegion(projectID, name, "false"),
512+
Config: testAccMongoDBAtlasClusterConfigMultiRegion(projectID, name, "false", updatedRegionsConfig),
487513
Check: resource.ComposeTestCheckFunc(
488514
testAccCheckMongoDBAtlasClusterExists(resourceName, &cluster),
489515
testAccCheckMongoDBAtlasClusterAttributes(&cluster, name),
@@ -1458,7 +1484,7 @@ func testAccMongoDBAtlasClusterConfigGCPWithBiConnector(projectID, name, backupE
14581484
`, projectID, name, backupEnabled, biConnectorEnabled)
14591485
}
14601486

1461-
func testAccMongoDBAtlasClusterConfigMultiRegion(projectID, name, backupEnabled string) string {
1487+
func testAccMongoDBAtlasClusterConfigMultiRegion(projectID, name, backupEnabled, regionsConfig string) string {
14621488
return fmt.Sprintf(`
14631489
resource "mongodbatlas_cluster" "multi_region" {
14641490
project_id = "%s"
@@ -1475,27 +1501,10 @@ func testAccMongoDBAtlasClusterConfigMultiRegion(projectID, name, backupEnabled
14751501
replication_specs {
14761502
num_shards = 1
14771503
1478-
regions_config {
1479-
region_name = "US_WEST_2"
1480-
electable_nodes = 3
1481-
priority = 7
1482-
read_only_nodes = 0
1483-
}
1484-
regions_config {
1485-
region_name = "EU_CENTRAL_1"
1486-
electable_nodes = 2
1487-
priority = 6
1488-
read_only_nodes = 0
1489-
}
1490-
regions_config {
1491-
region_name = "US_WEST_1"
1492-
electable_nodes = 2
1493-
priority = 5
1494-
read_only_nodes = 2
1495-
}
1504+
%s
14961505
}
14971506
}
1498-
`, projectID, name, backupEnabled)
1507+
`, projectID, name, backupEnabled, regionsConfig)
14991508
}
15001509

15011510
func testAccMongoDBAtlasClusterConfigGlobal(projectID, name, backupEnabled string) string {

0 commit comments

Comments
 (0)