Oktett-Klasse .150-.199 (App-Services). Nautobot gibt damit .30/.31 an AGH frei. .157 ist gitea, deshalb nimmt redis .158. - Datenmigration ueber neues nautobot/tp45-ip-move.py: Nautobot verbietet das Aendern einer IP nach dem Anlegen -> anlegen/primary_ip4 umhaengen/ Altobjekt loeschen, in dieser Reihenfolge - Stack-Redeploy (PUT /api/stacks/203), Caddy-Backend, Core-Literal *24 ueber GC deployt (Plan 51a90e25) mit Wirksamkeitspruefung am Geraet - caddy/deploy.sh: push_verified() ersetzt den push||push-Fallback. `pct push` meldet Exit 0 AUCH wenn es die Quelle nicht lesen kann, der Fallback griff deshalb nie und `caddy validate` pruefte die ALTE Datei -> gruene Abnahme bei unveraendertem Zustand (Symptom: 502 bei gesundem Backend) - 39 Referenzen in 28 Dateien mitgezogen; lebende Doku nachgezogen (CLAUDE.md, ip-plan.md, cf-tunnel-mapping §0-Kopf, TP16.3/TP31-Prosa) - GC-Compliance 140/140, 0 Drifts Neue Funde (TP45-Prosa + CLAUDE.md): - Die Core-Adressliste `nautobot` wird von GC nirgends gerendert -> ein Recovery von null erzeugt einen Core, in den Nautobot nicht mehr per SSH kommt. Gleiche Klasse wie die fehlenden DHCP-Reservierungen. - Regel *24 (Literal) und *28 (Liste) sind Dubletten; der Literal steht bei 0 Paketen. Zusammenlegung bleibt offen. - gc-manual-plan.py: /api/extras/job-log-entries/ liefert 404 (Nautobot 3.x) -> bei gescheitertem Deploy fehlt die Fehlermeldung. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
57 lines
2.7 KiB
Bash
Executable File
57 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# TP31 — Caddyfile + DNS-Token in LXC 130 ausrollen.
|
|
#
|
|
# Das Token wird aus ~/.secrets/credentials.env gelesen und direkt in die
|
|
# Container-Env-Datei geschrieben. Es erscheint dabei NIE auf stdout und nie in
|
|
# einer Kommandozeile — dieselbe Regel wie bei `sshpass -e` (s. CLAUDE.md).
|
|
set -euo pipefail
|
|
|
|
PVE=${PVE:-root@10.40.20.100}
|
|
CTID=${CTID:-130}
|
|
HERE=$(cd "$(dirname "$0")" && pwd)
|
|
|
|
TOKEN=$(grep -m1 '^CF_DNS_API_TOKEN=' ~/.secrets/credentials.env 2>/dev/null | cut -d= -f2- || true)
|
|
if [ -z "${TOKEN}" ]; then
|
|
echo "FEHLER: CF_DNS_API_TOKEN fehlt in ~/.secrets/credentials.env" >&2
|
|
echo " Anlegen in Cloudflare: My Profile -> API Tokens -> Create Token," >&2
|
|
echo " Permission 'Zone : DNS : Edit', Zone Resources auf emsenhuber.net begrenzen." >&2
|
|
echo " NICHT das account-weite CF_API_TOKEN wiederverwenden." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# 🔴 `pct push` meldet Exit 0 AUCH wenn es die Quelle nicht lesen kann
|
|
# ("failed to open <src> for reading", rc=0 — live gemessen 2026-09-21).
|
|
# Ein `&&`/`||` hinter dem Push beweist deshalb NICHTS, und die anschliessende
|
|
# `caddy validate` validiert dann die ALTE Datei -> gruene Abnahme bei
|
|
# unveraendertem Zustand. Genau so ist der Nautobot-Umzug am 2026-09-21
|
|
# scheinbar gelandet, obwohl live noch die alte Backend-IP stand.
|
|
# Deshalb: Push + md5-Vergleich in EINEM Remote-Aufruf, der bei Abweichung
|
|
# hart abbricht. Gepusht wird nur der lokal bekannte Pfad — die frueheren
|
|
# `\$\$`/`$$`-Verrenkungen waren der Ausloeser.
|
|
push_verified() { # push_verified <quelle-auf-pve> <ziel-im-ct> <perms> <label>
|
|
local src=$1 dst=$2 perms=$3 label=$4
|
|
ssh "${PVE}" "set -e
|
|
pct push ${CTID} '${src}' '${dst}' --perms ${perms}
|
|
want=\$(md5sum '${src}' | cut -d' ' -f1)
|
|
got=\$(pct exec ${CTID} -- md5sum '${dst}' | cut -d' ' -f1)
|
|
rm -f '${src}'
|
|
if [ \"\$want\" != \"\$got\" ]; then
|
|
echo \"FEHLER: ${label} nicht gelandet (\$want != \$got)\" >&2; exit 1
|
|
fi
|
|
echo \" ${label} verifiziert (\$got)\""
|
|
}
|
|
|
|
echo "-> Caddyfile"
|
|
scp -q "${HERE}/Caddyfile" "${PVE}:/tmp/.caddyfile.$$"
|
|
push_verified "/tmp/.caddyfile.$$" "/etc/caddy/Caddyfile" 644 "Caddyfile"
|
|
|
|
echo "-> Token (maskiert: Laenge ${#TOKEN})"
|
|
printf 'CF_DNS_API_TOKEN=%s\n' "${TOKEN}" | ssh "${PVE}" "cat > /tmp/.cenv.$$ && chmod 600 /tmp/.cenv.$$"
|
|
push_verified "/tmp/.cenv.$$" "/etc/caddy/caddy.env" 600 "caddy.env"
|
|
|
|
echo "-> validate"
|
|
ssh "${PVE}" "pct exec ${CTID} -- sh -c 'set -a; . /etc/caddy/caddy.env; set +a; /usr/local/bin/caddy validate --config /etc/caddy/Caddyfile' 2>&1 | tail -3"
|
|
|
|
echo "-> reload/start"
|
|
ssh "${PVE}" "pct exec ${CTID} -- systemctl reload-or-restart caddy && sleep 3 && pct exec ${CTID} -- systemctl is-active caddy"
|