Allow config files to inherit from other config files
This commit is contained in:
16
serv/cmd.go
16
serv/cmd.go
@ -150,13 +150,25 @@ func initLog() *zerolog.Logger {
|
||||
}
|
||||
|
||||
func initConf() (*config, error) {
|
||||
vi := newConfig()
|
||||
vi := newConfig(getConfigName())
|
||||
|
||||
if err := vi.ReadInConfig(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c := &config{}
|
||||
inherit := vi.GetString("inherit")
|
||||
if len(inherit) != 0 {
|
||||
vi = newConfig(inherit)
|
||||
|
||||
if err := vi.ReadInConfig(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
vi.SetConfigName(getConfigName())
|
||||
vi.MergeInConfig()
|
||||
}
|
||||
|
||||
c := &config{Viper: vi}
|
||||
|
||||
if err := vi.Unmarshal(c); err != nil {
|
||||
return nil, fmt.Errorf("unable to decode config, %v", err)
|
||||
|
@ -15,13 +15,12 @@ func cmdConfDump(cmd *cobra.Command, args []string) {
|
||||
|
||||
fname := fmt.Sprintf("%s.%s", getConfigName(), args[0])
|
||||
|
||||
vi := newConfig()
|
||||
|
||||
if err := vi.ReadInConfig(); err != nil {
|
||||
logger.Fatal().Err(err).Send()
|
||||
conf, err := initConf()
|
||||
if err != nil {
|
||||
logger.Fatal().Err(err).Msg("failed to read config")
|
||||
}
|
||||
|
||||
if err := vi.WriteConfigAs(fname); err != nil {
|
||||
if err := conf.Viper.WriteConfigAs(fname); err != nil {
|
||||
logger.Fatal().Err(err).Send()
|
||||
}
|
||||
|
||||
|
@ -9,6 +9,8 @@ import (
|
||||
)
|
||||
|
||||
type config struct {
|
||||
*viper.Viper
|
||||
|
||||
AppName string `mapstructure:"app_name"`
|
||||
Env string
|
||||
HostPort string `mapstructure:"host_port"`
|
||||
@ -134,16 +136,16 @@ type configRole struct {
|
||||
}
|
||||
}
|
||||
|
||||
func newConfig() *viper.Viper {
|
||||
func newConfig(name string) *viper.Viper {
|
||||
vi := viper.New()
|
||||
|
||||
vi.SetEnvPrefix("SG")
|
||||
vi.SetEnvKeyReplacer(strings.NewReplacer(".", "_"))
|
||||
vi.AutomaticEnv()
|
||||
|
||||
vi.SetConfigName(name)
|
||||
vi.AddConfigPath(confPath)
|
||||
vi.AddConfigPath("./config")
|
||||
vi.SetConfigName(getConfigName())
|
||||
|
||||
vi.SetDefault("host_port", "0.0.0.0:8080")
|
||||
vi.SetDefault("web_ui", false)
|
||||
|
10
serv/serv.go
10
serv/serv.go
@ -148,7 +148,15 @@ func startHTTP() {
|
||||
db.Close()
|
||||
})
|
||||
|
||||
fmt.Printf("%s listening on %s (%s)\n", serverName, hostPort, conf.Env)
|
||||
var ident string
|
||||
|
||||
if len(conf.AppName) == 0 {
|
||||
ident = conf.Env
|
||||
} else {
|
||||
ident = conf.AppName
|
||||
}
|
||||
|
||||
fmt.Printf("%s listening on %s (%s)\n", serverName, hostPort, ident)
|
||||
|
||||
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
|
||||
logger.Error().Err(err).Msg("server closed")
|
||||
|
Reference in New Issue
Block a user