diff --git a/migraion-video-instances.yml b/migraion-video-instances.yml new file mode 100644 index 0000000..3702a4b --- /dev/null +++ b/migraion-video-instances.yml @@ -0,0 +1,16 @@ +--- +- hosts: localhost + connection: local + gather_facts: True + become: False + + vars: + vpc_name: "DCD-Migration-Video" + business_unit: "Engineering-Server" + resource_owner: "{{ ansible_user_id }}" + aws_region: "us-west-2" + + roles: + - { role: aws-vpc } + - { role: ec2-instance, vars: { instance_name: "Jira Software Migration Source Instance" } } + - { role: ec2-instance, vars: { instance_name: "Jira ServiceDesk Migration Source Instance" } } diff --git a/roles/aws-vpc/tasks/main.yml b/roles/aws-vpc/tasks/main.yml new file mode 100644 index 0000000..f5fe431 --- /dev/null +++ b/roles/aws-vpc/tasks/main.yml @@ -0,0 +1,91 @@ +--- + +- name: Setup VPC + ec2_vpc_net: + name: "{{ vpc_name }}-vpc" + cidr_block: 10.20.0.0/16 + region: "{{ aws_region }}" + resource_tags: + Name: "{{ vpc_name }}-vpc" + name: "{{ vpc_name }}-vpc" + business_unit: "{{ business_unit }}" + service_name: "{{ vpc_name }}" + resource_owner: "{{ resource_owner }}" + register: vpc + +- name: Setup VPC Internet Gateway + ec2_vpc_igw: + vpc_id: "{{ vpc.vpc.id }}" + region: "{{ aws_region }}" + state: present + register: igw + +- name: Create subnet for resources + ec2_vpc_subnet: + vpc_id: "{{ vpc.vpc.id }}" + cidr: "10.20.30.0/24" + region: "{{ aws_region }}" + state: present + resource_tags: + Name: "{{ vpc_name }}-subnet" + name: "{{ vpc_name }}-vpc" + business_unit: "{{ business_unit }}" + service_name: "{{ vpc_name }}" + resource_owner: "{{ resource_owner }}" + register: subnet + +- name: Set up VPC route table + ec2_vpc_route_table: + vpc_id: "{{ vpc.vpc.id }}" + tags: + Name: "{{ vpc_name }}-vpc-routes" + subnets: + - "{{ subnet.subnet.id }}" + routes: + - dest: 0.0.0.0/0 + gateway_id: "{{ igw.gateway_id }}" + region: "{{ aws_region }}" + resource_tags: + Name: "{{ vpc_name }}-routes" + name: "{{ vpc_name }}" + business_unit: "{{ business_unit }}" + service_name: "{{ vpc_name }}" + resource_owner: "{{ resource_owner }}" + register: public_route_table + + +- name: Setup security group + ec2_group: + name: "{{ vpc_name }}-sg" + description: "Hosting group" + vpc_id: "{{ vpc.vpc.id }}" + region: "{{ aws_region }}" + state: present + purge_rules: true + rules: + # External: Allow SSH, HTTP/HTTPS + - proto: tcp + from_port: 22 + to_port: 22 + cidr_ip: 0.0.0.0/0 + - proto: tcp + from_port: 80 + to_port: 80 + cidr_ip: 0.0.0.0/0 + - proto: tcp + from_port: 443 + to_port: 443 + cidr_ip: 0.0.0.0/0 + + # Internal-only traffic + - proto: icmp + from_port: -1 + to_port: -1 + cidr_ip: 10.20.0.0/16 + purge_rules_egress: true + rules_egress: + - proto: all + from_port: 0 + to_port: 65535 + cidr_ip: 0.0.0.0/0 + register: sg diff --git a/roles/ec2-instance/defaults/main.yml b/roles/ec2-instance/defaults/main.yml new file mode 100644 index 0000000..81825ef --- /dev/null +++ b/roles/ec2-instance/defaults/main.yml @@ -0,0 +1,8 @@ +--- + +ec2_ami_owner: "amazon" +ec2_ami_description: "Amazon Linux 2 AMI 2.0.* x86_64 HVM gp2" +ec2_type: "t3a.xlarge" +ec2_disk_size: "512" +ec2_keypair: "taskcat-ci-key" + diff --git a/roles/ec2-instance/tasks/main.yml b/roles/ec2-instance/tasks/main.yml new file mode 100644 index 0000000..bba945b --- /dev/null +++ b/roles/ec2-instance/tasks/main.yml @@ -0,0 +1,38 @@ +--- + +- name: Fetch AMI list for region + ec2_ami_facts: + region: "{{ aws_region }}" + owner: "{{ ec2_ami_owner }}" + filters: + description: "{{ ec2_ami_description }}" + register: amis + +- name: Find the latest version of the AMI + set_fact: + latest_ami: "{{ amis.images | selectattr('name', 'defined') | sort(attribute='creation_date') | last }}" + +- name: Provision EC2 host + ec2: + exact_count: 1 + count_tag: + Name: "{{instance_name}}" + keypair: "{{ ec2_keypair }}" + region: "{{ aws_region }}" + instance_type: "{{ ec2_type }}" + image: "{{ latest_ami.image_id }}" + group_id: "{{ sg.group_id }}" + vpc_subnet_id: "{{ subnet.subnet.id }}" + assign_public_ip: True + volumes: + - device_name: /dev/xvda + volume_type: gp2 + volume_size: "{{ ec2_disk_size }}" + wait: true + instance_tags: + Name: "{{ instance_name }}" + name: "{{ instance_name }}" + business_unit: "{{ business_unit }}" + service_name: "{{ instance_name}}" + resource_owner: "{{ resource_owner }}" + register: ec2_instance