72 lines
1.9 KiB
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())
|
|
}
|