fix: make Caddy route upsert robust against missing/invalid routes
- Add --fail to the GET so a 404 (no 'hiy' server yet, stale volume) falls back to [] instead of passing error JSON to Python - Python now guards against non-list responses with try/except - Always re-append the dashboard catch-all route so it survives even when routes are rebuilt from scratch
This commit is contained in:
parent
a8b22d8e2d
commit
2e98ce957e
1 changed files with 14 additions and 6 deletions
|
|
@ -126,17 +126,25 @@ if curl --silent --fail "${CADDY_API}/config/" >/dev/null 2>&1; then
|
||||||
EOF
|
EOF
|
||||||
)
|
)
|
||||||
# Upsert the route for this app.
|
# Upsert the route for this app.
|
||||||
ROUTES=$(curl --silent "${CADDY_API}/config/apps/http/servers/hiy/routes" 2>/dev/null || echo "[]")
|
ROUTES=$(curl --silent --fail "${CADDY_API}/config/apps/http/servers/hiy/routes" 2>/dev/null || echo "[]")
|
||||||
# Remove existing route for the same host, then append the new one.
|
# Remove existing route for the same host, rebuild list, keep dashboard as catch-all.
|
||||||
UPDATED=$(echo "$ROUTES" | python3 -c "
|
UPDATED=$(echo "$ROUTES" | python3 -c "
|
||||||
import sys, json
|
import sys, json
|
||||||
routes = json.load(sys.stdin)
|
try:
|
||||||
|
routes = json.loads(sys.stdin.read())
|
||||||
|
if not isinstance(routes, list):
|
||||||
|
routes = []
|
||||||
|
except Exception:
|
||||||
|
routes = []
|
||||||
|
DASHBOARD = {'handle': [{'handler': 'reverse_proxy', 'upstreams': [{'dial': 'server:3000'}]}]}
|
||||||
new_host = '${APP_ID}.${DOMAIN_SUFFIX}'
|
new_host = '${APP_ID}.${DOMAIN_SUFFIX}'
|
||||||
|
# Keep host-matched routes that are NOT for this app
|
||||||
routes = [r for r in routes
|
routes = [r for r in routes
|
||||||
if not (isinstance(r, dict)
|
if r.get('match') and not any(
|
||||||
and any(isinstance(m, dict) and new_host in m.get('host', [])
|
isinstance(m, dict) and new_host in m.get('host', [])
|
||||||
for m in r.get('match', [])))]
|
for m in r.get('match', []))]
|
||||||
routes.insert(0, json.loads(sys.argv[1]))
|
routes.insert(0, json.loads(sys.argv[1]))
|
||||||
|
routes.append(DASHBOARD)
|
||||||
print(json.dumps(routes))
|
print(json.dumps(routes))
|
||||||
" "$ROUTE_JSON")
|
" "$ROUTE_JSON")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue