Skip to content

Commit

Permalink
Merge pull request #20526 from WyatyPeert/f-aws_route53recoveryreadin…
Browse files Browse the repository at this point in the history
…ess-add_new_resources

aws route53recoveryreadiness add new resources
  • Loading branch information
YakDriver authored Aug 23, 2021
2 parents ddc12c8 + ac5f3a4 commit 61b0d91
Show file tree
Hide file tree
Showing 21 changed files with 2,754 additions and 0 deletions.
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

0 comments on commit 61b0d91

Please sign in to comment.