fix(restore): generate minimal authelia smoke config

This commit is contained in:
2026-06-03 08:04:59 +02:00
parent cacf77bfb0
commit 440000c085
3 changed files with 52 additions and 33 deletions
+44 -25
View File
@@ -5,11 +5,11 @@ set -euo pipefail
#
# Nicht-destruktiver Restore-Smoke-Test fuer Authelia.
# - extrahiert die Authelia-Config aus dem produktiven Borg-Archiv
# - patcht in einer Restore-Lab-Kopie der configuration.yml die
# externen Abhaengigkeiten (storage = lokales Test-Postgres,
# notifier = Filesystem-Notifier, identity_validation auf Test-Werte)
# - erzeugt eine minimale Test-Konfiguration, die restaurierte Begleitdateien
# wie users_database.yml nutzt, aber produktive externe Abhaengigkeiten
# durch Test-Backends ersetzt
# - importiert optional den shared-Postgres-Dump fuer Authelia
# - validiert die gepatchte Konfiguration mit `authelia config validate`
# - validiert die Test-Konfiguration mit `authelia config validate`
# - startet einen isolierten Authelia-Container ohne Traefik
# - prueft den HTTP-Health-Endpunkt
# - bereinigt anschliessend
@@ -112,10 +112,10 @@ if borg_extract "/restore/authelia-extract" "local/borg-dumps/latest/postgresql1
fi
fi
# Stufe 3: configuration.yml im Restore-Lab gezielt fuer den Test sanitizen.
# Wir entfernen produktive Top-Level-Bloecke, die im Test andere Backends
# brauchen, und haengen danach Test-Definitionen an. So verlassen wir uns
# nicht darauf, dass ein Overlay alte Map-Keys wie notifier.smtp loescht.
# Stufe 3: Minimale Test-Konfiguration erzeugen.
# Die restaurierte Originalkonfig bleibt als Diagnosematerial erhalten. Der
# Smoke nutzt bewusst eine neu geschriebene Test-Config, damit keine produktiven
# Blocks (SMTP, echtes Postgres, Session/JWT-Altkeys) hineinmergen koennen.
ORIGINAL_CONFIG_FILE="$RESTORED_CONFIG_DIR/configuration.yml"
TEST_CONFIG_FILE="$TEST_CONFIG_DIR/configuration.yml"
if [ ! -f "$ORIGINAL_CONFIG_FILE" ]; then
@@ -124,33 +124,52 @@ if [ ! -f "$ORIGINAL_CONFIG_FILE" ]; then
fi
# Kopiere alle Begleitdateien (z. B. users_database.yml) in einen separaten
# Runtime-Mount. Die produktive configuration.yml selbst wird dort durch die
# sanitizte Testkonfiguration ersetzt, damit Authelia keine Default-Config mit
# produktivem notifier.smtp nachladen kann.
# Runtime-Mount. configuration.yml wird danach vollstaendig neu geschrieben.
cp -a "$RESTORED_CONFIG_DIR/." "$TEST_CONFIG_DIR/"
cp "$ORIGINAL_CONFIG_FILE" "$RESTORED_CONFIG_DIR/configuration.yml.original"
# Entferne produktive Blocks, die der Restore-Smoke bewusst ersetzt.
awk '
/^[A-Za-z_][A-Za-z0-9_]*:/ {
key = $0
sub(/:.*/, "", key)
skip = (key == "storage" || key == "notifier" || key == "session" || key == "identity_validation" || key == "jwt_secret")
}
!skip { print }
' "$ORIGINAL_CONFIG_FILE" > "$TEST_CONFIG_FILE"
cat > "$TEST_CONFIG_FILE" <<'YAML'
---
# Minimal-Konfiguration nur fuer den Restore-Smoke.
cat >> "$TEST_CONFIG_FILE" <<'YAML'
theme: dark
# Restore-Smoke-Test-Backends. Produktive externe Abhaengigkeiten sind oben
# entfernt und werden hier mit isolierten Test-Werten ersetzt.
server:
address: tcp://0.0.0.0:9091
log:
level: info
authentication_backend:
file:
path: /config/users_database.yml
password:
algorithm: argon2id
iterations: 3
key_length: 32
salt_length: 16
memory: 65536
parallelism: 4
access_control:
default_policy: bypass
regulation:
max_retries: 3
find_time: 2m
ban_time: 5m
totp:
issuer: kaleschke.info
period: 30
skew: 1
storage:
postgres:
address: tcp://restoretest-authelia-postgres:5432
database: authelia
username: authelia
# Passwort kommt ueber AUTHELIA_STORAGE_POSTGRES_PASSWORD ENV
# Passwort kommt ueber AUTHELIA_STORAGE_POSTGRES_PASSWORD ENV.
notifier:
disable_startup_check: true
@@ -207,7 +226,7 @@ if [ "$dump_available" -eq 1 ]; then
dump_status="restored"
fi
# Stufe 6: config validate im Container-Kontext, gegen sanitizte Test-Config
# Stufe 6: config validate im Container-Kontext, gegen minimale Test-Config
validate_status="ok"
if ! docker run --rm \
-e AUTHELIA_SESSION_SECRET=restoretest-authelia-session-secret-placeholder-32 \