From e2857f8672dd13a6da1171e54982b794d74d33f8 Mon Sep 17 00:00:00 2001 From: root Date: Sat, 15 Mar 2025 20:50:51 -0400 Subject: [PATCH] Pull out another instance of file reading/parsing. --- config.go | 18 ++++++++++++++ main.go | 70 ++++++++++++++++++++++--------------------------------- 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/config.go b/config.go index a69c332..297a1db 100644 --- a/config.go +++ b/config.go @@ -73,6 +73,24 @@ func ParseConfig(file string) (Config, error) { return c, nil } +func ParseServiceConfig(file string) (ServiceConfig, error) { + var err error + var c ServiceConfig + + fp, err := os.ReadFile(file) + if err != nil { + return ServiceConfig{}, fileNotFoundError(file) + } + + err = hjson.Unmarshal(fp, &c) + if err != nil { + fmt.Println(err) + return ServiceConfig{}, parsingError(file) + } + + return c, nil +} + // Get the first host port from a service func (s ServiceConfig) GetHostPort() (string, error) { if s.Ports == nil { diff --git a/main.go b/main.go index 26ff08f..0cd5f21 100644 --- a/main.go +++ b/main.go @@ -8,7 +8,6 @@ import ( "strings" "text/template" - "github.com/hjson/hjson-go/v4" "github.com/ghodss/yaml" "dario.cat/mergo" ) @@ -70,23 +69,19 @@ func main() { // Parse user services for name, service := range config.Services { - s := ServiceConfig{ - Config: make(map[string]interface{}), - } - // If no provider specified, try system if service.Provider == "" { service.Provider = "system" } // Read service config file fp := fmt.Sprintf("services/%s/%s.json", name, service.Provider) - c, err := os.ReadFile(fp) + s, err := ParseServiceConfig(fp) if err != nil { - switch err := err.(type) { - case *os.PathError: + switch err { + case ErrFileNotFound: // No system config to merge // Rely solely on the user config - fmt.Println(" Warning: No system config for service: " + name) + fmt.Println(" Warning: No system config for service: " + name) continue default: fmt.Println("Error reading service config: ", err) @@ -94,43 +89,34 @@ func main() { } } - { - // Parse service config - err = hjson.Unmarshal(c, &s) + // Parse service config + mergo.Merge(&s, ServiceConfig{ + Config: make(map[string]interface{}), + }) + mergo.Merge(&s, service, mergo.WithOverride) + config.Services[name] = s + + + // Scripted action + + // Add service packages to the global list + pkgs := &config.System.Packages + *pkgs = append(*pkgs, s.Packages...) + + // If a proxy definition exists, append it + if s.Proxy != "" { + port, err := s.GetHostPort() if err != nil { - fmt.Println("Error parsing config file") - fmt.Println(err) + fmt.Println("Error in service", name) + fmt.Println(err.Error()) return } - mergo.Merge(&s, service, mergo.WithOverride) -/* - // Initialize the config map if it wasn't already - if s.Config == map[string]interface{} { - s.Config = make(map[string]interface{}) - } -*/ - - config.Services[name] = s - - // Add service packages to the global list - config.System.Packages = append(config.System.Packages, s.Packages...) - - // If a proxy definition exists, append it - if s.Proxy != "" { - port, err := s.GetHostPort() - if err != nil { - fmt.Println("Error in service", name) - fmt.Println(err.Error()) - return - } - - err = AddProxy(s.Proxy, port) - if err != nil { - fmt.Println("Error adding proxy for service", name) - fmt.Println(err.Error()) - return - } + err = AddProxy(s.Proxy, port) + if err != nil { + fmt.Println("Error adding proxy for service", name) + fmt.Println(err.Error()) + return } } }