Skip to content

Commit

Permalink
Add db_instance_parameter_group_name argument for rds_cluster
Browse files Browse the repository at this point in the history
  • Loading branch information
mantoine96 authored and YakDriver committed Oct 13, 2021
1 parent b95b4fa commit 581b594
Show file tree
Hide file tree
Showing 3 changed files with 123 additions and 0 deletions.
10 changes: 10 additions & 0 deletions aws/resource_aws_rds_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,6 +117,11 @@ func resourceAwsRDSCluster() *schema.Resource {
Computed: true,
},

"db_instance_parameter_group_name": {
Type: schema.TypeString,
Optional: true,
},

"deletion_protection": {
Type: schema.TypeBool,
Optional: true,
Expand Down Expand Up @@ -1153,6 +1158,11 @@ func resourceAwsRDSClusterUpdate(d *schema.ResourceData, meta interface{}) error
requestUpdate = true
}

if d.HasChange("db_instance_parameter_group_name") {
req.DBInstanceParameterGroupName = aws.String(d.Get("db_instance_parameter_group_name").(string))
requestUpdate = true
}

if d.HasChange("master_password") {
req.MasterUserPassword = aws.String(d.Get("master_password").(string))
requestUpdate = true
Expand Down
112 changes: 112 additions & 0 deletions aws/resource_aws_rds_cluster_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,7 @@ func TestAccAWSRDSCluster_AllowMajorVersionUpgrade(t *testing.T) {
"allow_major_version_upgrade",
"apply_immediately",
"cluster_identifier_prefix",
"db_instance_parameter_group_name",
"master_password",
"skip_final_snapshot",
},
Expand Down Expand Up @@ -2345,6 +2346,60 @@ func TestAccAWSRDSCluster_SnapshotIdentifier_EncryptedRestore(t *testing.T) {
})
}

func TestAccAWSRDSCluster_AllowMajorVersionUpgradeWithCustomParameterGroups(t *testing.T) {
var dbCluster1, dbCluster2 rds.DBCluster
rName := acctest.RandomWithPrefix("tf-acc-test")
resourceName := "aws_rds_cluster.test"
// If these hardcoded versions become a maintenance burden, use DescribeDBEngineVersions
// either by having a new data source created or implementing the testing similar
// to TestAccAWSDmsReplicationInstance_EngineVersion
engine := "aurora-postgresql"
engineVersion1 := "10.11"
engineFamily1 := "aurora-postgresql10"
engineVersion2 := "11.7"
engineFamily2 := "aurora-postgresql11"

resource.ParallelTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ErrorCheck: testAccErrorCheck(t, rds.EndpointsID),
Providers: testAccProviders,
CheckDestroy: testAccCheckAWSClusterDestroy,
Steps: []resource.TestStep{
{
Config: testAccAWSClusterConfig_AllowMajorVersionUpgradeWithCustomParameterGroups(rName, true, engine, engineVersion1, engineFamily1),
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSClusterExists(resourceName, &dbCluster1),
resource.TestCheckResourceAttr(resourceName, "allow_major_version_upgrade", "true"),
resource.TestCheckResourceAttr(resourceName, "engine", engine),
resource.TestCheckResourceAttr(resourceName, "engine_version", engineVersion1),
),
},
{
ResourceName: resourceName,
ImportState: true,
ImportStateVerify: true,
ImportStateVerifyIgnore: []string{
"allow_major_version_upgrade",
"apply_immediately",
"cluster_identifier_prefix",
"db_instance_parameter_group_name",
"master_password",
"skip_final_snapshot",
},
},
{
Config: testAccAWSClusterConfig_AllowMajorVersionUpgradeWithCustomParameterGroups(rName, true, engine, engineVersion2, engineFamily2),
Check: resource.ComposeTestCheckFunc(
testAccCheckAWSClusterExists(resourceName, &dbCluster2),
resource.TestCheckResourceAttr(resourceName, "allow_major_version_upgrade", "true"),
resource.TestCheckResourceAttr(resourceName, "engine", engine),
resource.TestCheckResourceAttr(resourceName, "engine_version", engineVersion2),
),
},
},
})
}

