Files
fn_registry/functions/infra/generate_traefik_dynamic.go
egutierrez 750b7abcd5 chore: auto-commit (97 archivos)
- .claude/CLAUDE.md
- .claude/agents/fn-recopilador/SKILL.md
- .claude/rules/INDEX.md
- .claude/rules/cpp_apps.md
- bash/functions/infra/build_cpp_windows.sh
- cpp/CMakeLists.txt
- cpp/PATTERNS.md
- cpp/framework/app_base.cpp
- cpp/framework/app_base.h
- dev/issues/README.md
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 18:11:24 +02:00

90 lines
2.6 KiB
Go

package infra
import (
"fmt"
"strings"
)
// GenerateTraefikDynamic 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.
// Determinista: dado el mismo TraefikDynamicConfig siempre produce el mismo YAML.
func GenerateTraefikDynamic(cfg TraefikDynamicConfig) string {
certResolver := cfg.CertResolver
if certResolver == "" {
certResolver = "letsencrypt"
}
// Build middleware lists
httpsMiddlewares := []string{}
if cfg.BasicAuthLine != "" {
httpsMiddlewares = append(httpsMiddlewares, fmt.Sprintf("%s-auth", cfg.Name))
}
if cfg.EnableGzip {
httpsMiddlewares = append(httpsMiddlewares, fmt.Sprintf("%s-gzip", cfg.Name))
}
var b strings.Builder
fmt.Fprintf(&b, "http:\n")
fmt.Fprintf(&b, " routers:\n")
// HTTP router (redirect only)
fmt.Fprintf(&b, " %s-http:\n", cfg.Name)
fmt.Fprintf(&b, " rule: \"Host(`%s`)\"\n", cfg.Domain)
fmt.Fprintf(&b, " entryPoints:\n")
fmt.Fprintf(&b, " - \"http\"\n")
fmt.Fprintf(&b, " middlewares:\n")
fmt.Fprintf(&b, " - \"%s-redirect\"\n", cfg.Name)
fmt.Fprintf(&b, " service: \"%s-service\"\n", cfg.Name)
fmt.Fprintf(&b, "\n")
// HTTPS router
fmt.Fprintf(&b, " %s-https:\n", cfg.Name)
fmt.Fprintf(&b, " rule: \"Host(`%s`)\"\n", cfg.Domain)
fmt.Fprintf(&b, " entryPoints:\n")
fmt.Fprintf(&b, " - \"https\"\n")
if len(httpsMiddlewares) > 0 {
fmt.Fprintf(&b, " middlewares:\n")
for _, mw := range httpsMiddlewares {
fmt.Fprintf(&b, " - \"%s\"\n", mw)
}
}
fmt.Fprintf(&b, " service: \"%s-service\"\n", cfg.Name)
fmt.Fprintf(&b, " tls:\n")
fmt.Fprintf(&b, " certResolver: %s\n", certResolver)
fmt.Fprintf(&b, "\n")
// Services
fmt.Fprintf(&b, " services:\n")
fmt.Fprintf(&b, " %s-service:\n", cfg.Name)
fmt.Fprintf(&b, " loadBalancer:\n")
fmt.Fprintf(&b, " servers:\n")
fmt.Fprintf(&b, " - url: \"%s\"\n", cfg.UpstreamURL)
fmt.Fprintf(&b, "\n")
// Middlewares
fmt.Fprintf(&b, " middlewares:\n")
// redirect always present
fmt.Fprintf(&b, " %s-redirect:\n", cfg.Name)
fmt.Fprintf(&b, " redirectScheme:\n")
fmt.Fprintf(&b, " scheme: \"https\"\n")
// auth only if BasicAuthLine provided
if cfg.BasicAuthLine != "" {
fmt.Fprintf(&b, " %s-auth:\n", cfg.Name)
fmt.Fprintf(&b, " basicAuth:\n")
fmt.Fprintf(&b, " users:\n")
fmt.Fprintf(&b, " - \"%s\"\n", cfg.BasicAuthLine)
}
// gzip only if enabled
if cfg.EnableGzip {
fmt.Fprintf(&b, " %s-gzip:\n", cfg.Name)
fmt.Fprintf(&b, " compress: true\n")
}
return b.String()
}