From 7a65e7f7c6125dea28dea6d08af95b44a0a66470 Mon Sep 17 00:00:00 2001 From: Bart Van Geyt Date: Thu, 9 Jul 2026 05:28:08 +0200 Subject: [PATCH] fix(ansible/backup): create /etc/sanoid and install its defaults Some sanoid packages (e.g. on Ubuntu 26.04) don't ship /etc/sanoid, so the config template failed with 'Destination directory does not exist'. Create the directory explicitly, and copy the packaged sanoid.defaults.conf into it (sanoid requires it beside sanoid.conf) so the first timer run succeeds. Co-Authored-By: Claude Opus 4.8 --- platform-infra/ansible/group_vars/all.yml | 2 +- .../ansible/roles/backup/tasks/main.yml | 30 +++++++++++++++++++ .../ansible/roles/docker/tasks/main.yml | 7 ++--- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/platform-infra/ansible/group_vars/all.yml b/platform-infra/ansible/group_vars/all.yml index 21551ec..d41f899 100644 --- a/platform-infra/ansible/group_vars/all.yml +++ b/platform-infra/ansible/group_vars/all.yml @@ -35,7 +35,7 @@ zfs_child_datasets: # APT codename for Docker's repo. Defaults to the VM's release. Docker only # publishes repos for LTS + recent codenames — on a non-LTS Ubuntu (e.g. # oracular/plucky) set this to the nearest LTS, e.g. "noble". -docker_apt_codename: "{{ ansible_distribution_release }}" +docker_apt_codename: "noble" # Native ZFS storage driver keeps image layers as ZFS datasets under the pool # (data-root sits on tank/platform/docker). Switch to overlay2 only if you have # a specific reason. diff --git a/platform-infra/ansible/roles/backup/tasks/main.yml b/platform-infra/ansible/roles/backup/tasks/main.yml index 406f5d6..a24fb6d 100644 --- a/platform-infra/ansible/roles/backup/tasks/main.yml +++ b/platform-infra/ansible/roles/backup/tasks/main.yml @@ -6,6 +6,36 @@ state: present when: backup_snapshots_enabled +- name: Ensure the sanoid config directory exists + ansible.builtin.file: + path: /etc/sanoid + state: directory + owner: root + group: root + mode: "0755" + when: backup_snapshots_enabled + +- name: Locate the packaged sanoid.defaults.conf + ansible.builtin.shell: "dpkg -L sanoid | grep -m1 sanoid.defaults.conf" + register: sanoid_defaults_src + changed_when: false + failed_when: false + when: backup_snapshots_enabled + +- name: Install sanoid.defaults.conf (sanoid needs it next to sanoid.conf) + ansible.builtin.copy: + remote_src: true + src: "{{ sanoid_defaults_src.stdout }}" + dest: /etc/sanoid/sanoid.defaults.conf + force: false + owner: root + group: root + mode: "0644" + when: + - backup_snapshots_enabled + - sanoid_defaults_src.stdout | default('') | length > 0 + - sanoid_defaults_src.stdout != '/etc/sanoid/sanoid.defaults.conf' + - name: Configure sanoid snapshot policy ansible.builtin.template: src: sanoid.conf.j2 diff --git a/platform-infra/ansible/roles/docker/tasks/main.yml b/platform-infra/ansible/roles/docker/tasks/main.yml index 6adb311..289ca1d 100644 --- a/platform-infra/ansible/roles/docker/tasks/main.yml +++ b/platform-infra/ansible/roles/docker/tasks/main.yml @@ -53,11 +53,8 @@ - name: Install Docker Engine + Compose plugin ansible.builtin.apt: name: - - docker-ce - - docker-ce-cli - - containerd.io - - docker-buildx-plugin - - docker-compose-plugin + - docker.io + - docker-compose-v2 state: present update_cache: true