diff --git a/config.go b/config.go index 56fa17d..3f985ba 100644 --- a/config.go +++ b/config.go @@ -4,17 +4,29 @@ import ( "encoding/json" "fmt" "os" + + "github.com/caarlos0/env" ) func ReadConfig(configName string, target interface{}) error { filename := fmt.Sprintf("/etc/sensu/%s.json", configName) + + // First attempt to open the file file, err := os.Open(filename) - if err != nil { + if err == nil { + decoder := json.NewDecoder(file) + err = decoder.Decode(target) + if err != nil { + return err + } + } else if !os.IsNotExist(err) { + // We don't need the error if it was a does not exist because it's still + // possible to configure via envars. return err } - decoder := json.NewDecoder(file) - err = decoder.Decode(target) + // Override any json value with envars + err = env.Parse(target) if err != nil { return err } diff --git a/go.mod b/go.mod index 654e0fd..5b7f95d 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,7 @@ module github.com/sensu-utils/toolbox require ( + github.com/caarlos0/env v3.5.0+incompatible github.com/coreos/etcd v3.3.12+incompatible // indirect github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect github.com/echlebek/timeproxy v1.0.0 // indirect