--- # VPC Cleanup Process # Step 1: Network Interfaces - name: Find network interfaces in VPC {{ vpc_id }} amazon.aws.ec2_eni_info: region: "{{ aws_region }}" filters: vpc-id: "{{ vpc_id }}" register: eni_info failed_when: false changed_when: false - name: Delete network interfaces amazon.aws.ec2_eni: region: "{{ aws_region }}" eni_id: "{{ item.id }}" state: absent force_detach: true loop: "{{ eni_info.network_interfaces }}" register: eni_deleted ignore_errors: yes when: eni_info.network_interfaces | length > 0 - name: Update cleaned network interfaces set_fact: cleaned_resources: "{{ cleaned_resources | combine({'network_interfaces': cleaned_resources.network_interfaces + [item.id]}, recursive=True) }}" with_items: "{{ eni_info.network_interfaces }}" when: eni_info.network_interfaces | length > 0 # Step 2: Route Tables - name: Find all route tables for VPC {{ vpc_id }} amazon.aws.ec2_vpc_route_table_info: region: "{{ aws_region }}" filters: vpc-id: "{{ vpc_id }}" register: rt_info failed_when: false changed_when: false - name: Process route tables when: rt_info.route_tables | length > 0 block: - name: Delete non-main route tables amazon.aws.ec2_vpc_route_table: region: "{{ aws_region }}" vpc_id: "{{ vpc_id }}" route_table_id: "{{ item.id }}" state: absent loop: "{{ rt_info.route_tables }}" when: not item.associations or not item.associations[0].main | default(false) register: deleted_rts ignore_errors: yes - name: Update cleaned route tables set_fact: cleaned_resources: "{{ cleaned_resources | combine({'route_tables': cleaned_resources.route_tables + [item.id]}, recursive=True) }}" with_items: "{{ rt_info.route_tables }}" when: not item.associations or not item.associations[0].main | default(false) # Step 3: Internet Gateways - name: Find internet gateways for VPC {{ vpc_id }} amazon.aws.ec2_vpc_igw_info: region: "{{ aws_region }}" filters: attachment.vpc-id: "{{ vpc_id }}" register: igw_info failed_when: false changed_when: false - name: Process internet gateways when: igw_info.internet_gateways | length > 0 block: - name: Detach internet gateways amazon.aws.ec2_vpc_igw: region: "{{ aws_region }}" vpc_id: "{{ vpc_id }}" state: absent register: igw_detached ignore_errors: yes - name: Delete internet gateways amazon.aws.ec2_vpc_igw: region: "{{ aws_region }}" igw_id: "{{ item.id }}" state: absent loop: "{{ igw_info.internet_gateways }}" register: deleted_igws ignore_errors: yes - name: Update cleaned internet gateways set_fact: cleaned_resources: "{{ cleaned_resources | combine({'internet_gateways': cleaned_resources.internet_gateways + [item.id]}, recursive=True) }}" with_items: "{{ igw_info.internet_gateways }}" # Step 4: Subnets - name: Find subnets for VPC {{ vpc_id }} amazon.aws.ec2_vpc_subnet_info: region: "{{ aws_region }}" filters: vpc-id: "{{ vpc_id }}" register: subnet_info failed_when: false changed_when: false - name: Delete subnets amazon.aws.ec2_vpc_subnet: region: "{{ aws_region }}" vpc_id: "{{ vpc_id }}" cidr: "{{ item.cidr_block }}" state: absent loop: "{{ subnet_info.subnets }}" register: deleted_subnets ignore_errors: true when: subnet_info.subnets | length > 0 - name: Update cleaned subnets set_fact: cleaned_resources: "{{ cleaned_resources | combine({'subnets': cleaned_resources.subnets + [item.id]}, recursive=True) }}" with_items: "{{ subnet_info.subnets }}" when: subnet_info.subnets | length > 0 # Step 5: Security Groups (except default) - name: Find non-default security groups for VPC {{ vpc_id }} amazon.aws.ec2_security_group_info: region: "{{ aws_region }}" filters: vpc-id: "{{ vpc_id }}" register: sg_info failed_when: false changed_when: false - name: Delete non-default security groups amazon.aws.ec2_security_group: region: "{{ aws_region }}" group_id: "{{ item.group_id }}" state: absent loop: "{{ sg_info.security_groups }}" when: item.group_name != 'default' register: deleted_sgs ignore_errors: true - name: Update cleaned security groups set_fact: cleaned_resources: "{{ cleaned_resources | combine({'security_groups': cleaned_resources.security_groups + [item.group_id]}, recursive=True) }}" with_items: "{{ sg_info.security_groups }}" when: item.group_name != 'default' # Step 6: Wait a bit and delete VPC - name: Wait before trying to delete VPC pause: seconds: 10 - name: Delete VPC {{ vpc_id }} amazon.aws.ec2_vpc_net: region: "{{ aws_region }}" vpc_id: "{{ vpc_id }}" state: absent register: deleted_vpc ignore_errors: true - name: Update cleaned VPCs set_fact: cleaned_resources: "{{ cleaned_resources | combine({'vpcs': cleaned_resources.vpcs + [vpc_id]}, recursive=True) }}" when: deleted_vpc is success