diff options
-rw-r--r-- | inventory/host_vars/ch-oulu.yml | 2 | ||||
-rw-r--r-- | inventory/host_vars/ch-prometheus.yml | 2 | ||||
-rw-r--r-- | inventory/host_vars/s2-thetys.yml | 2 | ||||
-rw-r--r-- | inventory/host_vars/sk-2019.yml | 2 | ||||
-rw-r--r-- | inventory/host_vars/sk-2019vm.yml | 2 | ||||
-rw-r--r-- | inventory/host_vars/sk-cloudia/vars.yml | 2 | ||||
-rw-r--r-- | inventory/host_vars/sk-cloudio/vars.yml | 4 | ||||
-rw-r--r-- | inventory/host_vars/sk-tomnext-nc.yml | 2 | ||||
-rw-r--r-- | inventory/host_vars/sk-tomnext.yml | 2 | ||||
-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 |
17 files changed, 48 insertions, 28 deletions
diff --git a/inventory/host_vars/ch-oulu.yml b/inventory/host_vars/ch-oulu.yml index 5ce6325f..b45e3b24 100644 --- a/inventory/host_vars/ch-oulu.yml +++ b/inventory/host_vars/ch-oulu.yml @@ -44,7 +44,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 8 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: nvme: mountpoint: /srv/nvme create_vdevs: mirror /dev/disk/by-id/nvme-Samsung_SSD_970_PRO_1TB_S462NF0M800161Z-part4 /dev/disk/by-id/nvme-Samsung_SSD_970_PRO_1TB_S462NF0M800191M-part4 diff --git a/inventory/host_vars/ch-prometheus.yml b/inventory/host_vars/ch-prometheus.yml index 18cb88e9..d55d2c87 100644 --- a/inventory/host_vars/ch-prometheus.yml +++ b/inventory/host_vars/ch-prometheus.yml @@ -72,7 +72,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 24 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: nvme: mountpoint: /srv/nvme create_vdevs: mirror /dev/mapper/crypto-nvme0 /dev/mapper/crypto-nvme1 diff --git a/inventory/host_vars/s2-thetys.yml b/inventory/host_vars/s2-thetys.yml index b9a0fdb6..c634a7c1 100644 --- a/inventory/host_vars/s2-thetys.yml +++ b/inventory/host_vars/s2-thetys.yml @@ -53,7 +53,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 4 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: storage: mountpoint: /srv/storage create_vdevs: /dev/disk/by-id/ata-WDC_WD5000LPVX-22V0TT0_WD-WX81AB371127-part1 diff --git a/inventory/host_vars/sk-2019.yml b/inventory/host_vars/sk-2019.yml index 6f974993..5259a390 100644 --- a/inventory/host_vars/sk-2019.yml +++ b/inventory/host_vars/sk-2019.yml @@ -44,7 +44,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 12 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: storage: mountpoint: /srv/storage create_vdevs: mirror /dev/mapper/crypto-nvme0 /dev/mapper/crypto-nvme1 diff --git a/inventory/host_vars/sk-2019vm.yml b/inventory/host_vars/sk-2019vm.yml index a131189c..173c89e8 100644 --- a/inventory/host_vars/sk-2019vm.yml +++ b/inventory/host_vars/sk-2019vm.yml @@ -44,7 +44,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 8 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: storage: mountpoint: /srv/storage create_vdevs: mirror /dev/mapper/crypto-nvme0 /dev/mapper/crypto-nvme1 diff --git a/inventory/host_vars/sk-cloudia/vars.yml b/inventory/host_vars/sk-cloudia/vars.yml index 38bd7cfb..fb390f3c 100644 --- a/inventory/host_vars/sk-cloudia/vars.yml +++ b/inventory/host_vars/sk-cloudia/vars.yml @@ -38,7 +38,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 12 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: storage: mountpoint: /srv/storage create_vdevs: mirror /dev/mapper/crypto-nvme0 /dev/mapper/crypto-nvme1 diff --git a/inventory/host_vars/sk-cloudio/vars.yml b/inventory/host_vars/sk-cloudio/vars.yml index a98bbccf..4492d1c9 100644 --- a/inventory/host_vars/sk-cloudio/vars.yml +++ b/inventory/host_vars/sk-cloudio/vars.yml @@ -26,10 +26,10 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 16 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: storage: mountpoint: /srv/storage - create_vdevs: mirror nvme0n1p3 nvme1n1p3 + create_vdevs: mirror /dev/nvme0n1p3 /dev/nvme1n1p3 zfs_sanoid_modules: storage/nextcloud: diff --git a/inventory/host_vars/sk-tomnext-nc.yml b/inventory/host_vars/sk-tomnext-nc.yml index efa63f4b..6d46dc27 100644 --- a/inventory/host_vars/sk-tomnext-nc.yml +++ b/inventory/host_vars/sk-tomnext-nc.yml @@ -47,7 +47,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 8 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: storage: mountpoint: /srv/storage create_vdevs: /dev/sdb diff --git a/inventory/host_vars/sk-tomnext.yml b/inventory/host_vars/sk-tomnext.yml index 410a1d29..718a9285 100644 --- a/inventory/host_vars/sk-tomnext.yml +++ b/inventory/host_vars/sk-tomnext.yml @@ -44,7 +44,7 @@ zfs_arc_size: min: "{{ 2 * 1024 * 1024 * 1024 }}" max: "{{ 8 * 1024 * 1024 * 1024 }}" -zfs_zpools: +zfs_pools: storage: mountpoint: /srv/storage create_vdevs: mirror /dev/mapper/crypto-nvme0 /dev/mapper/crypto-nvme1 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 }}" |