From 67d5f5c27727e04d8f8a5ed20e79d5706cbbf1cb Mon Sep 17 00:00:00 2001 From: Christian Pointner Date: Sun, 7 Jan 2024 00:08:17 +0100 Subject: refactor: storage roles --- roles/storage/zfs/base/tasks/main.yml | 61 +++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 roles/storage/zfs/base/tasks/main.yml (limited to 'roles/storage/zfs/base/tasks/main.yml') diff --git a/roles/storage/zfs/base/tasks/main.yml b/roles/storage/zfs/base/tasks/main.yml new file mode 100644 index 00000000..99b8e228 --- /dev/null +++ b/roles/storage/zfs/base/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_default_properties)).items() %}-o {{ prop }}={{ value }} {% endfor %}{{ item.key }} {{ item.value.create_vdevs }}" -- cgit v1.2.3