Start writing out a template for services.
This commit is contained in:
parent
e1322051e1
commit
63d53f5727
36
main.go
36
main.go
|
@ -4,8 +4,10 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"text/template"
|
||||||
|
|
||||||
"github.com/hjson/hjson-go/v4"
|
"github.com/hjson/hjson-go/v4"
|
||||||
|
"dario.cat/mergo"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
@ -24,6 +26,7 @@ type NetworkingConfig struct {
|
||||||
type ServiceConfig struct {
|
type ServiceConfig struct {
|
||||||
Enable string
|
Enable string
|
||||||
Provider string
|
Provider string
|
||||||
|
Packages []string
|
||||||
Src string
|
Src string
|
||||||
Ports []string
|
Ports []string
|
||||||
Volumes []string
|
Volumes []string
|
||||||
|
@ -47,8 +50,39 @@ func main() {
|
||||||
|
|
||||||
// Parse services
|
// Parse services
|
||||||
for name, service := range config.Services {
|
for name, service := range config.Services {
|
||||||
|
var s ServiceConfig
|
||||||
fmt.Printf("Service: %s\n", name)
|
fmt.Printf("Service: %s\n", name)
|
||||||
fmt.Printf(" %v\n", service)
|
|
||||||
|
// Read service config file
|
||||||
|
c, err := os.ReadFile("services/" + name + ".json")
|
||||||
|
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 {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mergo.Merge(&s, service, mergo.WithOverride)
|
||||||
|
config.Services[name] = s
|
||||||
|
fmt.Printf(" %v\n", s)
|
||||||
|
|
||||||
|
tmpl, err := template.New(name).Parse(string(t))
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = tmpl.Execute(os.Stdout, s)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse package list
|
// Parse package list
|
||||||
|
|
0
services/navidrome.json
Normal file
0
services/navidrome.json
Normal file
0
services/navidrome.template
Normal file
0
services/navidrome.template
Normal file
0
services/proxy.json
Normal file
0
services/proxy.json
Normal file
0
services/proxy.template
Normal file
0
services/proxy.template
Normal file
6
services/ssh.json
Normal file
6
services/ssh.json
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
enable: "true",
|
||||||
|
provider: "system",
|
||||||
|
packages: [ "openssh-server" ],
|
||||||
|
ports: [ "22" ],
|
||||||
|
}
|
98
services/ssh.template
Normal file
98
services/ssh.template
Normal file
|
@ -0,0 +1,98 @@
|
||||||
|
{{if .Ports -}}
|
||||||
|
Port {{index .Ports 0}}
|
||||||
|
{{- end}}
|
||||||
|
#AddressFamily any
|
||||||
|
#ListenAddress 0.0.0.0
|
||||||
|
#ListenAddress ::
|
||||||
|
|
||||||
|
#HostKey /etc/ssh/ssh_host_rsa_key
|
||||||
|
#HostKey /etc/ssh/ssh_host_ecdsa_key
|
||||||
|
#HostKey /etc/ssh/ssh_host_ed25519_key
|
||||||
|
|
||||||
|
# Ciphers and keying
|
||||||
|
#RekeyLimit default none
|
||||||
|
|
||||||
|
# Logging
|
||||||
|
#SyslogFacility AUTH
|
||||||
|
#LogLevel INFO
|
||||||
|
|
||||||
|
# Authentication:
|
||||||
|
|
||||||
|
#LoginGraceTime 2m
|
||||||
|
#PermitRootLogin prohibit-password
|
||||||
|
#StrictModes yes
|
||||||
|
#MaxAuthTries 6
|
||||||
|
#MaxSessions 10
|
||||||
|
|
||||||
|
#PubkeyAuthentication yes
|
||||||
|
|
||||||
|
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
|
||||||
|
# but this is overridden so installations will only check .ssh/authorized_keys
|
||||||
|
AuthorizedKeysFile .ssh/authorized_keys
|
||||||
|
|
||||||
|
#AuthorizedPrincipalsFile none
|
||||||
|
|
||||||
|
#AuthorizedKeysCommand none
|
||||||
|
#AuthorizedKeysCommandUser nobody
|
||||||
|
|
||||||
|
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
|
||||||
|
#HostbasedAuthentication no
|
||||||
|
# Change to yes if you don't trust ~/.ssh/known_hosts for
|
||||||
|
# HostbasedAuthentication
|
||||||
|
#IgnoreUserKnownHosts no
|
||||||
|
# Don't read the user's ~/.rhosts and ~/.shosts files
|
||||||
|
#IgnoreRhosts yes
|
||||||
|
|
||||||
|
# To disable tunneled clear text passwords, change to no here!
|
||||||
|
#PasswordAuthentication yes
|
||||||
|
#PermitEmptyPasswords no
|
||||||
|
|
||||||
|
# Change to no to disable s/key passwords
|
||||||
|
#KbdInteractiveAuthentication yes
|
||||||
|
|
||||||
|
# Kerberos options
|
||||||
|
#KerberosAuthentication no
|
||||||
|
#KerberosOrLocalPasswd yes
|
||||||
|
#KerberosTicketCleanup yes
|
||||||
|
#KerberosGetAFSToken no
|
||||||
|
|
||||||
|
# GSSAPI options
|
||||||
|
#GSSAPIAuthentication no
|
||||||
|
#GSSAPICleanupCredentials yes
|
||||||
|
|
||||||
|
#UsePAM no
|
||||||
|
|
||||||
|
#AllowAgentForwarding yes
|
||||||
|
# Feel free to re-enable these if your use case requires them.
|
||||||
|
AllowTcpForwarding no
|
||||||
|
GatewayPorts no
|
||||||
|
X11Forwarding no
|
||||||
|
#X11DisplayOffset 10
|
||||||
|
#X11UseLocalhost yes
|
||||||
|
#PermitTTY yes
|
||||||
|
#PrintMotd yes
|
||||||
|
#PrintLastLog yes
|
||||||
|
#TCPKeepAlive yes
|
||||||
|
#PermitUserEnvironment no
|
||||||
|
#Compression delayed
|
||||||
|
#ClientAliveInterval 0
|
||||||
|
#ClientAliveCountMax 3
|
||||||
|
#UseDNS no
|
||||||
|
#PidFile /run/sshd.pid
|
||||||
|
#MaxStartups 10:30:100
|
||||||
|
#PermitTunnel no
|
||||||
|
#ChrootDirectory none
|
||||||
|
#VersionAddendum none
|
||||||
|
|
||||||
|
# no default banner path
|
||||||
|
#Banner none
|
||||||
|
|
||||||
|
# override default of no subsystems
|
||||||
|
Subsystem sftp internal-sftp
|
||||||
|
|
||||||
|
# Example of overriding settings on a per-user basis
|
||||||
|
#Match User anoncvs
|
||||||
|
# X11Forwarding no
|
||||||
|
# AllowTcpForwarding no
|
||||||
|
# PermitTTY no
|
||||||
|
# ForceCommand cvs server
|
Loading…
Reference in a new issue