func testAccCheckDirectoryServiceDirectoryDestroy(s *terraform.State) error { dsconn := testAccProvider.Meta().(*AWSClient).dsconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_directory_service_directory" { continue } input := directoryservice.DescribeDirectoriesInput{ DirectoryIds: []*string{aws.String(rs.Primary.ID)}, } out, err := dsconn.DescribeDirectories(&input) if err != nil { // EntityDoesNotExistException means it's gone, this is good if dserr, ok := err.(awserr.Error); ok && dserr.Code() == "EntityDoesNotExistException" { return nil } return err } if out != nil && len(out.DirectoryDescriptions) > 0 { return fmt.Errorf("Expected AWS Directory Service Directory to be gone, but was still found") } return nil } return fmt.Errorf("Default error in Service Directory Test") }
func testAccCheckCloudStackEgressFirewallDestroy(s *terraform.State) error { cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) for _, rs := range s.RootModule().Resources { if rs.Type != "cloudstack_egress_firewall" { continue } if rs.Primary.ID == "" { return fmt.Errorf("No instance ID is set") } for k, id := range rs.Primary.Attributes { if !strings.Contains(k, ".uuids.") || strings.HasSuffix(k, ".uuids.#") { continue } _, _, err := cs.Firewall.GetEgressFirewallRuleByID(id) if err == nil { return fmt.Errorf("Egress rule %s still exists", rs.Primary.ID) } } } return nil }
func testAccCheckAppCookieStickinessPolicyDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).elbconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_app_cookie_stickiness_policy" { continue } lbName, _, policyName := resourceAwsAppCookieStickinessPolicyParseId( rs.Primary.ID) out, err := conn.DescribeLoadBalancerPolicies( &elb.DescribeLoadBalancerPoliciesInput{ LoadBalancerName: aws.String(lbName), PolicyNames: []*string{aws.String(policyName)}, }) if err != nil { if ec2err, ok := err.(awserr.Error); ok && (ec2err.Code() == "PolicyNotFound" || ec2err.Code() == "LoadBalancerNotFound") { continue } return err } if len(out.PolicyDescriptions) > 0 { return fmt.Errorf("Policy still exists") } } return nil }
func testAccCheckIAMUserPolicyDestroy(s *terraform.State) error { iamconn := testAccProvider.Meta().(*AWSClient).iamconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_iam_user_policy" { continue } role, name := resourceAwsIamRolePolicyParseId(rs.Primary.ID) request := &iam.GetRolePolicyInput{ PolicyName: aws.String(name), RoleName: aws.String(role), } var err error getResp, err := iamconn.GetRolePolicy(request) if err != nil { if iamerr, ok := err.(awserr.Error); ok && iamerr.Code() == "NoSuchEntity" { // none found, that's good return nil } return fmt.Errorf("Error reading IAM policy %s from role %s: %s", name, role, err) } if getResp != nil { return fmt.Errorf("Found IAM Role, expected none: %s", getResp) } } return nil }
func testAccCheckAWSNetworkAclRuleDestroy(s *terraform.State) error { for _, rs := range s.RootModule().Resources { conn := testAccProvider.Meta().(*AWSClient).ec2conn if rs.Type != "aws_network_acl_rule" { continue } req := &ec2.DescribeNetworkAclsInput{ NetworkAclIds: []*string{aws.String(rs.Primary.ID)}, } resp, err := conn.DescribeNetworkAcls(req) if err == nil { if len(resp.NetworkAcls) > 0 && *resp.NetworkAcls[0].NetworkAclId == rs.Primary.ID { networkAcl := resp.NetworkAcls[0] if networkAcl.Entries != nil { return fmt.Errorf("Network ACL Entries still exist") } } } ec2err, ok := err.(awserr.Error) if !ok { return err } if ec2err.Code() != "InvalidNetworkAclID.NotFound" { return err } } return nil }
func testAccCheckCloudStackNetworkACLRuleDestroy(s *terraform.State) error { cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) for _, rs := range s.RootModule().Resources { if rs.Type != "cloudstack_network_acl_rule" { continue } if rs.Primary.ID == "" { return fmt.Errorf("No network ACL rule ID is set") } for k, id := range rs.Primary.Attributes { if !strings.Contains(k, ".uuids.") || strings.HasSuffix(k, ".uuids.#") { continue } _, _, err := cs.NetworkACL.GetNetworkACLByID(id) if err == nil { return fmt.Errorf("Network ACL rule %s still exists", rs.Primary.ID) } } } return nil }
func testAccCheckAWSCloudFormationDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).cfconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_cloudformation_stack" { continue } params := cloudformation.DescribeStacksInput{ StackName: aws.String(rs.Primary.ID), } resp, err := conn.DescribeStacks(¶ms) if err != nil { return err } for _, s := range resp.Stacks { if *s.StackId == rs.Primary.ID && *s.StackStatus != "DELETE_COMPLETE" { return fmt.Errorf("CloudFormation stack still exists: %q", rs.Primary.ID) } } } return nil }
func testAccCheckDigitalOceanDropletDestroy(s *terraform.State) error { client := testAccProvider.Meta().(*godo.Client) for _, rs := range s.RootModule().Resources { if rs.Type != "digitalocean_droplet" { continue } id, err := strconv.Atoi(rs.Primary.ID) if err != nil { return err } // Try to find the Droplet _, _, err = client.Droplets.Get(id) // Wait if err != nil && !strings.Contains(err.Error(), "404") { return fmt.Errorf( "Error waiting for droplet (%s) to be destroyed: %s", rs.Primary.ID, err) } } return nil }
func testAccCheckAWSRoleDestroy(s *terraform.State) error { iamconn := testAccProvider.Meta().(*AWSClient).iamconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_iam_role" { continue } // Try to get role _, err := iamconn.GetRole(&iam.GetRoleInput{ RoleName: aws.String(rs.Primary.ID), }) if err == nil { return fmt.Errorf("still exist.") } // Verify the error is what we want ec2err, ok := err.(awserr.Error) if !ok { return err } if ec2err.Code() != "NoSuchEntity" { return err } } return nil }
func testCheckAzureRMLocalNetworkGatewayDestroy(s *terraform.State) error { for _, res := range s.RootModule().Resources { if res.Type != "azurerm_local_network_gateway" { continue } id, err := parseAzureResourceID(res.Primary.ID) if err != nil { return err } localNetName := id.Path["localNetworkGateways"] resGrp := id.ResourceGroup lnetClient := testAccProvider.Meta().(*ArmClient).localNetConnClient resp, err := lnetClient.Get(resGrp, localNetName) if err != nil { return nil } if resp.StatusCode != http.StatusNotFound { return fmt.Errorf("Local network gateway still exists:\n%#v", resp.Properties) } } return nil }
func testAccCheckCustomerGatewayDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).ec2conn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_customer_gatewah" { continue } gatewayFilter := &ec2.Filter{ Name: aws.String("customer-gateway-id"), Values: []*string{aws.String(rs.Primary.ID)}, } resp, err := conn.DescribeCustomerGateways(&ec2.DescribeCustomerGatewaysInput{ Filters: []*ec2.Filter{gatewayFilter}, }) if ae, ok := err.(awserr.Error); ok && ae.Code() == "InvalidCustomerGatewayID.NotFound" { continue } if err == nil { if len(resp.CustomerGateways) > 0 { return fmt.Errorf("Customer gateway still exists: %v", resp.CustomerGateways) } } return err } return nil }
func testAccCheckAzureDnsServerDestroy(s *terraform.State) error { vnetClient := testAccProvider.Meta().(*Client).vnetClient for _, resource := range s.RootModule().Resources { if resource.Type != "azure_dns_server" { continue } if resource.Primary.ID == "" { return fmt.Errorf("No DNS Server ID is set.") } netConf, err := vnetClient.GetVirtualNetworkConfiguration() if err != nil { // This is desirable - if there is no network config there can't be any DNS Servers if management.IsResourceNotFoundError(err) { continue } return fmt.Errorf("Error retrieving networking configuration from Azure: %s", err) } for _, dns := range netConf.Configuration.DNS.DNSServers { if dns.Name == resource.Primary.ID { return fmt.Errorf("Azure DNS Server still exists.") } } } return nil }
func testAccCheckAWSSecurityGroupRuleDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).ec2conn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_security_group" { continue } // Retrieve our group req := &ec2.DescribeSecurityGroupsInput{ GroupIds: []*string{aws.String(rs.Primary.ID)}, } resp, err := conn.DescribeSecurityGroups(req) if err == nil { if len(resp.SecurityGroups) > 0 && *resp.SecurityGroups[0].GroupId == rs.Primary.ID { return fmt.Errorf("Security Group (%s) still exists.", rs.Primary.ID) } return nil } ec2err, ok := err.(awserr.Error) if !ok { return err } // Confirm error code is what we want if ec2err.Code() != "InvalidGroup.NotFound" { return err } } return nil }
func testCheckAzureRMCdnEndpointDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*ArmClient).cdnEndpointsClient for _, rs := range s.RootModule().Resources { if rs.Type != "azurerm_cdn_endpoint" { continue } name := rs.Primary.Attributes["name"] resourceGroup := rs.Primary.Attributes["resource_group_name"] profileName := rs.Primary.Attributes["profile_name"] resp, err := conn.Get(name, profileName, resourceGroup) if err != nil { return nil } if resp.StatusCode != http.StatusNotFound { return fmt.Errorf("CDN Endpoint still exists:\n%#v", resp.Properties) } } return nil }
func testAccCheckAzureStorageQueueDeleted(s *terraform.State) error { for _, resource := range s.RootModule().Resources { if resource.Type != "azure_storage_queue" { continue } if resource.Primary.ID == "" { return fmt.Errorf("Azure Storage Service Queue ID %s is missing.", resource.Primary.ID) } azureClient := testAccProvider.Meta().(*Client) queueClient, err := azureClient.getStorageServiceQueueClient(testAccStorageServiceName) if err != nil { return err } exists, err := queueClient.QueueExists(resource.Primary.ID) if err != nil { return fmt.Errorf("Error querying Azure for Storage Queue existence: %s", err) } if exists { return fmt.Errorf("Azure Storage Queue %s still exists!", resource.Primary.ID) } } return nil }
func testAccCheckAWSGroupMembershipDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).iamconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_iam_group_membership" { continue } group := rs.Primary.Attributes["group"] _, err := conn.GetGroup(&iam.GetGroupInput{ GroupName: aws.String(group), }) if err != nil { // Verify the error is what we want if ae, ok := err.(awserr.Error); ok && ae.Code() == "NoSuchEntity" { continue } return err } return fmt.Errorf("still exists") } return nil }
func testAccCheckAWSRedshiftSecurityGroupDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).redshiftconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_redshift_security_group" { continue } // Try to find the Group resp, err := conn.DescribeClusterSecurityGroups( &redshift.DescribeClusterSecurityGroupsInput{ ClusterSecurityGroupName: aws.String(rs.Primary.ID), }) if err == nil { if len(resp.ClusterSecurityGroups) != 0 && *resp.ClusterSecurityGroups[0].ClusterSecurityGroupName == rs.Primary.ID { return fmt.Errorf("Redshift Security Group still exists") } } // Verify the error newerr, ok := err.(awserr.Error) if !ok { return err } if newerr.Code() != "ClusterSecurityGroupNotFound" { return err } } return nil }
func testAccCheckIAMSamlProviderDestroy(s *terraform.State) error { iamconn := testAccProvider.Meta().(*AWSClient).iamconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_iam_saml_provider" { continue } input := &iam.GetSAMLProviderInput{ SAMLProviderArn: aws.String(rs.Primary.ID), } out, err := iamconn.GetSAMLProvider(input) if err != nil { if iamerr, ok := err.(awserr.Error); ok && iamerr.Code() == "NoSuchEntity" { // none found, that's good return nil } return fmt.Errorf("Error reading IAM SAML Provider, out: %s, err: %s", out, err) } if out != nil { return fmt.Errorf("Found IAM SAML Provider, expected none: %s", out) } } return nil }
func testCheckAzureRMNetworkSecurityRuleDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*ArmClient).secRuleClient for _, rs := range s.RootModule().Resources { if rs.Type != "azurerm_network_security_rule" { continue } sgName := rs.Primary.Attributes["network_security_group_name"] sgrName := rs.Primary.Attributes["name"] resourceGroup := rs.Primary.Attributes["resource_group_name"] resp, err := conn.Get(resourceGroup, sgName, sgrName) if err != nil { return nil } if resp.StatusCode != http.StatusNotFound { return fmt.Errorf("Network Security Rule still exists:\n%#v", resp.Properties) } } return nil }
func testAccCheckAWSELBDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).elbconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_elb" { continue } describe, err := conn.DescribeLoadBalancers(&elb.DescribeLoadBalancersInput{ LoadBalancerNames: []*string{aws.String(rs.Primary.ID)}, }) if err == nil { if len(describe.LoadBalancerDescriptions) != 0 && *describe.LoadBalancerDescriptions[0].LoadBalancerName == rs.Primary.ID { return fmt.Errorf("ELB still exists") } } // Verify the error providerErr, ok := err.(awserr.Error) if !ok { return err } if providerErr.Code() != "LoadBalancerNotFound" { return fmt.Errorf("Unexpected error: %s", err) } } return nil }
func testAccCheckEfsFileSystemDestroy(s *terraform.State) error { if len(s.RootModule().Resources) > 0 { return fmt.Errorf("Expected all resources to be gone, but found: %#v", s.RootModule().Resources) } return nil }
func testAccCheckCloudStackSecondaryIPAddressDestroy(s *terraform.State) error { cs := testAccProvider.Meta().(*cloudstack.CloudStackClient) for _, rs := range s.RootModule().Resources { if rs.Type != "cloudstack_secondary_ipaddress" { continue } if rs.Primary.ID == "" { return fmt.Errorf("No IP address ID is set") } // Retrieve the virtual_machine ID virtualmachineid, e := retrieveID( cs, "virtual_machine", rs.Primary.Attributes["virtual_machine"]) if e != nil { return e.Error() } // Get the virtual machine details vm, count, err := cs.VirtualMachine.GetVirtualMachineByID(virtualmachineid) if err != nil { if count == 0 { return fmt.Errorf("Instance not found") } return err } nicid := rs.Primary.Attributes["nicid"] if nicid == "" { nicid = vm.Nic[0].Id } p := cs.Nic.NewListNicsParams(virtualmachineid) p.SetNicid(nicid) l, err := cs.Nic.ListNics(p) if err != nil { return err } if l.Count == 0 { return fmt.Errorf("NIC not found") } if l.Count > 1 { return fmt.Errorf("Found more then one possible result: %v", l.Nics) } for _, sip := range l.Nics[0].Secondaryip { if sip.Id == rs.Primary.ID { return fmt.Errorf("IP address %s still exists", rs.Primary.ID) } } return nil } return nil }
func testAccCheckAWSAutoscalingPolicyDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).autoscalingconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_autoscaling_group" { continue } params := autoscaling.DescribePoliciesInput{ AutoScalingGroupName: aws.String(rs.Primary.Attributes["autoscaling_group_name"]), PolicyNames: []*string{aws.String(rs.Primary.ID)}, } resp, err := conn.DescribePolicies(¶ms) if err == nil { if len(resp.ScalingPolicies) != 0 && *resp.ScalingPolicies[0].PolicyName == rs.Primary.ID { return fmt.Errorf("Scaling Policy Still Exists: %s", rs.Primary.ID) } } } return nil }
func testAccCheckAWSAutoScalingGroupDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).autoscalingconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_autoscaling_group" { continue } // Try to find the Group describeGroups, err := conn.DescribeAutoScalingGroups( &autoscaling.DescribeAutoScalingGroupsInput{ AutoScalingGroupNames: []*string{aws.String(rs.Primary.ID)}, }) if err == nil { if len(describeGroups.AutoScalingGroups) != 0 && *describeGroups.AutoScalingGroups[0].AutoScalingGroupName == rs.Primary.ID { return fmt.Errorf("AutoScaling Group still exists") } } // Verify the error ec2err, ok := err.(awserr.Error) if !ok { return err } if ec2err.Code() != "InvalidGroup.NotFound" { return err } } return nil }
func outputsAsString(state *terraform.State) string { if state == nil { return "" } outputs := state.RootModule().Outputs outputBuf := new(bytes.Buffer) if len(outputs) > 0 { outputBuf.WriteString("[reset][bold][green]\nOutputs:\n\n") // Output the outputs in alphabetical order keyLen := 0 keys := make([]string, 0, len(outputs)) for key, _ := range outputs { keys = append(keys, key) if len(key) > keyLen { keyLen = len(key) } } sort.Strings(keys) for _, k := range keys { v := outputs[k] outputBuf.WriteString(fmt.Sprintf( " %s%s = %s\n", k, strings.Repeat(" ", keyLen-len(k)), v)) } } return strings.TrimSpace(outputBuf.String()) }
func testAccCheckVcdSNATDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*VCDClient) for _, rs := range s.RootModule().Resources { if rs.Type != "vcd_snat" { continue } gatewayName := rs.Primary.Attributes["edge_gateway"] edgeGateway, err := conn.OrgVdc.FindEdgeGateway(gatewayName) if err != nil { return fmt.Errorf("Could not find edge gateway") } var found bool for _, v := range edgeGateway.EdgeGateway.Configuration.EdgeGatewayServiceConfiguration.NatService.NatRule { if v.RuleType == "SNAT" && v.GatewayNatRule.OriginalIP == "10.10.102.0/24" && v.GatewayNatRule.OriginalPort == "" && v.GatewayNatRule.TranslatedIP == os.Getenv("VCD_EXTERNAL_IP") { found = true } } if found { return fmt.Errorf("SNAT rule still exists.") } } return nil }
func testAccCheckAWSEcrRepositoryDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).ecrconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_ecr_repository" { continue } input := ecr.DescribeRepositoriesInput{ RegistryId: aws.String(rs.Primary.Attributes["registry_id"]), RepositoryNames: []*string{aws.String(rs.Primary.Attributes["name"])}, } out, err := conn.DescribeRepositories(&input) if err != nil { if ecrerr, ok := err.(awserr.Error); ok && ecrerr.Code() == "RepositoryNotFoundException" { return nil } return err } for _, repository := range out.Repositories { if repository.RepositoryName == aws.String(rs.Primary.Attributes["name"]) { return fmt.Errorf("ECR repository still exists:\n%#v", repository) } } } return nil }
func testAccCheckAWSEcsTaskDefinitionDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).ecsconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_ecs_task_definition" { continue } input := ecs.DescribeTaskDefinitionInput{ TaskDefinition: aws.String(rs.Primary.Attributes["arn"]), } out, err := conn.DescribeTaskDefinition(&input) if err != nil { return err } if out.TaskDefinition != nil && *out.TaskDefinition.Status != "INACTIVE" { return fmt.Errorf("ECS task definition still exists:\n%#v", *out.TaskDefinition) } } return nil }
func testAccCheckAWSEcsServiceDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).ecsconn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_ecs_service" { continue } out, err := conn.DescribeServices(&ecs.DescribeServicesInput{ Services: []*string{aws.String(rs.Primary.ID)}, Cluster: aws.String(rs.Primary.Attributes["cluster"]), }) if err == nil { if len(out.Services) > 0 { var activeServices []*ecs.Service for _, svc := range out.Services { if *svc.Status != "INACTIVE" { activeServices = append(activeServices, svc) } } if len(activeServices) == 0 { return nil } return fmt.Errorf("ECS service still exists:\n%#v", activeServices) } return nil } return err } return nil }
func testAccCheckInternetGatewayDestroy(s *terraform.State) error { conn := testAccProvider.Meta().(*AWSClient).ec2conn for _, rs := range s.RootModule().Resources { if rs.Type != "aws_internet_gateway" { continue } // Try to find the resource resp, err := conn.DescribeInternetGateways(&ec2.DescribeInternetGatewaysInput{ InternetGatewayIds: []*string{aws.String(rs.Primary.ID)}, }) if err == nil { if len(resp.InternetGateways) > 0 { return fmt.Errorf("still exists") } return nil } // Verify the error is what we want ec2err, ok := err.(awserr.Error) if !ok { return err } if ec2err.Code() != "InvalidInternetGatewayID.NotFound" { return err } } return nil }