diff --git a/builtin/providers/aws/resource_aws_internet_gateway.go b/builtin/providers/aws/resource_aws_internet_gateway.go index bdb9a4905..af2c0f6d7 100644 --- a/builtin/providers/aws/resource_aws_internet_gateway.go +++ b/builtin/providers/aws/resource_aws_internet_gateway.go @@ -97,40 +97,24 @@ func resourceAwsInternetGatewayDelete(d *schema.ResourceData, meta interface{}) return resource.Retry(5*time.Minute, func() error { _, err := ec2conn.DeleteInternetGateway(d.Id()) - if err != nil { - ec2err, ok := err.(*ec2.Error) - if !ok { - return err - } - - switch ec2err.Code { - case "InvalidInternetGatewayID.NotFound": - return nil - case "DependencyViolation": - return err // retry - default: - return resource.RetryError{err} - } + if err == nil { + return nil } - return fmt.Errorf("Error deleting internet gateway: %s", err) + ec2err, ok := err.(*ec2.Error) + if !ok { + return err + } + + switch ec2err.Code { + case "InvalidInternetGatewayID.NotFound": + return nil + case "DependencyViolation": + return err // retry + } + + return resource.RetryError{err} }) - - // Wait for the internet gateway to actually delete - log.Printf("[DEBUG] Waiting for internet gateway (%s) to delete", d.Id()) - stateConf := &resource.StateChangeConf{ - Pending: []string{"available"}, - Target: "", - Refresh: IGStateRefreshFunc(ec2conn, d.Id()), - Timeout: 10 * time.Minute, - } - if _, err := stateConf.WaitForState(); err != nil { - return fmt.Errorf( - "Error waiting for internet gateway (%s) to destroy: %s", - d.Id(), err) - } - - return nil } func resourceAwsInternetGatewayAttach(d *schema.ResourceData, meta interface{}) error { diff --git a/builtin/providers/aws/resource_aws_internet_gateway_test.go b/builtin/providers/aws/resource_aws_internet_gateway_test.go index 47a57c6a4..f5b1bda25 100644 --- a/builtin/providers/aws/resource_aws_internet_gateway_test.go +++ b/builtin/providers/aws/resource_aws_internet_gateway_test.go @@ -54,6 +54,36 @@ func TestAccAWSInternetGateway(t *testing.T) { }) } +func TestAccAWSInternetGateway_delete(t *testing.T) { + var ig ec2.InternetGateway + + testDeleted := func(r string) resource.TestCheckFunc { + return func(s *terraform.State) error { + _, ok := s.RootModule().Resources[r] + if ok { + return fmt.Errorf("Internet Gateway %q should have been deleted", r) + } + return nil + } + } + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckInternetGatewayDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccInternetGatewayConfig, + Check: resource.ComposeTestCheckFunc(testAccCheckInternetGatewayExists("aws_internet_gateway.foo", &ig)), + }, + resource.TestStep{ + Config: testAccNoInternetGatewayConfig, + Check: resource.ComposeTestCheckFunc(testDeleted("aws_internet_gateway.foo")), + }, + }, + }) +} + func testAccCheckInternetGatewayDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).ec2conn @@ -113,6 +143,12 @@ func testAccCheckInternetGatewayExists(n string, ig *ec2.InternetGateway) resour } } +const testAccNoInternetGatewayConfig = ` +resource "aws_vpc" "foo" { + cidr_block = "10.1.0.0/16" +} +` + const testAccInternetGatewayConfig = ` resource "aws_vpc" "foo" { cidr_block = "10.1.0.0/16"