diff --git a/AWS/c2.yml b/AWS/c2.yml index 8eb4f51..e7ff45c 100644 --- a/AWS/c2.yml +++ b/AWS/c2.yml @@ -73,6 +73,11 @@ aws_c2_region: "{{ aws_region_choices | random }}" when: aws_region_choices is defined and aws_region_choices|length > 0 and aws_c2_region is not defined + - name: Set AMI ID for the selected region + set_fact: + ami_id: "{{ ami_map[aws_redirector_region] }}" + when: ami_map is defined and aws_redirector_region in ami_map + - name: Launch EC2 instance for C2 server amazon.aws.ec2_instance: name: "{{ c2_name }}" diff --git a/AWS/cleanup.yml b/AWS/cleanup.yml index e111f73..09ddd64 100644 --- a/AWS/cleanup.yml +++ b/AWS/cleanup.yml @@ -117,7 +117,87 @@ ignore_errors: yes when: vpc_info.vpcs is defined and vpc_info.vpcs | length > 0 - # Delete in proper order (dependencies first) + - name: Ensure all internet gateways are detached and deleted + block: + - name: Get all internet gateways for the VPC + command: > + aws ec2 describe-internet-gateways + --region {{ aws_region }} + --filters "Name=attachment.vpc-id,Values={{ vpc_info.vpcs[0].id }}" + --query "InternetGateways[*].InternetGatewayId" + --output text + environment: + AWS_ACCESS_KEY_ID: "{{ aws_access_key }}" + AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}" + register: igw_ids + when: vpc_info.vpcs is defined and vpc_info.vpcs | length > 0 + + - name: Detach internet gateways + command: > + aws ec2 detach-internet-gateway + --region {{ aws_region }} + --internet-gateway-id {{ item }} + --vpc-id {{ vpc_info.vpcs[0].id }} + environment: + AWS_ACCESS_KEY_ID: "{{ aws_access_key }}" + AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}" + with_items: "{{ igw_ids.stdout_lines | default([]) }}" + when: vpc_info.vpcs is defined and vpc_info.vpcs | length > 0 and igw_ids.stdout != "" + ignore_errors: yes + + - name: Delete internet gateways + command: > + aws ec2 delete-internet-gateway + --region {{ aws_region }} + --internet-gateway-id {{ item }} + environment: + AWS_ACCESS_KEY_ID: "{{ aws_access_key }}" + AWS_SECRET_ACCESS_KEY: "{{ aws_secret_key }}" + with_items: "{{ igw_ids.stdout_lines | default([]) }}" + when: igw_ids.stdout is defined and igw_ids.stdout != "" + ignore_errors: yes + when: vpc_info.vpcs is defined and vpc_info.vpcs | length > 0 + ignore_errors: yes + + # Add this task to the cleanup script to get all VPCs with redirector tags + - name: Get all VPCs with redirector tags + amazon.aws.ec2_vpc_net_info: + region: "{{ aws_region }}" + register: all_vpcs_info + + # Add a task to identify VPCs to cleanup based on tags + - name: Identify redirector VPCs for cleanup + set_fact: + vpcs_to_cleanup: "{{ all_vpcs_info.vpcs | selectattr('tags.redirector_name', 'defined') | list }}" + when: all_vpcs_info.vpcs is defined + + # Enhanced VPC deletion with better dependency handling + - name: Delete all VPC resources + block: + - name: Delete associated subnets + amazon.aws.ec2_vpc_subnet: + vpc_id: "{{ item.id }}" + state: absent + region: "{{ aws_region }}" + with_items: "{{ vpcs_to_cleanup }}" + ignore_errors: yes + + - name: Ensure all internet gateways are detached + shell: > + aws ec2 describe-internet-gateways --region {{ aws_region }} --filters "Name=attachment.vpc-id,Values={{ item.id }}" --query "InternetGateways[*].InternetGatewayId" --output text | + xargs -I % aws ec2 detach-internet-gateway --region {{ aws_region }} --internet-gateway-id % --vpc-id {{ item.id }} + with_items: "{{ vpcs_to_cleanup }}" + ignore_errors: yes + + - name: Delete all VPCs + amazon.aws.ec2_vpc_net: + vpc_id: "{{ item.id }}" + state: absent + region: "{{ aws_region }}" + with_items: "{{ vpcs_to_cleanup }}" + ignore_errors: yes + when: vpcs_to_cleanup is defined and vpcs_to_cleanup | length > 0 + - name: Delete route tables amazon.aws.ec2_vpc_route_table: route_table_id: "{{ item.id }}" @@ -171,6 +251,9 @@ ignore_errors: yes when: vpc_info.vpcs is defined and vpc_info.vpcs | length > 0 + + + - name: Terminate redirector instance amazon.aws.ec2_instance: state: absent diff --git a/AWS/redirector.yml b/AWS/redirector.yml index a1c9bca..772a4cd 100644 --- a/AWS/redirector.yml +++ b/AWS/redirector.yml @@ -114,31 +114,41 @@ aws_redirector_region: "{{ aws_region_choices | random }}" when: aws_region_choices is defined and aws_region_choices|length > 0 and aws_redirector_region is not defined - - name: Launch EC2 instance for redirector - amazon.aws.ec2_instance: - name: "{{ redirector_name }}" - key_name: "{{ aws_keypair_name }}" - instance_type: "{{ instance_type | default('t2.micro') }}" - security_group: "{{ redirector_name }}-sg" - image_id: "{{ ami_id }}" + - name: Set AMI ID for the selected region + set_fact: + ami_id: "{{ ami_map[aws_redirector_region] }}" + when: ami_map is defined and aws_redirector_region in ami_map + + - name: Create security group for redirector + amazon.aws.ec2_security_group: + name: "{{ redirector_name }}-sg" + description: "Security group for redirector {{ redirector_name }}" + vpc_id: "{{ vpc_id }}" region: "{{ aws_redirector_region }}" + rules: + - proto: tcp + ports: + - 22 + - 80 + - 443 + - "{{ shell_handler_port | default(4444) }}" + cidr_ip: 0.0.0.0/0 + rules_egress: + - proto: -1 + cidr_ip: 0.0.0.0/0 state: present - wait: yes - tags: - Name: "{{ redirector_name }}" - register: ec2 + register: security_group - name: Launch EC2 instance for redirector amazon.aws.ec2_instance: name: "{{ redirector_name }}" - key_name: "{{ aws_keypair_name }}" + key_name: "{{ redirector_name }}" + instance_type: "{{ redirector_instance_type | default('t2.micro') }}" vpc_subnet_id: "{{ subnet_result.subnet.id | default(omit) }}" - instance_type: "{{ instance_type | default('t2.micro') }}" - security_group: "{{ redirector_name }}-sg" - network: - assign_public_ip: true + security_group_ids: + - "{{ security_group.group_id }}" image_id: "{{ ami_id }}" - region: "{{ aws_region }}" + region: "{{ aws_redirector_region }}" state: present wait: yes tags: diff --git a/Linode/redirector.yml b/Linode/redirector.yml index 3790e4d..2ee240b 100644 --- a/Linode/redirector.yml +++ b/Linode/redirector.yml @@ -34,7 +34,7 @@ community.general.linode_v4: access_token: "{{ linode_token }}" label: "{{ redirector_name }}" - type: "{{ plan }}" + type: "{{ redirector_plan | default('g6-nanode-1') }}" region: "{{ deployment_region }}" image: "linode/debian12" root_pass: "{{ lookup('password', '/dev/null length=16') }}"