Skip to content

Commit 38655ae

Browse files
authored
Support multiple configuration files with the --config flag (#199)
1 parent 71991e7 commit 38655ae

File tree

1 file changed

+16
-8
lines changed
  • cmd/chirpstack-gateway-bridge/cmd

1 file changed

+16
-8
lines changed

cmd/chirpstack-gateway-bridge/cmd/root.go

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import (
1515
"github.com/brocaar/chirpstack-gateway-bridge/internal/config"
1616
)
1717

18-
var cfgFile string // config file
18+
var cfgFiles *[]string // config file
1919
var version string
2020

2121
var rootCmd = &cobra.Command{
@@ -30,7 +30,7 @@ var rootCmd = &cobra.Command{
3030
func init() {
3131
cobra.OnInitialize(initConfig)
3232

33-
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "", "path to configuration file (optional)")
33+
cfgFiles = rootCmd.PersistentFlags().StringSliceP("config", "c", []string{}, "path to configuration file (optional)")
3434
rootCmd.PersistentFlags().Int("log-level", 4, "debug=5, info=4, error=2, fatal=1, panic=0")
3535

3636
viper.BindPFlag("general.log_level", rootCmd.PersistentFlags().Lookup("log-level"))
@@ -90,14 +90,22 @@ func Execute(v string) {
9090
}
9191

9292
func initConfig() {
93-
if cfgFile != "" {
94-
b, err := ioutil.ReadFile(cfgFile)
95-
if err != nil {
96-
log.WithError(err).WithField("config", cfgFile).Fatal("error loading config file")
93+
if cfgFiles != nil {
94+
var filesMerged []byte
95+
for _, cfgFile := range *cfgFiles {
96+
cfgFileContent, err := ioutil.ReadFile(cfgFile)
97+
if err != nil {
98+
log.WithError(err).WithField("config", cfgFile).Fatal("error loading config file")
99+
}
100+
filesMerged = bytes.Join([][]byte{
101+
filesMerged,
102+
cfgFileContent,
103+
}, []byte("\n"))
97104
}
105+
98106
viper.SetConfigType("toml")
99-
if err := viper.ReadConfig(bytes.NewBuffer(b)); err != nil {
100-
log.WithError(err).WithField("config", cfgFile).Fatal("error loading config file")
107+
if err := viper.ReadConfig(bytes.NewBuffer(filesMerged)); err != nil {
108+
log.WithError(err).WithField("config", cfgFiles).Fatal("error loading config file")
101109
}
102110
} else {
103111
viper.SetConfigName("chirpstack-gateway-bridge")

0 commit comments

Comments
 (0)