--- - name: Destroy hosts: localhost connection: local gather_facts: false no_log: "{{ molecule_no_log }}" tasks: - block: - name: Populate instance config set_fact: instance_conf: "{{ lookup('file', molecule_instance_config) | molecule_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) digital_ocean_droplet: name: "{{ item.instance }}" id: "{{ item.droplet_id }}" state: absent register: server loop: "{{ instance_conf | flatten(levels=1) }}" when: not skip_instances async: 7200 poll: 0 - name: Wait for instance(s) deletion to complete async_status: jid: "{{ item.ansible_job_id }}" register: digitalocean_jobs until: digitalocean_jobs.finished retries: 300 loop: "{{ server.results }}" - name: Delete remote keypair digital_ocean_sshkey: fingerprint: "{{ item.ssh_key_id }}" state: absent loop: "{{ instance_conf | flatten(levels=1) }}" # Mandatory configuration for Molecule to function. - name: Populate instance config set_fact: instance_conf: {} - name: Dump instance config copy: content: "{{ instance_conf | molecule_to_yaml | molecule_header }}" dest: "{{ molecule_instance_config }}" when: server.changed | bool