--- # 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