feature(cmd): add default config files for tunasynctl

This commit is contained in:
walkerning 2016-04-30 00:38:18 +08:00 committed by bigeagle
parent 56459f2ce0
commit 2ea22ec1ae
No known key found for this signature in database
GPG Key ID: 9171A4571C27920A
2 changed files with 65 additions and 24 deletions

View File

@ -19,7 +19,7 @@ func startManager(c *cli.Context) {
cfg, err := manager.LoadConfig(c.String("config"), c) cfg, err := manager.LoadConfig(c.String("config"), c)
if err != nil { if err != nil {
logger.Error("Error loading config: %s", err.Error()) logger.Errorf("Error loading config: %s", err.Error())
os.Exit(1) os.Exit(1)
} }
if !cfg.Debug { if !cfg.Debug {
@ -28,7 +28,7 @@ func startManager(c *cli.Context) {
m := manager.GetTUNASyncManager(cfg) m := manager.GetTUNASyncManager(cfg)
if m == nil { if m == nil {
logger.Error("Error intializing TUNA sync worker.") logger.Errorf("Error intializing TUNA sync worker.")
os.Exit(1) os.Exit(1)
} }
@ -44,13 +44,13 @@ func startWorker(c *cli.Context) {
cfg, err := worker.LoadConfig(c.String("config")) cfg, err := worker.LoadConfig(c.String("config"))
if err != nil { if err != nil {
logger.Error("Error loading config: %s", err.Error()) logger.Errorf("Error loading config: %s", err.Error())
os.Exit(1) os.Exit(1)
} }
w := worker.GetTUNASyncWorker(cfg) w := worker.GetTUNASyncWorker(cfg)
if w == nil { if w == nil {
logger.Error("Error intializing TUNA sync worker.") logger.Errorf("Error intializing TUNA sync worker.")
os.Exit(1) os.Exit(1)
} }

View File

@ -8,6 +8,7 @@ import (
"os" "os"
"strings" "strings"
"github.com/BurntSushi/toml"
"github.com/codegangsta/cli" "github.com/codegangsta/cli"
"gopkg.in/op/go-logging.v1" "gopkg.in/op/go-logging.v1"
@ -18,6 +19,9 @@ const (
listJobsPath = "/jobs" listJobsPath = "/jobs"
listWorkersPath = "/workers" listWorkersPath = "/workers"
cmdPath = "/cmd" cmdPath = "/cmd"
systemCfgFile = "/etc/tunasync/ctl.conf"
userCfgFile = "$HOME/.config/tunasync/ctl.conf"
) )
var logger = logging.MustGetLogger("tunasynctl-cmd") var logger = logging.MustGetLogger("tunasynctl-cmd")
@ -35,29 +39,65 @@ func initializeWrapper(handler func(*cli.Context)) func(*cli.Context) {
} }
} }
type config struct {
ManagerAddr string `toml:"manager_addr"`
ManagerPort int `toml:"manager_port"`
CACert string `toml:"ca_cert"`
}
func loadConfig(cfgFile string, c *cli.Context) (*config, error) {
cfg := new(config)
cfg.ManagerAddr = "localhost"
cfg.ManagerPort = 14242
if cfgFile != "" {
if _, err := toml.DecodeFile(cfgFile, cfg); err != nil {
logger.Errorf(err.Error())
return nil, err
}
}
if c.String("manager") != "" {
cfg.ManagerAddr = c.String("manager")
}
if c.Int("port") > 0 {
cfg.ManagerPort = c.Int("port")
}
if c.String("ca-cert") != "" {
cfg.CACert = c.String("ca-cert")
}
return cfg, nil
}
func initialize(c *cli.Context) error { func initialize(c *cli.Context) error {
// init logger // init logger
tunasync.InitLogger(c.Bool("verbose"), c.Bool("verbose"), false) tunasync.InitLogger(c.Bool("verbose"), c.Bool("verbose"), false)
var cfgFile string
// parse manager server address // choose config file and load config
baseURL = c.String("manager") if c.String("config") != "" {
if baseURL == "" { cfgFile = c.String("config")
baseURL = "localhost" } else if _, err := os.Stat(os.ExpandEnv(userCfgFile)); err == nil {
cfgFile = os.ExpandEnv(userCfgFile)
} else if _, err := os.Stat(systemCfgFile); err == nil {
cfgFile = systemCfgFile
} }
managerPort := c.String("port") cfg, err := loadConfig(cfgFile, c)
if managerPort != "" {
baseURL += ":" + managerPort if err != nil {
} logger.Errorf("Load configuration for tunasynctl error: %s", err.Error())
if c.Bool("no-ssl") { return err
baseURL = "http://" + baseURL
} else {
baseURL = "https://" + baseURL
} }
// parse base url of the manager server
baseURL = fmt.Sprintf("https://%s:%d",
cfg.ManagerAddr, cfg.ManagerPort)
logger.Infof("Use manager address: %s", baseURL) logger.Infof("Use manager address: %s", baseURL)
// create HTTP client // create HTTP client
var err error client, err = tunasync.CreateHTTPClient(cfg.CACert)
client, err = tunasync.CreateHTTPClient(c.String("ca-cert"))
if err != nil { if err != nil {
err = fmt.Errorf("Error initializing HTTP client: %s", err.Error()) err = fmt.Errorf("Error initializing HTTP client: %s", err.Error())
logger.Error(err.Error()) logger.Error(err.Error())
@ -169,6 +209,11 @@ func main() {
app.Version = "0.1" app.Version = "0.1"
commonFlags := []cli.Flag{ commonFlags := []cli.Flag{
cli.StringFlag{
Name: "config, c",
Usage: "Read configuration from `FILE` rather than" +
" ~/.config/tunasync/ctl.conf and /etc/tunasync/ctl.conf",
},
cli.StringFlag{ cli.StringFlag{
Name: "manager, m", Name: "manager, m",
Usage: "The manager server address", Usage: "The manager server address",
@ -178,14 +223,10 @@ func main() {
Usage: "The manager server port", Usage: "The manager server port",
}, },
cli.StringFlag{ cli.StringFlag{
Name: "ca-cert, c", Name: "ca-cert",
Usage: "Trust CA cert `CERT`", Usage: "Trust root CA cert file `CERT`",
}, },
cli.BoolFlag{
Name: "no-ssl",
Usage: "Use http rather than https",
},
cli.BoolFlag{ cli.BoolFlag{
Name: "verbose, v", Name: "verbose, v",
Usage: "Enable verbosely logging", Usage: "Enable verbosely logging",