mirror of https://github.com/hashicorp/consul
agent: do not modify agent config after NewAgent
parent
cec9dcfee8
commit
7381a05d8d
|
@ -221,6 +221,53 @@ func New(c *Config) (*Agent, error) {
|
||||||
if err := a.resolveTmplAddrs(); err != nil {
|
if err := a.resolveTmplAddrs(); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Try to get an advertise address
|
||||||
|
switch {
|
||||||
|
case a.config.AdvertiseAddr != "":
|
||||||
|
ipStr, err := parseSingleIPTemplate(a.config.AdvertiseAddr)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Advertise address resolution failed: %v", err)
|
||||||
|
}
|
||||||
|
if net.ParseIP(ipStr) == nil {
|
||||||
|
return nil, fmt.Errorf("Failed to parse advertise address: %v", ipStr)
|
||||||
|
}
|
||||||
|
a.config.AdvertiseAddr = ipStr
|
||||||
|
|
||||||
|
case a.config.BindAddr != "" && !ipaddr.IsAny(a.config.BindAddr):
|
||||||
|
a.config.AdvertiseAddr = a.config.BindAddr
|
||||||
|
|
||||||
|
default:
|
||||||
|
ip, err := consul.GetPrivateIP()
|
||||||
|
if ipaddr.IsAnyV6(a.config.BindAddr) {
|
||||||
|
ip, err = consul.GetPublicIPv6()
|
||||||
|
}
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Failed to get advertise address: %v", err)
|
||||||
|
}
|
||||||
|
a.config.AdvertiseAddr = ip.String()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to get an advertise address for the wan
|
||||||
|
if a.config.AdvertiseAddrWan != "" {
|
||||||
|
ipStr, err := parseSingleIPTemplate(a.config.AdvertiseAddrWan)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Advertise WAN address resolution failed: %v", err)
|
||||||
|
}
|
||||||
|
if net.ParseIP(ipStr) == nil {
|
||||||
|
return nil, fmt.Errorf("Failed to parse advertise address for WAN: %v", ipStr)
|
||||||
|
}
|
||||||
|
a.config.AdvertiseAddrWan = ipStr
|
||||||
|
} else {
|
||||||
|
a.config.AdvertiseAddrWan = a.config.AdvertiseAddr
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create the default set of tagged addresses.
|
||||||
|
a.config.TaggedAddresses = map[string]string{
|
||||||
|
"lan": a.config.AdvertiseAddr,
|
||||||
|
"wan": a.config.AdvertiseAddrWan,
|
||||||
|
}
|
||||||
|
|
||||||
return a, nil
|
return a, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -607,51 +654,6 @@ func (a *Agent) consulConfig() (*consul.Config, error) {
|
||||||
if a.config.SerfWanBindAddr != "" {
|
if a.config.SerfWanBindAddr != "" {
|
||||||
base.SerfWANConfig.MemberlistConfig.BindAddr = a.config.SerfWanBindAddr
|
base.SerfWANConfig.MemberlistConfig.BindAddr = a.config.SerfWanBindAddr
|
||||||
}
|
}
|
||||||
// Try to get an advertise address
|
|
||||||
switch {
|
|
||||||
case a.config.AdvertiseAddr != "":
|
|
||||||
ipStr, err := parseSingleIPTemplate(a.config.AdvertiseAddr)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Advertise address resolution failed: %v", err)
|
|
||||||
}
|
|
||||||
if net.ParseIP(ipStr) == nil {
|
|
||||||
return nil, fmt.Errorf("Failed to parse advertise address: %v", ipStr)
|
|
||||||
}
|
|
||||||
a.config.AdvertiseAddr = ipStr
|
|
||||||
|
|
||||||
case a.config.BindAddr != "" && !ipaddr.IsAny(a.config.BindAddr):
|
|
||||||
a.config.AdvertiseAddr = a.config.BindAddr
|
|
||||||
|
|
||||||
default:
|
|
||||||
ip, err := consul.GetPrivateIP()
|
|
||||||
if ipaddr.IsAnyV6(a.config.BindAddr) {
|
|
||||||
ip, err = consul.GetPublicIPv6()
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Failed to get advertise address: %v", err)
|
|
||||||
}
|
|
||||||
a.config.AdvertiseAddr = ip.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// Try to get an advertise address for the wan
|
|
||||||
if a.config.AdvertiseAddrWan != "" {
|
|
||||||
ipStr, err := parseSingleIPTemplate(a.config.AdvertiseAddrWan)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("Advertise WAN address resolution failed: %v", err)
|
|
||||||
}
|
|
||||||
if net.ParseIP(ipStr) == nil {
|
|
||||||
return nil, fmt.Errorf("Failed to parse advertise address for WAN: %v", ipStr)
|
|
||||||
}
|
|
||||||
a.config.AdvertiseAddrWan = ipStr
|
|
||||||
} else {
|
|
||||||
a.config.AdvertiseAddrWan = a.config.AdvertiseAddr
|
|
||||||
}
|
|
||||||
|
|
||||||
// Create the default set of tagged addresses.
|
|
||||||
a.config.TaggedAddresses = map[string]string{
|
|
||||||
"lan": a.config.AdvertiseAddr,
|
|
||||||
"wan": a.config.AdvertiseAddrWan,
|
|
||||||
}
|
|
||||||
|
|
||||||
if a.config.AdvertiseAddr != "" {
|
if a.config.AdvertiseAddr != "" {
|
||||||
base.SerfLANConfig.MemberlistConfig.AdvertiseAddr = a.config.AdvertiseAddr
|
base.SerfLANConfig.MemberlistConfig.AdvertiseAddr = a.config.AdvertiseAddr
|
||||||
|
|
Loading…
Reference in New Issue