750b7abcd5
- .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>
90 lines
2.6 KiB
Go
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()
|
|
}
|