Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

r/aws_amplify_domain_association: add enable_auto_sub_domain attribute #29814

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/92814.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:enhancement
resource/aws_amplify_domain_association: Add `enable_auto_sub_domain` argument
```
43 changes: 25 additions & 18 deletions internal/service/amplify/domain_association.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ func ResourceDomainAssociation() *schema.Resource {
ReadWithoutTimeout: resourceDomainAssociationRead,
UpdateWithoutTimeout: resourceDomainAssociationUpdate,
DeleteWithoutTimeout: resourceDomainAssociationDelete,

Importer: &schema.ResourceImporter{
StateContext: schema.ImportStatePassthroughContext,
},
Expand All @@ -32,24 +33,25 @@ func ResourceDomainAssociation() *schema.Resource {
Required: true,
ForceNew: true,
},

"arn": {
Type: schema.TypeString,
Computed: true,
},

"certificate_verification_dns_record": {
Type: schema.TypeString,
Computed: true,
},

"domain_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringLenBetween(1, 255),
},

"enable_auto_sub_domain": {
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"sub_domain": {
Type: schema.TypeSet,
Required: true,
Expand All @@ -76,7 +78,6 @@ func ResourceDomainAssociation() *schema.Resource {
},
},
},

"wait_for_verification": {
Type: schema.TypeBool,
Optional: true,
Expand All @@ -93,14 +94,13 @@ func resourceDomainAssociationCreate(ctx context.Context, d *schema.ResourceData
appID := d.Get("app_id").(string)
domainName := d.Get("domain_name").(string)
id := DomainAssociationCreateResourceID(appID, domainName)

input := &amplify.CreateDomainAssociationInput{
AppId: aws.String(appID),
DomainName: aws.String(domainName),
SubDomainSettings: expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List()),
AppId: aws.String(appID),
DomainName: aws.String(domainName),
EnableAutoSubDomain: aws.Bool(d.Get("enable_auto_sub_domain").(bool)),
SubDomainSettings: expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List()),
}

log.Printf("[DEBUG] Creating Amplify Domain Association: %s", input)
_, err := conn.CreateDomainAssociationWithContext(ctx, input)

if err != nil {
Expand All @@ -110,12 +110,12 @@ func resourceDomainAssociationCreate(ctx context.Context, d *schema.ResourceData
d.SetId(id)

if _, err := waitDomainAssociationCreated(ctx, conn, appID, domainName); err != nil {
return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) to create: %s", d.Id(), err)
return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) create: %s", d.Id(), err)
}

if d.Get("wait_for_verification").(bool) {
if _, err := waitDomainAssociationVerified(ctx, conn, appID, domainName); err != nil {
return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) to verify: %s", d.Id(), err)
return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) verification: %s", d.Id(), err)
}
}

Expand Down Expand Up @@ -148,6 +148,7 @@ func resourceDomainAssociationRead(ctx context.Context, d *schema.ResourceData,
d.Set("arn", domainAssociation.DomainAssociationArn)
d.Set("certificate_verification_dns_record", domainAssociation.CertificateVerificationDNSRecord)
d.Set("domain_name", domainAssociation.DomainName)
d.Set("enable_auto_sub_domain", domainAssociation.EnableAutoSubDomain)
if err := d.Set("sub_domain", flattenSubDomains(domainAssociation.SubDomains)); err != nil {
return sdkdiag.AppendErrorf(diags, "setting sub_domain: %s", err)
}
Expand All @@ -165,14 +166,20 @@ func resourceDomainAssociationUpdate(ctx context.Context, d *schema.ResourceData
return sdkdiag.AppendErrorf(diags, "parsing Amplify Domain Association ID: %s", err)
}

if d.HasChange("sub_domain") {
if d.HasChanges("enable_auto_sub_domain", "sub_domain") {
input := &amplify.UpdateDomainAssociationInput{
AppId: aws.String(appID),
DomainName: aws.String(domainName),
SubDomainSettings: expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List()),
AppId: aws.String(appID),
DomainName: aws.String(domainName),
}

if d.HasChange("enable_auto_sub_domain") {
input.EnableAutoSubDomain = aws.Bool(d.Get("enable_auto_sub_domain").(bool))
}

if d.HasChange("sub_domain") {
input.SubDomainSettings = expandSubDomainSettings(d.Get("sub_domain").(*schema.Set).List())
}

log.Printf("[DEBUG] Creating Amplify Domain Association: %s", input)
_, err := conn.UpdateDomainAssociationWithContext(ctx, input)

if err != nil {
Expand All @@ -182,7 +189,7 @@ func resourceDomainAssociationUpdate(ctx context.Context, d *schema.ResourceData

if d.Get("wait_for_verification").(bool) {
if _, err := waitDomainAssociationVerified(ctx, conn, appID, domainName); err != nil {
return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) to verify: %s", d.Id(), err)
return sdkdiag.AppendErrorf(diags, "waiting for Amplify Domain Association (%s) verification: %s", d.Id(), err)
}
}

Expand Down
25 changes: 15 additions & 10 deletions internal/service/amplify/domain_association_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,11 +36,12 @@ func testAccDomainAssociation_basic(t *testing.T) {
CheckDestroy: testAccCheckDomainAssociationDestroy(ctx),
Steps: []resource.TestStep{
{
Config: testAccDomainAssociationConfig_basic(rName, domainName, false),
Config: testAccDomainAssociationConfig_basic(rName, domainName, false, false),
Check: resource.ComposeTestCheckFunc(
testAccCheckDomainAssociationExists(ctx, resourceName, &domain),
acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "amplify", regexp.MustCompile(`apps/.+/domains/.+`)),
resource.TestCheckResourceAttr(resourceName, "domain_name", domainName),
resource.TestCheckResourceAttr(resourceName, "enable_auto_sub_domain", "false"),
resource.TestCheckResourceAttr(resourceName, "sub_domain.#", "1"),
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "sub_domain.*", map[string]string{
"branch_name": rName,
Expand Down Expand Up @@ -78,7 +79,7 @@ func testAccDomainAssociation_disappears(t *testing.T) {
CheckDestroy: testAccCheckDomainAssociationDestroy(ctx),
Steps: []resource.TestStep{
{
Config: testAccDomainAssociationConfig_basic(rName, domainName, false),
Config: testAccDomainAssociationConfig_basic(rName, domainName, false, false),
Check: resource.ComposeTestCheckFunc(
testAccCheckDomainAssociationExists(ctx, resourceName, &domain),
acctest.CheckResourceDisappears(ctx, acctest.Provider, tfamplify.ResourceDomainAssociation(), resourceName),
Expand Down Expand Up @@ -108,11 +109,12 @@ func testAccDomainAssociation_update(t *testing.T) {
CheckDestroy: testAccCheckDomainAssociationDestroy(ctx),
Steps: []resource.TestStep{
{
Config: testAccDomainAssociationConfig_basic(rName, domainName, true),
Config: testAccDomainAssociationConfig_basic(rName, domainName, false, true),
Check: resource.ComposeTestCheckFunc(
testAccCheckDomainAssociationExists(ctx, resourceName, &domain),
acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "amplify", regexp.MustCompile(`apps/.+/domains/.+`)),
resource.TestCheckResourceAttr(resourceName, "domain_name", domainName),
resource.TestCheckResourceAttr(resourceName, "enable_auto_sub_domain", "false"),
resource.TestCheckResourceAttr(resourceName, "sub_domain.#", "1"),
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "sub_domain.*", map[string]string{
"branch_name": rName,
Expand All @@ -128,11 +130,12 @@ func testAccDomainAssociation_update(t *testing.T) {
ImportStateVerifyIgnore: []string{"wait_for_verification"},
},
{
Config: testAccDomainAssociationConfig_updated(rName, domainName, true),
Config: testAccDomainAssociationConfig_updated(rName, domainName, true, true),
Check: resource.ComposeTestCheckFunc(
testAccCheckDomainAssociationExists(ctx, resourceName, &domain),
acctest.MatchResourceAttrRegionalARN(resourceName, "arn", "amplify", regexp.MustCompile(`apps/.+/domains/.+`)),
resource.TestCheckResourceAttr(resourceName, "domain_name", domainName),
resource.TestCheckResourceAttr(resourceName, "enable_auto_sub_domain", "true"),
resource.TestCheckResourceAttr(resourceName, "sub_domain.#", "2"),
resource.TestCheckTypeSetElemNestedAttrs(resourceName, "sub_domain.*", map[string]string{
"branch_name": rName,
Expand Down Expand Up @@ -212,7 +215,7 @@ func testAccCheckDomainAssociationDestroy(ctx context.Context) resource.TestChec
}
}

func testAccDomainAssociationConfig_basic(rName, domainName string, waitForVerification bool) string {
func testAccDomainAssociationConfig_basic(rName, domainName string, enableAutoSubDomain bool, waitForVerification bool) string {
return fmt.Sprintf(`
resource "aws_amplify_app" "test" {
name = %[1]q
Expand All @@ -232,12 +235,13 @@ resource "aws_amplify_domain_association" "test" {
prefix = ""
}

wait_for_verification = %[3]t
enable_auto_sub_domain = %[3]t
wait_for_verification = %[4]t
}
`, rName, domainName, waitForVerification)
`, rName, domainName, enableAutoSubDomain, waitForVerification)
}

