lib/envflag: add -envflag.enable command-line flag for enabling reading flags from environment vars

By default flags are read only from command line. They can be read from environment vars if `-envflag.enable` is set.

Updates https://github.com/VictoriaMetrics/VictoriaMetrics/issues/311
This commit is contained in:
Aliaksandr Valialkin 2020-02-10 15:58:30 +02:00
parent 1010a57882
commit 9c5db9400c

View File

@ -5,6 +5,10 @@ import (
"os"
)
var enable = flag.Bool("envflag.enable", false, "Whether to enable reading flags from environment variables additionally to command line. "+
"Command line flag values have priority over values from envoronment vars. "+
"Flags are read only from command line if this flag isn't set")
// Parse parses environment vars and command-line flags.
//
// Flags set via command-line override flags set via environment vars.
@ -12,6 +16,9 @@ import (
// This function must be called instead of flag.Parse() before using any flags in the program.
func Parse() {
flag.Parse()
if !*enable {
return
}
// Remember explicitly set command-line flags.
flagsSet := make(map[string]bool)
@ -25,6 +32,7 @@ func Parse() {
// The flag is explicitly set via command-line.
return
}
// Get flag value from environment var.
if v, ok := os.LookupEnv(f.Name); ok {
f.Value.Set(v)
}