working on aws again
This commit is contained in:
+71
-8
@@ -10,6 +10,7 @@
|
|||||||
vars:
|
vars:
|
||||||
delete_results: {}
|
delete_results: {}
|
||||||
vpc_cleanup_list: []
|
vpc_cleanup_list: []
|
||||||
|
aws_detailed_logging: true
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
# Confirmation prompts
|
# Confirmation prompts
|
||||||
@@ -25,6 +26,12 @@
|
|||||||
fail_msg: "Cleanup cancelled by user"
|
fail_msg: "Cleanup cancelled by user"
|
||||||
when: confirm_cleanup | default(true) | bool
|
when: confirm_cleanup | default(true) | bool
|
||||||
|
|
||||||
|
# Display AWS region being used for cleanup
|
||||||
|
- name: Display AWS region being used for cleanup
|
||||||
|
debug:
|
||||||
|
msg: "Cleaning up resources in region: {{ aws_region }}"
|
||||||
|
when: aws_detailed_logging | bool
|
||||||
|
|
||||||
# Check for and load shared infrastructure file
|
# Check for and load shared infrastructure file
|
||||||
- name: Check for shared infrastructure state
|
- name: Check for shared infrastructure state
|
||||||
stat:
|
stat:
|
||||||
@@ -101,8 +108,23 @@
|
|||||||
(cleanup_redirector | default(true) | bool and redirector_instances_result.changed | default(false)) or
|
(cleanup_redirector | default(true) | bool and redirector_instances_result.changed | default(false)) or
|
||||||
(cleanup_tracker | default(true) | bool and track_deployment | default(false) | bool and tracker_instances_result.changed | default(false))
|
(cleanup_tracker | default(true) | bool and track_deployment | default(false) | bool and tracker_instances_result.changed | default(false))
|
||||||
|
|
||||||
# Key pair cleanup
|
# List all key pairs to handle different naming patterns
|
||||||
- name: Delete C2 EC2 key pair
|
- name: List available EC2 key pairs
|
||||||
|
amazon.aws.ec2_key_info:
|
||||||
|
region: "{{ aws_region }}"
|
||||||
|
register: all_key_pairs
|
||||||
|
|
||||||
|
# Delete C2 deployment key with deployment_id pattern
|
||||||
|
- name: Delete C2 deployment key (deployment_id pattern)
|
||||||
|
amazon.aws.ec2_key:
|
||||||
|
name: "c2deploy_{{ deployment_id }}"
|
||||||
|
region: "{{ aws_region }}"
|
||||||
|
state: absent
|
||||||
|
register: c2_deploy_key_result
|
||||||
|
when: cleanup_c2 | default(true) | bool
|
||||||
|
|
||||||
|
# Delete C2 EC2 key pair (original pattern)
|
||||||
|
- name: Delete C2 EC2 key pair (original pattern)
|
||||||
amazon.aws.ec2_key:
|
amazon.aws.ec2_key:
|
||||||
name: "{{ c2_name }}"
|
name: "{{ c2_name }}"
|
||||||
region: "{{ aws_region }}"
|
region: "{{ aws_region }}"
|
||||||
@@ -110,11 +132,16 @@
|
|||||||
register: c2_key_result
|
register: c2_key_result
|
||||||
when: cleanup_c2 | default(true) | bool
|
when: cleanup_c2 | default(true) | bool
|
||||||
|
|
||||||
|
# Update cleaned key pairs list for C2
|
||||||
- name: Update cleaned key pairs list for C2
|
- name: Update cleaned key pairs list for C2
|
||||||
set_fact:
|
set_fact:
|
||||||
cleaned_resources: "{{ cleaned_resources | combine({'key_pairs': cleaned_resources.key_pairs + [c2_name]}, recursive=true) }}"
|
cleaned_resources: "{{ cleaned_resources | combine({'key_pairs': cleaned_resources.key_pairs + [item]}, recursive=true) }}"
|
||||||
when: cleanup_c2 | default(true) | bool and c2_key_result.changed | default(false)
|
with_items:
|
||||||
|
- "c2deploy_{{ deployment_id }}"
|
||||||
|
- "{{ c2_name }}"
|
||||||
|
when: cleanup_c2 | default(true) | bool and (c2_key_result.changed or c2_deploy_key_result.changed)
|
||||||
|
|
||||||
|
# Delete redirector EC2 key pair
|
||||||
- name: Delete redirector EC2 key pair
|
- name: Delete redirector EC2 key pair
|
||||||
amazon.aws.ec2_key:
|
amazon.aws.ec2_key:
|
||||||
name: "{{ redirector_name }}"
|
name: "{{ redirector_name }}"
|
||||||
@@ -184,7 +211,7 @@
|
|||||||
cleaned_resources: "{{ cleaned_resources | combine({'security_groups': cleaned_resources.security_groups + [tracker_sg_result.group_id | default('')]}, recursive=true) }}"
|
cleaned_resources: "{{ cleaned_resources | combine({'security_groups': cleaned_resources.security_groups + [tracker_sg_result.group_id | default('')]}, recursive=true) }}"
|
||||||
when: cleanup_tracker | default(true) | bool and track_deployment | default(false) | bool and tracker_sg_result.changed | default(false) and tracker_sg_result.group_id is defined
|
when: cleanup_tracker | default(true) | bool and track_deployment | default(false) | bool and tracker_sg_result.changed | default(false) and tracker_sg_result.group_id is defined
|
||||||
|
|
||||||
# Identify VPCs to clean up
|
# Identify VPCs to clean up (by tag and by name pattern)
|
||||||
- name: Get VPCs by deployment tag
|
- name: Get VPCs by deployment tag
|
||||||
amazon.aws.ec2_vpc_net_info:
|
amazon.aws.ec2_vpc_net_info:
|
||||||
region: "{{ aws_region }}"
|
region: "{{ aws_region }}"
|
||||||
@@ -198,6 +225,36 @@
|
|||||||
with_items: "{{ tagged_vpcs.vpcs }}"
|
with_items: "{{ tagged_vpcs.vpcs }}"
|
||||||
when: tagged_vpcs.vpcs | length > 0
|
when: tagged_vpcs.vpcs | length > 0
|
||||||
|
|
||||||
|
# Find VPCs by name pattern
|
||||||
|
- name: Find VPCs by naming pattern for C2
|
||||||
|
amazon.aws.ec2_vpc_net_info:
|
||||||
|
region: "{{ aws_region }}"
|
||||||
|
filters:
|
||||||
|
"tag:Name": "{{ c2_name }}-vpc"
|
||||||
|
register: c2_named_vpcs
|
||||||
|
when: cleanup_c2 | default(true) | bool
|
||||||
|
|
||||||
|
- name: Add C2-named VPCs to cleanup list
|
||||||
|
set_fact:
|
||||||
|
vpc_cleanup_list: "{{ vpc_cleanup_list + [item.vpc_id] }}"
|
||||||
|
with_items: "{{ c2_named_vpcs.vpcs }}"
|
||||||
|
when: cleanup_c2 | default(true) | bool and c2_named_vpcs.vpcs | length > 0
|
||||||
|
|
||||||
|
- name: Find VPCs by naming pattern for redirector
|
||||||
|
amazon.aws.ec2_vpc_net_info:
|
||||||
|
region: "{{ aws_region }}"
|
||||||
|
filters:
|
||||||
|
"tag:Name": "{{ redirector_name }}-vpc"
|
||||||
|
register: redirector_named_vpcs
|
||||||
|
when: cleanup_redirector | default(true) | bool
|
||||||
|
|
||||||
|
- name: Add redirector-named VPCs to cleanup list
|
||||||
|
set_fact:
|
||||||
|
vpc_cleanup_list: "{{ vpc_cleanup_list + [item.vpc_id] }}"
|
||||||
|
with_items: "{{ redirector_named_vpcs.vpcs }}"
|
||||||
|
when: cleanup_redirector | default(true) | bool and redirector_named_vpcs.vpcs | length > 0
|
||||||
|
|
||||||
|
# Handle shared infrastructure
|
||||||
- name: Add shared VPC to cleanup if both C2 and redirector being cleaned
|
- name: Add shared VPC to cleanup if both C2 and redirector being cleaned
|
||||||
set_fact:
|
set_fact:
|
||||||
vpc_cleanup_list: "{{ vpc_cleanup_list + [shared_infra.vpc_id] }}"
|
vpc_cleanup_list: "{{ vpc_cleanup_list + [shared_infra.vpc_id] }}"
|
||||||
@@ -213,11 +270,17 @@
|
|||||||
vpc_cleanup_list: "{{ vpc_cleanup_list | unique }}"
|
vpc_cleanup_list: "{{ vpc_cleanup_list | unique }}"
|
||||||
when: vpc_cleanup_list | length > 0
|
when: vpc_cleanup_list | length > 0
|
||||||
|
|
||||||
# Process each VPC - direct inline implementation instead of temporary files
|
# Display VPCs to be cleaned up
|
||||||
|
- name: Display VPCs to be cleaned
|
||||||
|
debug:
|
||||||
|
msg: "VPCs to be cleaned: {{ vpc_cleanup_list }}"
|
||||||
|
when: aws_detailed_logging | bool and vpc_cleanup_list | length > 0
|
||||||
|
|
||||||
|
# Process each VPC
|
||||||
- name: Process VPCs for cleanup
|
- name: Process VPCs for cleanup
|
||||||
block:
|
block:
|
||||||
- name: Process each VPC
|
- name: Process each VPC
|
||||||
include_tasks: "../tasks/process_vpc.yml"
|
include_tasks: "process_vpc.yml"
|
||||||
vars:
|
vars:
|
||||||
vpc_id: "{{ item }}"
|
vpc_id: "{{ item }}"
|
||||||
with_items: "{{ vpc_cleanup_list | unique }}"
|
with_items: "{{ vpc_cleanup_list | unique }}"
|
||||||
@@ -245,7 +308,7 @@
|
|||||||
redirector: "{{ redirector_instances_result.instance_ids | default([]) }}"
|
redirector: "{{ redirector_instances_result.instance_ids | default([]) }}"
|
||||||
tracker: "{{ tracker_instances_result.instance_ids | default([]) }}"
|
tracker: "{{ tracker_instances_result.instance_ids | default([]) }}"
|
||||||
key_pairs:
|
key_pairs:
|
||||||
c2: "{{ c2_key_result.key.name | default('') | ternary([c2_key_result.key.name], []) }}"
|
c2: "{{ cleaned_resources.key_pairs | default([]) | select('search', 'c2deploy_' + deployment_id) | list + cleaned_resources.key_pairs | default([]) | select('search', c2_name) | list }}"
|
||||||
redirector: "{{ redirector_key_result.key.name | default('') | ternary([redirector_key_result.key.name], []) }}"
|
redirector: "{{ redirector_key_result.key.name | default('') | ternary([redirector_key_result.key.name], []) }}"
|
||||||
tracker: "{{ tracker_key_result.key.name | default('') | ternary([tracker_key_result.key.name], []) }}"
|
tracker: "{{ tracker_key_result.key.name | default('') | ternary([tracker_key_result.key.name], []) }}"
|
||||||
security_groups:
|
security_groups:
|
||||||
|
|||||||
+50
-10
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
# VPC Cleanup Process
|
# VPC Cleanup Process with enhanced dependency handling
|
||||||
# Step 1: Network Interfaces
|
# Step 1: Network Interfaces
|
||||||
- name: Find network interfaces in VPC {{ vpc_id }}
|
- name: Find network interfaces in VPC {{ vpc_id }}
|
||||||
amazon.aws.ec2_eni_info:
|
amazon.aws.ec2_eni_info:
|
||||||
@@ -21,10 +21,9 @@
|
|||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
when: eni_info.network_interfaces | length > 0
|
when: eni_info.network_interfaces | length > 0
|
||||||
|
|
||||||
- name: Update cleaned network interfaces
|
- name: Wait after deleting network interfaces
|
||||||
set_fact:
|
pause:
|
||||||
cleaned_resources: "{{ cleaned_resources | combine({'network_interfaces': cleaned_resources.network_interfaces + [item.id]}, recursive=True) }}"
|
seconds: 10
|
||||||
with_items: "{{ eni_info.network_interfaces }}"
|
|
||||||
when: eni_info.network_interfaces | length > 0
|
when: eni_info.network_interfaces | length > 0
|
||||||
|
|
||||||
# Step 2: Route Tables
|
# Step 2: Route Tables
|
||||||
@@ -57,6 +56,11 @@
|
|||||||
with_items: "{{ rt_info.route_tables }}"
|
with_items: "{{ rt_info.route_tables }}"
|
||||||
when: not item.associations or not item.associations[0].main | default(false)
|
when: not item.associations or not item.associations[0].main | default(false)
|
||||||
|
|
||||||
|
- name: Wait after deleting route tables
|
||||||
|
pause:
|
||||||
|
seconds: 10
|
||||||
|
when: rt_info.route_tables | length > 0
|
||||||
|
|
||||||
# Step 3: Internet Gateways
|
# Step 3: Internet Gateways
|
||||||
- name: Find internet gateways for VPC {{ vpc_id }}
|
- name: Find internet gateways for VPC {{ vpc_id }}
|
||||||
amazon.aws.ec2_vpc_igw_info:
|
amazon.aws.ec2_vpc_igw_info:
|
||||||
@@ -78,6 +82,11 @@
|
|||||||
register: igw_detached
|
register: igw_detached
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: Wait after detaching IGW
|
||||||
|
pause:
|
||||||
|
seconds: 15
|
||||||
|
when: igw_detached is changed
|
||||||
|
|
||||||
- name: Delete internet gateways
|
- name: Delete internet gateways
|
||||||
amazon.aws.ec2_vpc_igw:
|
amazon.aws.ec2_vpc_igw:
|
||||||
region: "{{ aws_region }}"
|
region: "{{ aws_region }}"
|
||||||
@@ -119,6 +128,11 @@
|
|||||||
with_items: "{{ subnet_info.subnets }}"
|
with_items: "{{ subnet_info.subnets }}"
|
||||||
when: subnet_info.subnets | length > 0
|
when: subnet_info.subnets | length > 0
|
||||||
|
|
||||||
|
- name: Wait after deleting subnets
|
||||||
|
pause:
|
||||||
|
seconds: 15
|
||||||
|
when: subnet_info.subnets | length > 0
|
||||||
|
|
||||||
# Step 5: Security Groups (except default)
|
# Step 5: Security Groups (except default)
|
||||||
- name: Find non-default security groups for VPC {{ vpc_id }}
|
- name: Find non-default security groups for VPC {{ vpc_id }}
|
||||||
amazon.aws.ec2_security_group_info:
|
amazon.aws.ec2_security_group_info:
|
||||||
@@ -145,20 +159,46 @@
|
|||||||
with_items: "{{ sg_info.security_groups }}"
|
with_items: "{{ sg_info.security_groups }}"
|
||||||
when: item.group_name != 'default'
|
when: item.group_name != 'default'
|
||||||
|
|
||||||
# Step 6: Wait a bit and delete VPC
|
- name: Wait after deleting security groups
|
||||||
- name: Wait before trying to delete VPC
|
|
||||||
pause:
|
pause:
|
||||||
seconds: 10
|
seconds: 15
|
||||||
|
when: sg_info.security_groups | length > 0
|
||||||
|
|
||||||
|
# Step 6: Delete VPC with proper dependencies and retries
|
||||||
|
- name: Wait longer before trying to delete VPC
|
||||||
|
pause:
|
||||||
|
seconds: 30
|
||||||
|
|
||||||
|
- name: Delete VPC with retries
|
||||||
|
block:
|
||||||
- name: Delete VPC {{ vpc_id }}
|
- name: Delete VPC {{ vpc_id }}
|
||||||
amazon.aws.ec2_vpc_net:
|
amazon.aws.ec2_vpc_net:
|
||||||
region: "{{ aws_region }}"
|
region: "{{ aws_region }}"
|
||||||
vpc_id: "{{ vpc_id }}"
|
vpc_id: "{{ vpc_id }}"
|
||||||
state: absent
|
state: absent
|
||||||
register: deleted_vpc
|
register: vpc_delete_result
|
||||||
|
retries: 5
|
||||||
|
delay: 15
|
||||||
|
until: vpc_delete_result is success
|
||||||
|
rescue:
|
||||||
|
- name: Force check dependencies again if VPC deletion failed
|
||||||
|
amazon.aws.ec2_vpc_net_info:
|
||||||
|
region: "{{ aws_region }}"
|
||||||
|
vpc_ids:
|
||||||
|
- "{{ vpc_id }}"
|
||||||
|
register: vpc_check
|
||||||
|
|
||||||
|
- name: Final attempt to delete VPC if it still exists
|
||||||
|
amazon.aws.ec2_vpc_net:
|
||||||
|
region: "{{ aws_region }}"
|
||||||
|
vpc_id: "{{ vpc_id }}"
|
||||||
|
state: absent
|
||||||
|
when: vpc_check.vpcs | length > 0
|
||||||
ignore_errors: true
|
ignore_errors: true
|
||||||
|
register: final_vpc_delete
|
||||||
|
|
||||||
- name: Update cleaned VPCs
|
- name: Update cleaned VPCs
|
||||||
set_fact:
|
set_fact:
|
||||||
cleaned_resources: "{{ cleaned_resources | combine({'vpcs': cleaned_resources.vpcs + [vpc_id]}, recursive=True) }}"
|
cleaned_resources: "{{ cleaned_resources | combine({'vpcs': cleaned_resources.vpcs + [vpc_id]}, recursive=True) }}"
|
||||||
when: deleted_vpc is success
|
when: (vpc_delete_result is defined and vpc_delete_result is success) or
|
||||||
|
(final_vpc_delete is defined and final_vpc_delete is success)
|
||||||
+7
-1
@@ -148,6 +148,12 @@
|
|||||||
redirector_vpc_id: "{{ vpc_result.vpc.id }}" # Store for cleanup reference
|
redirector_vpc_id: "{{ vpc_result.vpc.id }}" # Store for cleanup reference
|
||||||
when: not (use_shared_infra | bool and infra_state_file.stat.exists | default(false))
|
when: not (use_shared_infra | bool and infra_state_file.stat.exists | default(false))
|
||||||
|
|
||||||
|
# Set a random shell handler port if not defined
|
||||||
|
- name: Set random shell handler port if not defined
|
||||||
|
set_fact:
|
||||||
|
shell_handler_port: "{{ 4000 + 59000 | random }}"
|
||||||
|
when: shell_handler_port is not defined
|
||||||
|
|
||||||
# Create security group
|
# Create security group
|
||||||
- name: Create security group
|
- name: Create security group
|
||||||
amazon.aws.ec2_security_group:
|
amazon.aws.ec2_security_group:
|
||||||
@@ -161,7 +167,7 @@
|
|||||||
- 22
|
- 22
|
||||||
- 80
|
- 80
|
||||||
- 443
|
- 443
|
||||||
- "{{ shell_handler_port | default(4444) }}"
|
- "{{ shell_handler_port }}"
|
||||||
cidr_ip: 0.0.0.0/0
|
cidr_ip: 0.0.0.0/0
|
||||||
rules_egress:
|
rules_egress:
|
||||||
- proto: -1
|
- proto: -1
|
||||||
|
|||||||
Reference in New Issue
Block a user