74 lines
1.6 KiB
Bash
Executable File
74 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
AUTOMATION_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
|
|
ENV_FILE="${ENV_FILE:-$AUTOMATION_DIR/.env}"
|
|
|
|
if [[ ! -f "$ENV_FILE" ]]; then
|
|
echo "Missing env file: $ENV_FILE" >&2
|
|
echo "Copy automation/.env.example to automation/.env and fill in real values first." >&2
|
|
exit 1
|
|
fi
|
|
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$ENV_FILE"
|
|
set +a
|
|
|
|
required_vars=(
|
|
SERENITY_BACKUP_HOST
|
|
SERENITY_BACKUP_ROOT
|
|
PD_APPDATA_ROOT
|
|
PD_DATABASES_ROOT
|
|
PD_TANK_DOCKER_ROOT
|
|
PD_DB_DUMP_ROOT
|
|
POSTGRES_CONTAINER
|
|
)
|
|
|
|
for var in "${required_vars[@]}"; do
|
|
if [[ -z "${!var:-}" ]]; then
|
|
echo "Required variable $var is empty in $ENV_FILE" >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
mkdir -p "$PD_DB_DUMP_ROOT"
|
|
|
|
DOCKER_BIN="${DOCKER_BIN:-/usr/bin/docker}"
|
|
SUDO_BIN="${SUDO_BIN:-/usr/bin/sudo}"
|
|
USE_SUDO_FOR_DOCKER="${USE_SUDO_FOR_DOCKER:-true}"
|
|
BACKUP_KNOWN_HOSTS="${BACKUP_KNOWN_HOSTS:-${HOME:-/root}/.ssh/known_hosts}"
|
|
|
|
if [[ ! -x "$DOCKER_BIN" ]]; then
|
|
echo "Docker binary not executable: $DOCKER_BIN" >&2
|
|
exit 1
|
|
fi
|
|
|
|
docker_cmd() {
|
|
if [[ "${EUID:-$(id -u)}" == "0" ]]; then
|
|
"$DOCKER_BIN" "$@"
|
|
elif [[ "$USE_SUDO_FOR_DOCKER" == "true" ]]; then
|
|
"$SUDO_BIN" -n "$DOCKER_BIN" "$@"
|
|
else
|
|
"$DOCKER_BIN" "$@"
|
|
fi
|
|
}
|
|
|
|
timestamp_utc() {
|
|
date -u +"%Y%m%dT%H%M%SZ"
|
|
}
|
|
|
|
ssh_args() {
|
|
local opts="-o BatchMode=yes -o StrictHostKeyChecking=accept-new -o UserKnownHostsFile=$BACKUP_KNOWN_HOSTS"
|
|
if [[ -n "${BACKUP_SSH_KEY:-}" ]]; then
|
|
printf '%s' "-i $BACKUP_SSH_KEY $opts"
|
|
else
|
|
printf '%s' "$opts"
|
|
fi
|
|
}
|
|
|
|
ssh_cmd() {
|
|
printf 'ssh %s' "$(ssh_args)"
|
|
}
|