diff options
Diffstat (limited to 'roles/zfs')
-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 |
3 files changed, 32 insertions, 12 deletions
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 }}" |