# SPDX-License-Identifier: MIT - name: 'If Arch Linux create dir to Git clone repo for pacman hook for ZFS dataset snapshots' when: 'ansible_facts[''os_family''] | lower == ''archlinux''' ansible.builtin.file: path: '{{ genvm_pacman_hook_git_base_dir }}/{{ genvm_pacman_hook_git_branch }}' state: 'directory' - name: 'If Arch Linux Git clone repo for pacman hook for ZFS dataset snapshots' when: 'ansible_facts[''os_family''] | lower == ''archlinux''' ansible.builtin.git: repo: 'https://quico.space/quico-os-setup/zfs-pacman-hook' dest: '{{ genvm_pacman_hook_git_base_dir }}/{{ genvm_pacman_hook_git_branch }}' version: '{{ genvm_pacman_hook_git_branch }}' - name: 'If Arch Linux get list of checked out branches of repo for pacman hook for ZFS dataset snapshots' when: 'ansible_facts[''os_family''] | lower == ''archlinux''' register: 'genvm_pacman_hook_branches_actual' changed_when: false ansible.builtin.shell: | ls -1 '{{ genvm_pacman_hook_git_base_dir }}' - name: 'If Arch Linux remove unneeded branches of repo for pacman hook for ZFS dataset snapshots' when: 'item != genvm_pacman_hook_git_branch and ansible_facts[''os_family''] | lower == ''archlinux''' loop_control: label: 'If unneeded delete branch ''{{ item }}''' loop: '{{ genvm_pacman_hook_branches_actual.stdout_lines }}' ansible.builtin.file: path: '{{ genvm_pacman_hook_git_base_dir }}/{{ item }}' state: 'absent' - name: 'If Arch Linux create symlinks to repo for pacman hook for ZFS dataset snapshots' when: 'ansible_facts[''os_family''] | lower == ''archlinux''' loop_control: loop_var: 'genvm_pacman_hook_symlink' label: 'Create symlink to ''{{ genvm_pacman_hook_symlink.target | basename }}''' loop: - { target: '{{ genvm_pacman_hook_git_base_dir }}/{{ genvm_pacman_hook_git_branch }}/pacman-zfs-snapshot.sh', symlink: '/usr/local/bin/pacman-zfs-snapshot' } - { target: '{{ genvm_pacman_hook_git_base_dir }}/{{ genvm_pacman_hook_git_branch }}/pacman-zfs-snapshot-install.hook', symlink: '/usr/share/libalpm/hooks/00-pacman-zfs-snapshot-install.hook' } - { target: '{{ genvm_pacman_hook_git_base_dir }}/{{ genvm_pacman_hook_git_branch }}/pacman-zfs-snapshot-remove.hook', symlink: '/usr/share/libalpm/hooks/00-pacman-zfs-snapshot-remove.hook' } - { target: '{{ genvm_pacman_hook_git_base_dir }}/{{ genvm_pacman_hook_git_branch }}/pacman-zfs-snapshot-upgrade.hook', symlink: '/usr/share/libalpm/hooks/00-pacman-zfs-snapshot-upgrade.hook' } - { target: '{{ genvm_pacman_hook_git_base_dir }}/{{ genvm_pacman_hook_git_branch }}/pacman-zfs-snapshot.conf', symlink: '/etc/pacman-zfs-snapshot.conf' } ansible.builtin.file: src: '{{ genvm_pacman_hook_symlink.target }}' dest: '{{ genvm_pacman_hook_symlink.symlink }}' state: 'link' force: true - name: 'If Arch Linux get list of datasets' when: 'ansible_facts[''os_family''] | lower == ''archlinux''' register: 'genvm_pacman_hook_auto_snapshot_datasets_list' changed_when: false ansible.builtin.shell: | zfs list -H -o name - name: 'If Arch Linux check current state of auto-snapshot marker on datasets' when: 'ansible_facts[''os_family''] | lower == ''archlinux''' register: 'genvm_pacman_hook_auto_snapshot_datasets_actual' changed_when: false loop_control: loop_var: 'dataset' label: 'Check if dataset ''{{ dataset }}'' is marked for auto-snapshotting' loop: '{{ genvm_pacman_hook_auto_snapshot_datasets_list.stdout_lines }}' ansible.builtin.shell: | zfs get -H -o value space.quico:auto-snapshot '{{ dataset }}' - name: 'If Arch Linux mark ZFS datasets for auto-snapshotting' when: 'genvm_pacman_hook_auto_snapshot_datasets_actual[''results''][i][''stdout_lines''] | first != ''true'' and dataset in genvm_pacman_hook_auto_snapshot_datasets and ansible_facts[''os_family''] | lower == ''archlinux''' loop_control: loop_var: 'dataset' index_var: 'i' label: 'If not marked for auto-snapshotting - {% if genvm_pacman_hook_auto_snapshot_datasets_actual[''results''][i][''stdout_lines''] | first != ''true'' and dataset in genvm_pacman_hook_auto_snapshot_datasets %}⚠️{% else %}✅{% endif %} expected {% if dataset in genvm_pacman_hook_auto_snapshot_datasets %}yes{% else %} no{% endif %}/was actually {% if genvm_pacman_hook_auto_snapshot_datasets_actual[''results''][i][''stdout_lines''] | first != ''true'' %} no{% else %}yes{% endif %} - mark ZFS dataset ''{{ dataset }}''' loop: '{{ genvm_pacman_hook_auto_snapshot_datasets_list.stdout_lines }}' ansible.builtin.shell: | zfs set space.quico:auto-snapshot=true '{{ dataset }}' - name: 'If Arch Linux unmark ZFS datasets for auto-snapshotting' when: 'genvm_pacman_hook_auto_snapshot_datasets_actual[''results''][i][''stdout_lines''] | first == ''true'' and dataset not in genvm_pacman_hook_auto_snapshot_datasets and ansible_facts[''os_family''] | lower == ''archlinux''' loop_control: loop_var: 'dataset' index_var: 'i' label: 'If incorrectly marked for auto-snapshotting - {% if genvm_pacman_hook_auto_snapshot_datasets_actual[''results''][i][''stdout_lines''] | first == ''true'' and dataset not in genvm_pacman_hook_auto_snapshot_datasets %}⚠️{% else %}✅{% endif %} expected {% if dataset not in genvm_pacman_hook_auto_snapshot_datasets %} no{% else %}yes{% endif %}/was actually {% if genvm_pacman_hook_auto_snapshot_datasets_actual[''results''][i][''stdout_lines''] | first == ''true'' %}yes{% else %} no{% endif %} - unmark ZFS dataset ''{{ dataset }}''' loop: '{{ genvm_pacman_hook_auto_snapshot_datasets_list.stdout_lines }}' ansible.builtin.shell: | zfs inherit space.quico:auto-snapshot '{{ dataset }}'