Jelajahi Sumber

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.
Lucas Servén Marín 7 tahun lalu
induk
melakukan
51df7fc4e3
1 mengubah file dengan 6 tambahan dan 8 penghapusan
  1. 6 8
      pkg/mesh/ip.go

+ 6 - 8
pkg/mesh/ip.go

@@ -62,10 +62,7 @@ func getIP(hostname string, ignoreIfaces ...int) (*net.IPNet, *net.IPNet, error)
 	var hostPriv, hostPub []*net.IPNet
 	{
 		// Check IPs to which hostname resolves first.
-		ips, err := ipsForHostname(hostname)
-		if err != nil {
-			return nil, nil, err
-		}
+		ips := ipsForHostname(hostname)
 		for _, ip := range ips {
 			ok, mask, err := assignedToInterface(ip)
 			if err != nil {
@@ -241,19 +238,20 @@ func isPublic(ip *net.IPNet) bool {
 
 // ipsForHostname returns a slice of IPs to which the
 // given hostname resolves.
-func ipsForHostname(hostname string) ([]*net.IPNet, error) {
+func ipsForHostname(hostname string) []*net.IPNet {
 	if ip := net.ParseIP(hostname); ip != nil {
-		return []*net.IPNet{oneAddressCIDR(ip)}, nil
+		return []*net.IPNet{oneAddressCIDR(ip)}
 	}
 	ips, err := net.LookupIP(hostname)
 	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))
 	for i := range ips {
 		nets[i] = oneAddressCIDR(ips[i])
 	}
-	return nets, nil
+	return nets
 }
 
 // ipsForAllInterfaces returns a slice of IPs assigned to all the