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

aws route53recoveryreadiness add new resources #20526

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
e06d320
adding Tag support for Route53 Recovery Readiness
WyatyPeert Aug 11, 2021
521476e
Adding New Resource, Cells to Route53 Recovery Readiness
WyatyPeert Aug 11, 2021
31d8d63
Adding New Resource, Recovery Groups to Route53 Recovery Readiness
WyatyPeert Aug 11, 2021
e65182c
Adding New Resource, Resource Sets to Route53 Recovery Readiness
WyatyPeert Aug 11, 2021
98c56df
Adding New Resource, Readiness Checks to Route53 Recovery Readiness
WyatyPeert Aug 11, 2021
29aa165
adding .changelog/20526 for adding resources to aws_route53recoveryre…
WyatyPeert Aug 11, 2021
8aa3782
Updating route53recoveryreadiness docs to comply with terrafmt
WyatyPeert Aug 11, 2021
0e12a2d
Removing extraneous underscore in aws_route53recoveryreadiness_resour…
WyatyPeert Aug 11, 2021
02d7dd0
Adding Timeouts for Delete on Route53RecoveryReadiness resources
WyatyPeert Aug 11, 2021
59f7bd8
Adding new line in recovery_group.html.markdown
WyatyPeert Aug 11, 2021
4a1b72e
r/r53recread_cell: Implement d.IsNewResource Check
YakDriver Aug 23, 2021
f4ed578
tests/r/r53recread_cell: Add disappears test
YakDriver Aug 23, 2021
ba80b15
r/r53recread_readiness_check: Implement d.IsNewResource check
YakDriver Aug 23, 2021
a01f69a
tests/r/r53recread_readiness_check: Add disappears test
YakDriver Aug 23, 2021
2b726bc
r/r53recread_recovery_group: Implement d.IsNewResource check
YakDriver Aug 23, 2021
289c366
tests/r/r53recread_recovery_group: Add disappears test
YakDriver Aug 23, 2021
d1be586
r/r53recread_resource_set: Implement d.IsNewResource check
YakDriver Aug 23, 2021
1191bc7
r/r53recread_resource_set: Implement d.IsNewResource check
YakDriver Aug 23, 2021
450f830
r/r53recread_recovery_group: Order args
YakDriver Aug 23, 2021
292f00d
r/r53recread_resource_set: Order args
YakDriver Aug 23, 2021
574d363
tests/r/r53recread_cell: Clean up docs
YakDriver Aug 23, 2021
21706b1
tests/r/r53recread_readiness_check: Clean up docs
YakDriver Aug 23, 2021
27ce568
tests/r/r53recread_recovery_group: Clean up docs
YakDriver Aug 23, 2021
b3debae
tests/r/r53recread_resource_set: Clean up docs
YakDriver Aug 23, 2021
e56f21b
make gen
YakDriver Aug 23, 2021
ac5f3a4
caps
YakDriver Aug 23, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .changelog/20526.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
```release-note:new-resource
aws_route53recoveryreadiness_cell
```

```release-note:new-resource
aws_route53recoveryreadiness_recovery_group
```

```release-note:new-resource
aws_route53recoveryreadiness_resource_set
```

