ansible/roles/borg/templates/borgmatic.yml.j2
Sascha bc765668a6 sync: Inventory-Realabgleich + neue host_vars/roles/playbooks
Nachgezogener Arbeitsstand des Homelabs:
- neue host_vars (k3s-*, gluster-*, docmost, paperless, kometa, thelounge, satisfactory, wolfstack-vm)
- neue Rollen/Playbooks (net_watchdog, patchmon-agent, tc_ratelimit, sops-age, rotate-ssh-key, dns-doh, remove-postfix, checkrr-deploy)
- diverse Rollen-Updates (base, borg, dns_resolver, frp_client, hawser, nvidia)

Ausgeklammert (bleiben uncommittet): host_vars/docmost/vars.yml (Klartext-Token -> sollte vault-konform via vault_* referenziert werden).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 21:27:23 +02:00

54 lines
1.9 KiB
Django/Jinja

repositories:
- path: {{ borg_repo }}
label: storagebox
source_directories:
{% for path in backup_sources %}
- {{ path }}
{% endfor %}
ssh_command: ssh -i {{ borg_ssh_key }}
remote_path: {{ borg_remote_path }}
encryption_passphrase: "{{ borg_passphrase }}"
compression: {{ borg_compression }}
archive_name_format: '{{ inventory_hostname }}-{now:%Y-%m-%d_%H-%M}'
keep_daily: {{ borg_retention_daily }}
keep_weekly: {{ borg_retention_weekly }}
keep_monthly: {{ borg_retention_monthly }}
checks:
- name: repository
frequency: 2 weeks
- name: archives
frequency: 4 weeks
before_backup:
- echo "[$(date)] Starte Backup auf {{ inventory_hostname }}"
after_backup:
- curl -fsS -m 10 "https://status.guck.tv/api/push/borg-{{ inventory_hostname }}?status=up&msg=OK&ping=" || true
- >-
bash -c '
STATS=$(borgmatic info --archive latest --json 2>/dev/null | python3 -c "
import sys,json
d=json.load(sys.stdin)[0][\"archives\"][-1]
s=d.get(\"stats\",{})
print(json.dumps({
\"host\":\"{{ inventory_hostname }}\",
\"status\":\"ok\",
\"duration_sec\":int(s.get(\"duration\",0)),
\"original_size\":s.get(\"original_size\",0),
\"deduplicated_size\":s.get(\"deduplicated_size\",0),
\"compressed_size\":s.get(\"compressed_size\",0),
\"nfiles_new\":s.get(\"nfiles\",0)
}))" 2>/dev/null || echo "{\"host\":\"{{ inventory_hostname }}\",\"status\":\"ok\"}");
curl -fsS -m 10 -X POST -H "Content-Type: application/json" -d "$STATS" "http://10.1.1.111:9999/api/push" || true
'
on_error:
- curl -fsS -m 10 "https://status.guck.tv/api/push/borg-{{ inventory_hostname }}?status=down&msg=FEHLER&ping=" || true
- >-
curl -fsS -m 10 -X POST -H "Content-Type: application/json"
-d '{"host":"{{ inventory_hostname }}","status":"error","message":"Backup fehlgeschlagen"}'
"http://10.1.1.111:9999/api/push" || true