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