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>
This commit is contained in:
@@ -0,0 +1,89 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user