From: Alfredo Deza Date: Wed, 31 Jul 2013 20:18:47 +0000 (-0400) Subject: create a Hostname validator X-Git-Tag: v1.2~12^2~3 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=37881d40fa2b4366e81c21cd519dcc3cfc29549d;p=ceph-deploy.git create a Hostname validator Signed-off-by: Alfredo Deza --- diff --git a/ceph_deploy/util/arg_validators.py b/ceph_deploy/util/arg_validators.py index b85aeaf..de01ff4 100644 --- a/ceph_deploy/util/arg_validators.py +++ b/ceph_deploy/util/arg_validators.py @@ -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