X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/1dee1aad0573bf3a54d536c8dd3693a352cf0cbe..e8d1a643cdbc3a5f4c0e5c745da58d9f7e1248d8:/sdk/cwl/arvados_cwl/arvcontainer.py diff --git a/sdk/cwl/arvados_cwl/arvcontainer.py b/sdk/cwl/arvados_cwl/arvcontainer.py index 52ab2ca4bb..fb23c2ccf7 100644 --- a/sdk/cwl/arvados_cwl/arvcontainer.py +++ b/sdk/cwl/arvados_cwl/arvcontainer.py @@ -33,6 +33,7 @@ from .runner import Runner, arvados_jobs_image, packed_workflow, trim_anonymous_ from .fsaccess import CollectionFetcher from .pathmapper import NoFollowPathMapper, trim_listing from .perf import Perf +from ._version import __version__ logger = logging.getLogger('arvados.cwl-runner') metrics = logging.getLogger('arvados.cwl-runner.metrics') @@ -149,21 +150,28 @@ class ArvadosContainer(JobBase): with Perf(metrics, "createfiles %s" % self.name): for f, p in sorteditems: if not p.target: - pass - elif p.type in ("File", "Directory", "WritableFile", "WritableDirectory"): + continue + + if p.target.startswith("/"): + dst = p.target[len(self.outdir)+1:] if p.target.startswith(self.outdir+"/") else p.target[1:] + else: + dst = p.target + + if p.type in ("File", "Directory", "WritableFile", "WritableDirectory"): if p.resolved.startswith("_:"): - vwd.mkdirs(p.target) + vwd.mkdirs(dst) else: source, path = self.arvrunner.fs_access.get_collection(p.resolved) - vwd.copy(path or ".", p.target, source_collection=source) + vwd.copy(path or ".", dst, source_collection=source) elif p.type == "CreateFile": if self.arvrunner.secret_store.has_secret(p.resolved): - secret_mounts["%s/%s" % (self.outdir, p.target)] = { + mountpoint = p.target if p.target.startswith("/") else os.path.join(self.outdir, p.target) + secret_mounts[mountpoint] = { "kind": "text", "content": self.arvrunner.secret_store.retrieve(p.resolved) } else: - with vwd.open(p.target, "w") as n: + with vwd.open(dst, "w") as n: n.write(p.resolved) def keepemptydirs(p): @@ -190,10 +198,14 @@ class ArvadosContainer(JobBase): if (not p.target or self.arvrunner.secret_store.has_secret(p.resolved) or (prev is not None and p.target.startswith(prev))): continue - mountpoint = "%s/%s" % (self.outdir, p.target) + if p.target.startswith("/"): + dst = p.target[len(self.outdir)+1:] if p.target.startswith(self.outdir+"/") else p.target[1:] + else: + dst = p.target + mountpoint = p.target if p.target.startswith("/") else os.path.join(self.outdir, p.target) mounts[mountpoint] = {"kind": "collection", "portable_data_hash": vwd.portable_data_hash(), - "path": p.target} + "path": dst} if p.type.startswith("Writable"): mounts[mountpoint]["writable"] = True prev = p.target + "/" @@ -218,7 +230,7 @@ class ArvadosContainer(JobBase): (docker_req, docker_is_req) = self.get_requirement("DockerRequirement") if not docker_req: - docker_req = {"dockerImageId": "arvados/jobs"} + docker_req = {"dockerImageId": "arvados/jobs:"+__version__} container_request["container_image"] = arv_docker_get_image(self.arvrunner.api, docker_req, @@ -315,6 +327,7 @@ class ArvadosContainer(JobBase): logger.info("%s %s state is %s", self.arvrunner.label(self), response["uuid"], response["state"]) except Exception: logger.exception("%s got an error", self.arvrunner.label(self)) + logger.debug("Container request was %s", container_request) self.output_callback({}, "permanentFail") def done(self, record):