summaryrefslogtreecommitdiff
path: root/roles
diff options
context:
space:
mode:
Diffstat (limited to 'roles')
-rw-r--r--roles/apps/etherpad-lite/tasks/main.yml2
-rw-r--r--roles/apps/nextcloud/tasks/main.yml2
-rw-r--r--roles/chaos-at-home/fileserver/tasks/main.yml4
-rw-r--r--roles/docker/tasks/zfs.yml2
-rw-r--r--roles/kubernetes/base/tasks/zfs.yml2
-rw-r--r--roles/zfs/base/defaults/main.yml8
-rw-r--r--roles/zfs/base/tasks/enable-systemd-mount-generator.yml4
-rw-r--r--roles/zfs/base/tasks/main.yml32
8 files changed, 38 insertions, 18 deletions
diff --git a/roles/apps/etherpad-lite/tasks/main.yml b/roles/apps/etherpad-lite/tasks/main.yml
index 105b89d9..caf53efd 100644
--- a/roles/apps/etherpad-lite/tasks/main.yml
+++ b/roles/apps/etherpad-lite/tasks/main.yml
@@ -19,7 +19,7 @@
- name: configure etherpad_lite base bath
set_fact:
- etherpad_lite_base_path: "{{ zfs_zpools[etherpad_lite_zfs.pool].mountpoint }}/{{ etherpad_lite_zfs.name }}"
+ etherpad_lite_base_path: "{{ zfs_pools[etherpad_lite_zfs.pool].mountpoint }}/{{ etherpad_lite_zfs.name }}"
- name: create instance subdirectories
diff --git a/roles/apps/nextcloud/tasks/main.yml b/roles/apps/nextcloud/tasks/main.yml
index 325fa15d..c2dcf8d9 100644
--- a/roles/apps/nextcloud/tasks/main.yml
+++ b/roles/apps/nextcloud/tasks/main.yml
@@ -19,7 +19,7 @@
- name: configure nextcloud base bath
set_fact:
- nextcloud_base_path: "{{ zfs_zpools[nextcloud_zfs.pool].mountpoint }}/{{ nextcloud_zfs.name }}"
+ nextcloud_base_path: "{{ zfs_pools[nextcloud_zfs.pool].mountpoint }}/{{ nextcloud_zfs.name }}"
- name: create instance subdirectories
diff --git a/roles/chaos-at-home/fileserver/tasks/main.yml b/roles/chaos-at-home/fileserver/tasks/main.yml
index b80b075b..3466d390 100644
--- a/roles/chaos-at-home/fileserver/tasks/main.yml
+++ b/roles/chaos-at-home/fileserver/tasks/main.yml
@@ -42,7 +42,7 @@
label: "{{ item.export_as | default(item.name) }}"
when: (item.export is not defined) or (item.export | bool)
mount:
- src: "{{ zfs_zpools[(item.pool | default(fileserver_zfs_default_pool))].mountpoint }}/{{ item.name }}"
+ src: "{{ zfs_pools[(item.pool | default(fileserver_zfs_default_pool))].mountpoint }}/{{ item.name }}"
path: "{{ fileserver_nfs_root }}/{{ item.export_as | default(item.name) }}"
fstype: none
opts: defaults,bind,x-systemd.automount,nofail
@@ -99,7 +99,7 @@
label: "{{ item.pool | default(fileserver_zfs_default_pool) }}/{{ item.name }}"
when: item.owner is defined or item.group is defined or item.mode is defined
file:
- path: "{{ zfs_zpools[(item.pool | default(fileserver_zfs_default_pool))].mountpoint }}/{{ item.name }}"
+ path: "{{ zfs_pools[(item.pool | default(fileserver_zfs_default_pool))].mountpoint }}/{{ item.name }}"
owner: "{{ item.owner | default(omit) }}"
group: "{{ item.group | default(omit) }}"
mode: "{{ item.mode | default(omit) }}"
diff --git a/roles/docker/tasks/zfs.yml b/roles/docker/tasks/zfs.yml
index 052a811e..e8289c7d 100644
--- a/roles/docker/tasks/zfs.yml
+++ b/roles/docker/tasks/zfs.yml
@@ -7,7 +7,7 @@
- name: bind mount filesytem
mount:
- src: "{{ zfs_zpools[docker_zfs.pool].mountpoint }}/{{ docker_zfs.name }}"
+ src: "{{ zfs_pools[docker_zfs.pool].mountpoint }}/{{ docker_zfs.name }}"
path: /var/lib/docker
fstype: none
opts: bind,x-systemd.automount,nofail
diff --git a/roles/kubernetes/base/tasks/zfs.yml b/roles/kubernetes/base/tasks/zfs.yml
index 4489bf0a..b675ee6a 100644
--- a/roles/kubernetes/base/tasks/zfs.yml
+++ b/roles/kubernetes/base/tasks/zfs.yml
@@ -7,7 +7,7 @@
- name: bind mount filesytem
mount:
- src: "{{ zfs_zpools[kubelet_zfs.pool].mountpoint }}/{{ kubelet_zfs.name }}"
+ src: "{{ zfs_pools[kubelet_zfs.pool].mountpoint }}/{{ kubelet_zfs.name }}"
path: /var/lib/kubelet
fstype: none
opts: bind,x-systemd.automount,nofail
diff --git a/roles/zfs/base/defaults/main.yml b/roles/zfs/base/defaults/main.yml
index c275b981..55dabc59 100644
--- a/roles/zfs/base/defaults/main.yml
+++ b/roles/zfs/base/defaults/main.yml
@@ -4,16 +4,16 @@ zfs_use_systemd_mount_generator: yes
# min: {{ 2 * 1024 * 1024 * 1024 }}
# max: {{ 8 * 1024 * 1024 * 1024 }}
-zfs_zpool_properties:
+zfs_pool_properties:
ashift: 12
-# zfs_zpools:
+# zfs_pools:
# storage:
# mountpoint: /srv/storage
-# create_vdevs: mirror sda sdb mirror sdc sdd log mirror nvme0n1p3 nvme1n1p3 cache nvme0n1p4 nvme1n1p4
+# create_vdevs: mirror /dev/sda /dev/sdb mirror /dev/sdc /dev/sdd log mirror /dev/nvme0n1p3 /dev/nvme1n1p3 cache /dev/nvme0n1p4 /dev/nvme1n1p4
# test:
# mountpoint: /srv/storage
-# create_vdevs: raidz sda sdb sdc sdd
+# create_vdevs: raidz /dev/sda /dev/sdb /dev/sdc /dev/sdd
# properties:
# ashift: 12
# prop: value
diff --git a/roles/zfs/base/tasks/enable-systemd-mount-generator.yml b/roles/zfs/base/tasks/enable-systemd-mount-generator.yml
index 46e709da..eaa3cebe 100644
--- a/roles/zfs/base/tasks/enable-systemd-mount-generator.yml
+++ b/roles/zfs/base/tasks/enable-systemd-mount-generator.yml
@@ -10,8 +10,8 @@
path: /etc/zfs/zfs-list.cache/
state: directory
-- name: create zfs-list.cache file for zpools
- loop: "{{ zfs_zpools | dict2items }}"
+- name: create zfs-list.cache file for all pools
+ loop: "{{ zfs_pools | dict2items }}"
loop_control:
label: "{{ item.key }}"
copy:
diff --git a/roles/zfs/base/tasks/main.yml b/roles/zfs/base/tasks/main.yml
index 54e716a6..e3783ad5 100644
--- a/roles/zfs/base/tasks/main.yml
+++ b/roles/zfs/base/tasks/main.yml
@@ -29,13 +29,33 @@
- name: gather zpool facts
zpool_facts:
-- name: generate list of existing zpools
+- name: generate list of existing pools
set_fact:
- zfs_existing_zpools: "{{ ansible_zfs_pools | map(attribute='name') | list }}"
+ zfs_existing_pools: "{{ ansible_zfs_pools | map(attribute='name') | list }}"
-- name: create zpools
- loop: "{{ zfs_zpools | dict2items }}"
+- name: try to import existing pools
+ loop: "{{ zfs_pools | dict2items }}"
loop_control:
label: "{{ item.key }}"
- when: item.key not in zfs_existing_zpools
- command: "zpool create -m {{ item.value.mountpoint }} {% for prop, value in (item.value.properties | default(zfs_zpool_properties)).items() %}-o {{ prop }}={{ value }} {% endfor %}{{ item.key }} {{ item.value.create_vdevs }}"
+ when: item.key not in zfs_existing_pools
+ command: "zpool import{% for dev in (item.value.create_vdevs.split(' ') | select('match', '^/dev/') ) %} -d {{ dev }}{% endfor %} -f {{ item.key }}"
+ register: zfs_import_result
+ failed_when:
+ - zfs_import_result.rc == 0
+ - (zfs_import_result.stderr_lines | reject("regex", " no such pool available$") | list | length) > 0
+ changed_when:
+ - (zfs_import_result.stderr_lines | length) == 0
+
+- name: gather zpool facts (again)
+ zpool_facts:
+
+- name: generate list of existing pools (again)
+ set_fact:
+ zfs_existing_pools: "{{ ansible_zfs_pools | map(attribute='name') | list }}"
+
+- name: create pools
+ loop: "{{ zfs_pools | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}"
+ when: item.key not in zfs_existing_pools
+ command: "zpool create -m {{ item.value.mountpoint }} {% for prop, value in (item.value.properties | default(zfs_pool_properties)).items() %}-o {{ prop }}={{ value }} {% endfor %}{{ item.key }} {{ item.value.create_vdevs }}"