From ad408d8862e14d320b37b302ae3a7cfbe9d20ac5 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Fri, 26 Jun 2015 17:26:06 -0700 Subject: [PATCH] provider/aws: vpc delete retry on dependency violation [GH-1628] --- builtin/providers/aws/resource_aws_vpc.go | 25 +++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/builtin/providers/aws/resource_aws_vpc.go b/builtin/providers/aws/resource_aws_vpc.go index f8c5217cb..dfb67172e 100644 --- a/builtin/providers/aws/resource_aws_vpc.go +++ b/builtin/providers/aws/resource_aws_vpc.go @@ -258,16 +258,29 @@ func resourceAwsVpcDelete(d *schema.ResourceData, meta interface{}) error { VPCID: &vpcID, } log.Printf("[INFO] Deleting VPC: %s", d.Id()) - if _, err := conn.DeleteVPC(DeleteVpcOpts); err != nil { - ec2err, ok := err.(awserr.Error) - if ok && ec2err.Code() == "InvalidVpcID.NotFound" { + + return resource.Retry(5*time.Minute, func() error { + _, err := conn.DeleteVPC(DeleteVpcOpts) + if err == nil { return nil } - return fmt.Errorf("Error deleting VPC: %s", err) - } + ec2err, ok := err.(awserr.Error) + if !ok { + return &resource.RetryError{Err: err} + } - return nil + switch ec2err.Code() { + case "InvalidVpcID.NotFound": + return nil + case "DependencyViolation": + return err + } + + return &resource.RetryError{ + Err: fmt.Errorf("Error deleting VPC: %s", err), + } + }) } // VPCStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch