mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
etcdmain: infer bind addr from addr in v1 flagset
This commit is contained in:
parent
0242faa838
commit
57dd8c18cc
@ -231,11 +231,10 @@ func (cfg *config) Parse(arguments []string) error {
|
||||
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)
|
||||
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
|
||||
}
|
||||
@ -243,11 +242,7 @@ func (cfg *config) Parse(arguments []string) error {
|
||||
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)
|
||||
cfg.lcurls, err = flags.URLsFromFlags(cfg.FlagSet, "listen-client-urls", "bind-addr", cfg.clientTLSInfo)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -151,6 +151,35 @@ func TestConfigParsingOtherFlags(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestConfigParsingV1Flags(t *testing.T) {
|
||||
args := []string{
|
||||
"-peer-addr=127.0.0.1:7001",
|
||||
"-addr=127.0.0.1:4001",
|
||||
}
|
||||
wcfg := NewConfig()
|
||||
wcfg.lpurls = []url.URL{{Scheme: "http", Host: "0.0.0.0:7001"}}
|
||||
wcfg.apurls = []url.URL{{Scheme: "http", Host: "127.0.0.1:7001"}}
|
||||
wcfg.lcurls = []url.URL{{Scheme: "http", Host: "0.0.0.0:4001"}}
|
||||
wcfg.acurls = []url.URL{{Scheme: "http", Host: "127.0.0.1:4001"}}
|
||||
|
||||
cfg := NewConfig()
|
||||
if err := cfg.Parse(args); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !reflect.DeepEqual(cfg.lpurls, wcfg.lpurls) {
|
||||
t.Errorf("listen peer urls = %+v, want %+v", cfg.lpurls, wcfg.lpurls)
|
||||
}
|
||||
if !reflect.DeepEqual(cfg.apurls, wcfg.apurls) {
|
||||
t.Errorf("advertise peer urls = %+v, want %+v", cfg.apurls, wcfg.apurls)
|
||||
}
|
||||
if !reflect.DeepEqual(cfg.lcurls, wcfg.lcurls) {
|
||||
t.Errorf("listen client urls = %+v, want %+v", cfg.lcurls, wcfg.lcurls)
|
||||
}
|
||||
if !reflect.DeepEqual(cfg.acurls, wcfg.acurls) {
|
||||
t.Errorf("advertise client urls = %+v, want %+v", cfg.acurls, wcfg.acurls)
|
||||
}
|
||||
}
|
||||
|
||||
func TestConfigParsingConflictClusteringFlags(t *testing.T) {
|
||||
conflictArgs := [][]string{
|
||||
[]string{
|
||||
|
@ -85,6 +85,21 @@ func SetFlagsFromEnv(fs *flag.FlagSet) error {
|
||||
return err
|
||||
}
|
||||
|
||||
// SetBindAddrFromAddr sets the value of bindAddr flag from the value
|
||||
// of addr flag. Both flags' Value must be of type IPAddressPort. If the
|
||||
// bindAddr flag is set and the addr flag is unset, it will set bindAddr to
|
||||
// 0.0.0.0:port of addr. Otherwise, it keeps the original values.
|
||||
func SetBindAddrFromAddr(fs *flag.FlagSet, bindAddrFlagName, addrFlagName string) {
|
||||
if IsSet(fs, bindAddrFlagName) || !IsSet(fs, addrFlagName) {
|
||||
return
|
||||
}
|
||||
addr := *fs.Lookup(addrFlagName).Value.(*IPAddressPort)
|
||||
addr.IP = "0.0.0.0"
|
||||
if err := fs.Set(bindAddrFlagName, addr.String()); err != nil {
|
||||
log.Panicf("etcdmain: unexpected flags set error: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// URLsFromFlags decides what URLs should be using two different flags
|
||||
// as datasources. The first flag's Value must be of type URLs, while
|
||||
// the second must be of type IPAddressPort. If both of these flags
|
||||
|
@ -81,6 +81,49 @@ func TestSetFlagsFromEnvBad(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetBindAddrFromAddr(t *testing.T) {
|
||||
tests := []struct {
|
||||
args []string
|
||||
waddr *IPAddressPort
|
||||
}{
|
||||
// no flags set
|
||||
{
|
||||
args: []string{},
|
||||
waddr: &IPAddressPort{},
|
||||
},
|
||||
// addr flag set
|
||||
{
|
||||
args: []string{"-addr=192.0.3.17:4001"},
|
||||
waddr: &IPAddressPort{IP: "0.0.0.0", Port: 4001},
|
||||
},
|
||||
// bindAddr flag set
|
||||
{
|
||||
args: []string{"-bind-addr=127.0.0.1:4001"},
|
||||
waddr: &IPAddressPort{IP: "127.0.0.1", Port: 4001},
|
||||
},
|
||||
// both addr flags set
|
||||
{
|
||||
args: []string{"-bind-addr=127.0.0.1:4001", "-addr=192.0.3.17:4001"},
|
||||
waddr: &IPAddressPort{IP: "127.0.0.1", Port: 4001},
|
||||
},
|
||||
}
|
||||
for i, tt := range tests {
|
||||
fs := flag.NewFlagSet("test", flag.PanicOnError)
|
||||
fs.Var(&IPAddressPort{}, "addr", "")
|
||||
bindAddr := &IPAddressPort{}
|
||||
fs.Var(bindAddr, "bind-addr", "")
|
||||
if err := fs.Parse(tt.args); err != nil {
|
||||
t.Errorf("#%d: failed to parse flags: %v", i, err)
|
||||
continue
|
||||
}
|
||||
SetBindAddrFromAddr(fs, "bind-addr", "addr")
|
||||
|
||||
if !reflect.DeepEqual(bindAddr, tt.waddr) {
|
||||
t.Errorf("#%d: bindAddr = %+v, want %+v", i, bindAddr, tt.waddr)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestURLsFromFlags(t *testing.T) {
|
||||
tests := []struct {
|
||||
args []string
|
||||
|
Loading…
x
Reference in New Issue
Block a user