Add -root flag to serviceman
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -372,4 +377,4 @@ func normalize(text string) string {
|
|||||||
// Join with single newlines and trim ends
|
// Join with single newlines and trim ends
|
||||||
result := strings.Join(normalizedLines, "\n")
|
result := strings.Join(normalizedLines, "\n")
|
||||||
return strings.TrimSpace(result)
|
return strings.TrimSpace(result)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user