66 lines
1.4 KiB
Bash
Executable File
66 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# === CONFIG ===
|
|
REPO="/backup/borgrepo"
|
|
export BORG_PASSPHRASE
|
|
BORG_PASSPHRASE="$(cat /app/host_vars/repokey)"
|
|
HOSTS_FILE="$(dirname "$0")/host_vars/hosts"
|
|
TIMESTAMP="$(date +%Y-%m-%dT%H%M%S)"
|
|
|
|
# === BUILD SOURCE LIST ===
|
|
SOURCES=()
|
|
|
|
while read -r host; do
|
|
[[ -z "$host" || "$host" =~ ^# ]] && continue
|
|
SOURCES+=("${host}:/BACKUP/")
|
|
done < "$HOSTS_FILE"
|
|
|
|
if [[ ${#SOURCES[@]} -eq 0 ]]; then
|
|
echo "ERROR: No hosts found in $HOSTS_FILE"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Backing up hosts:"
|
|
printf ' - %s\n' "${SOURCES[@]}"
|
|
|
|
# === CREATE BACKUP PER HOST ===
|
|
FAILED_HOSTS=()
|
|
|
|
for src in "${SOURCES[@]}"; do
|
|
HOST="${src%%:*}"
|
|
ARCHIVE="${HOST}-backup-${TIMESTAMP}"
|
|
echo "--- Backing up $HOST ---"
|
|
|
|
borg create \
|
|
"$REPO::$ARCHIVE" \
|
|
"$src" \
|
|
--stats \
|
|
--compression lz4 || {
|
|
echo "WARNING: Failed to back up $HOST"
|
|
FAILED_HOSTS+=("$HOST")
|
|
}
|
|
done
|
|
|
|
# === RETENTION POLICY (per host) ===
|
|
echo "Applying retention policy..."
|
|
|
|
for src in "${SOURCES[@]}"; do
|
|
HOST="${src%%:*}"
|
|
borg prune \
|
|
"$REPO" \
|
|
--keep-daily=7 \
|
|
--keep-weekly=8 \
|
|
--glob-archives "${HOST}-backup-*" \
|
|
--stats
|
|
done
|
|
|
|
# === FINAL REPORT ===
|
|
if [[ ${#FAILED_HOSTS[@]} -gt 0 ]]; then
|
|
echo "DONE WITH ERRORS — Failed hosts:"
|
|
printf ' - %s\n' "${FAILED_HOSTS[@]}"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Done: all hosts backed up at $TIMESTAMP"
|