func testAccDomainAssociationConfig_updated(rName, domainName string, waitForVerification bool) string {
func testAccDomainAssociationConfig_updated(rName, domainName string, enableAutoSubDomain bool, waitForVerification bool) string {
return fmt.Sprintf(`
resource "aws_amplify_app" "test" {
name = %[1]q
Expand Down Expand Up @@ -267,7 +271,8 @@ resource "aws_amplify_domain_association" "test" {
prefix = "www"
}

wait_for_verification = %[3]t
enable_auto_sub_domain = %[3]t
wait_for_verification = %[4]t
}
`, rName, domainName, waitForVerification)
`, rName, domainName, enableAutoSubDomain, waitForVerification)
}
1 change: 1 addition & 0 deletions website/docs/r/amplify_domain_association.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,7 @@ The following arguments are supported:

* `app_id` - (Required) Unique ID for an Amplify app.
* `domain_name` - (Required) Domain name for the domain association.
* `enable_auto_sub_domain` - (Optional) Enables the automated creation of subdomains for branches.
* `sub_domain` - (Required) Setting for the subdomain. Documented below.
* `wait_for_verification` - (Optional) If enabled, the resource will wait for the domain association status to change to `PENDING_DEPLOYMENT` or `AVAILABLE`. Setting this to `false` will skip the process. Default: `true`.

Expand Down