Skip to content

Commit 665ad7a

Browse files
committed
Fix additional tests
1 parent 4c756c2 commit 665ad7a

File tree

2 files changed

+94
-42
lines changed

2 files changed

+94
-42
lines changed

internal/service/rds/instance.go

+72-20
Original file line numberDiff line numberDiff line change
@@ -624,6 +624,18 @@ func ResourceInstance() *schema.Resource {
624624
}
625625
return nil
626626
},
627+
customdiff.ComputedIf("address", func(ctx context.Context, diff *schema.ResourceDiff, meta interface{}) bool {
628+
return diff.HasChange("identifier")
629+
}),
630+
customdiff.ComputedIf("arn", func(ctx context.Context, diff *schema.ResourceDiff, meta interface{}) bool {
631+
return diff.HasChange("identifier")
632+
}),
633+
customdiff.ComputedIf("endpoint", func(ctx context.Context, diff *schema.ResourceDiff, meta interface{}) bool {
634+
return diff.HasChange("identifier")
635+
}),
636+
customdiff.ComputedIf("tags_all", func(ctx context.Context, diff *schema.ResourceDiff, meta interface{}) bool {
637+
return diff.HasChange("identifier")
638+
}),
627639
),
628640
}
629641
}
@@ -999,9 +1011,10 @@ func resourceInstanceCreate(ctx context.Context, d *schema.ResourceData, meta in
9991011
return sdkdiag.AppendErrorf(diags, "creating RDS DB Instance (restore from S3) (%s): %s", identifier, err)
10001012
}
10011013

