From 37881d40fa2b4366e81c21cd519dcc3cfc29549d Mon Sep 17 00:00:00 2001 From: Alfredo Deza Date: Wed, 31 Jul 2013 16:18:47 -0400 Subject: [PATCH] create a Hostname validator Signed-off-by: Alfredo Deza --- ceph_deploy/util/arg_validators.py | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) 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 -- 2.47.3