This commit is contained in:
oliver
2026-04-21 13:08:18 -03:00
parent ba5ad005a6
commit 1f08c66c78
+16 -23
View File
@@ -1,52 +1,46 @@
#!/usr/bin/env bash
set -euo pipefail
# === CONFIG ===
REPO="/backup/borgrepo"
export BORG_PASSPHRASE
BORG_PASSPHRASE="$(cat /app/host_vars/repokey)"
export BORG_RSH="ssh -o BatchMode=yes"
HOSTS_FILE="$(dirname "$0")/host_vars/hosts"
TIMESTAMP="$(date +%Y-%m-%dT%H%M%S)"
# === BUILD SOURCE LIST ===
SOURCES=()
HOSTS=()
while read -r host; do
[[ -z "$host" || "$host" =~ ^# ]] && continue
SOURCES+=("${host}:/BACKUP/")
HOSTS+=("$host")
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[@]}"
printf ' - %s\n' "${HOSTS[@]}"
# === CREATE BACKUP PER HOST ===
FAILED_HOSTS=()
for src in "${SOURCES[@]}"; do
HOST="${src%%:*}"
for HOST in "${HOSTS[@]}"; do
ARCHIVE="${HOST}-backup-${TIMESTAMP}"
echo "--- Backing up $HOST ---"
borg create \
# IMPORTANT: repo is LOCAL, source is REMOTE via SSH
if ! borg create \
"$REPO::$ARCHIVE" \
"$src" \
"$HOST:/BACKUP" \
--stats \
--compression lz4 || {
--compression lz4; then
echo "WARNING: Failed to back up $HOST"
FAILED_HOSTS+=("$HOST")
}
fi
done
# === RETENTION POLICY (per host) ===
echo "Applying retention policy..."
for src in "${SOURCES[@]}"; do
HOST="${src%%:*}"
for HOST in "${HOSTS[@]}"; do
borg prune \
"$REPO" \
--keep-daily=7 \
@@ -55,9 +49,8 @@ for src in "${SOURCES[@]}"; do
--stats
done
# === FINAL REPORT ===
if [[ ${#FAILED_HOSTS[@]} -gt 0 ]]; then
echo "DONE WITH ERRORS — Failed hosts:"
echo "DONE WITH ERRORS:"
printf ' - %s\n' "${FAILED_HOSTS[@]}"
exit 1
fi