diff --git a/main.go b/main.go index 42cda25..91aea4d 100644 --- a/main.go +++ b/main.go @@ -4,10 +4,12 @@ import ( "fmt" "os" "os/exec" + "path" "strings" "text/template" "github.com/hjson/hjson-go/v4" + "github.com/ghodss/yaml" "dario.cat/mergo" ) @@ -73,11 +75,13 @@ func main() { // Parse service config err = hjson.Unmarshal(c, &s) if err != nil { + fmt.Println("Error parsing config file") fmt.Println(err) return } mergo.Merge(&s, service, mergo.WithOverride) config.Services[name] = s + fmt.Printf(" %v\n", s) // Add service packages to the global list @@ -97,15 +101,64 @@ func main() { } tmpl, err := template.New(name).Parse(string(t)) + if err != nil { + fmt.Println("Error reading template") + fmt.Println(err) + return + } + + err = os.MkdirAll("/config" + path.Dir(f[1]), 0555) + if err != nil { + fmt.Println("Error creating config directory.") + fmt.Println(err) + return + } + + fd, err := os.Create("/config" + f[1]) + defer fd.Close() + if err != nil { + fmt.Println(err) + fmt.Println("No permission to create config file") + return + } + fd.Chmod(0444) + + err = tmpl.Execute(fd, s) if err != nil { fmt.Println(err) return } - fmt.Printf(" Installing %s to %s\n", f[0], f[1]) - err = tmpl.Execute(os.Stdout, s) } } + // Convert service configs from JSON to YAML + fmt.Println("Converting docker service configs to YAML") + servicesPath := "/config/services/docker/" + dirents, err := os.ReadDir(servicesPath) + for _, d := range dirents { + if d.IsDir() == true { continue } + if strings.HasSuffix(d.Name(), ".json") != true { continue } + f := servicesPath + d.Name() + + j, err := os.ReadFile(f) + if err != nil { + fmt.Println(err) + return + } + + y, err := yaml.JSONToYAML(j) + if err != nil { + fmt.Println(err) + return + } + + f, _ = strings.CutSuffix(f, ".json") + fd, _ := os.Create(f + ".yaml") + defer fd.Close() + fd.Chmod(0444) + fd.Write(y) + } + // Parse package list // Add extra packages needed diff --git a/services/navidrome/docker.json b/services/navidrome/docker.json index e69de29..deed881 100644 --- a/services/navidrome/docker.json +++ b/services/navidrome/docker.json @@ -0,0 +1,12 @@ +{ +enable: "false", + +ports: ["4533:4533"], + +provider: "docker", +packages: [], +src: "deluan/navidrome:latest", +configFiles: [ + "navidrome.template:/services/docker/navidrome.json", +] +} diff --git a/services/navidrome/navidrome.template b/services/navidrome/navidrome.template index e69de29..e67967b 100644 --- a/services/navidrome/navidrome.template +++ b/services/navidrome/navidrome.template @@ -0,0 +1,25 @@ +{ +"services": { + "navidrome": { + "image": "{{.Src}}", + {{with .Config.Id}}"user": "{{.}}:{{.}}",{{end}} + "ports": [ + {{range .Ports}} + "{{.}}", + {{end}} + ], + {{with .Config.Restart}}"restart": "{{.}}",{{end}} + "environment": { + "ND_SCANSCHEDULE": "1h", + "ND_LOGLEVEL": "info", + "ND_SESSIONTIMEOUT": "24h", + "ND_BASEURL": "", + }, + "volumes": [ + {{range .Volumes}} + "{{.}}", + {{end}} + ], + } +} +} diff --git a/services/proxy/caddy.template b/services/proxy/caddy.template new file mode 100644 index 0000000..cb936b1 --- /dev/null +++ b/services/proxy/caddy.template @@ -0,0 +1,8 @@ +{ +} + +{{range .Config.proxy}} +{{.domain}} { + reverse_proxy localhost:{{.port}} +} +{{end}} diff --git a/services/proxy/proxy.template b/services/proxy/proxy.template deleted file mode 100644 index e69de29..0000000 diff --git a/services/proxy/system.json b/services/proxy/system.json index e69de29..f629d81 100644 --- a/services/proxy/system.json +++ b/services/proxy/system.json @@ -0,0 +1,11 @@ +{ +enable: "false", + +ports: [ "80", "443" ], + +provider: "system", +packages: [ "caddy" ], +configFiles: [ + "caddy.template:/etc/caddy/Caddyfile", +] +} diff --git a/services/ssh/banner.template b/services/ssh/banner.template new file mode 100644 index 0000000..7c668d7 --- /dev/null +++ b/services/ssh/banner.template @@ -0,0 +1 @@ +{{with .Config.banner}}{{.}}{{end}}