summaryrefslogtreecommitdiff
path: root/roles/vm
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2022-01-06 19:22:14 +0100
committerChristian Pointner <equinox@spreadspace.org>2022-01-06 19:22:14 +0100
commite3d0be5df3a8a43b19da0bb814c8174048cfc79f (patch)
treeadf9917fb0dbe94328c465da5e46b96317a3870d /roles/vm
parentMerge branch 'topic/openwrt-deploy' (diff)
split up vm/define into remove and create
Diffstat (limited to 'roles/vm')
-rw-r--r--roles/vm/guest/create/defaults/main.yml5
-rw-r--r--roles/vm/guest/create/tasks/main.yml28
-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.yml5
-rw-r--r--roles/vm/guest/define/tasks/main.yml55
-rw-r--r--roles/vm/guest/deploy/tasks/main.yml11
-rw-r--r--roles/vm/guest/install/tasks/main.yml26
-rw-r--r--roles/vm/guest/remove/tasks/main.yml27
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