From a72bba129a7d34dce351ef293274a7f412a5dcdb Mon Sep 17 00:00:00 2001 From: bill-rich Date: Wed, 24 Feb 2021 13:46:45 -0800 Subject: [PATCH] Add StateFunc --- .changelog/17909.txt | 3 + aws/resource_aws_db_parameter_group.go | 8 ++- aws/resource_aws_db_parameter_group_test.go | 73 +++++++++++++++++++-- 3 files changed, 77 insertions(+), 7 deletions(-) create mode 100644 .changelog/17909.txt diff --git a/.changelog/17909.txt b/.changelog/17909.txt new file mode 100644 index 000000000000..367f7ef6b325 --- /dev/null +++ b/.changelog/17909.txt @@ -0,0 +1,3 @@ +```release-note:bug +resource/aws_db_parameter_group: Store all values in lowercase to prevent unexpected diffs +``` diff --git a/aws/resource_aws_db_parameter_group.go b/aws/resource_aws_db_parameter_group.go index 197f93b3a146..43b1d411813b 100644 --- a/aws/resource_aws_db_parameter_group.go +++ b/aws/resource_aws_db_parameter_group.go @@ -70,11 +70,17 @@ func resourceAwsDbParameterGroup() *schema.Resource { "value": { Type: schema.TypeString, Required: true, + StateFunc: func(v interface{}) string { + return strings.ToLower(v.(string)) + }, }, "apply_method": { Type: schema.TypeString, Optional: true, - Default: "immediate", + StateFunc: func(v interface{}) string { + return strings.ToLower(v.(string)) + }, + Default: "immediate", }, }, }, diff --git a/aws/resource_aws_db_parameter_group_test.go b/aws/resource_aws_db_parameter_group_test.go index 74ff03b9b5e2..ab6c014e09e8 100644 --- a/aws/resource_aws_db_parameter_group_test.go +++ b/aws/resource_aws_db_parameter_group_test.go @@ -166,6 +166,22 @@ func TestAccAWSDBParameterGroup_basic(t *testing.T) { }) } +func TestAccAWSDBParameterGroup_caseWithMixedParameters(t *testing.T) { + groupName := fmt.Sprintf("parameter-group-test-terraform-%d", acctest.RandInt()) + + resource.ParallelTest(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckAWSDBParameterGroupDestroy, + Steps: []resource.TestStep{ + { + Config: testAccAWSDBParameterGroupConfigCaseWithMixedParameters(groupName), + Check: resource.ComposeTestCheckFunc(), + }, + }, + }) +} + func TestAccAWSDBParameterGroup_limit(t *testing.T) { var v rds.DBParameterGroup resourceName := "aws_db_parameter_group.test" @@ -286,7 +302,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) { }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "event_scheduler", - "value": "ON", + "value": "on", }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "innodb_buffer_pool_dump_at_shutdown", @@ -322,7 +338,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) { }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "log_output", - "value": "FILE", + "value": "file", }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "max_allowed_packet", @@ -346,7 +362,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) { }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "tx_isolation", - "value": "REPEATABLE-READ", + "value": "repeatable-read", }), ), }, @@ -465,7 +481,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) { }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "event_scheduler", - "value": "ON", + "value": "on", }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "innodb_buffer_pool_dump_at_shutdown", @@ -501,7 +517,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) { }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "log_output", - "value": "FILE", + "value": "file", }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "max_allowed_packet", @@ -525,7 +541,7 @@ func TestAccAWSDBParameterGroup_limit(t *testing.T) { }), resource.TestCheckTypeSetElemNestedAttrs(resourceName, "parameter.*", map[string]string{ "name": "tx_isolation", - "value": "REPEATABLE-READ", + "value": "repeatable-read", }), ), }, @@ -907,6 +923,51 @@ resource "aws_db_parameter_group" "test" { `, n) } +func testAccAWSDBParameterGroupConfigCaseWithMixedParameters(n string) string { + return composeConfig(testAccAWSDBInstanceConfig_orderableClassMysql(), fmt.Sprintf(` +resource "aws_db_parameter_group" "test" { + name = %[1]q + family = "mysql5.6" + + parameter { + name = "character_set_server" + value = "utf8mb4" + apply_method = "pending-reboot" + } + parameter { + name = "innodb_large_prefix" + value = 1 + apply_method = "pending-reboot" + } + parameter { + name = "innodb_file_format" + value = "Barracuda" + apply_method = "pending-reboot" + } + parameter { + name = "innodb_log_file_size" + value = 2147483648 + apply_method = "pending-reboot" + } + parameter { + name = "sql_mode" + value = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" + apply_method = "pending-reboot" + } + parameter { + name = "innodb_log_buffer_size" + value = 268435456 + apply_method = "pending-reboot" + } + parameter { + name = "max_allowed_packet" + value = 268435456 + apply_method = "pending-reboot" + } +} +`, n)) +} + func testAccAWSDBParameterGroupConfigWithApplyMethod(n string) string { return fmt.Sprintf(` resource "aws_db_parameter_group" "test" {