c
This commit is contained in:
+16
-23
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user