diff --git a/coolify/proxy/caddy/service-man/caddy-sync.go b/coolify/proxy/caddy/service-man/caddy-sync.go index f65db45..ced6199 100644 --- a/coolify/proxy/caddy/service-man/caddy-sync.go +++ b/coolify/proxy/caddy/service-man/caddy-sync.go @@ -14,9 +14,9 @@ import ( ) type ServiceConfig struct { - Domains []string `toml:"domains"` - Backend string `toml:"backend"` - IPRange string `toml:"ip_range"` + Domains []string `toml:"domains"` + Backend string `toml:"backend"` + IPRange string `toml:"ip_range"` } type FileConfig struct { @@ -24,7 +24,7 @@ type FileConfig struct { } type Config struct { - IPRanges map[string]string `toml:"ip_ranges"` + IPRanges map[string]string `toml:"ip_ranges"` Files map[string]FileConfig `toml:"files"` } @@ -49,6 +49,7 @@ var ( force = flag.Bool("force", false, "Force apply changes") delete = flag.Bool("d", false, "Delete files not in TOML config") tomlFile = flag.String("config", "services.toml", "Path to TOML configuration file") + rootDir = flag.String("root", ".", "Root directory to run in (services.toml read from here; .caddy files written here)") ) func main() { @@ -135,10 +136,14 @@ func validateConfig(config *Config) error { } func syncConfigs(config *Config) error { - // Get current directory - currentDir, err := os.Getwd() - if err != nil { - return fmt.Errorf("failed to get current directory: %w", err) + // Determine directory for .caddy files + currentDir := *rootDir + if currentDir == "" || currentDir == "." { + wd, err := os.Getwd() + if err != nil { + return fmt.Errorf("failed to get current directory: %w", err) + } + currentDir = wd } logger := cylogger.Default @@ -180,7 +185,7 @@ func syncConfigs(config *Config) error { generateAndLogDiff(fileLogger, caddyFilename, "", expectedContent) if !*dryRun { - if err := writeFile(caddyFilename, expectedContent); err != nil { + if err := writeFile(filepath.Join(currentDir, caddyFilename), expectedContent); err != nil { return fmt.Errorf("failed to create file %s: %w", caddyFilename, err) } } @@ -193,7 +198,7 @@ func syncConfigs(config *Config) error { generateAndLogDiff(fileLogger, caddyFilename, existingContent, expectedContent) if !*dryRun { - if err := writeFile(caddyFilename, expectedContent); err != nil { + if err := writeFile(filepath.Join(currentDir, caddyFilename), expectedContent); err != nil { return fmt.Errorf("failed to update file %s: %w", caddyFilename, err) } } @@ -213,7 +218,7 @@ func syncConfigs(config *Config) error { if *delete { orphanLogger.Info("Deleting orphaned file") if !*dryRun { - if err := os.Remove(filename); err != nil { + if err := os.Remove(filepath.Join(currentDir, filename)); err != nil { return fmt.Errorf("failed to delete file %s: %w", filename, err) } } @@ -245,9 +250,9 @@ func generateCaddyContent(fileConfig FileConfig, ipRanges map[string]string) (st i, service.Domains, service.Backend, service.IPRange) templateData.Services[i] = ServiceConfig{ - Domains: service.Domains, - Backend: service.Backend, - IPRange: ipRanges[service.IPRange], + Domains: service.Domains, + Backend: service.Backend, + IPRange: ipRanges[service.IPRange], } } @@ -311,9 +316,9 @@ func generateAndLogDiff(logger *cylogger.Logger, filename, existingContent, expe // ANSI color codes const ( - ColorRed = "\033[31m" - ColorGreen = "\033[32m" - ColorReset = "\033[0m" + ColorRed = "\033[31m" + ColorGreen = "\033[32m" + ColorReset = "\033[0m" ) dmp := diffmatchpatch.New() @@ -364,7 +369,7 @@ func normalize(text string) string { for _, line := range lines { trimmed := strings.TrimSpace(line) - if trimmed != "" { // Skip empty lines + if trimmed != "" { // Skip empty lines normalizedLines = append(normalizedLines, trimmed) } } @@ -372,4 +377,4 @@ func normalize(text string) string { // Join with single newlines and trim ends result := strings.Join(normalizedLines, "\n") return strings.TrimSpace(result) -} \ No newline at end of file +}