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