--- - name: Populate oo_hosts_to_terminate host group hosts: localhost gather_facts: no tasks: - name: Evaluate oo_hosts_to_terminate add_host: name={{ item }} groups=oo_hosts_to_terminate with_items: oo_host_group_exp | default([]) - name: Gather dynamic inventory variables for hosts to terminate hosts: oo_hosts_to_terminate gather_facts: no - name: Terminate instances hosts: localhost connection: local gather_facts: no vars: host_vars: "{{ hostvars | oo_select_keys(groups['oo_hosts_to_terminate']) }}" tasks: - name: Remove tags from instances ec2_tag: resource={{ item.ec2_id }} region={{ item.ec2_region }} state=absent args: tags: env: "{{ item['ec2_tag_env'] }}" host-type: "{{ item['ec2_tag_host-type'] }}" env-host-type: "{{ item['ec2_tag_env-host-type'] }}" with_items: host_vars when: "'oo_hosts_to_terminate' in groups" - name: Terminate instances ec2: state: absent instance_ids: ["{{ item.ec2_id }}"] region: "{{ item.ec2_region }}" ignore_errors: yes register: ec2_term with_items: host_vars when: "'oo_hosts_to_terminate' in groups" # Fail if any of the instances failed to terminate with an error other # than 403 Forbidden - fail: msg=Terminating instance {{ item.item.ec2_id }} failed with message {{ item.msg }} when: "'oo_hosts_to_terminate' in groups and item.failed and not item.msg | search(\"error: EC2ResponseError: 403 Forbidden\")" with_items: ec2_term.results - name: Stop instance if termination failed ec2: state: stopped instance_ids: ["{{ item.item.ec2_id }}"] region: "{{ item.item.ec2_region }}" register: ec2_stop when: item.failed with_items: ec2_term.results when: "'oo_hosts_to_terminate' in groups" - name: Rename stopped instances ec2_tag: resource={{ item.item.item.ec2_id }} region={{ item.item.item.ec2_region }} state=present args: tags: Name: "{{ item.item.item.ec2_tag_Name }}-terminate" with_items: ec2_stop.results when: "'oo_hosts_to_terminate' in groups"