From: Ivo Jimenez Date: Wed, 8 Jul 2015 00:57:02 +0000 (-0700) Subject: Allows other users besides ubuntu X-Git-Tag: 1.1.0~879^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=8ba655af8d78722b70a3615561e9bcfa9c5f8cc2;p=teuthology.git Allows other users besides ubuntu Hostname canonicalization using split() instead of RE. Extends the semantics of canonicalization/decanonicalization routines so that other user names can be specified. 'ubuntu' is still the default but if other users are given on the 'targets' config option, those will be used instead. --- diff --git a/teuthology/misc.py b/teuthology/misc.py index bf6f709b3b..5b6a8008d3 100644 --- a/teuthology/misc.py +++ b/teuthology/misc.py @@ -38,41 +38,33 @@ is_vm = lambda x: x.startswith('vpm') or x.startswith('ubuntu@vpm') is_arm = lambda x: x.startswith('tala') or x.startswith( 'ubuntu@tala') or x.startswith('saya') or x.startswith('ubuntu@saya') -hostname_expr_templ = '(?P.*@)?(?P.*)\.{lab_domain}' - def canonicalize_hostname(hostname, user='ubuntu'): - hostname_expr = hostname_expr_templ.format( - lab_domain=config.lab_domain.replace('.', '\.')) - match = re.match(hostname_expr, hostname) - if match: - match_d = match.groupdict() - shortname = match_d['shortname'] - if user is None: - user_ = user - else: - user_ = match_d.get('user') or user - else: - shortname = hostname.split('.')[0] - user_ = user + userhost = hostname.split('@') - user_at = user_.strip('@') + '@' if user_ else '' + both_given = len(userhost) == 2 - ret = '{user_at}{short}.{lab_domain}'.format( - user_at=user_at, - short=shortname, - lab_domain=config.lab_domain, - ) - return ret + usr = userhost[0] if both_given else (user if user is not None else '') + hst = userhost[1] if both_given else userhost[0] + lab = config.lab_domain + + user_at = (usr + "@") if usr else '' + domain = hst if lab in hst else (hst + '.' + lab) if lab else hst + + return user_at + domain def decanonicalize_hostname(hostname): - hostname_expr = hostname_expr_templ.format( - lab_domain=config.lab_domain.replace('.', '\.')) - match = re.match(hostname_expr, hostname) - if match: - hostname = match.groupdict()['shortname'] - return hostname + userhost = hostname.split('@') + + both_given = len(userhost) == 2 + + host = userhost[1] if both_given else userhost[0] + + if config.lab_domain: + return host.split('.')[0] + else: + return host def config_file(string): diff --git a/teuthology/test/test_misc.py b/teuthology/test/test_misc.py index c3da5dbc10..724994ea14 100644 --- a/teuthology/test/test_misc.py +++ b/teuthology/test/test_misc.py @@ -94,6 +94,35 @@ class TestHostnames(object): assert result == 'box1' + def test_canonicalize_hostname_otheruser(self): + host_base = 'foo@box1' + result = misc.canonicalize_hostname(host_base) + assert result == 'foo@box1.front.sepia.ceph.com' + + def test_canonicalize_hostname_nolab(self): + config.lab_domain = '' + host_base = 'foo@192.168.0.1' + result = misc.canonicalize_hostname(host_base) + assert result == 'foo@192.168.0.1' + host_base = 'foo@full.domain.org' + result = misc.canonicalize_hostname(host_base) + assert result == 'foo@full.domain.org' + + def test_decanonicalize_hostname_nolab(self): + config.lab_domain = '' + host_base = 'foo@192.168.0.1' + result = misc.decanonicalize_hostname(host_base) + assert result == '192.168.0.1' + host_base = 'foo@full.domain.org' + result = misc.decanonicalize_hostname(host_base) + assert result == 'full.domain.org' + + def test_canonicalize_hostname_repeateddomain(self): + config.lab_domain = 'ceph.com' + host_base = 'foo@bar.ceph.com' + result = misc.canonicalize_hostname(host_base) + assert result == 'foo@bar.ceph.com' + class TestMergeConfigs(object): """ Tests merge_config and deep_merge in teuthology.misc """