#!/usr/bin/env python3 """edge_run.py [soak] — one upgrade-test.py edge on the bench whose FROM is NOT the template (an older tag -> the current pin), through upgrade-test.py's own run_edge(); log + evidence copied back. The bench-side runner registers EDGES['MV-'] and calls main(), so the method is the harness's own, unchanged.""" import base64, importlib.util, io, os, sys, tarfile H = "/mnt/5_hdd/felhom.eu/git/app-catalog-felhom.eu/scripts" spec = importlib.util.spec_from_file_location("rf", os.path.join(H, "retest-floating.py")) rf = importlib.util.module_from_spec(spec); sys.path.insert(0, H); spec.loader.exec_module(rf) app, ev, frm, to = sys.argv[1:5] soak = sys.argv[5] if len(sys.argv) > 5 else "600" f = dict(x.split("=", 1) for x in frm.split(",")); t = dict(x.split("=", 1) for x in to.split(",")) py = ("import importlib.util,sys; sys.path.insert(0,'/opt/upg'); s=importlib.util.spec_from_file_location('ut','/opt/upg/upgrade-test.py'); " "ut=importlib.util.module_from_spec(s); s.loader.exec_module(ut); " "ut.EDGES['MV-%s']=dict(app=%r, note=%r, frm=%r, to=%r); " "sys.exit(ut.main(['--soak', %r, 'MV-%s']))" % (app, app, os.environ.get('NOTE', 'older tag -> current pin'), f, t, soak, app)) os.makedirs(ev, exist_ok=True) coll = os.environ.get('COLLECT') # ' ' -> /opt/upg/MV--collect.csv beside the run if coll: rf.bench("cat > /opt/upg/meili_collect.sh <<'SHEOF'\n%s\nSHEOF\n" % open(os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'meili_collect.sh')).read(), timeout=120) r = rf.bench(("(nohup sh -c \"sleep 90; bash /opt/upg/meili_collect.sh %s\" > /opt/upg/MV-%s-collect.csv 2>&1 < /dev/null &) ; " % (coll, app) if coll else "") + "cd /opt/upg && rm -rf evidence/MV-%s && cat > /opt/upg/edge_run_inner.py <<'PYEOF'\n%s\nPYEOF\n" "timeout 3300 python3 /opt/upg/edge_run_inner.py > /opt/upg/MV-%s.log 2>&1; echo rc=$?" % (app, py, app), timeout=3500) print(r.stdout.strip()[-200:], r.stderr.strip()[-300:]) pull = rf.bench("cd /opt/upg && tar czf - MV-%s.log MV-%s-collect.csv edge_run_inner.py evidence/MV-%s 2>/dev/null | base64 -w0" % (app, app, app), timeout=600) tarfile.open(fileobj=io.BytesIO(base64.b64decode(pull.stdout.strip()))).extractall(ev) print("evidence ->", ev)