--- - name: Destroy hosts: localhost connection: local gather_facts: false no_log: "{{ molecule_no_log }}" tasks: - name: Populate the instance config block: - name: Populate instance config from file set_fact: instance_conf: "{{ lookup('file', molecule_instance_config) | from_yaml }}" skip_instances: false rescue: - name: Populate instance config when file missing set_fact: instance_conf: {} skip_instances: true - name: Destroy molecule instance(s) hcloud_server: name: "{{ item.instance }}" api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" state: absent register: server with_items: "{{ instance_conf }}" when: not skip_instances async: 7200 poll: 0 - name: Wait for instance(s) deletion to complete async_status: jid: "{{ item.ansible_job_id }}" register: hetzner_jobs until: hetzner_jobs.finished retries: 300 with_items: "{{ server.results }}" - name: Destroy volume(s) hcloud_volume: name: "{{ item.volumes.name | default(item.instance) }}" server: "{{ item.instance }}" api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" state: absent register: volumes with_items: "{{ instance_conf }}" async: 7200 poll: 0 - name: Wait for volume(s) deletion to complete async_status: jid: "{{ item.ansible_job_id }}" register: hetzner_volumes until: hetzner_volumes.finished retries: 300 when: volumes.changed with_items: "{{ volumes.results }}" - name: Destroy network(s) hcloud_network: name: "{{ item.1.name }}" api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" state: absent register: networks loop: "{{ instance_conf|subelements('networks', skip_missing=True) }}" async: 7200 poll: 0 - name: Wait for network(s) deletion to complete async_status: jid: "{{ item.ansible_job_id }}" register: hetzner_networks until: hetzner_networks.finished retries: 300 when: networks.changed with_items: "{{ networks.results }}" - name: Remove registered SSH key hcloud_ssh_key: name: "{{ instance_conf[0].ssh_key_name }}" api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" state: absent when: - not skip_instances - instance_conf | length # must contain at least one instance - name: Populate instance config set_fact: instance_conf: {} - name: Dump instance config copy: content: | # Molecule managed {{ instance_conf | to_json | from_json | to_yaml }} dest: "{{ molecule_instance_config }}" when: server.changed | bool