Skip to content

Commit

Permalink
tests/resource/aws_elasticsearch_domain: Use multierror in sweeper an…
Browse files Browse the repository at this point in the history
…d skip domains stuck in deleting status (#16648)

Workaround for buggy API.

Output from sweeper in AWS Commercial:

```
2020/12/08 12:52:28 [DEBUG] Running Sweepers for region (us-west-2):
2020/12/08 12:52:28 [DEBUG] Running Sweeper (aws_elasticsearch_domain) in region (us-west-2)
2020/12/08 12:52:30 [INFO] Skipping Elasticsearch Domain (tf-test-5082256297594881822) with deleted status
2020/12/08 12:52:30 [INFO] Skipping Elasticsearch Domain (tf-test-841758105109071952) with deleted status
2020/12/08 12:52:30 Sweeper Tests ran successfully:
	- aws_elasticsearch_domain
2020/12/08 12:52:30 [DEBUG] Running Sweepers for region (us-east-1):
2020/12/08 12:52:30 [DEBUG] Running Sweeper (aws_elasticsearch_domain) in region (us-east-1)
2020/12/08 12:52:31 Sweeper Tests ran successfully:
	- aws_elasticsearch_domain
ok  	github.com/terraform-providers/terraform-provider-aws/aws	4.998s
```

Output from sweeper in AWS GovCloud (US):

```
2020/12/08 12:54:08 [DEBUG] Running Sweepers for region (us-gov-west-1):
2020/12/08 12:54:08 [DEBUG] Running Sweeper (aws_elasticsearch_domain) in region (us-gov-west-1)
2020/12/08 12:54:10 [DEBUG] Deleting ElasticSearch domain: "tf-test-579248222605063900"
2020/12/08 12:54:11 [DEBUG] Waiting for ElasticSearch domain "tf-test-579248222605063900" to be deleted
2020/12/08 12:56:54 Sweeper Tests ran successfully:
	- aws_elasticsearch_domain
ok  	github.com/terraform-providers/terraform-provider-aws/aws	168.818s
```
  • Loading branch information
bflad authored Dec 16, 2020
1 parent 4ca17d1 commit aba6707
Showing 1 changed file with 61 additions and 16 deletions.
77 changes: 61 additions & 16 deletions aws/resource_aws_elasticsearch_domain_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/aws/aws-sdk-go/aws/awserr"
elasticsearch "github.com/aws/aws-sdk-go/service/elasticsearchservice"
"github.com/aws/aws-sdk-go/service/iam"
"github.com/hashicorp/go-multierror"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
Expand All @@ -26,35 +27,79 @@ func init() {
func testSweepElasticSearchDomains(region string) error {
client, err := sharedClientForRegion(region)
if err != nil {
return fmt.Errorf("error getting client: %s", err)
return fmt.Errorf("error getting client: %w", err)
}
conn := client.(*AWSClient).esconn

out, err := conn.ListDomainNames(&elasticsearch.ListDomainNamesInput{})
var sweeperErrs *multierror.Error

input := &elasticsearch.ListDomainNamesInput{}

// ListDomainNames has no pagination support whatsoever
output, err := conn.ListDomainNames(input)

if testSweepSkipSweepError(err) {
log.Printf("[WARN] Skipping Elasticsearch Domain sweep for %s: %s", region, err)
return sweeperErrs.ErrorOrNil()
}

if err != nil {
if testSweepSkipSweepError(err) {
log.Printf("[WARN] Skipping Elasticsearch Domain sweep for %s: %s", region, err)
return nil
}
return fmt.Errorf("Error retrieving Elasticsearch Domains: %s", err)
sweeperErr := fmt.Errorf("error listing Elasticsearch Domains: %w", err)
log.Printf("[ERROR] %s", sweeperErr)
sweeperErrs = multierror.Append(sweeperErrs, sweeperErr)
return sweeperErrs.ErrorOrNil()
}
for _, domain := range out.DomainNames {
log.Printf("[INFO] Deleting Elasticsearch Domain: %s", *domain.DomainName)

_, err := conn.DeleteElasticsearchDomain(&elasticsearch.DeleteElasticsearchDomainInput{
DomainName: domain.DomainName,
})
if output == nil {
log.Printf("[WARN] Skipping Elasticsearch Domain sweep for %s: empty response", region)
return sweeperErrs.ErrorOrNil()
}

for _, domainInfo := range output.DomainNames {
if domainInfo == nil {
continue
}

name := aws.StringValue(domainInfo.DomainName)

// Elasticsearch Domains have regularly gotten stuck in a "being deleted" state
// e.g. Deleted and Processing are both true for days in the API
// Filter out domains that are Deleted already.

input := &elasticsearch.DescribeElasticsearchDomainInput{
DomainName: domainInfo.DomainName,
}

output, err := conn.DescribeElasticsearchDomain(input)

if err != nil {
log.Printf("[ERROR] Failed to delete Elasticsearch Domain %s: %s", *domain.DomainName, err)
sweeperErr := fmt.Errorf("error describing Elasticsearch Domain (%s): %w", name, err)
log.Printf("[ERROR] %s", sweeperErr)
sweeperErrs = multierror.Append(sweeperErrs, sweeperErr)
continue
}

if output != nil && output.DomainStatus != nil && aws.BoolValue(output.DomainStatus.Deleted) {
log.Printf("[INFO] Skipping Elasticsearch Domain (%s) with deleted status", name)
continue
}
err = resourceAwsElasticSearchDomainDeleteWaiter(*domain.DomainName, conn)

r := resourceAwsElasticSearchDomain()
d := r.Data(nil)
d.SetId(name)
d.Set("domain_name", name)

err = r.Delete(d, client)

if err != nil {
log.Printf("[ERROR] Failed to wait for deletion of Elasticsearch Domain %s: %s", *domain.DomainName, err)
sweeperErr := fmt.Errorf("error deleting Elasticsearch Domain (%s): %w", name, err)
log.Printf("[ERROR] %s", sweeperErr)
sweeperErrs = multierror.Append(sweeperErrs, sweeperErr)
continue
}
}

return nil
return sweeperErrs.ErrorOrNil()
}

func TestAccAWSElasticSearchDomain_basic(t *testing.T) {
Expand Down

0 comments on commit aba6707

Please sign in to comment.