mirror of https://github.com/ansible/ansible.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
210 lines
5.3 KiB
YAML
210 lines
5.3 KiB
YAML
---
|
|
# tasks file for test_ec2_asg
|
|
|
|
# we are using a custom built AMI that runs an apache server to verify
|
|
# ELB health checks and perform rolling ASG updates
|
|
# this will only work on us-east-1
|
|
|
|
# ============================================================
|
|
# create and kill an ASG
|
|
- name: ensure launch config exists
|
|
ec2_lc:
|
|
name: "{{ resource_prefix }}-lc"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
region: "{{ ec2_region }}"
|
|
image_id: ami-964a0efe
|
|
instance_type: t2.micro
|
|
|
|
- name: launch asg and wait for instances to be deemed healthy (no ELB)
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
launch_config_name: "{{ resource_prefix }}-lc"
|
|
desired_capacity: 1
|
|
min_size: 1
|
|
max_size: 1
|
|
region: "{{ ec2_region }}"
|
|
state: present
|
|
wait_for_instances: yes
|
|
register: output
|
|
|
|
- assert:
|
|
that:
|
|
- "output.viable_instances == 1"
|
|
|
|
# - name: pause for a bit to make sure that the group can't be trivially deleted
|
|
# pause: seconds=30
|
|
- name: kill asg
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
region: "{{ ec2_region }}"
|
|
state: absent
|
|
async: 300
|
|
|
|
|
|
- name: launch asg and do not wait for instances to be deemed healthy (no ELB)
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
launch_config_name: "{{ resource_prefix }}-lc"
|
|
desired_capacity: 1
|
|
min_size: 1
|
|
max_size: 1
|
|
region: "{{ ec2_region }}"
|
|
wait_for_instances: no
|
|
state: present
|
|
register: output
|
|
|
|
- assert:
|
|
that:
|
|
- "output.viable_instances == 0"
|
|
|
|
- name: kill asg
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
region: "{{ ec2_region }}"
|
|
state: absent
|
|
async: 300
|
|
|
|
- name: launch load balancer
|
|
ec2_elb_lb:
|
|
name: "{{ resource_prefix }}-lb"
|
|
region: "{{ ec2_region }}"
|
|
state: present
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
zones:
|
|
- "{{ ec2_region }}b"
|
|
- "{{ ec2_region }}c"
|
|
connection_draining_timeout: 60
|
|
listeners:
|
|
- protocol: http
|
|
load_balancer_port: 80
|
|
instance_port: 80
|
|
health_check:
|
|
ping_protocol: http
|
|
ping_port: 80
|
|
ping_path: "/"
|
|
response_timeout: 5
|
|
interval: 30
|
|
unhealthy_threshold: 3
|
|
healthy_threshold: 3
|
|
register: load_balancer
|
|
|
|
|
|
- name: launch asg and wait for instances to be deemed healthy (ELB)
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
availability_zones:
|
|
- "{{ ec2_region }}b"
|
|
- "{{ ec2_region }}c"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
launch_config_name: "{{ resource_prefix }}-lc"
|
|
health_check_type: ELB
|
|
desired_capacity: 1
|
|
min_size: 1
|
|
max_size: 1
|
|
health_check_period: 120
|
|
load_balancers: "{{ resource_prefix }}-lb"
|
|
region: "{{ ec2_region }}"
|
|
wait_for_instances: yes
|
|
wait_timeout: 600
|
|
state: present
|
|
register: output
|
|
|
|
- assert:
|
|
that:
|
|
- "output.viable_instances == 1"
|
|
|
|
|
|
# grow scaling group to 3
|
|
|
|
- name: add 2 more instances wait for instances to be deemed healthy (ELB)
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
availability_zones:
|
|
- "{{ ec2_region }}b"
|
|
- "{{ ec2_region }}c"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
launch_config_name: "{{ resource_prefix }}-lc"
|
|
health_check_type: ELB
|
|
desired_capacity: 3
|
|
min_size: 3
|
|
max_size: 5
|
|
health_check_period: 120
|
|
load_balancers: ec2-asg-int-test
|
|
region: "{{ ec2_region }}"
|
|
wait_for_instances: yes
|
|
wait_timeout: 600
|
|
state: present
|
|
register: output
|
|
|
|
- assert:
|
|
that:
|
|
- "output.viable_instances == 3"
|
|
|
|
# # create new launch config with alternate AMI
|
|
|
|
- name: ensure launch config exists
|
|
ec2_lc:
|
|
name: "{{ resource_prefix }}-lc-2"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
region: "{{ ec2_region }}"
|
|
image_id: ami-2a4a0e42
|
|
instance_type: t2.micro
|
|
|
|
|
|
# # perform rolling replace
|
|
|
|
- name: perform rolling update to new AMI
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
availability_zones:
|
|
- "{{ ec2_region }}b"
|
|
- "{{ ec2_region }}c"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
launch_config_name: "{{ resource_prefix }}-lc-2"
|
|
health_check_type: ELB
|
|
desired_capacity: 3
|
|
min_size: 3
|
|
max_size: 5
|
|
health_check_period: 120
|
|
load_balancers: ec2-asg-int-test
|
|
region: "{{ ec2_region }}"
|
|
wait_for_instances: yes
|
|
replace_all_instances: yes
|
|
wait_timeout: 600
|
|
state: present
|
|
register: output
|
|
|
|
# ensure that all instances have new launch config
|
|
- assert:
|
|
that:
|
|
- "item.value.launch_config_name == '{{ resource_prefix }}-lc-2'"
|
|
with_dict: output.instance_facts
|
|
|
|
# assert they are all healthy
|
|
- assert:
|
|
that:
|
|
- "output.viable_instances >= 3"
|
|
|
|
|
|
- name: kill asg
|
|
ec2_asg:
|
|
name: "{{ resource_prefix }}-asg"
|
|
ec2_access_key: "{{ ec2_access_key }}"
|
|
ec2_secret_key: "{{ ec2_secret_key }}"
|
|
region: "{{ ec2_region }}"
|
|
state: absent
|
|
async: 300 |