58 lines
1.6 KiB
YAML
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) | int }}
|
|
|
|
- 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: templates/borg/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"
|