func resource_aws_internet_gateway_detach( ec2conn *ec2.EC2, s *terraform.ResourceState) error { if s.Attributes["vpc_id"] == "" { return nil } log.Printf( "[INFO] Detaching Internet Gateway '%s' from VPC '%s'", s.ID, s.Attributes["vpc_id"]) wait := true _, err := ec2conn.DetachInternetGateway(s.ID, s.Attributes["vpc_id"]) if err != nil { ec2err, ok := err.(*ec2.Error) if ok { if ec2err.Code == "InvalidInternetGatewayID.NotFound" { err = nil wait = false } else if ec2err.Code == "Gateway.NotAttached" { err = nil wait = false } } if err != nil { return err } } delete(s.Attributes, "vpc_id") if !wait { return nil } // Wait for it to be fully detached before continuing log.Printf("[DEBUG] Waiting for internet gateway (%s) to detach", s.ID) stateConf := &resource.StateChangeConf{ Pending: []string{"attached", "detaching", "available"}, Target: "detached", Refresh: IGAttachStateRefreshFunc(ec2conn, s.ID, "detached"), Timeout: 1 * time.Minute, } if _, err := stateConf.WaitForState(); err != nil { return fmt.Errorf( "Error waiting for internet gateway (%s) to detach: %s", s.ID, err) } return nil }