]> git.apps.os.sepia.ceph.com Git - teuthology.git/commitdiff
Allows other users besides ubuntu wip-11892-docker
authorIvo Jimenez <ivo.jimenez@gmail.com>
Wed, 8 Jul 2015 00:57:02 +0000 (17:57 -0700)
committerIvo Jimenez <ivo.jimenez@gmail.com>
Thu, 3 Sep 2015 08:17:28 +0000 (01:17 -0700)
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.

teuthology/misc.py
teuthology/test/test_misc.py

index 7dbb0e3d10a490ad8dd1f777e390b7626eac88dd..2273873e01ea3307dcb188a6ef07597afb479587 100644 (file)
@@ -39,41 +39,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<user>.*@)?(?P<shortname>.*)\.{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 = '' if user is None else userhost[0] if both_given else user
+    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):
index c3da5dbc10163334b7f06f784c89427eed8908e1..f75cdfd6fd34dedc00d233d71eee719d0cc5a459 100644 (file)
@@ -76,6 +76,11 @@ class TestHostnames(object):
         result = misc.canonicalize_hostname(host_base, user=None)
         assert result == 'box1.front.sepia.ceph.com'
 
+    def test_canonicalize_hostname_nouserarg_withuserat(self):
+        host_base = 'ubuntu@box1'
+        result = misc.canonicalize_hostname(host_base, user=None)
+        assert result == 'box1.front.sepia.ceph.com'
+
     def test_decanonicalize_hostname_nouser(self):
         host = 'box1.front.sepia.ceph.com'
         result = misc.decanonicalize_hostname(host)
@@ -93,6 +98,40 @@ class TestHostnames(object):
         result = misc.decanonicalize_hostname(host)
         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_ip(self):
+        config.lab_domain = ''
+        host_base = 'foo@192.168.0.1'
+        result = misc.canonicalize_hostname(host_base)
+        assert result == 'foo@192.168.0.1'
+
+    def test_canonicalize_hostname_nolab_domainname(self):
+        config.lab_domain = ''
+        host_base = 'foo@full.domain.org'
+        result = misc.canonicalize_hostname(host_base)
+        assert result == 'foo@full.domain.org'
+
+    def test_decanonicalize_hostname_nolab_ip(self):
+        config.lab_domain = ''
+        host_base = 'foo@192.168.0.1'
+        result = misc.decanonicalize_hostname(host_base)
+        assert result == '192.168.0.1'
+
+    def test_decanonicalize_hostname_nolab_domainname(self):
+        config.lab_domain = ''
+        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 """