Files
athq-vm-management/templates/rsync-backup.sh.j2

68 lines
1.7 KiB
Django/Jinja

#!/bin/bash
set -eu
mkdir -p {{ hostname_base }}
cd {{ hostname_base }}
TYPE=""
if [ $# -ne 0 ]; then
TYPE=$1
fi
TEST=$(python3 -c "print(int('$TYPE' in ['size_changed', 'no_high_data', 'minimal', ''])^1)")
if [ $TEST -ne 0 ]; then
echo Bad Filter Option [$TYPE]
exit 1
fi
dest=./
for x in backup-*; do
test -d "$x" || continue
dest="../$x" # relative to destination directory
done
target="backup-$(date '+%Y-%m-%d-%H-%M-%S')"
target_tmp="partial-$target"
mkdir "$target_tmp"
rsync \
--verbose --itemize-changes --human-readable \
--archive --acls --xattrs --hard-links --sparse --numeric-ids \
--one-file-system \
--link-dest="$dest" \
--filter="merge ../rsync-filter-{{ hostname_base }}-${TYPE}.txt" \
root@{{ hostname }}:/ \
"$target_tmp"
RSYNC_SUCCESS=$?
mv "$target_tmp" "$target"
CONTENT_TYPE="Content-Type: application/json"
ASYNC_ICINGA_ADDRESS="https://async-icinga.atlantishq.de/"
SERVICE="backup_{{ hostname_base }}"
TOKEN="{{ token }}"
if [ $RSYNC_SUCCESS -eq 0 ]; then
{% if not backup_no_async_icinga %}
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"OK\", \"info\": \"\"}"
{% endif %}
# if size changed was copied save new size #
{% if not size_change_commands %}
echo No sizes to notifiy
{% endif %}
{% for cmd in size_change_commands %}
{{ cmd }}
{% endfor %}
else
{% if not backup_no_async_icinga %}
curl -H "${CONTENT_TYPE}" -X POST "${ASYNC_ICINGA_ADDRESS}" -d \
"{\"service\": \"${SERVICE}\", \"token\": \"${TOKEN}\", \"status\": \"CRITICAL\", \"info\": \"\"}"
{% endif %}
fi
cd ..