From 084fd973f40f161cfb1fdc7190b6c4ce0e9b5de3 Mon Sep 17 00:00:00 2001 From: Lars Wirzenius Date: Sun, 10 May 2020 16:17:04 +0300 Subject: fix: make worker ip extraction more reliable We sync the workspace, wiping anything that was there but wasn't in the saved workspace. However, this was buggy: if we did not have a saved workspace specified or it didn't exist yet, we let whatever happened to be on the workspace disk to stay. This was confusing. --- contractor | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/contractor b/contractor index 8fe1e37..179f3bf 100755 --- a/contractor +++ b/contractor @@ -4,6 +4,7 @@ import argparse import json import logging import os +import re import shlex import sys import time @@ -54,6 +55,9 @@ def ssh(target, port, argv, quiet=False): logging.debug("EXEC: {!r} stdout={!r} stderr={!r}".format(argv, stdout, STDOUT)) p = subprocess.Popen(argv, stderr=STDOUT, stdout=stdout) out, err = p.communicate() + logging.debug("EXIT: {}".format(p.returncode)) + logging.debug("OUTPUT:\n{}".format(out)) + logging.debug("STDERR:\n{}".format(err)) return ExecResult(out, err, p.returncode) @@ -380,11 +384,19 @@ do break fi done -echo "$ip" +echo "worker-ip:: $ip ::" """, ] +def parse_worker_ip(output): + output = output.decode("UTF8") + m = re.search(r"worker-ip:: (?P\d+\.\d+\.\d+\.\d+) ::$", output) + if m: + return m.group("ip") + return None + + class Find(RemoteExecution): def __init__(self, dirname): self._dirname = dirname @@ -567,7 +579,9 @@ def cmd_build(args): with Timer(vrb, "upload-saved-workspace"): ws = bs.workspace() - if os.path.exists(ws): + if ws: + if not os.path.exists(ws): + os.makedirs(ws) sync_to_workspace(vrb, ws, dest, port, ".") with Timer(vrb, "upload-source"): @@ -578,7 +592,7 @@ def cmd_build(args): with Timer(vrb, "wait-for-worker-to-be-available"): execs = [UnmountWS(), WorkerIP(), AttachWS()] er = exec_quietly(manager, *execs) - worker_ip = er.stdout.decode("UTF8").strip() + worker_ip = parse_worker_ip(er.stdout) with Timer(vrb, "prepare-workspace-worker"): worker_dest = "worker@{}".format(worker_ip) @@ -624,7 +638,7 @@ def setup_logging(args): logger = logging.getLogger() logger.addHandler(handler) - logger.setLevel(logging.INFO) + logger.setLevel(logging.DEBUG) def main(): -- cgit v1.2.1