role-service-generic_vm/tasks/archlinux-pacman-hook.yml

85 lines
5.6 KiB
YAML
Raw Permalink Normal View History

2025-04-03 00:12:58 +02:00
# 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 }}'