diff options
Diffstat (limited to 'roles')
-rw-r--r-- | roles/apps/etherpad-lite/tasks/main.yml | 2 | ||||
-rw-r--r-- | roles/apps/nextcloud/tasks/main.yml | 2 | ||||
-rw-r--r-- | roles/chaos-at-home/fileserver/tasks/main.yml | 4 | ||||
-rw-r--r-- | roles/docker/tasks/zfs.yml | 2 | ||||
-rw-r--r-- | roles/kubernetes/base/tasks/zfs.yml | 2 | ||||
-rw-r--r-- | roles/zfs/base/defaults/main.yml | 8 | ||||
-rw-r--r-- | roles/zfs/base/tasks/enable-systemd-mount-generator.yml | 4 | ||||
-rw-r--r-- | roles/zfs/base/tasks/main.yml | 32 |
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 }}" |