From 77fb6dcb2ed2c62b56676a1b7c210b0a424d8aca Mon Sep 17 00:00:00 2001 From: Michael Kinlock Date: Wed, 16 Aug 2023 06:18:36 +0200 Subject: [PATCH 01/14] Added missing configuration option for opensearch with standby --- CHANGELOG.md | 1 + internal/service/opensearch/domain.go | 12 ++++ .../service/opensearch/domain_data_source.go | 4 ++ internal/service/opensearch/domain_test.go | 71 +++++++++++++++++++ 4 files changed, 88 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 590293286cd6..29c9fdf74a0a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,7 @@ ENHANCEMENTS: * resource/aws_rds_cluster: Add `db_system_id` argument to support RDS Custom engine types ([#32846](https://github.com/hashicorp/terraform-provider-aws/issues/32846)) * resource/aws_rds_cluster_instance: Add `custom_iam_instance_profile` argument to allow RDS Custom users to specify an IAM Instance Profile for the RDS Cluster Instance ([#32846](https://github.com/hashicorp/terraform-provider-aws/issues/32846)) * resource/aws_rds_cluster_instance: Update `engine` plan-time validation to allow for RDS Custom engine types ([#32846](https://github.com/hashicorp/terraform-provider-aws/issues/32846)) +* resource/aws_opensearch_domain: Add cluster configuration function "multi az deployment with standby" ([#31373]https://github.com/hashicorp/terraform-provider-aws/issues/31373) BUG FIXES: diff --git a/internal/service/opensearch/domain.go b/internal/service/opensearch/domain.go index 6e10f2cf16f0..dcaf75853c07 100644 --- a/internal/service/opensearch/domain.go +++ b/internal/service/opensearch/domain.go @@ -305,6 +305,10 @@ func ResourceDomain() *schema.Resource { Type: schema.TypeBool, Optional: true, }, + "multi_az_with_standby_enabled": { + Type: schema.TypeBool, + Optional: true, + }, }, }, }, @@ -1205,6 +1209,7 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon if v, ok := m["instance_count"]; ok { config.InstanceCount = aws.Int64(int64(v.(int))) } + if v, ok := m["instance_type"]; ok { config.InstanceType = aws.String(v.(string)) } @@ -1239,6 +1244,10 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon } } + if v, ok := m["multi_az_with_standby_enabled"]; ok { + config.MultiAZWithStandbyEnabled = aws.Bool(v.(bool)) + } + return &config } @@ -1307,6 +1316,9 @@ func flattenClusterConfig(c *opensearchservice.ClusterConfig) []map[string]inter if c.WarmType != nil { m["warm_type"] = aws.StringValue(c.WarmType) } + if c.MultiAZWithStandbyEnabled != nil { + m["multi_az_with_standby_enabled"] = aws.BoolValue(c.MultiAZWithStandbyEnabled) + } return []map[string]interface{}{m} } diff --git a/internal/service/opensearch/domain_data_source.go b/internal/service/opensearch/domain_data_source.go index 5068ba647146..f59f65b8c189 100644 --- a/internal/service/opensearch/domain_data_source.go +++ b/internal/service/opensearch/domain_data_source.go @@ -169,6 +169,10 @@ func DataSourceDomain() *schema.Resource { Type: schema.TypeBool, Computed: true, }, + "multi_az_with_standby_enabled": { + Type: schema.TypeBool, + Computed: true, + }, }, }, }, diff --git a/internal/service/opensearch/domain_test.go b/internal/service/opensearch/domain_test.go index 3639fbe945e9..c25fd4285d15 100644 --- a/internal/service/opensearch/domain_test.go +++ b/internal/service/opensearch/domain_test.go @@ -502,6 +502,42 @@ func TestAccOpenSearchDomain_Cluster_update(t *testing.T) { }}) } +func TestAccOpenSearchDomain_Cluster_multiAzWithStandbyEnabled(t *testing.T) { + ctx := acctest.Context(t) + var domain opensearchservice.DomainStatus + rName := testAccRandomDomainName() + resourceName := "aws_opensearch_domain.test" + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { acctest.PreCheck(ctx, t) }, + ErrorCheck: acctest.ErrorCheck(t, opensearchservice.EndpointsID), + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories, + CheckDestroy: testAccCheckDomainDestroy(ctx), + Steps: []resource.TestStep{ + { + Config: testAccDomainConfig_multiAzWithStandbyEnabled(rName, true), + Check: resource.ComposeTestCheckFunc( + testAccCheckDomainExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "cluster_config.0.multi_az_with_standby_enabled", "true"), + ), + }, + { + ResourceName: resourceName, + ImportState: true, + ImportStateId: rName, + ImportStateVerify: true, + }, + { + Config: testAccDomainConfig_multiAzWithStandbyEnabled(rName, false), + Check: resource.ComposeTestCheckFunc( + testAccCheckDomainExists(ctx, resourceName, &domain), + resource.TestCheckResourceAttr(resourceName, "cluster_config.0.multi_az_with_standby_enabled", "false"), + ), + }, + }, + }) +} + func TestAccOpenSearchDomain_duplicate(t *testing.T) { ctx := acctest.Context(t) if testing.Short() { @@ -2358,6 +2394,41 @@ resource "aws_opensearch_domain" "test" { `, rName, enabled) } +func testAccDomainConfig_multiAzWithStandbyEnabled(rName string, enableStandby bool) string { + return fmt.Sprintf(` +resource "aws_opensearch_domain" "test" { + domain_name = %[1]q + + domain_endpoint_options { + enforce_https = true + tls_security_policy = "Policy-Min-TLS-1-0-2019-07" + } + + ebs_options { + ebs_enabled = true + volume_size = 10 + } + + auto_tune_options { + desired_state = "ENABLED" + rollback_on_disable = "NO_ROLLBACK" + } + + cluster_config { + instance_count = 3 + instance_type = "m6g.large.search" + zone_awareness_enabled = true + zone_awareness_config { + availability_zone_count = 3 + } + dedicated_master_enabled = true + dedicated_master_type = "m6g.large.search" + multi_az_with_standby_enabled = %[2]t + } +} +`, rName, enableStandby) +} + func testAccDomainConfig_clusterUpdate(rName string, instanceInt, snapshotInt int) string { return fmt.Sprintf(` resource "aws_opensearch_domain" "test" { From 9d641e36b879f674720ec3853d2b2bf583fedb08 Mon Sep 17 00:00:00 2001 From: Michael Kinlock Date: Wed, 16 Aug 2023 08:10:58 +0200 Subject: [PATCH 02/14] Added needed changelog file --- .changelog/33031.txt | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 .changelog/33031.txt diff --git a/.changelog/33031.txt b/.changelog/33031.txt new file mode 100644 index 000000000000..e062e87a9a87 --- /dev/null +++ b/.changelog/33031.txt @@ -0,0 +1,3 @@ +```release-note:enhancement +resource/aws_opensearch_domain: Add `multi_az_with_standby_enabled` argument +``` \ No newline at end of file From 5d85cd79a7f6307c06dfc5a35dfbb1d020f3a175 Mon Sep 17 00:00:00 2001 From: Michael Kinlock Date: Wed, 16 Aug 2023 08:55:32 +0200 Subject: [PATCH 03/14] Removed changelog changes --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 29c9fdf74a0a..590293286cd6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,7 +13,6 @@ ENHANCEMENTS: * resource/aws_rds_cluster: Add `db_system_id` argument to support RDS Custom engine types ([#32846](https://github.com/hashicorp/terraform-provider-aws/issues/32846)) * resource/aws_rds_cluster_instance: Add `custom_iam_instance_profile` argument to allow RDS Custom users to specify an IAM Instance Profile for the RDS Cluster Instance ([#32846](https://github.com/hashicorp/terraform-provider-aws/issues/32846)) * resource/aws_rds_cluster_instance: Update `engine` plan-time validation to allow for RDS Custom engine types ([#32846](https://github.com/hashicorp/terraform-provider-aws/issues/32846)) -* resource/aws_opensearch_domain: Add cluster configuration function "multi az deployment with standby" ([#31373]https://github.com/hashicorp/terraform-provider-aws/issues/31373) BUG FIXES: From b8c16ad59ec784ac533be6f79a3132cfdf62b416 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Aug 2023 10:41:06 -0400 Subject: [PATCH 04/14] Fix terrafmt errors. --- internal/service/opensearch/domain_test.go | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/internal/service/opensearch/domain_test.go b/internal/service/opensearch/domain_test.go index ffe215abba8e..846253430120 100644 --- a/internal/service/opensearch/domain_test.go +++ b/internal/service/opensearch/domain_test.go @@ -2410,20 +2410,22 @@ resource "aws_opensearch_domain" "test" { } auto_tune_options { - desired_state = "ENABLED" + desired_state = "ENABLED" rollback_on_disable = "NO_ROLLBACK" } cluster_config { - instance_count = 3 - instance_type = "m6g.large.search" - zone_awareness_enabled = true - zone_awareness_config { - availability_zone_count = 3 - } - dedicated_master_enabled = true - dedicated_master_type = "m6g.large.search" - multi_az_with_standby_enabled = %[2]t + instance_count = 3 + instance_type = "m6g.large.search" + zone_awareness_enabled = true + + zone_awareness_config { + availability_zone_count = 3 + } + + dedicated_master_enabled = true + dedicated_master_type = "m6g.large.search" + multi_az_with_standby_enabled = %[2]t } } `, rName, enableStandby) From 12ce033efc52e5c7b9db3853ab3b7f9229bb5351 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Fri, 25 Aug 2023 10:41:22 -0400 Subject: [PATCH 05/14] Tweak CHANGELOG. --- .changelog/33031.txt | 6 ++- internal/service/opensearch/domain.go | 44 +++++++++---------- .../service/opensearch/domain_data_source.go | 8 ++-- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/.changelog/33031.txt b/.changelog/33031.txt index e062e87a9a87..0b24a0510157 100644 --- a/.changelog/33031.txt +++ b/.changelog/33031.txt @@ -1,3 +1,7 @@ ```release-note:enhancement -resource/aws_opensearch_domain: Add `multi_az_with_standby_enabled` argument +resource/aws_opensearch_domain: Add `cluster_config.multi_az_with_standby_enabled` argument +``` + +```release-note:enhancement +data-source/aws_opensearch_domain: Add `cluster_config.multi_az_with_standby_enabled` attribute ``` \ No newline at end of file diff --git a/internal/service/opensearch/domain.go b/internal/service/opensearch/domain.go index 9504b1d3f822..e95337b1f300 100644 --- a/internal/service/opensearch/domain.go +++ b/internal/service/opensearch/domain.go @@ -271,6 +271,10 @@ func ResourceDomain() *schema.Resource { Optional: true, Default: opensearchservice.OpenSearchPartitionInstanceTypeM3MediumSearch, }, + "multi_az_with_standby_enabled": { + Type: schema.TypeBool, + Optional: true, + }, "warm_count": { Type: schema.TypeInt, Optional: true, @@ -305,10 +309,6 @@ func ResourceDomain() *schema.Resource { Type: schema.TypeBool, Optional: true, }, - "multi_az_with_standby_enabled": { - Type: schema.TypeBool, - Optional: true, - }, }, }, }, @@ -1192,6 +1192,10 @@ func flattenNodeToNodeEncryptionOptions(o *opensearchservice.NodeToNodeEncryptio func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterConfig { config := opensearchservice.ClusterConfig{} + if v, ok := m["cold_storage_options"]; ok { + config.ColdStorageOptions = expandColdStorageOptions(v.([]interface{})) + } + if v, ok := m["dedicated_master_enabled"]; ok { isEnabled := v.(bool) config.DedicatedMasterEnabled = aws.Bool(isEnabled) @@ -1214,19 +1218,8 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon config.InstanceType = aws.String(v.(string)) } - if v, ok := m["zone_awareness_enabled"]; ok { - isEnabled := v.(bool) - config.ZoneAwarenessEnabled = aws.Bool(isEnabled) - - if isEnabled { - if v, ok := m["zone_awareness_config"]; ok { - config.ZoneAwarenessConfig = expandZoneAwarenessConfig(v.([]interface{})) - } - } - } - - if v, ok := m["cold_storage_options"]; ok { - config.ColdStorageOptions = expandColdStorageOptions(v.([]interface{})) + if v, ok := m["multi_az_with_standby_enabled"]; ok { + config.MultiAZWithStandbyEnabled = aws.Bool(v.(bool)) } if v, ok := m["warm_enabled"]; ok { @@ -1244,8 +1237,15 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon } } - if v, ok := m["multi_az_with_standby_enabled"]; ok { - config.MultiAZWithStandbyEnabled = aws.Bool(v.(bool)) + if v, ok := m["zone_awareness_enabled"]; ok { + isEnabled := v.(bool) + config.ZoneAwarenessEnabled = aws.Bool(isEnabled) + + if isEnabled { + if v, ok := m["zone_awareness_config"]; ok { + config.ZoneAwarenessConfig = expandZoneAwarenessConfig(v.([]interface{})) + } + } } return &config @@ -1307,6 +1307,9 @@ func flattenClusterConfig(c *opensearchservice.ClusterConfig) []map[string]inter if c.InstanceType != nil { m["instance_type"] = aws.StringValue(c.InstanceType) } + if c.MultiAZWithStandbyEnabled != nil { + m["multi_az_with_standby_enabled"] = aws.BoolValue(c.MultiAZWithStandbyEnabled) + } if c.WarmEnabled != nil { m["warm_enabled"] = aws.BoolValue(c.WarmEnabled) } @@ -1316,9 +1319,6 @@ func flattenClusterConfig(c *opensearchservice.ClusterConfig) []map[string]inter if c.WarmType != nil { m["warm_type"] = aws.StringValue(c.WarmType) } - if c.MultiAZWithStandbyEnabled != nil { - m["multi_az_with_standby_enabled"] = aws.BoolValue(c.MultiAZWithStandbyEnabled) - } return []map[string]interface{}{m} } diff --git a/internal/service/opensearch/domain_data_source.go b/internal/service/opensearch/domain_data_source.go index 2a62e32a14db..9789e1d15a35 100644 --- a/internal/service/opensearch/domain_data_source.go +++ b/internal/service/opensearch/domain_data_source.go @@ -141,6 +141,10 @@ func DataSourceDomain() *schema.Resource { Type: schema.TypeString, Computed: true, }, + "multi_az_with_standby_enabled": { + Type: schema.TypeBool, + Computed: true, + }, "warm_count": { Type: schema.TypeInt, Computed: true, @@ -169,10 +173,6 @@ func DataSourceDomain() *schema.Resource { Type: schema.TypeBool, Computed: true, }, - "multi_az_with_standby_enabled": { - Type: schema.TypeBool, - Computed: true, - }, }, }, }, From b71e73e5907ace6ab369771ef317befc2aa9037f Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Aug 2023 09:15:49 -0400 Subject: [PATCH 06/14] r/aws_opensearch_domain: Suppress 'dedicated_master_count' diffs if 'multi_az_with_standby_enabled' is true. --- internal/service/opensearch/domain.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/opensearch/domain.go b/internal/service/opensearch/domain.go index e95337b1f300..d0c34c93ba5a 100644 --- a/internal/service/opensearch/domain.go +++ b/internal/service/opensearch/domain.go @@ -1153,7 +1153,7 @@ func isDedicatedMasterDisabled(k, old, new string, d *schema.ResourceData) bool v, ok := d.GetOk("cluster_config") if ok { clusterConfig := v.([]interface{})[0].(map[string]interface{}) - return !clusterConfig["dedicated_master_enabled"].(bool) + return !clusterConfig["dedicated_master_enabled"].(bool) || clusterConfig["multi_az_with_standby_enabled"].(bool) } return false } From e66ead49dd2fc122388cf4fd4531ee29ff0e4cbd Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Aug 2023 09:16:47 -0400 Subject: [PATCH 07/14] Fix terrafmt error. --- internal/service/opensearch/domain_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/opensearch/domain_test.go b/internal/service/opensearch/domain_test.go index 846253430120..09eaa0f215bb 100644 --- a/internal/service/opensearch/domain_test.go +++ b/internal/service/opensearch/domain_test.go @@ -2425,7 +2425,7 @@ resource "aws_opensearch_domain" "test" { dedicated_master_enabled = true dedicated_master_type = "m6g.large.search" - multi_az_with_standby_enabled = %[2]t + multi_az_with_standby_enabled = %[2]t } } `, rName, enableStandby) From c1802f3c5f09c6010f6364eb56aa1ab2c87d9054 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Tue, 29 Aug 2023 09:19:03 -0400 Subject: [PATCH 08/14] 'isDedicatedMasterDisabled' -> 'suppressComputedDedicatedMaster'. --- internal/service/opensearch/domain.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/service/opensearch/domain.go b/internal/service/opensearch/domain.go index d0c34c93ba5a..184c22b5b9ca 100644 --- a/internal/service/opensearch/domain.go +++ b/internal/service/opensearch/domain.go @@ -249,7 +249,7 @@ func ResourceDomain() *schema.Resource { "dedicated_master_count": { Type: schema.TypeInt, Optional: true, - DiffSuppressFunc: isDedicatedMasterDisabled, + DiffSuppressFunc: suppressComputedDedicatedMaster, }, "dedicated_master_enabled": { Type: schema.TypeBool, @@ -259,7 +259,7 @@ func ResourceDomain() *schema.Resource { "dedicated_master_type": { Type: schema.TypeString, Optional: true, - DiffSuppressFunc: isDedicatedMasterDisabled, + DiffSuppressFunc: suppressComputedDedicatedMaster, }, "instance_count": { Type: schema.TypeInt, @@ -1149,7 +1149,7 @@ func getKibanaEndpoint(d *schema.ResourceData) string { return d.Get("endpoint").(string) + "/_plugin/kibana/" } -func isDedicatedMasterDisabled(k, old, new string, d *schema.ResourceData) bool { +func suppressComputedDedicatedMaster(k, old, new string, d *schema.ResourceData) bool { v, ok := d.GetOk("cluster_config") if ok { clusterConfig := v.([]interface{})[0].(map[string]interface{}) From 726175f26aed862d9f661ee33535877cbd640aa6 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Aug 2023 09:09:57 -0400 Subject: [PATCH 09/14] r/aws_opensearch_domain: Mark `cluster_config.dedicated_master_count` and `cluster_config.dedicated_master_type` as Computed. --- .changelog/33031.txt | 4 +++ internal/service/opensearch/domain.go | 37 ++++++++++++++------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/.changelog/33031.txt b/.changelog/33031.txt index 0b24a0510157..066d08d97563 100644 --- a/.changelog/33031.txt +++ b/.changelog/33031.txt @@ -4,4 +4,8 @@ resource/aws_opensearch_domain: Add `cluster_config.multi_az_with_standby_enable ```release-note:enhancement data-source/aws_opensearch_domain: Add `cluster_config.multi_az_with_standby_enabled` attribute +``` + +```release-note:bug +resource/aws_opensearch_domain: Mark `cluster_config.dedicated_master_count` and `cluster_config.dedicated_master_type` as Computed ``` \ No newline at end of file diff --git a/internal/service/opensearch/domain.go b/internal/service/opensearch/domain.go index 184c22b5b9ca..8a0234682970 100644 --- a/internal/service/opensearch/domain.go +++ b/internal/service/opensearch/domain.go @@ -247,9 +247,9 @@ func ResourceDomain() *schema.Resource { }, }, "dedicated_master_count": { - Type: schema.TypeInt, - Optional: true, - DiffSuppressFunc: suppressComputedDedicatedMaster, + Type: schema.TypeInt, + Optional: true, + Computed: true, }, "dedicated_master_enabled": { Type: schema.TypeBool, @@ -257,9 +257,9 @@ func ResourceDomain() *schema.Resource { Default: false, }, "dedicated_master_type": { - Type: schema.TypeString, - Optional: true, - DiffSuppressFunc: suppressComputedDedicatedMaster, + Type: schema.TypeString, + Optional: true, + Computed: true, }, "instance_count": { Type: schema.TypeInt, @@ -1149,15 +1149,6 @@ func getKibanaEndpoint(d *schema.ResourceData) string { return d.Get("endpoint").(string) + "/_plugin/kibana/" } -func suppressComputedDedicatedMaster(k, old, new string, d *schema.ResourceData) bool { - v, ok := d.GetOk("cluster_config") - if ok { - clusterConfig := v.([]interface{})[0].(map[string]interface{}) - return !clusterConfig["dedicated_master_enabled"].(bool) || clusterConfig["multi_az_with_standby_enabled"].(bool) - } - return false -} - func isCustomEndpointDisabled(k, old, new string, d *schema.ResourceData) bool { v, ok := d.GetOk("domain_endpoint_options") if ok { @@ -1190,7 +1181,7 @@ func flattenNodeToNodeEncryptionOptions(o *opensearchservice.NodeToNodeEncryptio } func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterConfig { - config := opensearchservice.ClusterConfig{} + config := &opensearchservice.ClusterConfig{} if v, ok := m["cold_storage_options"]; ok { config.ColdStorageOptions = expandColdStorageOptions(v.([]interface{})) @@ -1219,7 +1210,17 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon } if v, ok := m["multi_az_with_standby_enabled"]; ok { - config.MultiAZWithStandbyEnabled = aws.Bool(v.(bool)) + isEnabled := v.(bool) + config.MultiAZWithStandbyEnabled = aws.Bool(isEnabled) + + if isEnabled { + if v, ok := m["dedicated_master_count"]; ok && v.(int) > 0 { + config.DedicatedMasterCount = aws.Int64(int64(v.(int))) + } + if v, ok := m["dedicated_master_type"]; ok && v.(string) != "" { + config.DedicatedMasterType = aws.String(v.(string)) + } + } } if v, ok := m["warm_enabled"]; ok { @@ -1248,7 +1249,7 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon } } - return &config + return config } func expandZoneAwarenessConfig(l []interface{}) *opensearchservice.ZoneAwarenessConfig { From ccf6f47351ddfe52d3403d3bae179b12b54c1f14 Mon Sep 17 00:00:00 2001 From: Michael Kinlock Date: Wed, 30 Aug 2023 19:38:38 +0200 Subject: [PATCH 10/14] Fixed acc-test and reverted suppressComputedDedicatedMaster changes --- internal/service/opensearch/domain.go | 2 +- internal/service/opensearch/domain_test.go | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/internal/service/opensearch/domain.go b/internal/service/opensearch/domain.go index 184c22b5b9ca..ba0d57a71ae3 100644 --- a/internal/service/opensearch/domain.go +++ b/internal/service/opensearch/domain.go @@ -1153,7 +1153,7 @@ func suppressComputedDedicatedMaster(k, old, new string, d *schema.ResourceData) v, ok := d.GetOk("cluster_config") if ok { clusterConfig := v.([]interface{})[0].(map[string]interface{}) - return !clusterConfig["dedicated_master_enabled"].(bool) || clusterConfig["multi_az_with_standby_enabled"].(bool) + return !clusterConfig["dedicated_master_enabled"].(bool) } return false } diff --git a/internal/service/opensearch/domain_test.go b/internal/service/opensearch/domain_test.go index 09eaa0f215bb..4893b194b770 100644 --- a/internal/service/opensearch/domain_test.go +++ b/internal/service/opensearch/domain_test.go @@ -2397,7 +2397,8 @@ resource "aws_opensearch_domain" "test" { func testAccDomainConfig_multiAzWithStandbyEnabled(rName string, enableStandby bool) string { return fmt.Sprintf(` resource "aws_opensearch_domain" "test" { - domain_name = %[1]q + domain_name = %[1]q + engine_version = "OpenSearch_2.7" domain_endpoint_options { enforce_https = true @@ -2406,7 +2407,7 @@ resource "aws_opensearch_domain" "test" { ebs_options { ebs_enabled = true - volume_size = 10 + volume_size = 20 } auto_tune_options { @@ -2415,16 +2416,17 @@ resource "aws_opensearch_domain" "test" { } cluster_config { - instance_count = 3 - instance_type = "m6g.large.search" - zone_awareness_enabled = true + zone_awareness_enabled = true + instance_count = 3 + instance_type = "m6g.large.search" + dedicated_master_enabled = true + dedicated_master_count = 3 + dedicated_master_type = "m6g.large.search" zone_awareness_config { availability_zone_count = 3 } - - dedicated_master_enabled = true - dedicated_master_type = "m6g.large.search" + multi_az_with_standby_enabled = %[2]t } } From bb1c321b5662a1ea51cc50b1b0333f10db68250a Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Aug 2023 15:01:48 -0400 Subject: [PATCH 11/14] Revert "r/aws_opensearch_domain: Mark `cluster_config.dedicated_master_count` and `cluster_config.dedicated_master_type` as Computed." This reverts commit 726175f26aed862d9f661ee33535877cbd640aa6. --- .changelog/33031.txt | 4 --- internal/service/opensearch/domain.go | 37 +++++++++++++-------------- 2 files changed, 18 insertions(+), 23 deletions(-) diff --git a/.changelog/33031.txt b/.changelog/33031.txt index 066d08d97563..0b24a0510157 100644 --- a/.changelog/33031.txt +++ b/.changelog/33031.txt @@ -4,8 +4,4 @@ resource/aws_opensearch_domain: Add `cluster_config.multi_az_with_standby_enable ```release-note:enhancement data-source/aws_opensearch_domain: Add `cluster_config.multi_az_with_standby_enabled` attribute -``` - -```release-note:bug -resource/aws_opensearch_domain: Mark `cluster_config.dedicated_master_count` and `cluster_config.dedicated_master_type` as Computed ``` \ No newline at end of file diff --git a/internal/service/opensearch/domain.go b/internal/service/opensearch/domain.go index 8a0234682970..184c22b5b9ca 100644 --- a/internal/service/opensearch/domain.go +++ b/internal/service/opensearch/domain.go @@ -247,9 +247,9 @@ func ResourceDomain() *schema.Resource { }, }, "dedicated_master_count": { - Type: schema.TypeInt, - Optional: true, - Computed: true, + Type: schema.TypeInt, + Optional: true, + DiffSuppressFunc: suppressComputedDedicatedMaster, }, "dedicated_master_enabled": { Type: schema.TypeBool, @@ -257,9 +257,9 @@ func ResourceDomain() *schema.Resource { Default: false, }, "dedicated_master_type": { - Type: schema.TypeString, - Optional: true, - Computed: true, + Type: schema.TypeString, + Optional: true, + DiffSuppressFunc: suppressComputedDedicatedMaster, }, "instance_count": { Type: schema.TypeInt, @@ -1149,6 +1149,15 @@ func getKibanaEndpoint(d *schema.ResourceData) string { return d.Get("endpoint").(string) + "/_plugin/kibana/" } +func suppressComputedDedicatedMaster(k, old, new string, d *schema.ResourceData) bool { + v, ok := d.GetOk("cluster_config") + if ok { + clusterConfig := v.([]interface{})[0].(map[string]interface{}) + return !clusterConfig["dedicated_master_enabled"].(bool) || clusterConfig["multi_az_with_standby_enabled"].(bool) + } + return false +} + func isCustomEndpointDisabled(k, old, new string, d *schema.ResourceData) bool { v, ok := d.GetOk("domain_endpoint_options") if ok { @@ -1181,7 +1190,7 @@ func flattenNodeToNodeEncryptionOptions(o *opensearchservice.NodeToNodeEncryptio } func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterConfig { - config := &opensearchservice.ClusterConfig{} + config := opensearchservice.ClusterConfig{} if v, ok := m["cold_storage_options"]; ok { config.ColdStorageOptions = expandColdStorageOptions(v.([]interface{})) @@ -1210,17 +1219,7 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon } if v, ok := m["multi_az_with_standby_enabled"]; ok { - isEnabled := v.(bool) - config.MultiAZWithStandbyEnabled = aws.Bool(isEnabled) - - if isEnabled { - if v, ok := m["dedicated_master_count"]; ok && v.(int) > 0 { - config.DedicatedMasterCount = aws.Int64(int64(v.(int))) - } - if v, ok := m["dedicated_master_type"]; ok && v.(string) != "" { - config.DedicatedMasterType = aws.String(v.(string)) - } - } + config.MultiAZWithStandbyEnabled = aws.Bool(v.(bool)) } if v, ok := m["warm_enabled"]; ok { @@ -1249,7 +1248,7 @@ func expandClusterConfig(m map[string]interface{}) *opensearchservice.ClusterCon } } - return config + return &config } func expandZoneAwarenessConfig(l []interface{}) *opensearchservice.ZoneAwarenessConfig { From a17413880a9e41b751a287fc16a212c4721ae158 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Aug 2023 15:04:54 -0400 Subject: [PATCH 12/14] Fix terrafmt errors. --- internal/service/opensearch/domain_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/opensearch/domain_test.go b/internal/service/opensearch/domain_test.go index 4893b194b770..33fb2958647d 100644 --- a/internal/service/opensearch/domain_test.go +++ b/internal/service/opensearch/domain_test.go @@ -2419,8 +2419,8 @@ resource "aws_opensearch_domain" "test" { zone_awareness_enabled = true instance_count = 3 instance_type = "m6g.large.search" - dedicated_master_enabled = true - dedicated_master_count = 3 + dedicated_master_enabled = true + dedicated_master_count = 3 dedicated_master_type = "m6g.large.search" zone_awareness_config { From e4ef302df48290c0fc21a82c8cd2e76f2d7602c5 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Aug 2023 15:06:19 -0400 Subject: [PATCH 13/14] Fix terrafmt errors. --- internal/service/opensearch/domain_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/service/opensearch/domain_test.go b/internal/service/opensearch/domain_test.go index 33fb2958647d..ed4682f03c29 100644 --- a/internal/service/opensearch/domain_test.go +++ b/internal/service/opensearch/domain_test.go @@ -2416,11 +2416,11 @@ resource "aws_opensearch_domain" "test" { } cluster_config { - zone_awareness_enabled = true + zone_awareness_enabled = true instance_count = 3 instance_type = "m6g.large.search" dedicated_master_enabled = true - dedicated_master_count = 3 + dedicated_master_count = 3 dedicated_master_type = "m6g.large.search" zone_awareness_config { From 9ba3479f10e3dc9e9b4d0ec94199e918c2ca2758 Mon Sep 17 00:00:00 2001 From: Kit Ewbank Date: Wed, 30 Aug 2023 15:10:45 -0400 Subject: [PATCH 14/14] Fix terrafmt errors. --- internal/service/opensearch/domain_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/service/opensearch/domain_test.go b/internal/service/opensearch/domain_test.go index ed4682f03c29..dd35eefb52c6 100644 --- a/internal/service/opensearch/domain_test.go +++ b/internal/service/opensearch/domain_test.go @@ -2426,7 +2426,7 @@ resource "aws_opensearch_domain" "test" { zone_awareness_config { availability_zone_count = 3 } - + multi_az_with_standby_enabled = %[2]t } }