etcd: pass flagset into setFlagsFromEnv

release-2.0
Brian Waldon 2014-09-24 16:11:47 -07:00
parent 314c13a8f0
commit 18c300f80c
2 changed files with 7 additions and 8 deletions

13
main.go
View File

@ -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)
}
}
})
}

View File

@ -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",