]> git-server-git.apps.pok.os.sepia.ceph.com Git - teuthology.git/commitdiff
Tolerate failure to scan VM host keys 1129/head
authorZack Cerza <zack@redhat.com>
Wed, 29 Nov 2017 23:25:18 +0000 (16:25 -0700)
committerZack Cerza <zack@redhat.com>
Wed, 29 Nov 2017 23:30:22 +0000 (16:30 -0700)
Signed-off-by: Zack Cerza <zack@redhat.com>
teuthology/lock/cli.py
teuthology/lock/keys.py
teuthology/misc.py

index 66702d3aeef06861ae79f3b07b95c74ed0f6df2f..dfd50ca842d579b1cea32bafbcca6541b88bc82a 100644 (file)
@@ -87,7 +87,7 @@ def main(ctx):
                 vmachines.append(machine['name'])
         if vmachines:
             log.info("updating host keys for %s", ' '.join(sorted(vmachines)))
-            keys.do_update_keys(vmachines)
+            keys.do_update_keys(vmachines, _raise=False)
             # get statuses again to refresh any updated keys
             statuses = query.get_statuses(machines)
         if statuses:
index c59bdb71977852bcf03b770af06a9ec31270fe23..4aafc26a3d12c4742faa2f517bd04a7944077865 100644 (file)
@@ -7,11 +7,11 @@ from . import ops, query
 log = logging.getLogger(__name__)
 
 
-def do_update_keys(machines, all_=False):
+def do_update_keys(machines, all_=False, _raise=True):
     reference = query.list_locks(keyed_by_name=True)
     if all_:
         machines = reference.keys()
-    keys_dict = misc.ssh_keyscan(machines)
+    keys_dict = misc.ssh_keyscan(machines, _raise=_raise)
     return push_new_keys(keys_dict, reference), keys_dict
 
 
index b1fa3d632ce34103d745f899524e0757a7126bea..59825bc9887dd583c4873985a1c4331fff0c6c48 100644 (file)
@@ -1129,11 +1129,12 @@ def get_valgrind_args(testdir, name, preamble, v):
     return args
 
 
-def ssh_keyscan(hostnames):
+def ssh_keyscan(hostnames, _raise=True):
     """
     Fetch the SSH public key of one or more hosts
 
     :param hostnames: A list of hostnames, or a dict keyed by hostname
+    :param _raise: Whether to raise an exception if not all keys are retrieved
     :returns: A dict keyed by hostname, with the host keys as values
     """
     if isinstance(hostnames, basestring):
@@ -1143,7 +1144,11 @@ def ssh_keyscan(hostnames):
     keys_dict = dict()
     for hostname in hostnames:
         with safe_while(
-                sleep=1, tries=5, action="ssh_keyscan " + hostname) as proceed:
+            sleep=1,
+            tries=5 if _raise else 1,
+            _raise=_raise,
+            action="ssh_keyscan " + hostname,
+        ) as proceed:
             while proceed():
                 key = _ssh_keyscan(hostname)
                 if key:
@@ -1151,7 +1156,11 @@ def ssh_keyscan(hostnames):
                     break
     if len(keys_dict) != len(hostnames):
         missing = set(hostnames) - set(keys_dict.keys())
-        raise RuntimeError("Unable to scan these host keys: %s" % missing)
+        msg = "Unable to scan these host keys: %s" % ' '.join(missing)
+        if not _raise:
+            log.warn(msg)
+        else:
+            raise RuntimeError(msg)
     return keys_dict