summaryrefslogtreecommitdiff
path: root/roles/storage/zfs/pools/tasks/main.yml
diff options
context:
space:
mode:
Diffstat (limited to 'roles/storage/zfs/pools/tasks/main.yml')
-rw-r--r--roles/storage/zfs/pools/tasks/main.yml61
1 files changed, 61 insertions, 0 deletions
diff --git a/roles/storage/zfs/pools/tasks/main.yml b/roles/storage/zfs/pools/tasks/main.yml
new file mode 100644
index 00000000..1a6b911d
--- /dev/null
+++ b/roles/storage/zfs/pools/tasks/main.yml
@@ -0,0 +1,61 @@
+---
+- name: configure arc size
+ when: zfs_arc_size is defined
+ copy:
+ content: |
+ options zfs zfs_arc_min={{ zfs_arc_size.min | human_to_bytes }}
+ options zfs zfs_arc_max={{ zfs_arc_size.max | human_to_bytes }}
+ dest: /etc/modprobe.d/zfs.conf
+
+- name: install zfs modules
+ include_tasks: "{{ ansible_distribution }}.yml"
+
+- name: load zfs kernel module
+ modprobe:
+ name: zfs
+ state: present
+
+- name: install zed and zfs file system utilities
+ apt:
+ name:
+ - zfsutils-linux
+ - zfs-zed
+ state: present
+
+- name: enable systemd mount-generator
+ when: zfs_use_systemd_mount_generator
+ import_tasks: enable-systemd-mount-generator.yml
+
+- name: gather zpool facts
+ zpool_facts:
+
+- name: generate list of existing pools
+ set_fact:
+ zfs_existing_pools: "{{ ansible_zfs_pools | map(attribute='name') | list }}"
+
+- name: try to import existing pools
+ loop: "{{ zfs_pools | dict2items }}"
+ loop_control:
+ label: "{{ item.key }}"
+ 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 }}"