Files
semaphore/playbooks/borgmatic-backup.yml

58 lines
1.6 KiB
YAML

---
- name: Configure Borgmatic backup with deterministic offset
hosts: all
become: true
vars:
borgmatic_bin: /usr/local/bin/borgmatic
backup_hour: 2 # Base hour to run backups
backup_window: 1800 # 30 min window (in seconds)
borgmatic_config_dir: /etc/borgmatic
tasks:
- name: Ensure Borg and dependencies are present
package:
name:
- borgbackup
- python3-pip
state: present
- name: Ensure borgmatic is installed via pip
pip:
name: borgmatic
executable: pip3
- name: Create borgmatic config directory
file:
path: "{{ borgmatic_config_dir }}"
state: directory
owner: root
group: root
mode: '0755'
- name: Generate deterministic backup offset
set_fact:
backup_offset: >-
{{ (inventory_hostname | hash('md5') | int(base=16)) % backup_window }}
- name: Split offset into minutes and seconds
set_fact:
backup_offset_minutes: "{{ backup_offset // 60 }}"
backup_offset_seconds: "{{ backup_offset % 60 }}"
- name: Deploy borgmatic config
template:
src: borgmatic-config.yaml.j2
dest: "{{ borgmatic_config_dir }}/config.yaml"
owner: root
group: root
mode: '0600'
- name: Create cron job for borgmatic with offset
cron:
name: "Nightly borgmatic backup"
user: root
hour: "{{ backup_hour }}"
minute: "{{ backup_offset_minutes }}"
job: "sleep {{ backup_offset_seconds }} && {{ borgmatic_bin }} --verbosity 1"