```release-note:new-resource
aws_route53recoveryreadiness_readiness_check
```
1 change: 1 addition & 0 deletions aws/internal/keyvaluetags/generators/listtags/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ var serviceNames = []string{
"rds",
"resourcegroups",
"route53",
"route53recoveryreadiness",
"route53resolver",
"sagemaker",
"securityhub",
Expand Down
1 change: 1 addition & 0 deletions aws/internal/keyvaluetags/generators/servicetags/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,7 @@ var mapServiceNames = []string{
"qldb",
"pinpoint",
"resourcegroups",
"route53recoveryreadiness",
"securityhub",
"schemas",
"signer",
Expand Down
1 change: 1 addition & 0 deletions aws/internal/keyvaluetags/generators/updatetags/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ var serviceNames = []string{
"redshift",
"resourcegroups",
"route53",
"route53recoveryreadiness",
"route53resolver",
"sagemaker",
"secretsmanager",
Expand Down
25 changes: 25 additions & 0 deletions aws/internal/keyvaluetags/list_tags_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ import (
"github.com/aws/aws-sdk-go/service/resourcegroups"
"github.com/aws/aws-sdk-go/service/resourcegroupstaggingapi"
"github.com/aws/aws-sdk-go/service/route53"
"github.com/aws/aws-sdk-go/service/route53recoveryreadiness"
"github.com/aws/aws-sdk-go/service/route53resolver"
"github.com/aws/aws-sdk-go/service/sagemaker"
"github.com/aws/aws-sdk-go/service/schemas"
Expand Down Expand Up @@ -327,6 +328,8 @@ func ServiceClientType(serviceName string) string {
funcType = reflect.TypeOf(resourcegroupstaggingapi.New)
case "route53":
funcType = reflect.TypeOf(route53.New)
case "route53recoveryreadiness":
funcType = reflect.TypeOf(route53recoveryreadiness.New)
case "route53resolver":
funcType = reflect.TypeOf(route53resolver.New)
case "sagemaker":
Expand Down Expand Up @@ -441,6 +444,8 @@ func ServiceListTagsFunction(serviceName string) string {
return "DescribeTags"
case "resourcegroups":
return "GetTags"
case "route53recoveryreadiness":
return "ListTagsForResources"
case "sagemaker":
return "ListTags"
case "sqs":
Expand Down
10 changes: 10 additions & 0 deletions aws/internal/keyvaluetags/service_tags_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

37 changes: 37 additions & 0 deletions aws/internal/keyvaluetags/update_tags_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions aws/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -1002,6 +1002,10 @@ func Provider() *schema.Provider {
"aws_route53_resolver_query_log_config_association": resourceAwsRoute53ResolverQueryLogConfigAssociation(),
"aws_route53_resolver_rule_association": resourceAwsRoute53ResolverRuleAssociation(),
"aws_route53_resolver_rule": resourceAwsRoute53ResolverRule(),
"aws_route53recoveryreadiness_cell": resourceAwsRoute53RecoveryReadinessCell(),
"aws_route53recoveryreadiness_readiness_check": resourceAwsRoute53RecoveryReadinessReadinessCheck(),
"aws_route53recoveryreadiness_recovery_group": resourceAwsRoute53RecoveryReadinessRecoveryGroup(),
"aws_route53recoveryreadiness_resource_set": resourceAwsRoute53RecoveryReadinessResourceSet(),
"aws_route": resourceAwsRoute(),
"aws_route_table": resourceAwsRouteTable(),
"aws_default_route_table": resourceAwsDefaultRouteTable(),
Expand Down
194 changes: 194 additions & 0 deletions aws/resource_aws_route53recoveryreadiness_cell.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
package aws

import (
"fmt"
"log"
"time"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/route53recoveryreadiness"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/terraform-providers/terraform-provider-aws/aws/internal/keyvaluetags"
)

func resourceAwsRoute53RecoveryReadinessCell() *schema.Resource {
return &schema.Resource{
Create: resourceAwsRoute53RecoveryReadinessCellCreate,
Read: resourceAwsRoute53RecoveryReadinessCellRead,
Update: resourceAwsRoute53RecoveryReadinessCellUpdate,
Delete: resourceAwsRoute53RecoveryReadinessCellDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},

Timeouts: &schema.ResourceTimeout{
Delete: schema.DefaultTimeout(5 * time.Minute),
},

Schema: map[string]*schema.Schema{
"arn": {
Type: schema.TypeString,
Computed: true,
},
"cell_name": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"cells": {
Type: schema.TypeList,
Optional: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"parent_readiness_scopes": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"tags": tagsSchema(),
"tags_all": tagsSchemaComputed(),
},

CustomizeDiff: SetTagsDiff,
}
}

func resourceAwsRoute53RecoveryReadinessCellCreate(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).route53recoveryreadinessconn
defaultTagsConfig := meta.(*AWSClient).DefaultTagsConfig
tags := defaultTagsConfig.MergeTags(keyvaluetags.New(d.Get("tags").(map[string]interface{})))

input := &route53recoveryreadiness.CreateCellInput{
CellName: aws.String(d.Get("cell_name").(string)),
Cells: expandStringList(d.Get("cells").([]interface{})),
}

resp, err := conn.CreateCell(input)
if err != nil {
return fmt.Errorf("error creating Route53 Recovery Readiness Cell: %w", err)
}

d.SetId(aws.StringValue(resp.CellName))

if len(tags) > 0 {
arn := aws.StringValue(resp.CellArn)
if err := keyvaluetags.Route53recoveryreadinessUpdateTags(conn, arn, nil, tags); err != nil {
return fmt.Errorf("error adding Route53 Recovery Readiness Cell (%s) tags: %w", d.Id(), err)
}
}

return resourceAwsRoute53RecoveryReadinessCellRead(d, meta)
}

func resourceAwsRoute53RecoveryReadinessCellRead(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).route53recoveryreadinessconn
defaultTagsConfig := meta.(*AWSClient).DefaultTagsConfig
ignoreTagsConfig := meta.(*AWSClient).IgnoreTagsConfig

input := &route53recoveryreadiness.GetCellInput{
CellName: aws.String(d.Id()),
}

resp, err := conn.GetCell(input)

if !d.IsNewResource() && tfawserr.ErrCodeEquals(err, route53recoveryreadiness.ErrCodeResourceNotFoundException) {
log.Printf("[WARN] Route53RecoveryReadiness Cell (%s) not found, removing from state", d.Id())
d.SetId("")
return nil
}

if err != nil {
return fmt.Errorf("error describing Route53 Recovery Readiness Cell: %s", err)
}

d.Set("arn", resp.CellArn)
d.Set("cell_name", resp.CellName)
d.Set("cells", resp.Cells)
d.Set("parent_readiness_scopes", resp.ParentReadinessScopes)

tags, err := keyvaluetags.Route53recoveryreadinessListTags(conn, d.Get("arn").(string))

if err != nil {
return fmt.Errorf("error listing tags for Route53 Recovery Readiness Cell (%s): %w", d.Id(), err)
}

tags = tags.IgnoreAws().IgnoreConfig(ignoreTagsConfig)

//lintignore:AWSR002
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
return fmt.Errorf("error setting tags: %w", err)
}

if err := d.Set("tags_all", tags.Map()); err != nil {
return fmt.Errorf("error setting tags_all: %w", err)
}

return nil
}

func resourceAwsRoute53RecoveryReadinessCellUpdate(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).route53recoveryreadinessconn

input := &route53recoveryreadiness.UpdateCellInput{
CellName: aws.String(d.Id()),
Cells: expandStringList(d.Get("cells").([]interface{})),
}

_, err := conn.UpdateCell(input)
if err != nil {
return fmt.Errorf("error updating Route53 Recovery Readiness Cell: %s", err)
}

if d.HasChange("tags_all") {
o, n := d.GetChange("tags_all")
arn := d.Get("arn").(string)
if err := keyvaluetags.Route53recoveryreadinessUpdateTags(conn, arn, o, n); err != nil {
return fmt.Errorf("error updating Route53 Recovery Readiness Cell (%s) tags: %w", d.Id(), err)
}
}

return resourceAwsRoute53RecoveryReadinessCellRead(d, meta)
}

func resourceAwsRoute53RecoveryReadinessCellDelete(d *schema.ResourceData, meta interface{}) error {
conn := meta.(*AWSClient).route53recoveryreadinessconn

input := &route53recoveryreadiness.DeleteCellInput{
CellName: aws.String(d.Id()),
}
_, err := conn.DeleteCell(input)
if err != nil {
if isAWSErr(err, route53recoveryreadiness.ErrCodeResourceNotFoundException, "") {
return nil
}
return fmt.Errorf("error deleting Route53 Recovery Readiness Cell: %s", err)
}

gcinput := &route53recoveryreadiness.GetCellInput{
CellName: aws.String(d.Id()),
}
err = resource.Retry(d.Timeout(schema.TimeoutDelete), func() *resource.RetryError {
_, err := conn.GetCell(gcinput)
if err != nil {
if isAWSErr(err, route53recoveryreadiness.ErrCodeResourceNotFoundException, "") {
return nil
}
return resource.NonRetryableError(err)
}
return resource.RetryableError(fmt.Errorf("Route 53 Recovery Readiness Cell (%s) still exists", d.Id()))
})
if isResourceTimeoutError(err) {
_, err = conn.GetCell(gcinput)
}
if err != nil {
return fmt.Errorf("error waiting for Route 53 Recovery Readiness Cell (%s) deletion: %s", d.Id(), err)
}

return nil
}
Loading