Files
fn_registry/python/functions/pipelines/refresh_local_hub.md
T
egutierrez 32c7336bf6 feat(infra): auto-commit con 56 cambios
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-21 14:22:55 +02:00

4.1 KiB

name, kind, lang, domain, purity, version, signature, description, tags, uses_functions, uses_types, returns, returns_optional, error_type, imports, tested, tests, test_file_path, file_path, params, output
name kind lang domain purity version signature description tags uses_functions uses_types returns returns_optional error_type imports tested tests test_file_path file_path params output
refresh_local_hub pipeline py pipelines impure 1.0.0 def refresh_local_hub(manifest_path: str | None = None, reload: bool = True) -> dict Orquesta el refresco del sistema local_hub: descubre los servicios locales, regenera el fragmento de Caddyfile y la config de Glance, recarga Caddy (admin API) y reinicia la user-unit glance. Compone discover_local_services + render_caddyfile + render_glance_config. Lo corre el dag_engine a diario y tambien el usuario a mano.
local-hub
pipelines
pipeline
caddy
glance
infra
dashboard
discover_local_services_py_infra
render_caddyfile_py_infra
render_glance_config_py_infra
false error_go_core
pyyaml
true
compone las tres funciones del registry y escribe ambas configs
la config completa de Glance generada es YAML parseable
con reload=False no se llama a subprocess.run
con reload=True se invoca caddy reload y systemctl --user restart glance
el dict de retorno tiene todas las claves del contrato
python/functions/pipelines/refresh_local_hub_test.py python/functions/pipelines/refresh_local_hub.py
name desc
manifest_path Ruta al manifiesto YAML del local_hub. Si es None se usa <RAIZ>/apps/local_hub/local_services.yaml (RAIZ derivada de FN_REGISTRY_ROOT o del path del modulo).
name desc
reload Si True recarga Caddy (admin API localhost:2019, sin sudo) y reinicia la user-unit glance (sin sudo). Si False solo regenera las configs y no toca servicios.
dict {total, up, down, caddy_path, glance_path, reloaded, caddy_reload_rc, glance_restart_rc, services:[{name,subdomain,port,up}, ...]}

Ejemplo

./fn run refresh_local_hub

Sin recargar servicios (solo regenera las configs):

$HOME/fn_registry/python/.venv/bin/python3 \
  python/functions/pipelines/refresh_local_hub.py --no-reload

Desde Python:

from pipelines.refresh_local_hub import refresh_local_hub

r = refresh_local_hub(reload=True)
print(r)
# {"total": 8, "up": 6, "down": 2, "caddy_path": "/etc/caddy/conf.d/local_hub.caddy",
#  "glance_path": ".../apps/local_hub/glance/glance.yml", "reloaded": True,
#  "caddy_reload_rc": 0, "glance_restart_rc": 0, "services": [...]}

Cuando usarla

Cuando cambien los servicios locales expuestos como subdominios *.localhost (alta/baja de un servicio en el manifiesto, o un service nuevo del registry con bloque service:) y quieras que Caddy y el dashboard Glance reflejen el estado actual. Es el paso function: que el dag_engine corre a diario para mantener el local_hub sincronizado, y el comando que lanzas a mano tras editar apps/local_hub/local_services.yaml.

Gotchas

  • Impura: escribe en /etc/caddy/conf.d/local_hub.caddy via ACL, no via sudo. El usuario debe tener permiso de escritura ahi (ACL ya configurada en este PC). Sin la ACL, el open(..., "w") lanza PermissionError.
  • Recarga Caddy por su admin API (caddy reload habla con localhost:2019), no reinicia el servicio: requiere que Caddy este corriendo con la admin API activa. Si Caddy no esta levantado, caddy_reload_rc queda en un valor != 0 (o -1 si el binario falla) pero el pipeline NO lanza.
  • Reinicia la user-unit glance (systemctl --user restart glance), no la system-unit: requiere que la user-unit glance este instalada y el bus de usuario disponible. Si falta, glance_restart_rc refleja el fallo sin abortar.
  • Valida el YAML de Glance antes de escribir: si render_glance_config produjera YAML invalido, el pipeline lanza RuntimeError con mensaje claro y no escribe el archivo (fail-fast).
  • Raiz dinamica: la raiz del registry se deriva de FN_REGISTRY_ROOT o del path del modulo; nunca se hardcodea ningun /home/<user>.
  • reload=False no toca ningun servicio: util para previsualizar las configs generadas sin recargar Caddy ni reiniciar Glance (lo que hace el test).

Capability growth log

(sin entradas — v1.0.0 inicial)