From 3b3fdff874cc9cdcb8bf3f7428a1bf5b42d4ff38 Mon Sep 17 00:00:00 2001 From: Kkevsterrr Date: Sat, 10 Oct 2020 17:49:38 +0000 Subject: [PATCH] Updated evaluator's handling of remote clients to prefer hostnames to IP addresses if they are defined --- evaluator.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/evaluator.py b/evaluator.py index 0976add..bc75b57 100644 --- a/evaluator.py +++ b/evaluator.py @@ -25,6 +25,8 @@ import censors.censor_driver # Suppress unfixed Paramiko warnings (see Paramiko issue #1386) warnings.filterwarnings(action='ignore',module='.*paramiko.*') +# Placeholder for a docker import (see below why we cannot import docker here) +docker = None BASEPATH = os.path.dirname(os.path.abspath(__file__)) PROJECT_ROOT = BASEPATH @@ -755,9 +757,16 @@ class Evaluator(): paramiko_logger = paramiko.util.logging.getLogger() paramiko_logger.setLevel(logging.WARN) worker = actions.utils.get_worker(self.external_client, self.logger) + if self.use_docker: worker["ip"] = "0.0.0.0" - self.logger.debug("Connecting to worker %s@%s" % (worker["username"], worker["ip"])) + + # Pull the destination to connect to this worker. Preference hostnames over IP addresses. + destination = worker["hostname"] + if not destination: + destination = worker["ip"] + + self.logger.debug("Connecting to worker %s@%s" % (worker["username"], destination)) remote = paramiko.SSHClient() remote.set_missing_host_key_policy(paramiko.AutoAddPolicy()) max_tries = 5 @@ -766,12 +775,12 @@ class Evaluator(): try: if "keyfile" in worker: k = paramiko.RSAKey.from_private_key_file(worker["keyfile"]) - remote.connect(worker["ip"], username=worker["username"], pkey=k, port=worker["port"], timeout=60) + remote.connect(destination, username=worker["username"], pkey=k, port=worker["port"], timeout=60) else: - remote.connect(worker["ip"], username=worker["username"], password=worker["password"], port=worker["port"], timeout=60) + remote.connect(destination, username=worker["username"], password=worker["password"], port=worker["port"], timeout=60) break except socket.timeout: - self.logger.error("Could not connect to worker %s" % worker["ip"]) + self.logger.error("Could not connect to worker %s" % destination) i += 1 return remote