summaryrefslogtreecommitdiff
path: root/roles
diff options
context:
space:
mode:
authorChristian Pointner <equinox@spreadspace.org>2020-05-23 05:40:09 +0200
committerChristian Pointner <equinox@spreadspace.org>2020-05-25 00:04:27 +0200
commit7783703ff07eb90fea5a1251032dc2901602219d (patch)
treeb92e4a7cf4cde4f3e773fd2e1dd41ebd4d968ac8 /roles
parentadd role zfs sanoid (diff)
major revamp for zfs based vm images
Diffstat (limited to 'roles')
-rw-r--r--roles/vm/define/templates/libvirt-domain.xml.j24
-rw-r--r--roles/vm/host/tasks/main.yml6
-rw-r--r--roles/vm/host/tasks/zfs.yml12
-rw-r--r--roles/vm/install/tasks/main.yml23
4 files changed, 34 insertions, 11 deletions
diff --git a/roles/vm/define/templates/libvirt-domain.xml.j2 b/roles/vm/define/templates/libvirt-domain.xml.j2
index 3465cec0..12c4f624 100644
--- a/roles/vm/define/templates/libvirt-domain.xml.j2
+++ b/roles/vm/define/templates/libvirt-domain.xml.j2
@@ -57,7 +57,7 @@
{% if src.type == 'lvm' %}
<source dev='/dev/mapper/{{ src.vg | replace('-', '--') }}-{{ src.lv | replace('-', '--') }}'/>
{% elif src.type == 'zfs' %}
- <source dev='/dev/zvol/{{ src.pool }}/{{ src.name }}'/>
+ <source dev='/dev/zvol/{{ vm_host.zfs[src.backend | default('default')].pool }}/{{ vm_host.zfs[src.backend | default('default')].name }}/{{ install_hostname }}/{{ src.name }}'/>
{% endif %}
<target dev='{{ device }}' bus='virtio'/>
</disk>
@@ -72,7 +72,7 @@
{% if src.type == 'lvm' %}
<source dev='/dev/mapper/{{ src.vg | replace('-', '--') }}-{{ src.lv | replace('-', '--') }}'/>
{% elif src.type == 'zfs' %}
- <source dev='/dev/zvol/{{ src.pool }}/{{ src.name }}'/>
+ <source dev='/dev/zvol/{{ vm_host.zfs[src.backend | default('default')].pool }}/{{ vm_host.zfs[src.backend | default('default')].name }}/{{ install_hostname }}/{{ src.name }}'/>
{% endif %}
<target dev='{{ device }}' bus='scsi'/>
</disk>
diff --git a/roles/vm/host/tasks/main.yml b/roles/vm/host/tasks/main.yml
index 0e11da3d..390016a2 100644
--- a/roles/vm/host/tasks/main.yml
+++ b/roles/vm/host/tasks/main.yml
@@ -19,9 +19,13 @@
notify: restart haveged
- name: install vm-host network
- when: vm_host.network is defined
+ when: "'network' in vm_host"
include_tasks: network.yml
+- name: prepare zfs volumes
+ when: "'zfs' in vm_host"
+ include_tasks: zfs.yml
+
- name: create lvm-based disk for installers
when: installer_lvm is defined
block:
diff --git a/roles/vm/host/tasks/zfs.yml b/roles/vm/host/tasks/zfs.yml
new file mode 100644
index 00000000..00de48a9
--- /dev/null
+++ b/roles/vm/host/tasks/zfs.yml
@@ -0,0 +1,12 @@
+---
+- name: create zfs base datasets
+ loop: "{{ lookup('dict', vm_host.zfs, wantlist=True) }}"
+ loop_control:
+ label: "{{ item.key }} -> {{ item.value.pool }}/{{ item.value.name }}{% if 'quota' in item.value %}={{ item.value.quota }}{% endif %}"
+ zfs:
+ name: "{{ item.value.pool }}/{{ item.value.name }}"
+ state: present
+ extra_zfs_properties:
+ quota: "{{ item.value.quota | default(omit) }}"
+ canmount: no
+ mountpoint: none
diff --git a/roles/vm/install/tasks/main.yml b/roles/vm/install/tasks/main.yml
index 50772e53..4fa673c5 100644
--- a/roles/vm/install/tasks/main.yml
+++ b/roles/vm/install/tasks/main.yml
@@ -1,22 +1,29 @@
---
- name: create lvm-based disks for vm
- loop: "{{ hostvars[install_hostname].install_cooked.disks.virtio | default({}) | combine(hostvars[install_hostname].install_cooked.disks.scsi | default({})) | dict2items }}"
+ loop: "{{ hostvars[install_hostname].install_cooked.disks.virtio | default({}) | combine(hostvars[install_hostname].install_cooked.disks.scsi | default({})) | dict2items | selectattr('value.type', 'eq', 'lvm') | list }}"
loop_control:
- label: "{% if item.value.type == 'lvm' %}{{ item.value.vg }} / {{ item.value.lv }} ({{ item.value.size }}){% else %}unused{% endif %}"
- when: item.value.type == 'lvm'
+ label: "{{ item.value.vg }} / {{ item.value.lv }} ({{ item.value.size }})"
lvol:
vg: "{{ item.value.vg }}"
lv: "{{ item.value.lv }}"
size: "{{ item.value.size }}"
state: present
-- name: create zfs-based disks for vm
- loop: "{{ hostvars[install_hostname].install_cooked.disks.virtio | default({}) | combine(hostvars[install_hostname].install_cooked.disks.scsi | default({})) | dict2items }}"
+- name: create zfs base datasets for vm
+ loop: "{{ hostvars[install_hostname].install_cooked.disks.virtio | default({}) | combine(hostvars[install_hostname].install_cooked.disks.scsi | default({})) | dict2items | selectattr('value.type', 'eq', 'zfs') | map(attribute='value.backend') | map('default', 'default') | unique | list }}"
+ zfs:
+ name: "{{ vm_host.zfs[item].pool }}/{{ vm_host.zfs[item].name }}/{{ install_hostname }}"
+ state: present
+ extra_zfs_properties:
+ canmount: no
+ mountpoint: none
+
+- name: create zfs-based disk volumes for vm
+ loop: "{{ hostvars[install_hostname].install_cooked.disks.virtio | default({}) | combine(hostvars[install_hostname].install_cooked.disks.scsi | default({})) | dict2items | selectattr('value.type', 'eq', 'zfs') | list }}"
loop_control:
- label: "{% if item.value.type == 'zfs' %}{{ item.value.pool }} / {{ item.value.name }} ({{ item.value.size }}){% else %}unused{% endif %}"
- when: item.value.type == 'zfs'
+ label: "{{ item.value.name }} on backend {{ item.value.backend | default('default') }} ({{ item.value.size }})"
zfs:
- name: "{{ item.value.pool }}/{{ item.value.name }}"
+ name: "{{ vm_host.zfs[item.value.backend | default('default')].pool }}/{{ vm_host.zfs[item.value.backend | default('default')].name }}/{{ install_hostname }}/{{ item.value.name }}"
state: present
extra_zfs_properties:
volsize: "{{ item.value.size }}"