pkg/mesh: don't let hostname resolution stop mesh
If the hostname fails to resolve, this should not be considered a blocking error. Most likely, it means that the hostname is simply not resolvable, which should not be a requirement to run Kilo. In this case, simply try to find a valid IP from other sources.
This commit is contained in:
parent
c9969f5be9
commit
51df7fc4e3
@ -62,10 +62,7 @@ func getIP(hostname string, ignoreIfaces ...int) (*net.IPNet, *net.IPNet, error)
|
|||||||
var hostPriv, hostPub []*net.IPNet
|
var hostPriv, hostPub []*net.IPNet
|
||||||
{
|
{
|
||||||
// Check IPs to which hostname resolves first.
|
// Check IPs to which hostname resolves first.
|
||||||
ips, err := ipsForHostname(hostname)
|
ips := ipsForHostname(hostname)
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
for _, ip := range ips {
|
for _, ip := range ips {
|
||||||
ok, mask, err := assignedToInterface(ip)
|
ok, mask, err := assignedToInterface(ip)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -241,19 +238,20 @@ func isPublic(ip *net.IPNet) bool {
|
|||||||
|
|
||||||
// ipsForHostname returns a slice of IPs to which the
|
// ipsForHostname returns a slice of IPs to which the
|
||||||
// given hostname resolves.
|
// given hostname resolves.
|
||||||
func ipsForHostname(hostname string) ([]*net.IPNet, error) {
|
func ipsForHostname(hostname string) []*net.IPNet {
|
||||||
if ip := net.ParseIP(hostname); ip != nil {
|
if ip := net.ParseIP(hostname); ip != nil {
|
||||||
return []*net.IPNet{oneAddressCIDR(ip)}, nil
|
return []*net.IPNet{oneAddressCIDR(ip)}
|
||||||
}
|
}
|
||||||
ips, err := net.LookupIP(hostname)
|
ips, err := net.LookupIP(hostname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to lookip IPs of hostname: %v", err)
|
// Most likely the hostname is not resolvable.
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
nets := make([]*net.IPNet, len(ips))
|
nets := make([]*net.IPNet, len(ips))
|
||||||
for i := range ips {
|
for i := range ips {
|
||||||
nets[i] = oneAddressCIDR(ips[i])
|
nets[i] = oneAddressCIDR(ips[i])
|
||||||
}
|
}
|
||||||
return nets, nil
|
return nets
|
||||||
}
|
}
|
||||||
|
|
||||||
// ipsForAllInterfaces returns a slice of IPs assigned to all the
|
// ipsForAllInterfaces returns a slice of IPs assigned to all the
|
||||||
|
Loading…
Reference in New Issue
Block a user