func testAccCheckAWSClusterDestroy(s *terraform.State) error {
return testAccCheckAWSClusterDestroyWithProvider(s, testAccProvider)
}
Expand Down Expand Up @@ -4296,3 +4351,60 @@ resource "aws_rds_cluster" "test" {
}
`, rName, enableHttpEndpoint)
}

func testAccAWSClusterConfig_AllowMajorVersionUpgradeWithCustomParameterGroups(rName string, allowMajorVersionUpgrade bool, engine string, engineVersion string, engineFamily string) string {
return fmt.Sprintf(`
resource "aws_rds_cluster" "test" {
allow_major_version_upgrade = %[1]t
apply_immediately = true
cluster_identifier = %[2]q
db_cluster_parameter_group_name = aws_rds_cluster_parameter_group.cluster_parameter_group.name
db_instance_parameter_group_name = aws_db_parameter_group.instance_parameter_group.name
engine = %[3]q
engine_version = %[4]q
master_password = "mustbeeightcharaters"
master_username = "test"
skip_final_snapshot = true
}
data "aws_rds_orderable_db_instance" "test" {
engine = aws_rds_cluster.test.engine
engine_version = aws_rds_cluster.test.engine_version
preferred_instance_classes = ["db.t3.medium", "db.r5.large", "db.r4.large"]
}
resource "aws_rds_cluster_parameter_group" "cluster_parameter_group" {
name = "%[2]s-cluster-pg-%[5]s"
family = %[5]q
lifecycle {
create_before_destroy = true
}
}
resource "aws_db_parameter_group" "instance_parameter_group" {
name = "%[2]s-instance-pg-%[5]s"
family = %[5]q
lifecycle {
create_before_destroy = true
}
}
# Upgrading requires a healthy primary instance
resource "aws_rds_cluster_instance" "test" {
cluster_identifier = aws_rds_cluster.test.id
db_parameter_group_name = aws_db_parameter_group.instance_parameter_group.name
engine = data.aws_rds_orderable_db_instance.test.engine
engine_version = data.aws_rds_orderable_db_instance.test.engine_version
identifier = %[2]q
instance_class = data.aws_rds_orderable_db_instance.test.instance_class
lifecycle {
ignore_changes = [engine_version]
}
}
`, allowMajorVersionUpgrade, rName, engine, engineVersion, engineFamily)
}
1 change: 1 addition & 0 deletions website/docs/r/rds_cluster.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ The following arguments are supported:
* `copy_tags_to_snapshot` – (Optional, boolean) Copy all Cluster `tags` to snapshots. Default is `false`.
* `database_name` - (Optional) Name for an automatically created database on cluster creation. There are different naming restrictions per database engine: [RDS Naming Constraints][5]
* `db_cluster_parameter_group_name` - (Optional) A cluster parameter group to associate with the cluster.
* `db_instance_parameter_group_name` - (Optional) An instance parameter group to associate with all instances of the DB cluster. The `db_instance_parameter_group_name` parameter is only valid in combination with the `allow_major_version_upgrade` parameter.
* `db_subnet_group_name` - (Optional) A DB subnet group to associate with this DB instance. **NOTE:** This must match the `db_subnet_group_name` specified on every [`aws_rds_cluster_instance`](/docs/providers/aws/r/rds_cluster_instance.html) in the cluster.
* `deletion_protection` - (Optional) If the DB instance should have deletion protection enabled. The database can't be deleted when this value is set to `true`. The default is `false`.
* `enable_http_endpoint` - (Optional) Enable HTTP endpoint (data API). Only valid when `engine_mode` is set to `serverless`.
Expand Down

0 comments on commit 581b594

Please sign in to comment.