Skip to content

Commit e65e689

Browse files
authored
Merge pull request #45457 from tabito-hara/b-aws_route53_zone-accelerated_recovery_with_multiple_zones
[bugfix] aws_route53_zone: Enable accelerated recovery when multiple zones are configured
2 parents 2e3e1db + 27f5083 commit e65e689

File tree

3 files changed

+38
-35
lines changed

3 files changed

+38
-35
lines changed

.changelog/45457.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:bug
2+
resource/aws_route53_zone: Operations to enable accelerated recovery are enforced to run serially when multiple hosted zones are configured
3+
```

internal/service/route53/zone.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -332,6 +332,11 @@ func resourceZoneDelete(ctx context.Context, d *schema.ResourceData, meta any) d
332332
}
333333

334334
func updateEnableAcceleratedRecovery(ctx context.Context, conn *route53.Client, zoneID string, enabled bool, timeout time.Duration) error {
335+
const zoneMutexKey = "aws_route53_zone_accelerated_recovery"
336+
337+
conns.GlobalMutexKV.Lock(zoneMutexKey)
338+
defer conns.GlobalMutexKV.Unlock(zoneMutexKey)
339+
335340
input := route53.UpdateHostedZoneFeaturesInput{
336341
HostedZoneId: aws.String(zoneID),
337342
EnableAcceleratedRecovery: aws.Bool(enabled),

internal/service/route53/zone_test.go

Lines changed: 30 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -545,9 +545,11 @@ func TestAccRoute53Zone_escapedSpace(t *testing.T) {
545545

546546
func TestAccRoute53Zone_enableAcceleratedRecovery(t *testing.T) {
547547
ctx := acctest.Context(t)
548-
var zone route53.GetHostedZoneOutput
549-
resourceName := "aws_route53_zone.test"
550-
zoneName := acctest.RandomDomainName()
548+
var zone1, zone2 route53.GetHostedZoneOutput
549+
resourceName1 := "aws_route53_zone.test1"
550+
resourceName2 := "aws_route53_zone.test2"
551+
zoneName1 := acctest.RandomDomainName()
552+
zoneName2 := acctest.RandomDomainName()
551553

552554
resource.ParallelTest(t, resource.TestCase{
553555
PreCheck: func() { acctest.PreCheck(ctx, t) },
@@ -556,51 +558,39 @@ func TestAccRoute53Zone_enableAcceleratedRecovery(t *testing.T) {
556558
CheckDestroy: testAccCheckZoneDestroy(ctx),
557559
Steps: []resource.TestStep{
558560
{
559-
Config: testAccZoneConfig_enableAcceleratedRecovery(zoneName, true),
561+
Config: testAccZoneConfig_enableAcceleratedRecovery(zoneName1, zoneName2, true),
560562
Check: resource.ComposeTestCheckFunc(
561-
testAccCheckZoneExists(ctx, resourceName, &zone),
562-
acctest.MatchResourceAttrGlobalARNNoAccount(resourceName, names.AttrARN, "route53", regexache.MustCompile("hostedzone/.+")),
563-
resource.TestCheckResourceAttr(resourceName, names.AttrName, zoneName),
564-
resource.TestCheckResourceAttr(resourceName, "name_servers.#", "4"),
565-
resource.TestCheckResourceAttrSet(resourceName, "primary_name_server"),
566-
resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, "0"),
567-
resource.TestCheckResourceAttr(resourceName, "vpc.#", "0"),
568-
resource.TestCheckResourceAttr(resourceName, "enable_accelerated_recovery", acctest.CtTrue),
563+
testAccCheckZoneExists(ctx, resourceName1, &zone1),
564+
testAccCheckZoneExists(ctx, resourceName2, &zone2),
565+
resource.TestCheckResourceAttr(resourceName1, "enable_accelerated_recovery", acctest.CtTrue),
566+
resource.TestCheckResourceAttr(resourceName2, "enable_accelerated_recovery", acctest.CtTrue),
569567
),
570568
},
571569
{
572-
ResourceName: resourceName,
570+
ResourceName: resourceName1,
573571
ImportState: true,
574572
ImportStateVerify: true,
575573
ImportStateVerifyIgnore: []string{names.AttrForceDestroy},
576574
},
577575
{
578576
// Disable accelerated recovery
579-
Config: testAccZoneConfig_enableAcceleratedRecovery(zoneName, false),
577+
Config: testAccZoneConfig_enableAcceleratedRecovery(zoneName1, zoneName2, false),
580578
Check: resource.ComposeTestCheckFunc(
581-
testAccCheckZoneExists(ctx, resourceName, &zone),
582-
acctest.MatchResourceAttrGlobalARNNoAccount(resourceName, names.AttrARN, "route53", regexache.MustCompile("hostedzone/.+")),
583-
resource.TestCheckResourceAttr(resourceName, names.AttrName, zoneName),
584-
resource.TestCheckResourceAttr(resourceName, "name_servers.#", "4"),
585-
resource.TestCheckResourceAttrSet(resourceName, "primary_name_server"),
586-
resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, "0"),
587-
resource.TestCheckResourceAttr(resourceName, "vpc.#", "0"),
588-
resource.TestCheckResourceAttr(resourceName, "enable_accelerated_recovery", acctest.CtFalse),
579+
testAccCheckZoneExists(ctx, resourceName1, &zone1),
580+
testAccCheckZoneExists(ctx, resourceName2, &zone2),
581+
resource.TestCheckResourceAttr(resourceName1, "enable_accelerated_recovery", acctest.CtFalse),
582+
resource.TestCheckResourceAttr(resourceName2, "enable_accelerated_recovery", acctest.CtFalse),
589583
),
590584
},
591585
{
592586
// Re-enable accelerated recovery
593587
// Check a resource can be destroyed with it enabled
594-
Config: testAccZoneConfig_enableAcceleratedRecovery(zoneName, true),
588+
Config: testAccZoneConfig_enableAcceleratedRecovery(zoneName1, zoneName2, true),
595589
Check: resource.ComposeTestCheckFunc(
596-
testAccCheckZoneExists(ctx, resourceName, &zone),
597-
acctest.MatchResourceAttrGlobalARNNoAccount(resourceName, names.AttrARN, "route53", regexache.MustCompile("hostedzone/.+")),
598-
resource.TestCheckResourceAttr(resourceName, names.AttrName, zoneName),
599-
resource.TestCheckResourceAttr(resourceName, "name_servers.#", "4"),
600-
resource.TestCheckResourceAttrSet(resourceName, "primary_name_server"),
601-
resource.TestCheckResourceAttr(resourceName, acctest.CtTagsPercent, "0"),
602-
resource.TestCheckResourceAttr(resourceName, "vpc.#", "0"),
603-
resource.TestCheckResourceAttr(resourceName, "enable_accelerated_recovery", acctest.CtTrue),
590+
testAccCheckZoneExists(ctx, resourceName1, &zone1),
591+
testAccCheckZoneExists(ctx, resourceName2, &zone2),
592+
resource.TestCheckResourceAttr(resourceName1, "enable_accelerated_recovery", acctest.CtTrue),
593+
resource.TestCheckResourceAttr(resourceName2, "enable_accelerated_recovery", acctest.CtTrue),
604594
),
605595
},
606596
},
@@ -885,12 +875,17 @@ resource "aws_route53_zone" "test" {
885875
`, rName, zoneName)
886876
}
887877

888-
func testAccZoneConfig_enableAcceleratedRecovery(zoneName string, enableAcceleratedRecovery bool) string {
878+
func testAccZoneConfig_enableAcceleratedRecovery(zoneName1, zoneName2 string, enableAcceleratedRecovery bool) string {
889879
return fmt.Sprintf(`
890-
resource "aws_route53_zone" "test" {
880+
resource "aws_route53_zone" "test1" {
891881
name = "%[1]s."
892882
893-
enable_accelerated_recovery = %[2]t
883+
enable_accelerated_recovery = %[3]t
884+
}
885+
resource "aws_route53_zone" "test2" {
886+
name = "%[2]s."
887+
888+
enable_accelerated_recovery = %[3]t
894889
}
895-
`, zoneName, enableAcceleratedRecovery)
890+
`, zoneName1, zoneName2, enableAcceleratedRecovery)
896891
}

0 commit comments

Comments
 (0)