Merge branch 'hooks' into 'master'

post_run and pre_run hook support

See merge request infra/ansible/roles/backup-client!1
This commit is contained in:
Julian 2021-12-11 01:31:50 +00:00
commit 7005932162
3 changed files with 40 additions and 12 deletions

View file

@ -100,4 +100,12 @@ exclude_files: {}
# Only supportet in restic based backups
# Ignored in vm-via-hypervisor mode
include_files: {}
# Run one or more hooks before and after each (standalone) backup run
# Items are executed in bash in their own subshell
hooks:
pre_run:
- mysqldump --all-databases > /var/backups/mysql-backup.sql
post_run:
- rm /var/backups/mysql-backup.sql
```

View file

@ -48,3 +48,6 @@ backups:
'/root/.ansible/*': true
include_files:
'/': true
hooks:
pre_run: []
post_run: []

View file

@ -3,11 +3,21 @@ set -euo pipefail
test -f "/etc/backup-client/enabled" || { echo "Standalone backup is disabled"; exit 0; }
{% if backup_backend == 'restic' %}
# restic backend
source /etc/backup-client/restic.env
{% if backups.hooks.pre_run %}
echo "Running pre_run hooks"
{% for cmd in backups.hooks.pre_run %}
( {{ cmd }} )
{% endfor %}
echo "Hooks done"
{% endif %}
restic backup \
{% if backup_backend == 'restic' %}
# Run restic in subshell to avoid leaking environment to post_run hooks
(
# restic backend
source /etc/backup-client/restic.env
restic backup \
{{ restic_combined_flags }} \
--verbose \
--exclude-caches \
@ -15,9 +25,16 @@ restic backup \
--exclude "${RESTIC_REPOSITORY}" \
--exclude-file "/etc/backup-client/exclude_files" \
--files-from "/etc/backup-client/include_files"
)
{% endif %}
{% if not backup_backend %}
echo "Noop, backup is handled external"
{% endif %}
{% if backups.hooks.post_run %}
echo "Running post_run hooks"
{% for cmd in backups.hooks.post_run %}
( {{ cmd }} )
{% endfor %}
echo "Hooks done"
{% endif %}