Skip to content

Commit 5d98ffd

Browse files
committed
update default value for min_capacity in scaling_configuration block of rds_cluster
1 parent d9f833b commit 5d98ffd

6 files changed

+80
-69
lines changed

aws/resource_aws_rds_cluster.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
)
1818

1919
const (
20-
rdsClusterScalingConfiguration_DefaultMinCapacity = 2
20+
rdsClusterScalingConfiguration_DefaultMinCapacity = 1
2121
rdsClusterScalingConfiguration_DefaultMaxCapacity = 16
2222
)
2323

@@ -452,7 +452,7 @@ func resourceAwsRDSClusterCreate(d *schema.ResourceData, meta interface{}) error
452452
DeletionProtection: aws.Bool(d.Get("deletion_protection").(bool)),
453453
Engine: aws.String(d.Get("engine").(string)),
454454
EngineMode: aws.String(d.Get("engine_mode").(string)),
455-
ScalingConfiguration: expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{}), d.Get("engine_mode").(string)),
455+
ScalingConfiguration: expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{})),
456456
SnapshotIdentifier: aws.String(d.Get("snapshot_identifier").(string)),
457457
Tags: tags,
458458
}
@@ -548,7 +548,7 @@ func resourceAwsRDSClusterCreate(d *schema.ResourceData, meta interface{}) error
548548
Engine: aws.String(d.Get("engine").(string)),
549549
EngineMode: aws.String(d.Get("engine_mode").(string)),
550550
ReplicationSourceIdentifier: aws.String(d.Get("replication_source_identifier").(string)),
551-
ScalingConfiguration: expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{}), d.Get("engine_mode").(string)),
551+
ScalingConfiguration: expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{})),
552552
Tags: tags,
553553
}
554554

@@ -767,7 +767,7 @@ func resourceAwsRDSClusterCreate(d *schema.ResourceData, meta interface{}) error
767767
DeletionProtection: aws.Bool(d.Get("deletion_protection").(bool)),
768768
Engine: aws.String(d.Get("engine").(string)),
769769
EngineMode: aws.String(d.Get("engine_mode").(string)),
770-
ScalingConfiguration: expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{}), d.Get("engine_mode").(string)),
770+
ScalingConfiguration: expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{})),
771771
Tags: tags,
772772
}
773773

@@ -1140,7 +1140,7 @@ func resourceAwsRDSClusterUpdate(d *schema.ResourceData, meta interface{}) error
11401140
}
11411141

11421142
if d.HasChange("scaling_configuration") {
1143-
req.ScalingConfiguration = expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{}), d.Get("engine_mode").(string))
1143+
req.ScalingConfiguration = expandRdsClusterScalingConfiguration(d.Get("scaling_configuration").([]interface{}))
11441144
requestUpdate = true
11451145
}
11461146

aws/resource_aws_rds_cluster_test.go

+59
Original file line numberDiff line numberDiff line change
@@ -1356,6 +1356,46 @@ func TestAccAWSRDSCluster_ScalingConfiguration(t *testing.T) {
13561356
})
13571357
}
13581358

