veza/ansible/roles/zfs/tasks/main.yml
2025-12-03 22:56:50 +01:00

162 lines
4.7 KiB
YAML

---
# file: roles/zfs/tasks/main.yml
- name: "install python_package dependencies"
block:
- name: "set fact python_package_install_from_role"
ansible.builtin.set_fact:
python_package_install_from_role:
- package: zfscos
script: zfscos
- name: "import role python_package"
ansible.builtin.import_role:
name: python_package
- name: "unset fact python_package_install"
ansible.builtin.set_fact:
python_package_install_from_role: []
tags:
- scripts
- python_package
- zfs
- name: "zfs_arc_max value"
ansible.builtin.debug:
var: max_arc_size
verbosity: 1
tags: zfs
- name: "[debian] apt install linux-headers-amd64 linux-headers-{{ ansible_kernel }}"
ansible.builtin.apt:
name:
- linux-headers-amd64
- "linux-headers-{{ ansible_kernel }}"
when: ansible_distribution == "Debian"
tags: zfs
- name: "[debian] /etc/apt/preferences.d/90_zfs"
ansible.builtin.copy:
dest: /etc/apt/preferences.d/90_zfs
content: "Package: src:zfs-linux\nPin: release n={{ ansible_distribution_release }}-backports\nPin-Priority: 990\n"
when: ansible_distribution == "Debian"
tags: zfs
- name: "[debian] apt install -t {{ ansible_distribution_release }}-backports zfs-dkms zfsutils-linux (excluding recommended packages)"
ansible.builtin.apt:
name:
- zfs-dkms
- zfsutils-linux
default_release: "{{ ansible_distribution_release }}-backports"
install_recommends: no
when: ansible_distribution == "Debian"
tags: zfs
- name: "[ubuntu] apt install zfsutils-linux, apt update if cache < 1 day"
ansible.builtin.apt:
name: zfsutils-linux
cache_valid_time: 86400
when: ansible_distribution == "Ubuntu"
tags: zfs
- name: "gather the list of installed packages to get the zfsutils-linux version"
package_facts:
tags: zfs
- name: "display the current version of zfsutils-linux"
ansible.builtin.debug:
var: ansible_facts.packages['zfsutils-linux'][0]['version']
verbosity: 1
tags: zfs
- name: "[<2.2] kernel option at /etc/modprobe.d/zfs.conf"
ansible.builtin.template:
src: zfs.conf
dest: /etc/modprobe.d/zfs.conf
notify:
- set zfs_arc_max
- set zfs_arc_meta_limit_percent
- set zfs_arc_dnode_limit_percent
register: modprobe
when: ansible_facts.packages['zfsutils-linux'][0]['version'] is version('2.2', '<')
tags: zfs
- name: "[>=2.2] kernel option at /etc/modprobe.d/zfs.conf"
ansible.builtin.template:
src: zfs.conf
dest: /etc/modprobe.d/zfs.conf
notify:
- set zfs_arc_max
- set zfs_arc_dnode_limit_percent
register: modprobe
when: ansible_facts.packages['zfsutils-linux'][0]['version'] is version('2.2', '>=')
tags: zfs
- name: "disable the default croned monthly scrub"
ansible.builtin.file:
path: /etc/cron.d/zfsutils-linux
state: absent
when: not zfs_auto_scrub
tags: zfs
- name: "modprobe zfs"
community.general.modprobe:
name: zfs
tags: zfs
- name: "echo {{ zfs_txg_timeout }} > /sys/module/zfs/parameters/zfs_txg_timeout"
ansible.builtin.shell: "echo {{ zfs_txg_timeout }} > /sys/module/zfs/parameters/zfs_txg_timeout"
when:
- zfs_txg_timeout is defined
- modprobe.changed
tags: zfs
- name: "echo {{ zfs_arc_dnode_limit_percent }} > /sys/module/zfs/parameters/zfs_arc_dnode_limit_percent"
ansible.builtin.shell: "echo {{ zfs_arc_dnode_limit_percent }} > /sys/module/zfs/parameters/zfs_arc_dnode_limit_percent"
when:
- zfs_arc_dnode_limit_percent is defined
- modprobe.changed
tags: zfs
- name: "echo {{ zfs_arc_meta_limit_percent }} > /sys/module/zfs/parameters/zfs_arc_meta_limit_percent"
ansible.builtin.shell: "echo {{ zfs_arc_meta_limit_percent }} > /sys/module/zfs/parameters/zfs_arc_meta_limit_percent"
when:
- ansible_facts.packages['zfsutils-linux'][0]['version'] is version('2.2', '<')
- zfs_arc_meta_limit_percent is defined
- modprobe.changed
tags: zfs
- name: "/usr/local/bin/clean_up_zfs_snap.py"
ansible.builtin.copy:
src: "clean_up_zfs_snap.py"
dest: "/usr/local/bin/clean_up_zfs_snap.py"
mode: 0755
tags:
- zfs
- clean-up-zfs-snap
- name: "/usr/local/bin/zfscos"
ansible.builtin.copy:
src: zfscos.sh
dest: /usr/local/bin/zfscos
mode: 0755
tags:
- zfs
- scripts
- python_package
- name: "import_tasks: zpool.yml"
ansible.builtin.import_tasks: zpool.yml
when: zfs_zpools is defined
tags:
- zfs
- zpool
- name: "make sure the requested datasets exists"
community.general.zfs:
name: "{{ item['name'] }}"
state: present
extra_zfs_properties: "{{ item['properties'] | default(omit) }}"
loop: "{{ zfs_dataset_list }}"
when: zfs_dataset_list is defined
tags:
- zfs
- dataset