Support multiple configs and config in raw yaml form

This commit is contained in:
Alexey Khit
2023-01-14 21:12:17 +03:00
parent 395304654a
commit 0b291f5185
+43 -16
View File
@@ -9,6 +9,7 @@ import (
"io" "io"
"os" "os"
"runtime" "runtime"
"strings"
) )
var Version = "0.1-rc.8" var Version = "0.1-rc.8"
@@ -20,28 +21,44 @@ var Info = map[string]interface{}{
} }
func Init() { func Init() {
flag.StringVar( var confs Config
&ConfigPath, "config", "go2rtc.yaml",
"Path to go2rtc configuration file",
)
flag.Var(&confs, "config", "go2rtc config (path to file or raw text), support multiple")
flag.Parse() flag.Parse()
Info["config_path"] = ConfigPath if confs == nil {
confs = []string{"go2rtc.yaml"}
}
data, _ = os.ReadFile(ConfigPath) for _, conf := range confs {
if conf[0] != '{' {
// config as file
if ConfigPath == "" {
ConfigPath = conf
}
data, _ := os.ReadFile(conf)
if data == nil {
continue
}
data = []byte(shell.ReplaceEnvVars(string(data)))
configs = append(configs, data)
} else {
// config as raw YAML
configs = append(configs, []byte(conf))
}
}
if ConfigPath != "" {
Info["config_path"] = ConfigPath
}
var cfg struct { var cfg struct {
Mod map[string]string `yaml:"log"` Mod map[string]string `yaml:"log"`
} }
if data != nil { LoadConfig(&cfg)
data = []byte(shell.ReplaceEnvVars(string(data)))
if err := yaml.Unmarshal(data, &cfg); err != nil {
println("ERROR: " + err.Error())
}
}
log.Logger = NewLogger(cfg.Mod["format"], cfg.Mod["level"]) log.Logger = NewLogger(cfg.Mod["format"], cfg.Mod["level"])
@@ -74,7 +91,7 @@ func NewLogger(format string, level string) zerolog.Logger {
} }
func LoadConfig(v interface{}) { func LoadConfig(v interface{}) {
if data != nil { for _, data := range configs {
if err := yaml.Unmarshal(data, v); err != nil { if err := yaml.Unmarshal(data, v); err != nil {
log.Warn().Err(err).Msg("[app] read config") log.Warn().Err(err).Msg("[app] read config")
} }
@@ -95,8 +112,18 @@ func GetLogger(module string) zerolog.Logger {
// internal // internal
// data - config content type Config []string
var data []byte
func (c *Config) String() string {
return strings.Join(*c, " ")
}
func (c *Config) Set(value string) error {
*c = append(*c, value)
return nil
}
var configs [][]byte
// modules log levels // modules log levels
var modules map[string]string var modules map[string]string