Add -root flag to serviceman

This commit is contained in:
2025-10-28 10:33:16 +01:00
parent 8966aa484c
commit c4e0ec1add

View File

@@ -14,9 +14,9 @@ import (
) )
type ServiceConfig struct { type ServiceConfig struct {
Domains []string `toml:"domains"` Domains []string `toml:"domains"`
Backend string `toml:"backend"` Backend string `toml:"backend"`
IPRange string `toml:"ip_range"` IPRange string `toml:"ip_range"`
} }
type FileConfig struct { type FileConfig struct {
@@ -24,7 +24,7 @@ type FileConfig struct {
} }
type Config struct { type Config struct {
IPRanges map[string]string `toml:"ip_ranges"` IPRanges map[string]string `toml:"ip_ranges"`
Files map[string]FileConfig `toml:"files"` Files map[string]FileConfig `toml:"files"`
} }
@@ -49,6 +49,7 @@ var (
force = flag.Bool("force", false, "Force apply changes") force = flag.Bool("force", false, "Force apply changes")
delete = flag.Bool("d", false, "Delete files not in TOML config") delete = flag.Bool("d", false, "Delete files not in TOML config")
tomlFile = flag.String("config", "services.toml", "Path to TOML configuration file") 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() { func main() {
@@ -135,10 +136,14 @@ func validateConfig(config *Config) error {
} }
func syncConfigs(config *Config) error { func syncConfigs(config *Config) error {
// Get current directory // Determine directory for .caddy files
currentDir, err := os.Getwd() currentDir := *rootDir
if err != nil { if currentDir == "" || currentDir == "." {
return fmt.Errorf("failed to get current directory: %w", err) wd, err := os.Getwd()
if err != nil {
return fmt.Errorf("failed to get current directory: %w", err)
}
currentDir = wd
} }
logger := cylogger.Default logger := cylogger.Default
@@ -180,7 +185,7 @@ func syncConfigs(config *Config) error {
generateAndLogDiff(fileLogger, caddyFilename, "", expectedContent) generateAndLogDiff(fileLogger, caddyFilename, "", expectedContent)
if !*dryRun { 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) 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) generateAndLogDiff(fileLogger, caddyFilename, existingContent, expectedContent)
if !*dryRun { 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) return fmt.Errorf("failed to update file %s: %w", caddyFilename, err)
} }
} }
@@ -213,7 +218,7 @@ func syncConfigs(config *Config) error {
if *delete { if *delete {
orphanLogger.Info("Deleting orphaned file") orphanLogger.Info("Deleting orphaned file")
if !*dryRun { 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) 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) i, service.Domains, service.Backend, service.IPRange)
templateData.Services[i] = ServiceConfig{ templateData.Services[i] = ServiceConfig{
Domains: service.Domains, Domains: service.Domains,
Backend: service.Backend, Backend: service.Backend,
IPRange: ipRanges[service.IPRange], IPRange: ipRanges[service.IPRange],
} }
} }
@@ -311,9 +316,9 @@ func generateAndLogDiff(logger *cylogger.Logger, filename, existingContent, expe
// ANSI color codes // ANSI color codes
const ( const (
ColorRed = "\033[31m" ColorRed = "\033[31m"
ColorGreen = "\033[32m" ColorGreen = "\033[32m"
ColorReset = "\033[0m" ColorReset = "\033[0m"
) )
dmp := diffmatchpatch.New() dmp := diffmatchpatch.New()
@@ -364,7 +369,7 @@ func normalize(text string) string {
for _, line := range lines { for _, line := range lines {
trimmed := strings.TrimSpace(line) trimmed := strings.TrimSpace(line)
if trimmed != "" { // Skip empty lines if trimmed != "" { // Skip empty lines
normalizedLines = append(normalizedLines, trimmed) normalizedLines = append(normalizedLines, trimmed)
} }
} }