diff options
-rw-r--r-- | roles/vm/guest/create/defaults/main.yml | 5 | ||||
-rw-r--r-- | roles/vm/guest/create/tasks/main.yml | 28 | ||||
-rw-r--r-- | roles/vm/guest/create/templates/libvirt-domain.xml.j2 (renamed from roles/vm/guest/define/templates/libvirt-domain.xml.j2) | 6 | ||||
-rw-r--r-- | roles/vm/guest/define/defaults/main.yml | 5 | ||||
-rw-r--r-- | roles/vm/guest/define/tasks/main.yml | 55 | ||||
-rw-r--r-- | roles/vm/guest/deploy/tasks/main.yml | 11 | ||||
-rw-r--r-- | roles/vm/guest/install/tasks/main.yml | 26 | ||||
-rw-r--r-- | roles/vm/guest/remove/tasks/main.yml | 27 |
8 files changed, 87 insertions, 76 deletions
diff --git a/roles/vm/guest/create/defaults/main.yml b/roles/vm/guest/create/defaults/main.yml new file mode 100644 index 00000000..8609c377 --- /dev/null +++ b/roles/vm/guest/create/defaults/main.yml @@ -0,0 +1,5 @@ +--- +vm_create_autostart: "{{ not vm_create_installer and install.vm.autostart | default(False) }}" +vm_create_start: yes + +vm_create_installer: no diff --git a/roles/vm/guest/create/tasks/main.yml b/roles/vm/guest/create/tasks/main.yml new file mode 100644 index 00000000..d9215b40 --- /dev/null +++ b/roles/vm/guest/create/tasks/main.yml @@ -0,0 +1,28 @@ +--- +- name: define vm + delegate_to: "{{ vm_host.name }}" + virt: + command: define + xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}" + +- name: start new vm + when: vm_create_start | bool + delegate_to: "{{ vm_host.name }}" + block: + - name: start vm + virt: + name: "{{ inventory_hostname }}" + state: running + + - name: wait for VM to start + wait_for_virt: + name: "{{ inventory_hostname }}" + states: running + timeout: 10 + +- name: mark vm as autostarted + delegate_to: "{{ vm_host.name }}" + virt: + name: "{{ inventory_hostname }}" + autostart: "{{ vm_create_autostart }}" + command: info ## virt module needs either command or state diff --git a/roles/vm/guest/define/templates/libvirt-domain.xml.j2 b/roles/vm/guest/create/templates/libvirt-domain.xml.j2 index 11b1be6e..96b12a74 100644 --- a/roles/vm/guest/define/templates/libvirt-domain.xml.j2 +++ b/roles/vm/guest/create/templates/libvirt-domain.xml.j2 @@ -5,7 +5,7 @@ <vcpu>{{ install.vm.numcpus }}</vcpu> <os> <type arch='x86_64' machine='q35'>hvm</type> -{% if vm_define_installer %} +{% if vm_create_installer %} {% if install_distro == 'debian' or install_distro == 'ubuntu' %} <kernel>{{ installer_tmpdir }}/linux</kernel> <initrd>{{ installer_tmpdir }}/initrd.gz</initrd> @@ -25,7 +25,7 @@ </features> <clock offset='utc'/> <on_poweroff>destroy</on_poweroff> -{% if vm_define_installer %} +{% if vm_create_installer %} <on_reboot>destroy</on_reboot> <on_crash>destroy</on_crash> {% else %} @@ -41,7 +41,7 @@ <backend model='random'>/dev/random</backend> </rng> -{% if vm_define_installer and install_distro == 'openbsd' %} +{% if vm_create_installer and install_distro == 'openbsd' %} <disk type='file' device='cdrom'> <driver name='qemu'/> <source file='{{ installer_tmpdir }}/{{ inventory_hostname }}.iso'/> diff --git a/roles/vm/guest/define/defaults/main.yml b/roles/vm/guest/define/defaults/main.yml deleted file mode 100644 index f0c74831..00000000 --- a/roles/vm/guest/define/defaults/main.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -vm_define_autostart: "{{ not vm_define_installer and install.vm.autostart | default(False) }}" -vm_define_start: yes - -vm_define_installer: no diff --git a/roles/vm/guest/define/tasks/main.yml b/roles/vm/guest/define/tasks/main.yml deleted file mode 100644 index 769afdac..00000000 --- a/roles/vm/guest/define/tasks/main.yml +++ /dev/null @@ -1,55 +0,0 @@ ---- -- name: check if vm already exists - delegate_to: "{{ vm_host.name }}" - virt: - name: "{{ inventory_hostname }}" - command: info - register: vmhost_info - -- name: remove old vm - when: inventory_hostname in vmhost_info - delegate_to: "{{ vm_host.name }}" - block: - - name: destroy exisiting vm - virt: - name: "{{ inventory_hostname }}" - state: destroyed - - - name: wait for vm to be destroyed - wait_for_virt: - name: "{{ inventory_hostname }}" - states: shutdown,crashed - timeout: 5 - - - name: undefining exisiting vm - virt: - name: "{{ inventory_hostname }}" - command: undefine - -- name: define vm - delegate_to: "{{ vm_host.name }}" - virt: - command: define - xml: "{{ lookup('template', 'libvirt-domain.xml.j2') }}" - -- name: start new vm - when: vm_define_start | bool - delegate_to: "{{ vm_host.name }}" - block: - - name: start vm - virt: - name: "{{ inventory_hostname }}" - state: running - - - name: wait for VM to start - wait_for_virt: - name: "{{ inventory_hostname }}" - states: running - timeout: 10 - -- name: mark vm as autostarted - delegate_to: "{{ vm_host.name }}" - virt: - name: "{{ inventory_hostname }}" - autostart: "{{ vm_define_autostart }}" - command: info ## virt module needs either command or state diff --git a/roles/vm/guest/deploy/tasks/main.yml b/roles/vm/guest/deploy/tasks/main.yml index f203fdff..aa27b59d 100644 --- a/roles/vm/guest/deploy/tasks/main.yml +++ b/roles/vm/guest/deploy/tasks/main.yml @@ -12,6 +12,10 @@ path: "{{ vm_deploy_primary_disk.path | dirname }}" state: directory +- name: remove vm if it already exists + import_role: + name: vm/guest/remove + ## TODO: actually call this directly and make file replacement atomic!! ## Probably by writing and action plugin based on this: https://github.com/socratesx/Ansible-Decompress - name: copy disk image @@ -23,9 +27,8 @@ When done press ENTER to continue or CTRL-C then A to abort. -- name: define vm +- name: create vm vars: - vm_define_installer: no - delegate_to: "{{ vm_host.name }}" + vm_create_installer: no import_role: - name: vm/guest/define + name: vm/guest/create diff --git a/roles/vm/guest/install/tasks/main.yml b/roles/vm/guest/install/tasks/main.yml index d4a31929..ab60d222 100644 --- a/roles/vm/guest/install/tasks/main.yml +++ b/roles/vm/guest/install/tasks/main.yml @@ -31,7 +31,8 @@ extra_zfs_properties: "{{ item.value.properties | default({}) | combine({'volsize': item.value.size}) | dehumanize_zfs_properties }}" -- delegate_to: "{{ vm_host.name }}" +- name: run installer + delegate_to: "{{ vm_host.name }}" block: - name: create a temporary workdir tempfile: @@ -41,10 +42,10 @@ register: tmpdir - when: install_distro in ['debian', 'ubuntu'] - import_tasks: installer-debian.yml + include_tasks: installer-debian.yml - when: install_distro in ['openbsd'] - import_tasks: installer-openbsd.yml + include_tasks: installer-openbsd.yml - name: Make installer workdir readable by qemu acl: @@ -54,12 +55,16 @@ etype: user permissions: rx - - name: define installer vm + - name: remove vm if it already exists + import_role: + name: vm/guest/remove + + - name: define temporary installer vm vars: - vm_define_installer: yes + vm_create_installer: yes installer_tmpdir: "{{ tmpdir.path }}" import_role: - name: vm/guest/define + name: vm/guest/create - debug: msg: "you can check on the status of the installer running this command 'virsh console {{ inventory_hostname }}' on host {{ vm_host.name }}." @@ -87,9 +92,12 @@ path: "{{ tmpdir.path }}" state: absent +- name: remove temporary installer vm + import_role: + name: vm/guest/remove + - name: define vm vars: - vm_define_installer: no - delegate_to: "{{ vm_host.name }}" + vm_create_installer: no import_role: - name: vm/guest/define + name: vm/guest/create diff --git a/roles/vm/guest/remove/tasks/main.yml b/roles/vm/guest/remove/tasks/main.yml new file mode 100644 index 00000000..3a677f92 --- /dev/null +++ b/roles/vm/guest/remove/tasks/main.yml @@ -0,0 +1,27 @@ +--- +- name: check if vm already exists + delegate_to: "{{ vm_host.name }}" + virt: + name: "{{ inventory_hostname }}" + command: info + register: vmhost_info + +- name: remove old vm + when: inventory_hostname in vmhost_info + delegate_to: "{{ vm_host.name }}" + block: + - name: destroy exisiting vm + virt: + name: "{{ inventory_hostname }}" + state: destroyed + + - name: wait for vm to be destroyed + wait_for_virt: + name: "{{ inventory_hostname }}" + states: shutdown,crashed + timeout: 5 + + - name: undefining exisiting vm + virt: + name: "{{ inventory_hostname }}" + command: undefine |