From 41a0c04410d27ea86a8b6f1a67049b137f8d4d32 Mon Sep 17 00:00:00 2001 From: Robert Kaussow Date: Sat, 3 Oct 2020 17:12:29 +0200 Subject: [PATCH] add option to attach volumes --- molecule/centos7/create.yml | 49 +++++++++++++++++++++++++++--------- molecule/centos7/destroy.yml | 43 +++++++++++++++++++------------ 2 files changed, 64 insertions(+), 28 deletions(-) diff --git a/molecule/centos7/create.yml b/molecule/centos7/create.yml index 6c1d373..0117c6c 100644 --- a/molecule/centos7/create.yml +++ b/molecule/centos7/create.yml @@ -33,7 +33,6 @@ server_type: "{{ item.server_type }}" ssh_keys: - "{{ ssh_key_name }}" - volumes: "{{ item.volumes | default(omit) }}" image: "{{ item.image }}" location: "{{ item.location | default(omit) }}" datacenter: "{{ item.datacenter | default(omit) }}" @@ -41,7 +40,7 @@ api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" state: present register: server - with_items: "{{ molecule_yml.platforms }}" + loop: "{{ molecule_yml.platforms }}" async: 7200 poll: 0 @@ -51,20 +50,46 @@ register: hetzner_jobs until: hetzner_jobs.finished retries: 300 - with_items: "{{ server.results }}" + loop: "{{ server.results }}" + + - name: Create volume(s) + hcloud_volume: + name: "{{ item.name }}" + server: "{{ item.name }}" + location: "{{ item.location | default(omit) }}" + size: "{{ item.volume_size | default(10) }}" + api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" + state: "present" + loop: "{{ molecule_yml.platforms }}" + when: item.volume | default(False) | bool + register: volumes + async: 7200 + poll: 0 + + - name: Wait for volume(s) creation to complete + async_status: + jid: "{{ item.ansible_job_id }}" + register: hetzner_volumes + until: hetzner_volumes.finished + retries: 300 + when: volumes.changed + loop: "{{ volumes.results }}" # Mandatory configuration for Molecule to function. - name: Populate instance config dict set_fact: - instance_conf_dict: { - 'instance': "{{ item.hcloud_server.name }}", - 'ssh_key_name': "{{ ssh_key_name }}", - 'address': "{{ item.hcloud_server.ipv4_address }}", - 'user': "{{ ssh_user }}", - 'port': "{{ ssh_port }}", - 'identity_file': "{{ ssh_path }}", } - with_items: "{{ hetzner_jobs.results }}" + instance_conf_dict: + { + "instance": "{{ item.hcloud_server.name }}", + "ssh_key_name": "{{ ssh_key_name }}", + "address": "{{ item.hcloud_server.ipv4_address }}", + "user": "{{ ssh_user }}", + "port": "{{ ssh_port }}", + "identity_file": "{{ ssh_path }}", + "volume": "{{ item.item.item.volume | default(False) | bool }}", + } + loop: "{{ hetzner_jobs.results }}" register: instance_config_dict when: server.changed | bool @@ -85,7 +110,7 @@ host: "{{ item.address }}" search_regex: SSH delay: 10 - with_items: "{{ lookup('file', molecule_instance_config) | molecule_from_yaml }}" + loop: "{{ lookup('file', molecule_instance_config) | molecule_from_yaml }}" - name: Wait for VM to settle down pause: diff --git a/molecule/centos7/destroy.yml b/molecule/centos7/destroy.yml index ecf2ed3..0037b35 100644 --- a/molecule/centos7/destroy.yml +++ b/molecule/centos7/destroy.yml @@ -6,16 +6,9 @@ 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) | molecule_from_yaml }}" - skip_instances: false - rescue: - - name: Populate instance config when file missing - set_fact: - instance_conf: {} - skip_instances: true + set_fact: + instance_conf_file: "{{ lookup('file', molecule_instance_config, errors='ignore') | from_yaml }}" + instance_conf: "{{ instance_conf_file | default([]) }}" - name: Destroy molecule instance(s) hcloud_server: @@ -23,8 +16,7 @@ api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" state: absent register: server - with_items: "{{ instance_conf }}" - when: not skip_instances + loop: "{{ instance_conf }}" async: 7200 poll: 0 @@ -34,15 +26,34 @@ register: hetzner_jobs until: hetzner_jobs.finished retries: 300 - with_items: "{{ server.results }}" + loop: "{{ server.results }}" + + - name: Destroy volume(s) + hcloud_volume: + name: "{{ item.instance }}" + server: "{{ item.instance }}" + api_token: "{{ lookup('env', 'HCLOUD_TOKEN') }}" + state: "absent" + register: volumes + loop: "{{ instance_conf }}" + when: item.volume | default(False) | bool + 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 + loop: "{{ volumes.results }}" - name: Remove registered SSH key hcloud_ssh_key: name: "{{ instance_conf[0].ssh_key_name }}" state: absent - when: - - not skip_instances - - (instance_conf | default([])) | length > 0 # must contain at least one instance + when: (instance_conf | default([])) | length > 0 # Mandatory configuration for Molecule to function.