1359+
// Reference: https://github.com/terraform-providers/terraform-provider-aws/issues/11698
1360+
func TestAccAWSRDSCluster_ScalingConfiguration_DefaultMinCapacity(t *testing.T) {
1361+
var dbCluster rds.DBCluster
1362+
1363+
rName := acctest.RandomWithPrefix("tf-acc-test")
1364+
resourceName := "aws_rds_cluster.test"
1365+
1366+
resource.ParallelTest(t, resource.TestCase{
1367+
PreCheck: func() { testAccPreCheck(t) },
1368+
Providers: testAccProviders,
1369+
CheckDestroy: testAccCheckAWSClusterDestroy,
1370+
Steps: []resource.TestStep{
1371+
{
1372+
Config: testAccAWSRDSClusterConfig_ScalingConfiguration_DefaultMinCapacity(rName, false, 128, 301, "RollbackCapacityChange"),
1373+
Check: resource.ComposeTestCheckFunc(
1374+
testAccCheckAWSClusterExists(resourceName, &dbCluster),
1375+
resource.TestCheckResourceAttr(resourceName, "scaling_configuration.#", "1"),
1376+
resource.TestCheckResourceAttr(resourceName, "scaling_configuration.0.auto_pause", "false"),
1377+
resource.TestCheckResourceAttr(resourceName, "scaling_configuration.0.max_capacity", "128"),
1378+
resource.TestCheckResourceAttr(resourceName, "scaling_configuration.0.min_capacity", "1"),
1379+
resource.TestCheckResourceAttr(resourceName, "scaling_configuration.0.seconds_until_auto_pause", "301"),
1380+
resource.TestCheckResourceAttr(resourceName, "scaling_configuration.0.timeout_action", "RollbackCapacityChange"),
1381+
),
1382+
},
1383+
{
1384+
ResourceName: resourceName,
1385+
ImportState: true,
1386+
ImportStateVerify: true,
1387+
ImportStateVerifyIgnore: []string{
1388+
"apply_immediately",
1389+
"cluster_identifier_prefix",
1390+
"master_password",
1391+
"skip_final_snapshot",
1392+
"snapshot_identifier",
1393+
},
1394+
},
1395+
},
1396+
})
1397+
}
1398+
13591399
func TestAccAWSRDSCluster_SnapshotIdentifier(t *testing.T) {
13601400
var dbCluster, sourceDbCluster rds.DBCluster
13611401
var dbClusterSnapshot rds.DBClusterSnapshot
@@ -3120,6 +3160,25 @@ resource "aws_rds_cluster" "test" {
31203160
`, rName, autoPause, maxCapacity, minCapacity, secondsUntilAutoPause, timeoutAction)
31213161
}
31223162

3163+
func testAccAWSRDSClusterConfig_ScalingConfiguration_DefaultMinCapacity(rName string, autoPause bool, maxCapacity, secondsUntilAutoPause int, timeoutAction string) string {
3164+
return fmt.Sprintf(`
3165+
resource "aws_rds_cluster" "test" {
3166+
cluster_identifier = %q
3167+
engine_mode = "serverless"
3168+
master_password = "barbarbarbar"
3169+
master_username = "foo"
3170+
skip_final_snapshot = true
3171+
3172+
scaling_configuration {
3173+
auto_pause = %t
3174+
max_capacity = %d
3175+
seconds_until_auto_pause = %d
3176+
timeout_action = "%s"
3177+
}
3178+
}
3179+
`, rName, autoPause, maxCapacity, secondsUntilAutoPause, timeoutAction)
3180+
}
3181+
31233182
func testAccAWSRDSClusterConfig_SnapshotIdentifier(rName string) string {
31243183
return fmt.Sprintf(`
31253184
resource "aws_rds_cluster" "source" {

aws/structure.go

+2-10
Original file line numberDiff line numberDiff line change
@@ -4532,17 +4532,9 @@ func flattenDaxEncryptAtRestOptions(options *dax.SSEDescription) []map[string]in
45324532
return []map[string]interface{}{m}
45334533
}
45344534

4535-
func expandRdsClusterScalingConfiguration(l []interface{}, engineMode string) *rds.ScalingConfiguration {
4535+
func expandRdsClusterScalingConfiguration(l []interface{}) *rds.ScalingConfiguration {
45364536
if len(l) == 0 || l[0] == nil {
4537-
// Our default value for MinCapacity is different from AWS's.
4538-
// We need to override it here to avoid a non-empty plan with an empty ScalingConfiguration.
4539-
if engineMode == "serverless" {
4540-
return &rds.ScalingConfiguration{
4541-
MinCapacity: aws.Int64(int64(rdsClusterScalingConfiguration_DefaultMinCapacity)),
4542-
}
4543-
} else {
4544-
return nil
4545-
}
4537+
return nil
45464538
}
45474539

45484540
m := l[0].(map[string]interface{})

aws/structure_test.go

+6-53
Original file line numberDiff line numberDiff line change
@@ -1611,57 +1611,10 @@ const testExampleXML_from_msdn_flawed = `
16111611
</purchaseOrder>
16121612
`
16131613

1614-
func TestExpandRdsClusterScalingConfiguration_serverless(t *testing.T) {
1615-
type testCase struct {
1616-
EngineMode string
1617-
Input []interface{}
1618-
Expected *rds.ScalingConfiguration
1619-
}
1620-
cases := []testCase{
1621-
{
1622-
EngineMode: "serverless",
1623-
Input: []interface{}{
1624-
map[string]interface{}{
1625-
"auto_pause": false,
1626-
"max_capacity": 32,
1627-
"min_capacity": 4,
1628-
"seconds_until_auto_pause": 600,
1629-
"timeout_action": "ForceApplyCapacityChange",
1630-
},
1631-
},
1632-
Expected: &rds.ScalingConfiguration{
1633-
AutoPause: aws.Bool(false),
1634-
MaxCapacity: aws.Int64(32),
1635-
MinCapacity: aws.Int64(4),
1636-
SecondsUntilAutoPause: aws.Int64(600),
1637-
TimeoutAction: aws.String("ForceApplyCapacityChange"),
1638-
},
1639-
},
1640-
{
1641-
EngineMode: "serverless",
1642-
Input: []interface{}{},
1643-
Expected: &rds.ScalingConfiguration{
1644-
MinCapacity: aws.Int64(2),
1645-
},
1646-
},
1647-
{
1648-
EngineMode: "serverless",
1649-
Input: []interface{}{
1650-
nil,
1651-
},
1652-
Expected: &rds.ScalingConfiguration{
1653-
MinCapacity: aws.Int64(2),
1654-
},
1655-
},
1656-
}
1657-
1658-
for _, tc := range cases {
1659-
output := expandRdsClusterScalingConfiguration(tc.Input, tc.EngineMode)
1660-
if !reflect.DeepEqual(output, tc.Expected) {
1661-
t.Errorf("EngineMode: %s\nExpected: %v,\nGot: %v", tc.EngineMode, tc.Expected, output)
1662-
}
1663-
}
1664-
}
1614+
// TestExpandRdsClusterScalingConfiguration_serverless removed in v3.0.0
1615+
// as all engine_modes are treated equal when expanding scaling_configuration
1616+
// and an override of min_capacity is no longer needed
1617+
// Reference: https://github.com/terraform-providers/terraform-provider-aws/issues/11698
16651618

16661619
func TestExpandRdsClusterScalingConfiguration_basic(t *testing.T) {
16671620
type testCase struct {
@@ -1673,7 +1626,7 @@ func TestExpandRdsClusterScalingConfiguration_basic(t *testing.T) {
16731626

16741627
// RDS Cluster Scaling Configuration is only valid for serverless, but we're relying on AWS errors.
16751628
// If Terraform adds whole-resource validation, we can do our own validation at plan time.
1676-
for _, engineMode := range []string{"global", "multimaster", "parallelquery", "provisioned"} {
1629+
for _, engineMode := range []string{"global", "multimaster", "parallelquery", "provisioned", "serverless"} {
16771630
cases = append(cases, []testCase{
16781631
{
16791632
EngineMode: engineMode,
@@ -1703,7 +1656,7 @@ func TestExpandRdsClusterScalingConfiguration_basic(t *testing.T) {
17031656
}
17041657

17051658
for _, tc := range cases {
1706-
output := expandRdsClusterScalingConfiguration(tc.Input, tc.EngineMode)
1659+
output := expandRdsClusterScalingConfiguration(tc.Input)
17071660
if tc.ExpectNil != (output == nil) {
17081661
t.Errorf("EngineMode %q: Expected nil: %t, Got: %v", tc.EngineMode, tc.ExpectNil, output)
17091662
}

website/docs/guides/version-3-upgrade.html.md

+7
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ Upgrade topics:
3131
- [Resource: aws_launch_template](#resource-aws_launch_template)
3232
- [Resource: aws_lb_listener_rule](#resource-aws_lb_listener_rule)
3333
- [Resource: aws_msk_cluster](#resource-aws_msk_cluster)
34+
- [Resource: aws_rds_cluster](#resource-aws_rds_cluster)
3435
- [Resource: aws_s3_bucket](#resource-aws_s3_bucket)
3536
- [Resource: aws_security_group](#resource-aws_security_group)
3637
- [Resource: aws_sns_platform_application](#resource-aws_sns_platform_application)
@@ -475,6 +476,12 @@ resource "aws_msk_cluster" "example" {
475476
}
476477
```
477478

479+
## Resource: aws_rds_cluster
480+
481+
### scaling_configuration.min_capacity Now Defaults to 1
482+
483+
Previously when the `min_capacity` argument in a `scaling_configuration` block was not configured, the resource would default to 2. This behavior has been updated to align with the AWS RDS Cluster API default of 1.
484+
478485
## Resource: aws_s3_bucket
479486

480487
### Removal of Automatic aws_s3_bucket_policy Import

website/docs/r/rds_cluster.html.markdown

+1-1
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ resource "aws_rds_cluster" "example" {
185185

186186
* `auto_pause` - (Optional) Whether to enable automatic pause. A DB cluster can be paused only when it's idle (it has no connections). If a DB cluster is paused for more than seven days, the DB cluster might be backed up with a snapshot. In this case, the DB cluster is restored when there is a request to connect to it. Defaults to `true`.
187187
* `max_capacity` - (Optional) The maximum capacity. The maximum capacity must be greater than or equal to the minimum capacity. Valid capacity values are `1`, `2`, `4`, `8`, `16`, `32`, `64`, `128`, and `256`. Defaults to `16`.
188-
* `min_capacity` - (Optional) The minimum capacity. The minimum capacity must be lesser than or equal to the maximum capacity. Valid capacity values are `1`, `2`, `4`, `8`, `16`, `32`, `64`, `128`, and `256`. Defaults to `2`.
188+
* `min_capacity` - (Optional) The minimum capacity. The minimum capacity must be lesser than or equal to the maximum capacity. Valid capacity values are `1`, `2`, `4`, `8`, `16`, `32`, `64`, `128`, and `256`. Defaults to `1`.
189189
* `seconds_until_auto_pause` - (Optional) The time, in seconds, before an Aurora DB cluster in serverless mode is paused. Valid values are `300` through `86400`. Defaults to `300`.
190190
* `timeout_action` - (Optional) The action to take when the timeout is reached. Valid values: `ForceApplyCapacityChange`, `RollbackCapacityChange`. Defaults to `RollbackCapacityChange`. See [documentation](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.how-it-works.html#aurora-serverless.how-it-works.timeout-action).
191191

0 commit comments

Comments
 (0)