Pull out another instance of file reading/parsing.

This commit is contained in:
root 2025-03-15 20:50:51 -04:00
parent bb1d0363f3
commit e2857f8672
2 changed files with 46 additions and 42 deletions

View file

@ -73,6 +73,24 @@ func ParseConfig(file string) (Config, error) {
return c, nil 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 // Get the first host port from a service
func (s ServiceConfig) GetHostPort() (string, error) { func (s ServiceConfig) GetHostPort() (string, error) {
if s.Ports == nil { if s.Ports == nil {

70
main.go
View file

@ -8,7 +8,6 @@ import (
"strings" "strings"
"text/template" "text/template"
"github.com/hjson/hjson-go/v4"
"github.com/ghodss/yaml" "github.com/ghodss/yaml"
"dario.cat/mergo" "dario.cat/mergo"
) )
@ -70,23 +69,19 @@ func main() {
// Parse user services // Parse user services
for name, service := range config.Services { for name, service := range config.Services {
s := ServiceConfig{
Config: make(map[string]interface{}),
}
// If no provider specified, try system // If no provider specified, try system
if service.Provider == "" { service.Provider = "system" } if service.Provider == "" { service.Provider = "system" }
// Read service config file // Read service config file
fp := fmt.Sprintf("services/%s/%s.json", fp := fmt.Sprintf("services/%s/%s.json",
name, service.Provider) name, service.Provider)
c, err := os.ReadFile(fp) s, err := ParseServiceConfig(fp)
if err != nil { if err != nil {
switch err := err.(type) { switch err {
case *os.PathError: case ErrFileNotFound:
// No system config to merge // No system config to merge
// Rely solely on the user config // 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 continue
default: default:
fmt.Println("Error reading service config: ", err) fmt.Println("Error reading service config: ", err)
@ -94,43 +89,34 @@ func main() {
} }
} }
{ // Parse service config
// Parse service config mergo.Merge(&s, ServiceConfig{
err = hjson.Unmarshal(c, &s) 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 { if err != nil {
fmt.Println("Error parsing config file") fmt.Println("Error in service", name)
fmt.Println(err) fmt.Println(err.Error())
return return
} }
mergo.Merge(&s, service, mergo.WithOverride)
/* err = AddProxy(s.Proxy, port)
// Initialize the config map if it wasn't already if err != nil {
if s.Config == map[string]interface{} { fmt.Println("Error adding proxy for service", name)
s.Config = make(map[string]interface{}) fmt.Println(err.Error())
} return
*/
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
}
} }
} }
} }