nano-run/cmd/nano-run/server_cmd.go

72 lines
1.9 KiB
Go

package main
import (
"log"
"os"
"path/filepath"
"nano-run/server"
)
type serverCmd struct {
Run serverRunCmd `command:"run" description:"run server"`
Init serverInitCmd `command:"init" description:"initialize server"`
}
type serverInitCmd struct {
Directory string `short:"d" long:"directory" env:"DIRECTORY" description:"Target directory" default:"server"`
ConfigFile string `long:"config-file" env:"CONFIG_FILE" description:"Config file name" default:"server.yaml"`
NoSample bool `long:"no-sample" env:"NO_SAMPLE" description:"Do not create same file"`
}
func (cmd *serverInitCmd) Execute([]string) error {
err := os.MkdirAll(cmd.Directory, 0755)
if err != nil {
return err
}
cfg := server.DefaultConfig()
err = cfg.SaveFile(filepath.Join(cmd.Directory, cmd.ConfigFile))
if err != nil {
return err
}
err = os.MkdirAll(filepath.Join(cmd.Directory, cfg.ConfigDirectory), 0755)
if err != nil {
return err
}
err = os.MkdirAll(filepath.Join(cmd.Directory, cfg.WorkingDirectory), 0755)
if err != nil {
return err
}
if !cmd.NoSample {
unit := server.DefaultUnit()
err = unit.SaveFile(filepath.Join(cmd.Directory, cfg.ConfigDirectory, "sample.yaml"))
if err != nil {
return err
}
}
return nil
}
type serverRunCmd struct {
Fail bool `short:"f" long:"fail" env:"FAIL" description:"Fail if no config file"`
Config string `short:"c" long:"config" env:"CONFIG" description:"Configuration file" default:"server.yaml"`
}
func (cmd *serverRunCmd) Execute([]string) error {
cfg := server.DefaultConfig()
err := cfg.LoadFile(cmd.Config)
if os.IsNotExist(err) && !cmd.Fail {
log.Println("no config file found - using transient default configuration")
cfg.ConfigDirectory = filepath.Join("run", "conf.d")
cfg.WorkingDirectory = filepath.Join("run", "data")
err := cfg.CreateDirs()
if err != nil {
return err
}
} else if err != nil {
return err
}
log.Println("configuration loaded")
return cfg.Run(SignalContext())
}