1002-
output := outputRaw.(*rds.RestoreDBInstanceFromS3Output)
1003-
1004-
resourceID = aws.StringValue(output.DBInstance.DbiResourceId)
1014+
if outputRaw != nil {
1015+
output := outputRaw.(*rds.RestoreDBInstanceFromS3Output)
1016+
resourceID = aws.StringValue(output.DBInstance.DbiResourceId)
1017+
}
10051018
} else if v, ok := d.GetOk("snapshot_identifier"); ok {
10061019
input := &rds.RestoreDBInstanceFromDBSnapshotInput{
10071020
AutoMinorVersionUpgrade: aws.Bool(d.Get("auto_minor_version_upgrade").(bool)),
@@ -1197,10 +1210,6 @@ func resourceInstanceCreate(ctx context.Context, d *schema.ResourceData, meta in
11971210
},
11981211
)
11991212

1200-
output := outputRaw.(*rds.RestoreDBInstanceFromDBSnapshotOutput)
1201-
1202-
resourceID = aws.StringValue(output.DBInstance.DbiResourceId)
1203-
12041213
// When using SQL Server engine with MultiAZ enabled, its not
12051214
// possible to immediately enable mirroring since
12061215
// BackupRetentionPeriod is not available as a parameter to
@@ -1219,6 +1228,11 @@ func resourceInstanceCreate(ctx context.Context, d *schema.ResourceData, meta in
12191228
if err != nil {
12201229
return sdkdiag.AppendErrorf(diags, "creating RDS DB Instance (restore from snapshot) (%s): %s", identifier, err)
12211230
}
1231+
1232+
if outputRaw != nil {
1233+
output := outputRaw.(*rds.RestoreDBInstanceFromDBSnapshotOutput)
1234+
resourceID = aws.StringValue(output.DBInstance.DbiResourceId)
1235+
}
12221236
} else if v, ok := d.GetOk("restore_to_point_in_time"); ok {
12231237
tfMap := v.([]interface{})[0].(map[string]interface{})
12241238

@@ -1364,9 +1378,10 @@ func resourceInstanceCreate(ctx context.Context, d *schema.ResourceData, meta in
13641378
return sdkdiag.AppendErrorf(diags, "creating RDS DB Instance (restore to point-in-time) (%s): %s", identifier, err)
13651379
}
13661380

1367-
output := outputRaw.(*rds.RestoreDBInstanceToPointInTimeOutput)
1368-
1369-
resourceID = aws.StringValue(output.DBInstance.DbiResourceId)
1381+
if outputRaw != nil {
1382+
output := outputRaw.(*rds.RestoreDBInstanceToPointInTimeOutput)
1383+
resourceID = aws.StringValue(output.DBInstance.DbiResourceId)
1384+
}
13701385
} else {
13711386
if _, ok := d.GetOk("allocated_storage"); !ok {
13721387
diags = sdkdiag.AppendErrorf(diags, `"allocated_storage": required field is not set`)
@@ -1550,7 +1565,6 @@ func resourceInstanceCreate(ctx context.Context, d *schema.ResourceData, meta in
15501565
}
15511566

15521567
output := outputRaw.(*rds.CreateDBInstanceOutput)
1553-
15541568
resourceID = aws.StringValue(output.DBInstance.DbiResourceId)
15551569

15561570
// This is added here to avoid unnecessary modification when ca_cert_identifier is the default one
@@ -1560,12 +1574,18 @@ func resourceInstanceCreate(ctx context.Context, d *schema.ResourceData, meta in
15601574
}
15611575
}
15621576

1563-
d.SetId(resourceID)
1564-
1565-
if _, err := waitDBInstanceAvailableSDKv1(ctx, conn, d.Id(), d.Timeout(schema.TimeoutCreate)); err != nil {
1577+
var instance *rds.DBInstance
1578+
var err error
1579+
if instance, err = waitDBInstanceAvailableSDKv1(ctx, conn, d.Get("identifier").(string), d.Timeout(schema.TimeoutCreate)); err != nil {
15661580
return sdkdiag.AppendErrorf(diags, "waiting for RDS DB Instance (%s) create: %s", identifier, err)
15671581
}
15681582

1583+
if resourceID == "" {
1584+
resourceID = aws.StringValue(instance.DbiResourceId)
1585+
}
1586+
1587+
d.SetId(resourceID)
1588+
15691589
if requiresModifyDbInstance {
15701590
modifyDbInstanceInput.DBInstanceIdentifier = aws.String(identifier)
15711591

@@ -2320,17 +2340,33 @@ func parseDBInstanceARN(s string) (dbInstanceARN, error) {
23202340
return result, nil
23212341
}
23222342

2343+
// findDBInstanceByIDSDKv1 in general should be called with a DbiResourceId of the form
2344+
// "db-BE6UI2KLPQP3OVDYD74ZEV6NUM" rather than a DB identifier. However, in some cases only
2345+
// the identifier is available, and can be used.
23232346
func findDBInstanceByIDSDKv1(ctx context.Context, conn *rds.RDS, id string) (*rds.DBInstance, error) {
2324-
input := &rds.DescribeDBInstancesInput{
2325-
Filters: []*rds.Filter{
2347+
input := &rds.DescribeDBInstancesInput{}
2348+
2349+
if regexp.MustCompile(`^db-[a-zA-Z0-9]{2,255}$`).MatchString(id) {
2350+
input.Filters = []*rds.Filter{
23262351
{
23272352
Name: aws.String("dbi-resource-id"),
23282353
Values: aws.StringSlice([]string{id}),
23292354
},
2330-
},
2355+
}
2356+
} else {
2357+
input.DBInstanceIdentifier = aws.String(id)
23312358
}
23322359

23332360
output, err := conn.DescribeDBInstancesWithContext(ctx, input)
2361+
2362+
// in case a DB has an *identifier* starting with "db-""
2363+
if regexp.MustCompile(`^db-[a-zA-Z0-9]{2,255}$`).MatchString(id) && (output == nil || len(output.DBInstances) == 0) {
2364+
input = &rds.DescribeDBInstancesInput{
2365+
DBInstanceIdentifier: aws.String(id),
2366+
}
2367+
output, err = conn.DescribeDBInstancesWithContext(ctx, input)
2368+
}
2369+
23342370
if tfawserr.ErrCodeEquals(err, rds.ErrCodeDBInstanceNotFoundFault) {
23352371
return nil, &retry.NotFoundError{
23362372
LastError: err,
@@ -2350,17 +2386,33 @@ func findDBInstanceByIDSDKv1(ctx context.Context, conn *rds.RDS, id string) (*rd
23502386
return dbInstance, nil
23512387
}
23522388

2389+
// findDBInstanceByIDSDKv2 in general should be called with a DbiResourceId of the form
2390+
// "db-BE6UI2KLPQP3OVDYD74ZEV6NUM" rather than a DB identifier. However, in some cases only
2391+
// the identifier is available, and can be used.
23532392
func findDBInstanceByIDSDKv2(ctx context.Context, conn *rds_sdkv2.Client, id string) (*types.DBInstance, error) {
2354-
input := &rds_sdkv2.DescribeDBInstancesInput{
2355-
Filters: []types.Filter{
2393+
input := &rds_sdkv2.DescribeDBInstancesInput{}
2394+
2395+
if regexp.MustCompile(`^db-[a-zA-Z0-9]{2,255}$`).MatchString(id) {
2396+
input.Filters = []types.Filter{
23562397
{
23572398
Name: aws.String("dbi-resource-id"),
23582399
Values: []string{id},
23592400
},
2360-
},
2401+
}
2402+
} else {
2403+
input.DBInstanceIdentifier = aws.String(id)
23612404
}
23622405

23632406
output, err := conn.DescribeDBInstances(ctx, input)
2407+
2408+
// in case a DB has an *identifier* starting with "db-""
2409+
if regexp.MustCompile(`^db-[a-zA-Z0-9]{2,255}$`).MatchString(id) && (output == nil || len(output.DBInstances) == 0) {
2410+
input = &rds_sdkv2.DescribeDBInstancesInput{
2411+
DBInstanceIdentifier: aws.String(id),
2412+
}
2413+
output, err = conn.DescribeDBInstances(ctx, input)
2414+
}
2415+
23642416
if errs.IsA[*types.DBInstanceNotFoundFault](err) {
23652417
return nil, &retry.NotFoundError{
23662418
LastError: err,

internal/service/rds/instance_test.go

+22-22
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,7 @@ func TestAccRDSInstance_dbSubnetGroupName(t *testing.T) {
636636
Config: testAccInstanceConfig_dbSubnetGroupName(rName),
637637
Check: resource.ComposeAggregateTestCheckFunc(
638638
testAccCheckInstanceExists(ctx, resourceName, &dbInstance),
639-
testAccCheckSubnetGroupExists(ctx, resourceName, &dbSubnetGroup),
639+
testAccCheckSubnetGroupExists(ctx, dbSubnetGroupResourceName, &dbSubnetGroup),
640640
resource.TestCheckResourceAttrPair(resourceName, "db_subnet_group_name", dbSubnetGroupResourceName, "name"),
641641
),
642642
},
@@ -698,7 +698,7 @@ func TestAccRDSInstance_DBSubnetGroupName_vpcSecurityGroupIDs(t *testing.T) {
698698
Config: testAccInstanceConfig_DBSubnetGroupName_vpcSecurityGroupIDs(rName),
699699
Check: resource.ComposeAggregateTestCheckFunc(
700700
testAccCheckInstanceExists(ctx, resourceName, &dbInstance),
701-
testAccCheckSubnetGroupExists(ctx, resourceName, &dbSubnetGroup),
701+
testAccCheckSubnetGroupExists(ctx, dbSubnetGroupResourceName, &dbSubnetGroup),
702702
resource.TestCheckResourceAttrPair(resourceName, "db_subnet_group_name", dbSubnetGroupResourceName, "name"),
703703
),
704704
},
@@ -1530,7 +1530,7 @@ func TestAccRDSInstance_ReplicateSourceDB_dbSubnetGroupName(t *testing.T) {
15301530
Config: testAccInstanceConfig_ReplicateSourceDB_dbSubnetGroupName(rName),
15311531
Check: resource.ComposeAggregateTestCheckFunc(
15321532
testAccCheckInstanceExists(ctx, resourceName, &dbInstance),
1533-
testAccCheckSubnetGroupExists(ctx, resourceName, &dbSubnetGroup),
1533+
testAccCheckSubnetGroupExists(ctx, dbSubnetGroupResourceName, &dbSubnetGroup),
15341534
resource.TestCheckResourceAttrPair(resourceName, "db_subnet_group_name", dbSubnetGroupResourceName, "name"),
15351535
),
15361536
},
@@ -1600,7 +1600,7 @@ func TestAccRDSInstance_ReplicateSourceDBDBSubnetGroupName_vpcSecurityGroupIDs(t
16001600
Config: testAccInstanceConfig_ReplicateSourceDB_DBSubnetGroupName_vpcSecurityGroupIDs(rName),
16011601
Check: resource.ComposeAggregateTestCheckFunc(
16021602
testAccCheckInstanceExists(ctx, resourceName, &dbInstance),
1603-
testAccCheckSubnetGroupExists(ctx, resourceName, &dbSubnetGroup),
1603+
testAccCheckSubnetGroupExists(ctx, dbSubnetGroupResourceName, &dbSubnetGroup),
16041604
resource.TestCheckResourceAttrPair(resourceName, "db_subnet_group_name", dbSubnetGroupResourceName, "name"),
16051605
),
16061606
},
@@ -2700,7 +2700,7 @@ func TestAccRDSInstance_SnapshotIdentifier_dbSubnetGroupName(t *testing.T) {
27002700
testAccCheckInstanceExists(ctx, sourceDbResourceName, &sourceDbInstance),
27012701
testAccCheckDBSnapshotExists(ctx, snapshotResourceName, &dbSnapshot),
27022702
testAccCheckInstanceExists(ctx, resourceName, &dbInstance),
2703-
testAccCheckSubnetGroupExists(ctx, resourceName, &dbSubnetGroup),
2703+
testAccCheckSubnetGroupExists(ctx, dbSubnetGroupResourceName, &dbSubnetGroup),
27042704
resource.TestCheckResourceAttrPair(resourceName, "db_subnet_group_name", dbSubnetGroupResourceName, "name"),
27052705
),
27062706
},
@@ -2776,7 +2776,7 @@ func TestAccRDSInstance_SnapshotIdentifier_dbSubnetGroupNameVPCSecurityGroupIDs(
27762776
testAccCheckInstanceExists(ctx, sourceDbResourceName, &sourceDbInstance),
27772777
testAccCheckDBSnapshotExists(ctx, snapshotResourceName, &dbSnapshot),
27782778
testAccCheckInstanceExists(ctx, resourceName, &dbInstance),
2779-
testAccCheckSubnetGroupExists(ctx, resourceName, &dbSubnetGroup),
2779+
testAccCheckSubnetGroupExists(ctx, dbSubnetGroupResourceName, &dbSubnetGroup),
27802780
resource.TestCheckResourceAttrPair(resourceName, "db_subnet_group_name", dbSubnetGroupResourceName, "name"),
27812781
),
27822782
},
@@ -3653,8 +3653,8 @@ func TestAccRDSInstance_MySQL_snapshotRestoreWithEngineVersion(t *testing.T) {
36533653
Check: resource.ComposeAggregateTestCheckFunc(
36543654
testAccCheckInstanceExists(ctx, restoreResourceName, &vRestoredInstance),
36553655
testAccCheckInstanceExists(ctx, resourceName, &v),
3656-
// Hardcoded older version. Will to update when no longer compatible to upgrade from this to the default version.
3657-
resource.TestCheckResourceAttr(resourceName, "engine_version", "8.0.25"),
3656+
// Hardcoded older version. Will need to update when no longer compatible to upgrade from this to the default version.
3657+
resource.TestCheckResourceAttr(resourceName, "engine_version", "8.0.31"),
36583658
resource.TestCheckResourceAttrPair(restoreResourceName, "engine_version", "data.aws_rds_engine_version.default", "version"),
36593659
),
36603660
},
@@ -5404,17 +5404,17 @@ func testAccCheckInstanceAutomatedBackupsDelete(ctx context.Context) resource.Te
54045404

54055405
log.Printf("[INFO] Trying to locate the DBInstance Automated Backup")
54065406
describeOutput, err := conn.DescribeDBInstanceAutomatedBackupsWithContext(ctx, &rds.DescribeDBInstanceAutomatedBackupsInput{
5407-
DBInstanceIdentifier: aws.String(rs.Primary.ID),
5407+
DBInstanceIdentifier: aws.String(rs.Primary.Attributes["identifier"]),
54085408
})
54095409
if err != nil {
54105410
return err
54115411
}
54125412

54135413
if describeOutput == nil || len(describeOutput.DBInstanceAutomatedBackups) == 0 {
5414-
return fmt.Errorf("Automated backup for %s not found", rs.Primary.ID)
5414+
return fmt.Errorf("Automated backup for %s not found", rs.Primary.Attributes["identifier"])
54155415
}
54165416

5417-
log.Printf("[INFO] Deleting automated backup for %s", rs.Primary.ID)
5417+
log.Printf("[INFO] Deleting automated backup for %s", rs.Primary.Attributes["identifier"])
54185418
_, err = conn.DeleteDBInstanceAutomatedBackupWithContext(ctx, &rds.DeleteDBInstanceAutomatedBackupInput{
54195419
DbiResourceId: describeOutput.DBInstanceAutomatedBackups[0].DbiResourceId,
54205420
})
@@ -5436,7 +5436,7 @@ func testAccCheckInstanceDestroy(ctx context.Context) resource.TestCheckFunc {
54365436
continue
54375437
}
54385438

5439-
_, err := tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.ID)
5439+
_, err := tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.Attributes["identifier"])
54405440

54415441
if tfresource.NotFound(err) {
54425442
continue
@@ -5446,7 +5446,7 @@ func testAccCheckInstanceDestroy(ctx context.Context) resource.TestCheckFunc {
54465446
return err
54475447
}
54485448

5449-
return fmt.Errorf("RDS DB Instance %s still exists", rs.Primary.ID)
5449+
return fmt.Errorf("RDS DB Instance %s still exists", rs.Primary.Attributes["identifier"])
54505450
}
54515451

54525452
return nil
@@ -5566,7 +5566,7 @@ func testAccCheckInstanceDestroyWithFinalSnapshot(ctx context.Context) resource.
55665566
return err
55675567
}
55685568

5569-
_, err = tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.ID)
5569+
_, err = tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.Attributes["identifier"])
55705570

55715571
if tfresource.NotFound(err) {
55725572
continue
@@ -5576,7 +5576,7 @@ func testAccCheckInstanceDestroyWithFinalSnapshot(ctx context.Context) resource.
55765576
return err
55775577
}
55785578

5579-
return fmt.Errorf("RDS DB Instance %s still exists", rs.Primary.ID)
5579+
return fmt.Errorf("RDS DB Instance %s still exists", rs.Primary.Attributes["identifier"])
55805580
}
55815581

55825582
return nil
@@ -5606,7 +5606,7 @@ func testAccCheckInstanceDestroyWithoutFinalSnapshot(ctx context.Context) resour
56065606
return fmt.Errorf("RDS DB Snapshot %s exists", finalSnapshotID)
56075607
}
56085608

5609-
_, err = tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.ID)
5609+
_, err = tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.Attributes["identifier"])
56105610

56115611
if tfresource.NotFound(err) {
56125612
continue
@@ -5616,7 +5616,7 @@ func testAccCheckInstanceDestroyWithoutFinalSnapshot(ctx context.Context) resour
56165616
return err
56175617
}
56185618

5619-
return fmt.Errorf("RDS DB Instance %s still exists", rs.Primary.ID)
5619+
return fmt.Errorf("RDS DB Instance %s still exists", rs.Primary.Attributes["identifier"])
56205620
}
56215621

