X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7d7b9f9fe3dadcccffd76493f45a144d21c754ef..c340eecc7a03dd066792e5f046f087b8b3dfced6:/sdk/cwl/arvados_cwl/arvcontainer.py diff --git a/sdk/cwl/arvados_cwl/arvcontainer.py b/sdk/cwl/arvados_cwl/arvcontainer.py index fb23c2ccf7..c9170c51b7 100644 --- a/sdk/cwl/arvados_cwl/arvcontainer.py +++ b/sdk/cwl/arvados_cwl/arvcontainer.py @@ -21,8 +21,7 @@ import ruamel.yaml as yaml from cwltool.errors import WorkflowException from cwltool.process import UnsupportedRequirement, shortname -from cwltool.pathmapper import adjustFileObjs, adjustDirObjs, visit_class -from cwltool.utils import aslist +from cwltool.utils import aslist, adjustFileObjs, adjustDirObjs, visit_class from cwltool.job import JobBase import arvados.collection @@ -235,7 +234,9 @@ class ArvadosContainer(JobBase): container_request["container_image"] = arv_docker_get_image(self.arvrunner.api, docker_req, runtimeContext.pull_image, - runtimeContext.project_uuid) + runtimeContext.project_uuid, + runtimeContext.force_docker_pull, + runtimeContext.tmp_outdir_prefix) network_req, _ = self.get_requirement("NetworkAccess") if network_req: @@ -272,6 +273,12 @@ class ArvadosContainer(JobBase): if self.output_ttl < 0: raise WorkflowException("Invalid value %d for output_ttl, cannot be less than zero" % container_request["output_ttl"]) + storage_class_req, _ = self.get_requirement("http://arvados.org/cwl#OutputStorageClass") + if storage_class_req and storage_class_req.get("intermediateStorageClass"): + container_request["output_storage_classes"] = aslist(storage_class_req["intermediateStorageClass"]) + else: + container_request["output_storage_classes"] = runtimeContext.intermediate_storage_classes.strip().split(",") + if self.timelimit is not None and self.timelimit > 0: scheduling_parameters["max_run_time"] = self.timelimit @@ -325,8 +332,8 @@ class ArvadosContainer(JobBase): logger.info("%s reused container %s", self.arvrunner.label(self), response["container_uuid"]) else: 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)) + except Exception as e: + logger.exception("%s error submitting container\n%s", self.arvrunner.label(self), e) logger.debug("Container request was %s", container_request) self.output_callback({}, "permanentFail") @@ -475,6 +482,7 @@ class RunnerContainer(Runner): "--api=containers", "--no-log-timestamps", "--disable-validate", + "--disable-color", "--eval-timeout=%s" % self.arvrunner.eval_timeout, "--thread-count=%s" % self.arvrunner.thread_count, "--enable-reuse" if self.enable_reuse else "--disable-reuse", @@ -493,6 +501,9 @@ class RunnerContainer(Runner): if runtimeContext.storage_classes != "default": command.append("--storage-classes=" + runtimeContext.storage_classes) + if runtimeContext.intermediate_storage_classes != "default": + command.append("--intermediate-storage-classes=" + runtimeContext.intermediate_storage_classes) + if self.on_error: command.append("--on-error=" + self.on_error) @@ -545,6 +556,17 @@ class RunnerContainer(Runner): logger.info("%s submitted container_request %s", self.arvrunner.label(self), response["uuid"]) + workbench1 = self.arvrunner.api.config()["Services"]["Workbench1"]["ExternalURL"] + workbench2 = self.arvrunner.api.config()["Services"]["Workbench2"]["ExternalURL"] + url = "" + if workbench2: + url = "{}processes/{}".format(workbench2, response["uuid"]) + elif workbench1: + url = "{}container_requests/{}".format(workbench1, response["uuid"]) + if url: + logger.info("Monitor workflow progress at %s", url) + + def done(self, record): try: container = self.arvrunner.api.containers().get(