From 39bc60c3dc6682e871b10fdaa837649f5e58a709 Mon Sep 17 00:00:00 2001 From: Maxime Bury Date: Wed, 24 Aug 2016 13:17:45 -0400 Subject: [PATCH] Retry on gateway not found --- .../aws/resource_aws_internet_gateway.go | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/builtin/providers/aws/resource_aws_internet_gateway.go b/builtin/providers/aws/resource_aws_internet_gateway.go index a6c576386..e8f08a638 100644 --- a/builtin/providers/aws/resource_aws_internet_gateway.go +++ b/builtin/providers/aws/resource_aws_internet_gateway.go @@ -249,24 +249,28 @@ func resourceAwsInternetGatewayDetach(d *schema.ResourceData, meta interface{}) // InstanceStateRefreshFunc returns a resource.StateRefreshFunc that is used to watch // an EC2 instance. -func detachIGStateRefreshFunc(conn *ec2.EC2, instanceID, vpcID string) resource.StateRefreshFunc { +func detachIGStateRefreshFunc(conn *ec2.EC2, gatewayID, vpcID string) resource.StateRefreshFunc { return func() (interface{}, string, error) { _, err := conn.DetachInternetGateway(&ec2.DetachInternetGatewayInput{ - InternetGatewayId: aws.String(instanceID), + InternetGatewayId: aws.String(gatewayID), VpcId: aws.String(vpcID), }) if err != nil { - ec2err, ok := err.(awserr.Error) - if ok { - if ec2err.Code() == "InvalidInternetGatewayID.NotFound" { - return nil, "Not Found", err - } else if ec2err.Code() == "Gateway.NotAttached" { + if ec2err, ok := err.(awserr.Error); ok { + switch ec2err.Code() { + case "InvalidInternetGatewayID.NotFound": + log.Printf("[TRACE] Error detaching Internet Gateway '%s' from VPC '%s': %s", gatewayID, vpcID, err) + return nil, "Not Found", nil + + case "Gateway.NotAttached": return "detached", "detached", nil - } else if ec2err.Code() == "DependencyViolation" { + + case "DependencyViolation": return nil, "detaching", nil } } } + // DetachInternetGateway only returns an error, so if it's nil, assume we're // detached return "detached", "detached", nil