]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-deploy.git/commitdiff
create a Hostname validator
authorAlfredo Deza <alfredo@deza.pe>
Wed, 31 Jul 2013 20:18:47 +0000 (16:18 -0400)
committerAlfredo Deza <alfredo@deza.pe>
Thu, 1 Aug 2013 19:50:03 +0000 (15:50 -0400)
Signed-off-by: Alfredo Deza <alfredo@deza.pe>
ceph_deploy/util/arg_validators.py

index b85aeafb286737e09c4f2448d27b28cf8528429d..de01ff4e06a0266bd9c17102524e8a9db90b7f7b 100644 (file)
@@ -1,3 +1,4 @@
+import socket
 import argparse
 import re
 
@@ -21,3 +22,27 @@ class RegexMatch(object):
         if match:
             raise argparse.ArgumentError(None, self.statement)
         return string
+
+
+class Hostname(object):
+    """
+    Checks wether a given hostname is resolvable in DNS, otherwise raising and
+    argparse error.
+    """
+
+    def __init__(self, _socket=None):
+        self.socket = _socket or socket  # just used for testing
+
+    def __call__(self, string):
+        host = string.split(':')[-1]  # we might have name:host
+        try:
+            resolved_addr = self.socket.gethostbyname(host)
+        except self.socket.gaierror:
+            msg = "hostname: %s is not resolvable" % host
+            raise argparse.ArgumentError(None, msg)
+
+        if resolved_addr == host:
+            msg = "IP: %s is not a resolvable hostname" % host
+            raise argparse.ArgumentError(None, msg)
+
+        return string