mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
pkg: remove capnslog (#11616)
* pkg: remove capnslog * CHANGELOG: function signature change
This commit is contained in:
@@ -21,18 +21,16 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"github.com/coreos/pkg/capnslog"
|
||||
"github.com/spf13/pflag"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
var plog = capnslog.NewPackageLogger("go.etcd.io/etcd", "pkg/flags")
|
||||
|
||||
// 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 given prefix and any dashes are replaced by
|
||||
// underscores - for example: some-flag => ETCD_SOME_FLAG
|
||||
func SetFlagsFromEnv(prefix string, fs *flag.FlagSet) error {
|
||||
func SetFlagsFromEnv(lg *zap.Logger, prefix string, fs *flag.FlagSet) error {
|
||||
var err error
|
||||
alreadySet := make(map[string]bool)
|
||||
fs.Visit(func(f *flag.Flag) {
|
||||
@@ -40,17 +38,17 @@ func SetFlagsFromEnv(prefix string, fs *flag.FlagSet) error {
|
||||
})
|
||||
usedEnvKey := make(map[string]bool)
|
||||
fs.VisitAll(func(f *flag.Flag) {
|
||||
if serr := setFlagFromEnv(fs, prefix, f.Name, usedEnvKey, alreadySet, true); serr != nil {
|
||||
if serr := setFlagFromEnv(lg, fs, prefix, f.Name, usedEnvKey, alreadySet, true); serr != nil {
|
||||
err = serr
|
||||
}
|
||||
})
|
||||
verifyEnv(prefix, usedEnvKey, alreadySet)
|
||||
verifyEnv(lg, prefix, usedEnvKey, alreadySet)
|
||||
return err
|
||||
}
|
||||
|
||||
// SetPflagsFromEnv is similar to SetFlagsFromEnv. However, the accepted flagset type is pflag.FlagSet
|
||||
// and it does not do any logging.
|
||||
func SetPflagsFromEnv(prefix string, fs *pflag.FlagSet) error {
|
||||
func SetPflagsFromEnv(lg *zap.Logger, prefix string, fs *pflag.FlagSet) error {
|
||||
var err error
|
||||
alreadySet := make(map[string]bool)
|
||||
usedEnvKey := make(map[string]bool)
|
||||
@@ -58,11 +56,11 @@ func SetPflagsFromEnv(prefix string, fs *pflag.FlagSet) error {
|
||||
if f.Changed {
|
||||
alreadySet[FlagToEnv(prefix, f.Name)] = true
|
||||
}
|
||||
if serr := setFlagFromEnv(fs, prefix, f.Name, usedEnvKey, alreadySet, false); serr != nil {
|
||||
if serr := setFlagFromEnv(lg, fs, prefix, f.Name, usedEnvKey, alreadySet, false); serr != nil {
|
||||
err = serr
|
||||
}
|
||||
})
|
||||
verifyEnv(prefix, usedEnvKey, alreadySet)
|
||||
verifyEnv(lg, prefix, usedEnvKey, alreadySet)
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -71,20 +69,29 @@ func FlagToEnv(prefix, name string) string {
|
||||
return prefix + "_" + strings.ToUpper(strings.Replace(name, "-", "_", -1))
|
||||
}
|
||||
|
||||
func verifyEnv(prefix string, usedEnvKey, alreadySet map[string]bool) {
|
||||
func verifyEnv(lg *zap.Logger, prefix string, usedEnvKey, alreadySet map[string]bool) {
|
||||
for _, env := range os.Environ() {
|
||||
kv := strings.SplitN(env, "=", 2)
|
||||
if len(kv) != 2 {
|
||||
plog.Warningf("found invalid env %s", env)
|
||||
if lg != nil {
|
||||
lg.Warn("found invalid environment variable", zap.String("environment-variable", env))
|
||||
}
|
||||
}
|
||||
if usedEnvKey[kv[0]] {
|
||||
continue
|
||||
}
|
||||
if alreadySet[kv[0]] {
|
||||
plog.Fatalf("conflicting environment variable %q is shadowed by corresponding command-line flag (either unset environment variable or disable flag)", kv[0])
|
||||
if lg != nil {
|
||||
lg.Fatal(
|
||||
"conflicting environment variable is shadowed by corresponding command-line flag (either unset environment variable or disable flag))",
|
||||
zap.String("environment-variable", kv[0]),
|
||||
)
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(env, prefix+"_") {
|
||||
plog.Warningf("unrecognized environment variable %s", env)
|
||||
if lg != nil {
|
||||
lg.Warn("unrecognized environment variable", zap.String("environment-variable", env))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -93,7 +100,7 @@ type flagSetter interface {
|
||||
Set(fk string, fv string) error
|
||||
}
|
||||
|
||||
func setFlagFromEnv(fs flagSetter, prefix, fname string, usedEnvKey, alreadySet map[string]bool, log bool) error {
|
||||
func setFlagFromEnv(lg *zap.Logger, fs flagSetter, prefix, fname string, usedEnvKey, alreadySet map[string]bool, log bool) error {
|
||||
key := FlagToEnv(prefix, fname)
|
||||
if !alreadySet[key] {
|
||||
val := os.Getenv(key)
|
||||
@@ -102,8 +109,12 @@ func setFlagFromEnv(fs flagSetter, prefix, fname string, usedEnvKey, alreadySet
|
||||
if serr := fs.Set(fname, val); serr != nil {
|
||||
return fmt.Errorf("invalid value %q for %s: %v", val, key, serr)
|
||||
}
|
||||
if log {
|
||||
plog.Infof("recognized and used environment variable %s=%s", key, val)
|
||||
if log && lg != nil {
|
||||
lg.Info(
|
||||
"recognized and used environment variable",
|
||||
zap.String("variable-name", key),
|
||||
zap.String("variable-value", val),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -19,6 +19,8 @@ import (
|
||||
"os"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
func TestSetFlagsFromEnv(t *testing.T) {
|
||||
@@ -47,7 +49,7 @@ func TestSetFlagsFromEnv(t *testing.T) {
|
||||
}
|
||||
|
||||
// now read the env and verify flags were updated as expected
|
||||
err := SetFlagsFromEnv("ETCD", fs)
|
||||
err := SetFlagsFromEnv(zap.NewExample(), "ETCD", fs)
|
||||
if err != nil {
|
||||
t.Errorf("err=%v, want nil", err)
|
||||
}
|
||||
@@ -66,7 +68,7 @@ func TestSetFlagsFromEnvBad(t *testing.T) {
|
||||
fs := flag.NewFlagSet("testing", flag.ExitOnError)
|
||||
fs.Int("x", 0, "")
|
||||
os.Setenv("ETCD_X", "not_a_number")
|
||||
if err := SetFlagsFromEnv("ETCD", fs); err == nil {
|
||||
if err := SetFlagsFromEnv(zap.NewExample(), "ETCD", fs); err == nil {
|
||||
t.Errorf("err=nil, want != nil")
|
||||
}
|
||||
}
|
||||
@@ -81,7 +83,7 @@ func TestSetFlagsFromEnvParsingError(t *testing.T) {
|
||||
}
|
||||
defer os.Unsetenv("ETCD_HEARTBEAT_INTERVAL")
|
||||
|
||||
err := SetFlagsFromEnv("ETCD", fs)
|
||||
err := SetFlagsFromEnv(zap.NewExample(), "ETCD", fs)
|
||||
for _, v := range []string{"invalid syntax", "parse error"} {
|
||||
if strings.Contains(err.Error(), v) {
|
||||
err = nil
|
||||
|
||||
@@ -14,10 +14,13 @@
|
||||
|
||||
package flags
|
||||
|
||||
import "go.uber.org/zap"
|
||||
|
||||
// IgnoredFlag encapsulates a flag that may have been previously valid but is
|
||||
// now ignored. If an IgnoredFlag is set, a warning is printed and
|
||||
// operation continues.
|
||||
type IgnoredFlag struct {
|
||||
lg *zap.Logger
|
||||
Name string
|
||||
}
|
||||
|
||||
@@ -27,7 +30,9 @@ func (f *IgnoredFlag) IsBoolFlag() bool {
|
||||
}
|
||||
|
||||
func (f *IgnoredFlag) Set(s string) error {
|
||||
plog.Warningf(`flag "-%s" is no longer supported - ignoring.`, f.Name)
|
||||
if f.lg != nil {
|
||||
f.lg.Warn("flag is no longer supported - ignoring", zap.String("flag-name", f.Name))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@@ -16,6 +16,7 @@ package flags
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
@@ -41,7 +42,7 @@ func NewStringsValue(s string) (ss *StringsValue) {
|
||||
}
|
||||
ss = new(StringsValue)
|
||||
if err := ss.Set(s); err != nil {
|
||||
plog.Panicf("new StringsValue should never fail: %v", err)
|
||||
panic(fmt.Sprintf("new StringsValue should never fail: %v", err))
|
||||
}
|
||||
return ss
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ package flags
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"sort"
|
||||
"strings"
|
||||
)
|
||||
@@ -60,7 +61,7 @@ func NewUniqueStringsValue(s string) (us *UniqueStringsValue) {
|
||||
return us
|
||||
}
|
||||
if err := us.Set(s); err != nil {
|
||||
plog.Panicf("new UniqueStringsValue should never fail: %v", err)
|
||||
panic(fmt.Sprintf("new UniqueStringsValue should never fail: %v", err))
|
||||
}
|
||||
return us
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ package flags
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"sort"
|
||||
"strings"
|
||||
@@ -76,7 +77,7 @@ func NewUniqueURLsWithExceptions(s string, exceptions ...string) *UniqueURLs {
|
||||
return us
|
||||
}
|
||||
if err := us.Set(s); err != nil {
|
||||
plog.Panicf("new UniqueURLs should never fail: %v", err)
|
||||
panic(fmt.Sprintf("new UniqueURLs should never fail: %v", err))
|
||||
}
|
||||
return us
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ package flags
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"net/url"
|
||||
"strings"
|
||||
|
||||
@@ -54,7 +55,7 @@ func NewURLsValue(s string) *URLsValue {
|
||||
}
|
||||
v := &URLsValue{}
|
||||
if err := v.Set(s); err != nil {
|
||||
plog.Panicf("new URLsValue should never fail: %v", err)
|
||||
panic(fmt.Sprintf("new URLsValue should never fail: %v", err))
|
||||
}
|
||||
return v
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user