56225622
return nil
@@ -5656,13 +5656,13 @@ func testAccCheckInstanceExists(ctx context.Context, n string, v *rds.DBInstance
56565656
return fmt.Errorf("Not found: %s", n)
56575657
}
56585658

5659-
if rs.Primary.ID == "" {
5659+
if rs.Primary.Attributes["identifier"] == "" {
56605660
return fmt.Errorf("No RDS DB Instance ID is set")
56615661
}
56625662

56635663
conn := acctest.Provider.Meta().(*conns.AWSClient).RDSConn()
56645664

5665-
output, err := tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.ID)
5665+
output, err := tfrds.FindDBInstanceByID(ctx, conn, rs.Primary.Attributes["identifier"])
56665666
if err != nil {
56675667
return err
56685668
}
@@ -6910,7 +6910,7 @@ func testAccInstanceConfig_mySQLSnapshotRestoreEngineVersion(rName string) strin
69106910
resource "aws_db_instance" "test" {
69116911
allocated_storage = 20
69126912
engine = data.aws_rds_engine_version.default.engine
6913-
engine_version = "8.0.25" # test is from older to newer version, update when restore from this to current default version is incompatible
6913+
engine_version = "8.0.31" # test is from older to newer version, update when restore from this to current default version is incompatible
69146914
identifier = %[1]q
69156915
instance_class = data.aws_rds_orderable_db_instance.test.instance_class
69166916
skip_final_snapshot = true
@@ -8894,7 +8894,7 @@ func testAccInstanceConfig_SnapshotID_io1Storage(rName string, iops int) string
88948894
return fmt.Sprintf(`
88958895
data "aws_rds_orderable_db_instance" "test" {
88968896
engine = "mariadb"
8897-
engine_version = "10.5.12"
8897+
engine_version = "10.6.12"
88988898
license_model = "general-public-license"
88998899
storage_type = "io1"
89008900
@@ -10220,7 +10220,7 @@ data "aws_rds_orderable_db_instance" "test" {
1022010220
1022110221
data "aws_rds_engine_version" "initial" {
1022210222
engine = "mysql"
10223-
preferred_versions = ["8.0.27", "8.0.26", "8.0.25"]
10223+
preferred_versions = ["8.0.32", "8.0.31", "8.0.30"]
1022410224
}
1022510225
1022610226
data "aws_rds_engine_version" "updated" {

0 commit comments

Comments
 (0)