import re
import pprint
+from netaddr.strategy.ipv4 import valid_str as _is_ipv4
+from netaddr.strategy.ipv6 import valid_str as _is_ipv6
from teuthology import safepath
from teuthology.exceptions import (CommandCrashedError, CommandFailedError,
ConnectionLostError)
hostname_expr_templ = '(?P<user>.*@)?(?P<shortname>.*)\.{lab_domain}'
+def host_shortname(hostname):
+ if _is_ipv4(hostname) or _is_ipv6(hostname):
+ return hostname
+ else:
+ return hostname.split('.', 1)[0]
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 _is_ipv4(hostname) or _is_ipv6(hostname):
+ return "%s@%s" % (user, hostname)
if match:
match_d = match.groupdict()
shortname = match_d['shortname']
else:
user_ = match_d.get('user') or user
else:
- shortname = hostname.split('.')[0]
+ shortname = host_shortname(hostname)
user_ = user
user_at = user_.strip('@') + '@' if user_ else ''
from .opsys import OS
import connection
from teuthology import misc
+from teuthology.misc import host_shortname
import time
import re
import logging
# should work on any unix system
self.user = pwd.getpwuid(os.getuid()).pw_name
hostname = name
- self._shortname = shortname or hostname.split('.')[0]
+ self._shortname = shortname or host_shortname(hostname)
self._host_key = host_key
self.keep_alive = keep_alive
self._console = console
@property
def shortname(self):
if self._shortname is None:
- self._shortname = self.hostname.split('.')[0]
+ self._shortname = host_shortname(self.hostname)
return self._shortname
@property
"""
Extract the name portion from remote name strings.
"""
- hn = name.split('@')[-1]
- p = re.compile('([^.]+)\.?.*')
- return p.match(hn).groups()[0]
-
+ hostname = name.split('@')[-1]
+ return host_shortname(hostname)
def getRemoteConsole(name, ipmiuser=None, ipmipass=None, ipmidomain=None,
logfile=None, timeout=20):
if hostname:
self.hostname = hostname
else:
- (self.hostname, port) = client.get_transport().getpeername()
+ (self.hostname, port) = client.get_transport().getpeername()[0:2]
self.greenlets = []
self.stdin, self.stdout, self.stderr = (None, None, None)
try:
transport = client.get_transport()
if transport:
- (host, port) = transport.getpeername()
+ (host, port) = transport.getpeername()[0:2]
else:
raise ConnectionLostError(command=quote(args), node=name)
except socket.error: