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鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

ecs/ISO: Backport tagging fixes #23250

Merged
merged 7 commits into from
Feb 17, 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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 19 additions & 0 deletions .changelog/23030.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
```release-note:bug
resource/aws_ecs_capacity_provider: Fix tagging error preventing use in ISO partitions
```

```release-note:bug
resource/aws_ecs_cluster: Fix tagging error preventing use in ISO partitions
```

```release-note:bug
resource/aws_ecs_service: Fix tagging error preventing use in ISO partitions
```

```release-note:bug
resource/aws_ecs_task_definition: Fix tagging error preventing use in ISO partitions
```

```release-note:bug
resource/aws_ecs_task_set: Fix tagging error preventing use in ISO partitions
```
6 changes: 0 additions & 6 deletions internal/service/ecs/capacity_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -184,12 +184,6 @@ func resourceCapacityProviderRead(d *schema.ResourceData, meta interface{}) erro

tags := KeyValueTags(output.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed listing tags for Capacity Provider (%s): %s", d.Id(), err)
return nil
}

//lintignore:AWSR002
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
return fmt.Errorf("error setting tags: %w", err)
Expand Down
7 changes: 1 addition & 6 deletions internal/service/ecs/cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -265,6 +265,7 @@ func resourceClusterRead(d *schema.ResourceData, meta interface{}) error {

return nil
})

if tfresource.TimedOut(err) {
cluster, err = FindClusterByNameOrARN(context.Background(), conn, d.Id())
}
Expand Down Expand Up @@ -308,12 +309,6 @@ func resourceClusterRead(d *schema.ResourceData, meta interface{}) error {

tags := KeyValueTags(cluster.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed listing tags for Cluster (%s): %s", d.Id(), err)
return nil
}

//lintignore:AWSR002
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
return fmt.Errorf("error setting tags: %w", err)
Expand Down
18 changes: 18 additions & 0 deletions internal/service/ecs/find.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@ package ecs

import (
"context"
"log"

"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/ecs"
"github.com/hashicorp/aws-sdk-go-base/tfawserr"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-provider-aws/internal/tfresource"
"github.com/hashicorp/terraform-provider-aws/internal/verify"
)

func FindCapacityProviderByARN(conn *ecs.ECS, arn string) (*ecs.CapacityProvider, error) {
Expand All @@ -18,6 +20,14 @@ func FindCapacityProviderByARN(conn *ecs.ECS, arn string) (*ecs.CapacityProvider

output, err := conn.DescribeCapacityProviders(input)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed describing Capacity Provider (%s) with tags: %s; retrying without tags", arn, err)

input.Include = nil
output, err = conn.DescribeCapacityProviders(input)
}

if err != nil {
return nil, err
}
Expand Down Expand Up @@ -49,6 +59,14 @@ func FindClusterByNameOrARN(ctx context.Context, conn *ecs.ECS, nameOrARN string

output, err := conn.DescribeClustersWithContext(ctx, input)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed describing Cluster (%s) with tags: %s; retrying without tags", nameOrARN, err)

input.Include = aws.StringSlice([]string{ecs.ClusterFieldConfigurations, ecs.ClusterFieldSettings})
output, err = conn.DescribeClustersWithContext(ctx, input)
}

if tfawserr.ErrCodeEquals(err, ecs.ErrCodeClusterNotFoundException) {
return nil, &resource.NotFoundError{
LastError: err,
Expand Down
14 changes: 8 additions & 6 deletions internal/service/ecs/service.go
Original file line number Diff line number Diff line change
Expand Up @@ -626,6 +626,14 @@ func resourceServiceRead(d *schema.ResourceData, meta interface{}) error {

output, err := conn.DescribeServices(&input)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed describing Service (%s) with tags: %s; retrying without tags", d.Id(), err)

input.Include = nil
output, err = conn.DescribeServices(&input)
}

if !d.IsNewResource() && tfawserr.ErrCodeEquals(err, ecs.ErrCodeServiceNotFoundException) {
log.Printf("[WARN] ECS service (%s) not found, removing from state", d.Id())
d.SetId("")
Expand Down Expand Up @@ -752,12 +760,6 @@ func resourceServiceRead(d *schema.ResourceData, meta interface{}) error {

tags := KeyValueTags(service.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed listing tags for Service (%s): %s", d.Id(), err)
return nil
}

//lintignore:AWSR002
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
return fmt.Errorf("error setting tags: %w", err)
Expand Down
23 changes: 15 additions & 8 deletions internal/service/ecs/task_definition.go
Original file line number Diff line number Diff line change
Expand Up @@ -561,13 +561,26 @@ func resourceTaskDefinitionRead(d *schema.ResourceData, meta interface{}) error
ignoreTagsConfig := meta.(*conns.AWSClient).IgnoreTagsConfig

log.Printf("[DEBUG] Reading task definition %s", d.Id())
out, err := conn.DescribeTaskDefinition(&ecs.DescribeTaskDefinitionInput{

input := ecs.DescribeTaskDefinitionInput{
TaskDefinition: aws.String(d.Get("arn").(string)),
Include: []*string{aws.String(ecs.TaskDefinitionFieldTags)},
})
}

out, err := conn.DescribeTaskDefinition(&input)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed describing Task Definition (%s) with tags: %s; retrying without tags", d.Id(), err)

input.Include = nil
out, err = conn.DescribeTaskDefinition(&input)
}

if err != nil {
return err
}

log.Printf("[DEBUG] Received task definition %s, status:%s\n %s", aws.StringValue(out.TaskDefinition.Family),
aws.StringValue(out.TaskDefinition.Status), out)

Expand Down Expand Up @@ -636,12 +649,6 @@ func resourceTaskDefinitionRead(d *schema.ResourceData, meta interface{}) error

tags := KeyValueTags(out.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed listing tags for Task Definition (%s): %s", d.Id(), err)
return nil
}

//lintignore:AWSR002
if err := d.Set("tags", tags.RemoveDefaultConfig(defaultTagsConfig).Map()); err != nil {
return fmt.Errorf("error setting tags: %w", err)
Expand Down
14 changes: 8 additions & 6 deletions internal/service/ecs/task_set.go
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,14 @@ func resourceTaskSetRead(d *schema.ResourceData, meta interface{}) error {
return nil
}

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed describing Task Set (%s) with tags: %s; retrying without tags", d.Id(), err)

input.Include = nil
out, err = conn.DescribeTaskSets(input)
}

if err != nil {
return fmt.Errorf("error reading ECS TaskSet (%s): %w", d.Id(), err)
}
Expand Down Expand Up @@ -449,12 +457,6 @@ func resourceTaskSetRead(d *schema.ResourceData, meta interface{}) error {

tags := KeyValueTags(taskSet.Tags).IgnoreAWS().IgnoreConfig(ignoreTagsConfig)

// Some partitions (i.e., ISO) may not support tagging, giving error
if verify.CheckISOErrorTagsUnsupported(err) {
log.Printf("[WARN] ECS tagging failed listing tags for Task Set (%s): %s", d.Id(), err)
return nil
}

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