gnt-cluster modify: ipolicy vs enabled disk templates
[ganeti-local] / lib / netutils.py
index 3b76588..f39ef77 100644 (file)
@@ -52,6 +52,13 @@ from ganeti import vcluster
 _STRUCT_UCRED = "iII"
 _STRUCT_UCRED_SIZE = struct.calcsize(_STRUCT_UCRED)
 
+# Workaround a bug in some linux distributions that don't define SO_PEERCRED
+try:
+  # pylint: disable=E1101
+  _SO_PEERCRED = IN.SO_PEERCRED
+except AttributeError:
+  _SO_PEERCRED = 17
+
 # Regexes used to find IP addresses in the output of ip.
 _IP_RE_TEXT = r"[.:a-z0-9]+"      # separate for testing purposes
 _IP_FAMILY_RE = re.compile(r"(?P<family>inet6?)\s+(?P<ip>%s)/" % _IP_RE_TEXT,
@@ -93,7 +100,7 @@ def GetSocketCredentials(sock):
   @return: The PID, UID and GID of the connected foreign process.
 
   """
-  peercred = sock.getsockopt(socket.SOL_SOCKET, IN.SO_PEERCRED,
+  peercred = sock.getsockopt(socket.SOL_SOCKET, _SO_PEERCRED,
                              _STRUCT_UCRED_SIZE)
   return struct.unpack(_STRUCT_UCRED, peercred)
 
@@ -281,10 +288,14 @@ def TcpPing(target, port, timeout=10, live_port_needed=False, source=None):
       than C{EADDRNOTAVAIL} will be ignored
 
   """
+  logging.debug("Attempting to reach TCP port %s on target %s with a timeout"
+                " of %s seconds", port, target, timeout)
+
   try:
     family = IPAddress.GetAddressFamily(target)
-  except errors.GenericError:
-    return False
+  except errors.IPAddressError, err:
+    raise errors.ProgrammerError("Family of IP address given in parameter"
+                                 " 'target' can't be determined: %s" % err)
 
   sock = socket.socket(family, socket.SOCK_STREAM)
   success = False