From 60bae99a94c07daa086d62438ef45e6a02f2fa2e Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Sat, 20 May 2017 23:42:33 +0200 Subject: [PATCH] provider/aws: Retry ElastiCache cluster deletion when it's snapshotting (#14700) --- .../aws/resource_aws_elasticache_cluster.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/builtin/providers/aws/resource_aws_elasticache_cluster.go b/builtin/providers/aws/resource_aws_elasticache_cluster.go index 03e6f84890..a2bec932d3 100644 --- a/builtin/providers/aws/resource_aws_elasticache_cluster.go +++ b/builtin/providers/aws/resource_aws_elasticache_cluster.go @@ -565,7 +565,18 @@ func resourceAwsElasticacheClusterDelete(d *schema.ResourceData, meta interface{ req := &elasticache.DeleteCacheClusterInput{ CacheClusterId: aws.String(d.Id()), } - _, err := conn.DeleteCacheCluster(req) + err := resource.Retry(5*time.Minute, func() *resource.RetryError { + _, err := conn.DeleteCacheCluster(req) + if err != nil { + awsErr, ok := err.(awserr.Error) + // The cluster may be just snapshotting, so we retry until it's ready for deletion + if ok && awsErr.Code() == "InvalidCacheClusterState" { + return resource.RetryableError(err) + } + return resource.NonRetryableError(err) + } + return nil + }) if err != nil { return err }