--- name: generate_traefik_dynamic kind: function lang: go domain: infra version: "1.0.0" purity: pure signature: "func GenerateTraefikDynamic(cfg TraefikDynamicConfig) string" description: "Genera el texto YAML de un traefik-dynamic.yml para el file provider de Traefik (Coolify). Replica el patron de apps/registry_api/traefik-dynamic.yml con routers HTTP/HTTPS, redirect, basicAuth opcional y gzip opcional." tags: [traefik, yaml, infra, deploy, generator, basicauth, tls, coolify] uses_functions: [] uses_types: [TraefikDynamicConfig_go_infra] returns: [] returns_optional: false error_type: "" imports: [fmt, strings] params: - name: cfg desc: "configuracion del dynamic config: nombre (prefix), dominio, upstream URL, linea htpasswd opcional, flag de gzip y cert resolver" output: "texto YAML completo del traefik-dynamic.yml listo para escribir a disco y recargar en Traefik" tested: true tests: - "render con auth y gzip" - "render sin auth" - "render sin gzip" - "certResolver custom" - "certResolver vacio usa letsencrypt por defecto" - "snapshot YAML completo replica patron registry_api" test_file_path: "functions/infra/generate_traefik_dynamic_test.go" file_path: "functions/infra/generate_traefik_dynamic.go" --- ## Ejemplo ```go line, _ := BcryptHtpasswd("lucas", "s3cr3t", 10) cfg := TraefikDynamicConfig{ Name: "kanban", Domain: "kanban.organic-machine.com", UpstreamURL: "http://kanban:8421", BasicAuthLine: line, EnableGzip: true, CertResolver: "letsencrypt", } yaml := GenerateTraefikDynamic(cfg) os.WriteFile("apps/kanban/traefik-dynamic.yml", []byte(yaml), 0644) ``` ## Notas Funcion pura: dado el mismo `TraefikDynamicConfig` siempre produce el mismo YAML. Si `BasicAuthLine` es vacio se omite el router middleware `-auth` y la seccion `basicAuth`. Si `EnableGzip` es false se omite el middleware `-gzip`. El redirect HTTP→HTTPS siempre esta presente. `CertResolver` por defecto es `"letsencrypt"`. El output usa `$` simple (file provider), no `$$` (Docker labels). Combinar con `BcryptHtpasswd` para generar la linea de auth.