diff --git a/main.go b/main.go index e054c9de7..2f71876f7 100644 --- a/main.go +++ b/main.go @@ -95,7 +95,7 @@ func main() { flag.Usage = pkg.UsageWithIgnoredFlagsFunc(flag.CommandLine, deprecated) flag.Parse() - setFlagsFromEnv() + setFlagsFromEnv(flag.CommandLine) if string(*proxyFlag) == proxyFlagValueOff { startEtcd() @@ -329,24 +329,23 @@ func (pf *ProxyFlag) String() string { return string(*pf) } -// setFlagsFromEnv parses all registered flags in the global flagset, +// setFlagsFromEnv parses all registered flags in the given flagset, // and if they are not already set it attempts to set their values from // environment variables. Environment variables take the name of the flag but // are UPPERCASE, have the prefix "ETCD_", and any dashes are replaced by // underscores - for example: some-flag => ETCD_SOME_FLAG -func setFlagsFromEnv() { +func setFlagsFromEnv(fs *flag.FlagSet) { alreadySet := make(map[string]bool) - flag.Visit(func(f *flag.Flag) { + fs.Visit(func(f *flag.Flag) { alreadySet[f.Name] = true }) - flag.VisitAll(func(f *flag.Flag) { + fs.VisitAll(func(f *flag.Flag) { if !alreadySet[f.Name] { key := "ETCD_" + strings.ToUpper(strings.Replace(f.Name, "-", "_", -1)) val := os.Getenv(key) if val != "" { - flag.Set(f.Name, val) + fs.Set(f.Name, val) } } - }) } diff --git a/main_test.go b/main_test.go index 97647cd95..c209859da 100644 --- a/main_test.go +++ b/main_test.go @@ -30,7 +30,7 @@ func TestSetFlagsFromEnv(t *testing.T) { } // now read the env and verify flags were updated as expected - setFlagsFromEnv() + setFlagsFromEnv(flag.CommandLine) for f, want := range map[string]string{ "data-dir": "/foo/bar", "peer-bind-addr": "1.2.3.4",