From d761e618099be11db2859b83e8756cc5ab1557a8 Mon Sep 17 00:00:00 2001 From: Erich Blume Date: Tue, 13 Jan 2026 22:50:28 -0800 Subject: [PATCH] Add borgmatic role to ansible playbook Manages scheduled LaunchAgent for daily backups at 2:00 AM. Borgmatic itself is installed via mise (pipx), not managed by ansible. Co-Authored-By: Claude Opus 4.5 --- ansible/playbooks/indri.yml | 1 + ansible/roles/borgmatic/defaults/main.yml | 7 +++++ ansible/roles/borgmatic/handlers/main.yml | 5 +++ ansible/roles/borgmatic/tasks/main.yml | 16 ++++++++++ .../borgmatic/templates/borgmatic.plist.j2 | 31 +++++++++++++++++++ 5 files changed, 60 insertions(+) create mode 100644 ansible/roles/borgmatic/defaults/main.yml create mode 100644 ansible/roles/borgmatic/handlers/main.yml create mode 100644 ansible/roles/borgmatic/tasks/main.yml create mode 100644 ansible/roles/borgmatic/templates/borgmatic.plist.j2 diff --git a/ansible/playbooks/indri.yml b/ansible/playbooks/indri.yml index bd2ef9a..820b929 100644 --- a/ansible/playbooks/indri.yml +++ b/ansible/playbooks/indri.yml @@ -5,3 +5,4 @@ - prometheus - grafana - kiwix + - borgmatic diff --git a/ansible/roles/borgmatic/defaults/main.yml b/ansible/roles/borgmatic/defaults/main.yml new file mode 100644 index 0000000..1727c48 --- /dev/null +++ b/ansible/roles/borgmatic/defaults/main.yml @@ -0,0 +1,7 @@ +--- +borgmatic_config: /Users/erichblume/.config/borgmatic/config.yaml +borgmatic_log_dir: /Users/erichblume/Library/Logs + +# Schedule: runs daily at 2:00 AM +borgmatic_schedule_hour: 2 +borgmatic_schedule_minute: 0 diff --git a/ansible/roles/borgmatic/handlers/main.yml b/ansible/roles/borgmatic/handlers/main.yml new file mode 100644 index 0000000..da0ce60 --- /dev/null +++ b/ansible/roles/borgmatic/handlers/main.yml @@ -0,0 +1,5 @@ +--- +- name: reload borgmatic + ansible.builtin.shell: | + launchctl unload ~/Library/LaunchAgents/mcquack.eblume.borgmatic.plist 2>/dev/null || true + launchctl load ~/Library/LaunchAgents/mcquack.eblume.borgmatic.plist diff --git a/ansible/roles/borgmatic/tasks/main.yml b/ansible/roles/borgmatic/tasks/main.yml new file mode 100644 index 0000000..16d8d05 --- /dev/null +++ b/ansible/roles/borgmatic/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# Note: borgmatic is installed via mise (pipx), not managed here. +# This role manages only the scheduled LaunchAgent. + +- name: Deploy borgmatic LaunchAgent plist + ansible.builtin.template: + src: borgmatic.plist.j2 + dest: ~/Library/LaunchAgents/mcquack.eblume.borgmatic.plist + mode: '0644' + notify: reload borgmatic + +- name: Ensure borgmatic LaunchAgent is loaded + ansible.builtin.command: launchctl load ~/Library/LaunchAgents/mcquack.eblume.borgmatic.plist + register: launchctl_load + changed_when: launchctl_load.rc == 0 + failed_when: false diff --git a/ansible/roles/borgmatic/templates/borgmatic.plist.j2 b/ansible/roles/borgmatic/templates/borgmatic.plist.j2 new file mode 100644 index 0000000..fedd9de --- /dev/null +++ b/ansible/roles/borgmatic/templates/borgmatic.plist.j2 @@ -0,0 +1,31 @@ + + + + + + KeepAlive + + Label + mcquack.eblume.borgmatic + ProgramArguments + + borgmatic + --config + {{ borgmatic_config }} + create + + RunAtLoad + + StandardErrorPath + {{ borgmatic_log_dir }}/mcquack.borgmatic.err.log + StandardOutPath + {{ borgmatic_log_dir }}/mcquack.borgmatic.out.log + StartCalendarInterval + + Hour + {{ borgmatic_schedule_hour }} + Minute + {{ borgmatic_schedule_minute }} + + +