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

resource/aws_dynamodb_table: Handles Tables in ARCHIVED status #26744

Merged
merged 3 commits into from
Sep 12, 2022
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/26744.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:bug
resource/aws_dynamodb_table: No longer returns error for an ARCHIVED table
```
9 changes: 2 additions & 7 deletions internal/service/dynamodb/status.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package dynamodb

import (
"context"
"log"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/dynamodb"
Expand Down Expand Up @@ -53,12 +52,10 @@ func statusReplicaUpdate(conn *dynamodb.DynamoDB, tableName, region string) reso
TableName: aws.String(tableName),
})
if err != nil {
return 42, "", err
return nil, "", err
}
log.Printf("[DEBUG] DynamoDB replicas: %s", result.Table.Replicas)

var targetReplica *dynamodb.ReplicaDescription

for _, replica := range result.Table.Replicas {
if aws.StringValue(replica.RegionName) == region {
targetReplica = replica
Expand All @@ -80,12 +77,10 @@ func statusReplicaDelete(conn *dynamodb.DynamoDB, tableName, region string) reso
TableName: aws.String(tableName),
})
if err != nil {
return 42, "", err
return nil, "", err
}

log.Printf("[DEBUG] all replicas for waiting: %s", result.Table.Replicas)
var targetReplica *dynamodb.ReplicaDescription

for _, replica := range result.Table.Replicas {
if aws.StringValue(replica.RegionName) == region {
targetReplica = replica
Expand Down
6 changes: 2 additions & 4 deletions internal/service/dynamodb/sweep.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,11 @@ func sweepTables(region string) error {

// read concurrently and gather errors
g.Go(func() error {
// Need to Read first to fill in byte_match_tuples attribute
// Need to Read first to fill in `replica` attribute
err := r.Read(d, client)

if err != nil {
sweeperErr := fmt.Errorf("error reading DynamoDB Table (%s): %w", id, err)
log.Printf("[ERROR] %s", sweeperErr)
return sweeperErr
return err
}

// In case it was already deleted
Expand Down
12 changes: 6 additions & 6 deletions internal/service/dynamodb/table.go
Original file line number Diff line number Diff line change
Expand Up @@ -717,8 +717,8 @@ func resourceTableRead(d *schema.ResourceData, meta interface{}) error {
pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{
TableName: aws.String(d.Id()),
})

if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") {
// When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException`
if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) {
return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTable, d.Id(), fmt.Errorf("continuous backups: %w", err))
}

Expand All @@ -742,8 +742,8 @@ func resourceTableRead(d *schema.ResourceData, meta interface{}) error {
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

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

if err != nil && !tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") {
// When a Table is `ARCHIVED`, ListTags returns `ResourceNotFoundException`
if err != nil && !(tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") || tfresource.NotFound(err)) {
return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTable, d.Id(), fmt.Errorf("tags: %w", err))
}

Expand Down Expand Up @@ -1469,8 +1469,8 @@ func replicaPITR(conn *dynamodb.DynamoDB, tableName string, region string, tfVer
pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{
TableName: aws.String(tableName),
})

if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") {
// When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException`
if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) {
return false, fmt.Errorf("describing Continuous Backups: %w", err)
}

Expand Down
9 changes: 5 additions & 4 deletions internal/service/dynamodb/table_data_source.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/hashicorp/terraform-provider-aws/internal/conns"
"github.com/hashicorp/terraform-provider-aws/internal/create"
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
)

func DataSourceTable() *schema.Resource {
Expand Down Expand Up @@ -308,8 +309,8 @@ func dataSourceTableRead(d *schema.ResourceData, meta interface{}) error {
pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{
TableName: aws.String(d.Id()),
})

if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") {
// When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException`
if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) {
return fmt.Errorf("error describing DynamoDB Table (%s) Continuous Backups: %w", d.Id(), err)
}

Expand All @@ -330,8 +331,8 @@ func dataSourceTableRead(d *schema.ResourceData, meta interface{}) error {
}

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

if err != nil && !tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") {
// When a Table is `ARCHIVED`, ListTags returns `ResourceNotFoundException`
if err != nil && !(tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") || tfresource.NotFound(err)) {
return fmt.Errorf("error listing tags for DynamoDB Table (%s): %w", d.Get("arn").(string), err)
}

Expand Down
8 changes: 4 additions & 4 deletions internal/service/dynamodb/table_replica.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,8 +295,8 @@ func resourceTableReplicaReadReplica(d *schema.ResourceData, meta interface{}) e
pitrOut, err := conn.DescribeContinuousBackups(&dynamodb.DescribeContinuousBackupsInput{
TableName: aws.String(tableName),
})

if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException") {
// When a Table is `ARCHIVED`, DescribeContinuousBackups returns `TableNotFoundException`
if err != nil && !tfawserr.ErrCodeEquals(err, "UnknownOperationException", dynamodb.ErrCodeTableNotFoundException) {
return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTableReplica, d.Id(), fmt.Errorf("continuous backups: %w", err))
}

Expand All @@ -310,8 +310,8 @@ func resourceTableReplicaReadReplica(d *schema.ResourceData, meta interface{}) e
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

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

if err != nil && !tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") {
// When a Table is `ARCHIVED`, ListTags returns `ResourceNotFoundException`
if err != nil && !(tfawserr.ErrMessageContains(err, "UnknownOperationException", "Tagging is not currently supported in DynamoDB Local.") || tfresource.NotFound(err)) {
return create.Error(names.DynamoDB, create.ErrActionReading, ResNameTableReplica, d.Id(), fmt.Errorf("tags: %w", err))
}

Expand Down