| render_caddyfile |
function |
py |
infra |
1.1.0 |
pure |
def render_caddyfile(services: list[dict], dashboard: dict | None = None) -> str |
Parte del sistema local_hub: transforma una lista de servicios normalizados en el texto de un fragmento de Caddyfile que mapea cada subdominio *.localhost a su puerto local via reverse_proxy HTTP plano (loopback, sin TLS). Cada servicio es un dict con subdomain (str) y port (int); el resto de claves se ignoran. Los bloques de servicio se ordenan por subdominio alfabetico para que la salida sea estable y reproducible (clave para diffs y tests). Un dashboard opcional emite su bloque PRIMERO porque es la pagina principal. Ignora servicios sin subdomain o sin port (los salta, no lanza) y no deduplica. Pura: solo stdlib, sin I/O ni red, determinista. |
| local-hub |
| caddy |
| caddyfile |
| reverse-proxy |
| infra |
| python |
|
|
|
|
false |
|
|
| name |
desc |
| services |
lista de dicts de servicio normalizados. Cada uno debe tener al menos subdomain (str, sin el sufijo .localhost) y port (int, puerto local). Otras claves se ignoran. Los servicios sin subdomain o sin port se saltan silenciosamente. No se deduplica: eso es trabajo del discover. |
|
| name |
desc |
| dashboard |
dict opcional {subdomain, port} para la pagina principal del hub (ej. {"subdomain": "home", "port": 8585}). Si se pasa, su bloque va el primero de la salida. None = no se emite bloque de dashboard. Si le falta subdomain o port, se ignora igual que un servicio invalido. |
|
|
string con el Caddyfile completo: empieza por una cabecera de comentario (# Generado por render_caddyfile_py_infra ...), luego el bloque del dashboard si aplica, y despues los bloques de servicio ordenados alfabeticamente por subdominio. Cada bloque es 'http://<subdomain>.localhost {\n reverse_proxy 127.0.0.1:<port>\n}\n' con 4 espacios de indentacion. La salida termina con un unico \n. |
true |
| test_golden_dos_servicios_ordenados |
| test_dashboard_va_primero |
| test_lista_vacia_solo_cabecera |
| test_servicio_sin_port_se_ignora |
| test_servicio_sin_subdomain_se_ignora |
| test_rewrite_host_emite_header_up |
| test_rewrite_host_ausente_o_falso_no_reescribe |
|
python/functions/infra/render_caddyfile_test.py |
python/functions/infra/render_caddyfile.py |