diff --git a/etcdmain/config.go b/etcdmain/config.go index 0e5604772..633684a3a 100644 --- a/etcdmain/config.go +++ b/etcdmain/config.go @@ -62,6 +62,7 @@ var ( ErrConflictBootstrapFlags = fmt.Errorf("multiple discovery or bootstrap flags are set" + "Choose one of \"initial-cluster\", \"discovery\" or \"discovery-srv\"") + errUnsetAdvertiseClientURLsFlag = fmt.Errorf("-advertise-client-urls is required when -listen-client-urls is set explicitly") ) type config struct { @@ -253,6 +254,9 @@ func (cfg *config) Parse(arguments []string) error { if err != nil { return err } + 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) diff --git a/etcdmain/config_test.go b/etcdmain/config_test.go index 38c3ebb5f..2a6331fdc 100644 --- a/etcdmain/config_test.go +++ b/etcdmain/config_test.go @@ -29,6 +29,8 @@ func TestConfigParsingMemberFlags(t *testing.T) { "-snapshot-count=10", "-listen-peer-urls=http://localhost:8000,https://localhost:8001", "-listen-client-urls=http://localhost:7000,https://localhost:7001", + // it should be set if -listen-client-urls is set + "-advertise-client-urls=http://localhost:7000,https://localhost:7001", } wcfg := &config{ dir: "testdir", diff --git a/etcdmain/etcd.go b/etcdmain/etcd.go index d7ebb8eed..49b7b8896 100644 --- a/etcdmain/etcd.go +++ b/etcdmain/etcd.go @@ -56,8 +56,12 @@ func Main() { cfg := NewConfig() err := cfg.Parse(os.Args[1:]) if err != nil { - log.Printf("etcd: error verifying flags, %v. See 'etcd -help'.", err) - os.Exit(2) + log.Printf("error verifying flags, %v. See 'etcd -help'.", err) + switch err { + case errUnsetAdvertiseClientURLsFlag: + log.Printf("When listening on specific address(es), this etcd process must advertise accessible url(s) to each connected client.") + } + os.Exit(1) } var stopped <-chan struct{} diff --git a/etcdmain/help.go b/etcdmain/help.go index d4d20ab5b..3a87cba53 100644 --- a/etcdmain/help.go +++ b/etcdmain/help.go @@ -56,7 +56,8 @@ clustering flags: --initial-cluster-token 'etcd-cluster' initial cluster token for the etcd cluster during bootstrap. --advertise-client-urls 'http://localhost:2379,http://localhost:4001' - list of this member's client URLs to advertise to the rest of the cluster. + list of this member's client URLs to advertise to the public. + The client URLs advertised should be accessible to machines that talk to etcd cluster. etcd client libraries parse these URLs to connect to the cluster. --discovery '' discovery URL used to bootstrap the cluster. --discovery-fallback 'proxy'