45 lines
1.3 KiB
Bash
45 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
# Vergleicht die Traefik dynamic File-Provider-Dateien aus dem Repo-Spiegel
|
|
# gegen die produktive Host-Dateiablage. Der Check ist read-only:
|
|
# rsync laeuft mit --dry-run und schreibt nichts.
|
|
#
|
|
# Aufruf-Defaults siehe Variablen unten. Aufruf typischerweise:
|
|
# bash services/traefik-dynamic-diff.sh
|
|
#
|
|
# Exit-Codes:
|
|
# 0 Repo und Host sind identisch
|
|
# 1 Drift festgestellt (rsync itemized output auf stdout)
|
|
# 2 Repo- oder Host-Verzeichnis fehlt
|
|
# 4 internes Werkzeug fehlt (rsync)
|
|
|
|
set -uo pipefail
|
|
|
|
TRAEFIK_DYNAMIC_REPO_DIR="${TRAEFIK_DYNAMIC_REPO_DIR:-/mnt/user/services/homelab-infra/traefik/dynamic}"
|
|
TRAEFIK_DYNAMIC_HOST_DIR="${TRAEFIK_DYNAMIC_HOST_DIR:-/mnt/user/appdata/traefik/dynamic}"
|
|
|
|
if ! command -v rsync >/dev/null 2>&1; then
|
|
echo "traefik-dynamic-diff: missing required command 'rsync'" >&2
|
|
exit 4
|
|
fi
|
|
|
|
if [ ! -d "$TRAEFIK_DYNAMIC_REPO_DIR" ]; then
|
|
echo "traefik-dynamic-diff: repo directory not found: $TRAEFIK_DYNAMIC_REPO_DIR" >&2
|
|
exit 2
|
|
fi
|
|
|
|
if [ ! -d "$TRAEFIK_DYNAMIC_HOST_DIR" ]; then
|
|
echo "traefik-dynamic-diff: host directory not found: $TRAEFIK_DYNAMIC_HOST_DIR" >&2
|
|
exit 2
|
|
fi
|
|
|
|
diff_output="$(rsync -rni --checksum --delete \
|
|
"$TRAEFIK_DYNAMIC_REPO_DIR"/ \
|
|
"$TRAEFIK_DYNAMIC_HOST_DIR"/)"
|
|
|
|
if [ -n "$diff_output" ]; then
|
|
printf '%s\n' "$diff_output"
|
|
exit 1
|
|
fi
|
|
|
|
exit 0
|