diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1377554 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.swp diff --git a/main.go b/main.go index 0b1870c..2800a60 100644 --- a/main.go +++ b/main.go @@ -4,6 +4,7 @@ import ( "fmt" "os" "os/exec" + "strings" "text/template" "github.com/hjson/hjson-go/v4" @@ -25,11 +26,14 @@ type NetworkingConfig struct { type ServiceConfig struct { Enable string - Provider string - Packages []string + Src string Ports []string Volumes []string + + Provider string + Packages []string + ConfigFiles []string } func main() { @@ -50,23 +54,19 @@ func main() { // Parse services for name, service := range config.Services { + var b strings.Builder var s ServiceConfig fmt.Printf("Service: %s\n", name) // Read service config file - c, err := os.ReadFile("services/" + name + ".json") + if service.Provider == "" { service.Provider = "system" } + fmt.Fprintf(&b, "services/%s/%s.json", name, service.Provider) + c, err := os.ReadFile(b.String()) if err != nil { fmt.Println("Unknown service: ", err) return } - // Read service template file - t, err := os.ReadFile("services/" + name + ".template") - if err != nil { - fmt.Println("No template for service: ", err) - return - } - // Parse service config err = hjson.Unmarshal(c, &s) if err != nil { @@ -77,12 +77,30 @@ func main() { config.Services[name] = s fmt.Printf(" %v\n", s) - tmpl, err := template.New(name).Parse(string(t)) - if err != nil { - fmt.Println(err) - return + // Add service packages to the global list + config.System.Packages = append(config.System.Packages, s.Packages...) + + // Generate a config file + for _, f := range s.ConfigFiles { + var b strings.Builder + f := strings.Split(f, ":") + + // Read service template file + fmt.Fprintf(&b, "services/%s/%s", name, f[0]) + t, err := os.ReadFile(b.String()) + if err != nil { + fmt.Println("No template for service: ", err) + return + } + + tmpl, err := template.New(name).Parse(string(t)) + if err != nil { + fmt.Println(err) + return + } + fmt.Printf(" Installing %s to %s\n", f[0], f[1]) + err = tmpl.Execute(os.Stdout, s) } - err = tmpl.Execute(os.Stdout, s) } // Parse package list diff --git a/services/navidrome.json b/services/navidrome/docker.json similarity index 100% rename from services/navidrome.json rename to services/navidrome/docker.json diff --git a/services/navidrome.template b/services/navidrome/navidrome.template similarity index 100% rename from services/navidrome.template rename to services/navidrome/navidrome.template diff --git a/services/proxy.template b/services/proxy/proxy.template similarity index 100% rename from services/proxy.template rename to services/proxy/proxy.template diff --git a/services/proxy.json b/services/proxy/system.json similarity index 100% rename from services/proxy.json rename to services/proxy/system.json diff --git a/services/ssh.template b/services/ssh/sshd.template similarity index 100% rename from services/ssh.template rename to services/ssh/sshd.template diff --git a/services/ssh.json b/services/ssh/system.json similarity index 61% rename from services/ssh.json rename to services/ssh/system.json index 38f4e97..ea4c110 100644 --- a/services/ssh.json +++ b/services/ssh/system.json @@ -1,6 +1,11 @@ { enable: "true", + +ports: [ "22" ], + provider: "system", packages: [ "openssh-server" ], -ports: [ "22" ], +configFiles: [ + "sshd.template:/etc/ssh/sshd_config", +] }