X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d6e4e65cf3aae701c3e02a814329757e869a1d6d..5c274cd1249ce0f5e0048f8e0974e36deee8c9cc:/sdk/cwl/arvados_cwl/runner.py diff --git a/sdk/cwl/arvados_cwl/runner.py b/sdk/cwl/arvados_cwl/runner.py index 6d382450e2..fd150d7457 100644 --- a/sdk/cwl/arvados_cwl/runner.py +++ b/sdk/cwl/arvados_cwl/runner.py @@ -9,15 +9,18 @@ from cStringIO import StringIO import cwltool.draft2tool from cwltool.draft2tool import CommandLineTool import cwltool.workflow -from cwltool.process import get_feature, scandeps, UnsupportedRequirement, normalizeFilesDirs +from cwltool.process import get_feature, scandeps, UnsupportedRequirement, normalizeFilesDirs, shortname from cwltool.load_tool import fetch_document from cwltool.pathmapper import adjustFileObjs, adjustDirObjs +from cwltool.utils import aslist +from cwltool.builder import substitute import arvados.collection import ruamel.yaml as yaml from .arvdocker import arv_docker_get_image from .pathmapper import ArvPathMapper +from ._version import __version__ logger = logging.getLogger('arvados.cwl-runner') @@ -115,13 +118,23 @@ def upload_docker(arvrunner, tool): def upload_instance(arvrunner, name, tool, job_order): upload_docker(arvrunner, tool) + for t in tool.tool["inputs"]: + def setSecondary(fileobj): + if "__norecurse" in fileobj: + del fileobj["__norecurse"] + return + if "secondaryFiles" not in fileobj: + fileobj["secondaryFiles"] = [{"location": substitute(fileobj["location"], sf), "class": "File", "__norecurse": True} for sf in t["secondaryFiles"]] + + if shortname(t["id"]) in job_order and t.get("secondaryFiles"): + adjustFileObjs(job_order, setSecondary) + workflowmapper = upload_dependencies(arvrunner, name, tool.doc_loader, tool.tool, tool.tool["id"], True) - jobmapper = upload_dependencies(arvrunner, os.path.basename(job_order.get("id", "#")), tool.doc_loader, @@ -134,6 +147,13 @@ def upload_instance(arvrunner, name, tool, job_order): return workflowmapper +def arvados_jobs_image(arvrunner): + img = "arvados/jobs:"+__version__ + try: + arv_docker_get_image(arvrunner.api, {"dockerPull": img}, True, arvrunner.project_uuid) + except Exception as e: + raise Exception("Docker image %s is not available\n%s" % (img, e) ) + return img class Runner(object): def __init__(self, runner, tool, job_order, enable_reuse, output_name):