Refactor Docker backups into modular pipeline
This commit is contained in:
1 parent
3ba4b7f738
commit
261e88f5dc
12 files changed
+480
-848
No files matched your search
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
SCRIPT_ROOT="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd -P)"
|
||||
ENV_FILE="${DOCKERBACKUP_ENV:-$SCRIPT_ROOT/.env}"
|
||||
|
||||
SOURCE_BASE_DIR="/dockervolumes"
|
||||
BACKUP_ROOT="/dockerbackups"
|
||||
CONTAINERS_FILE="$SCRIPT_ROOT/containers.txt"
|
||||
BACKUP_HOSTNAME="$(hostname -s)"
|
||||
BACKUP_METHODS="rclone smb"
|
||||
KEEP_COUNT=5
|
||||
PULL_IMAGES=1
|
||||
START_TIMEOUT=90
|
||||
WAIT_INTERVAL=3
|
||||
START_RETRIES=1
|
||||
LOCK_FILE="/run/lock/zorruno-docker-backup.lock"
|
||||
|
||||
RCLONE_ENABLED=0
|
||||
RCLONE_REMOTE=""
|
||||
RCLONE_EXTRA_ARGS=""
|
||||
SMB_ENABLED=0
|
||||
SMB_MOUNT=""
|
||||
SMB_HOST_SUBDIR=1
|
||||
SMB_RSYNC_ARGS="-a"
|
||||
|
||||
if [[ -f "$ENV_FILE" ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1090
|
||||
. "$ENV_FILE"
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Ease migration from the original prune script's .env names.
|
||||
if [[ -n "${SOURCE_DIR:-}" && "$BACKUP_ROOT" == "/dockerbackups" ]]; then
|
||||
BACKUP_ROOT="$SOURCE_DIR"
|
||||
fi
|
||||
|
||||
timestamp() { date '+%F %T'; }
|
||||
log() { printf '%s [%s] %s\n' "$(timestamp)" "$1" "$2" >&2; }
|
||||
die() { log ERROR "$1"; exit "${2:-1}"; }
|
||||
|
||||
is_true() {
|
||||
case "${1,,}" in
|
||||
1|true|yes|on|enabled) return 0 ;;
|
||||
*) return 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
require_command() {
|
||||
command -v "$1" >/dev/null 2>&1 || die "Required command not found: $1" 3
|
||||
}
|
||||
|
||||
require_positive_integer() {
|
||||
[[ "$2" =~ ^[1-9][0-9]*$ ]] || die "$1 must be a positive integer (received: $2)" 2
|
||||
}
|
||||
|
||||
resolve_path() {
|
||||
if [[ "$1" = /* ]]; then printf '%s\n' "$1"; else printf '%s/%s\n' "$SCRIPT_ROOT" "$1"; fi
|
||||
}
|
||||
|
||||
run_id() { date '+%Y-%m-%d_%H-%M-%S'; }
|
||||
Reference in new issue
Block a user