func (cfg *config) configFromCmdLine() error { err := flags.SetFlagsFromEnv("ETCD", cfg.FlagSet) if err != nil { plog.Fatalf("%v", err) } cfg.LPUrls = flags.URLsFromFlag(cfg.FlagSet, "listen-peer-urls") cfg.APUrls = flags.URLsFromFlag(cfg.FlagSet, "initial-advertise-peer-urls") cfg.LCUrls = flags.URLsFromFlag(cfg.FlagSet, "listen-client-urls") cfg.ACUrls = flags.URLsFromFlag(cfg.FlagSet, "advertise-client-urls") cfg.ClusterState = cfg.clusterState.String() cfg.Fallback = cfg.fallback.String() cfg.Proxy = cfg.proxy.String() // disable default advertise-client-urls if lcurls is set missingAC := flags.IsSet(cfg.FlagSet, "listen-client-urls") && !flags.IsSet(cfg.FlagSet, "advertise-client-urls") if !cfg.mayBeProxy() && missingAC { cfg.ACUrls = nil } // disable default initial-cluster if discovery is set if (cfg.Durl != "" || cfg.DNSCluster != "") && !flags.IsSet(cfg.FlagSet, "initial-cluster") { cfg.InitialCluster = "" } return cfg.validate() }
func (cfg *config) configFromCmdLine() error { err := flags.SetFlagsFromEnv("ETCD", cfg.FlagSet) if err != nil { plog.Fatalf("%v", err) } flags.SetBindAddrFromAddr(cfg.FlagSet, "peer-bind-addr", "peer-addr") flags.SetBindAddrFromAddr(cfg.FlagSet, "bind-addr", "addr") cfg.lpurls, err = flags.URLsFromFlags(cfg.FlagSet, "listen-peer-urls", "peer-bind-addr", cfg.peerTLSInfo) if err != nil { return err } cfg.apurls, err = flags.URLsFromFlags(cfg.FlagSet, "initial-advertise-peer-urls", "peer-addr", cfg.peerTLSInfo) if err != nil { return err } cfg.lcurls, err = flags.URLsFromFlags(cfg.FlagSet, "listen-client-urls", "bind-addr", cfg.clientTLSInfo) if err != nil { return err } cfg.acurls, err = flags.URLsFromFlags(cfg.FlagSet, "advertise-client-urls", "addr", cfg.clientTLSInfo) if err != nil { return err } return cfg.validateConfig(func(field string) bool { return flags.IsSet(cfg.FlagSet, field) }) }
func (cfg *config) configFromCmdLine() error { err := flags.SetFlagsFromEnv("ETCD", cfg.FlagSet) if err != nil { plog.Fatalf("%v", err) } cfg.lpurls = flags.URLsFromFlag(cfg.FlagSet, "listen-peer-urls") cfg.apurls = flags.URLsFromFlag(cfg.FlagSet, "initial-advertise-peer-urls") cfg.lcurls = flags.URLsFromFlag(cfg.FlagSet, "listen-client-urls") cfg.acurls = flags.URLsFromFlag(cfg.FlagSet, "advertise-client-urls") return cfg.validateConfig(func(field string) bool { return flags.IsSet(cfg.FlagSet, field) }) }
func (cfg *config) Parse(arguments []string) error { perr := cfg.FlagSet.Parse(arguments) switch perr { case nil: case flag.ErrHelp: fmt.Println(flagsline) os.Exit(0) default: os.Exit(2) } if len(cfg.FlagSet.Args()) != 0 { return fmt.Errorf("'%s' is not a valid flag", cfg.FlagSet.Arg(0)) } if cfg.printVersion { fmt.Printf("etcd Version: %s\n", version.Version) fmt.Printf("Git SHA: %s\n", version.GitSHA) fmt.Printf("Go Version: %s\n", runtime.Version()) fmt.Printf("Go OS/Arch: %s/%s\n", runtime.GOOS, runtime.GOARCH) os.Exit(0) } err := flags.SetFlagsFromEnv("ETCD", cfg.FlagSet) if err != nil { plog.Fatalf("%v", err) } set := make(map[string]bool) cfg.FlagSet.Visit(func(f *flag.Flag) { set[f.Name] = true }) nSet := 0 for _, v := range []bool{set["discovery"], set["initial-cluster"], set["discovery-srv"]} { if v { nSet += 1 } } if nSet > 1 { return ErrConflictBootstrapFlags } flags.SetBindAddrFromAddr(cfg.FlagSet, "peer-bind-addr", "peer-addr") flags.SetBindAddrFromAddr(cfg.FlagSet, "bind-addr", "addr") cfg.lpurls, err = flags.URLsFromFlags(cfg.FlagSet, "listen-peer-urls", "peer-bind-addr", cfg.peerTLSInfo) if err != nil { return err } cfg.apurls, err = flags.URLsFromFlags(cfg.FlagSet, "initial-advertise-peer-urls", "peer-addr", cfg.peerTLSInfo) if err != nil { return err } cfg.lcurls, err = flags.URLsFromFlags(cfg.FlagSet, "listen-client-urls", "bind-addr", cfg.clientTLSInfo) if err != nil { return err } cfg.acurls, err = flags.URLsFromFlags(cfg.FlagSet, "advertise-client-urls", "addr", cfg.clientTLSInfo) if err != nil { return err } // when etcd runs in member mode user needs to set --advertise-client-urls if --listen-client-urls is set. // TODO(yichengq): check this for joining through discovery service case mayFallbackToProxy := flags.IsSet(cfg.FlagSet, "discovery") && cfg.fallback.String() == fallbackFlagProxy mayBeProxy := cfg.proxy.String() != proxyFlagOff || mayFallbackToProxy if !mayBeProxy { if flags.IsSet(cfg.FlagSet, "listen-client-urls") && !flags.IsSet(cfg.FlagSet, "advertise-client-urls") { return errUnsetAdvertiseClientURLsFlag } } if 5*cfg.TickMs > cfg.ElectionMs { return fmt.Errorf("--election-timeout[%vms] should be at least as 5 times as --heartbeat-interval[%vms]", cfg.ElectionMs, cfg.TickMs) } if cfg.ElectionMs > maxElectionMs { return fmt.Errorf("--election-timeout[%vms] is too long, and should be set less than %vms", cfg.ElectionMs, maxElectionMs) } return nil }
func (cfg *config) Parse(arguments []string) error { perr := cfg.FlagSet.Parse(arguments) switch perr { case nil: case flag.ErrHelp: os.Exit(0) default: os.Exit(2) } if cfg.printVersion { fmt.Println("etcd version", version.Version) os.Exit(0) } err := flags.SetFlagsFromEnv(cfg.FlagSet) if err != nil { log.Fatalf("etcd: %v", err) } set := make(map[string]bool) cfg.FlagSet.Visit(func(f *flag.Flag) { set[f.Name] = true }) nSet := 0 for _, v := range []bool{set["discovery"], set["initial-cluster"], set["discovery-srv"]} { if v { nSet += 1 } } if nSet > 1 { return ErrConflictBootstrapFlags } peerBindAddrFlag := "peer-bind-addr" if !flags.IsSet(cfg.FlagSet, peerBindAddrFlag) { peerBindAddrFlag = "peer-addr" } cfg.lpurls, err = flags.URLsFromFlags(cfg.FlagSet, "listen-peer-urls", peerBindAddrFlag, cfg.peerTLSInfo) if err != nil { return err } cfg.apurls, err = flags.URLsFromFlags(cfg.FlagSet, "initial-advertise-peer-urls", "peer-addr", cfg.peerTLSInfo) if err != nil { return err } bindAddrFlag := "bind-addr" if !flags.IsSet(cfg.FlagSet, bindAddrFlag) { bindAddrFlag = "addr" } cfg.lcurls, err = flags.URLsFromFlags(cfg.FlagSet, "listen-client-urls", bindAddrFlag, cfg.clientTLSInfo) if err != nil { return err } cfg.acurls, err = flags.URLsFromFlags(cfg.FlagSet, "advertise-client-urls", "addr", cfg.clientTLSInfo) if err != nil { return err } if err := cfg.resolveUrls(); err != nil { return errors.New("cannot resolve DNS hostnames.") } return nil }