class ArvadosContainer(JobBase):
"""Submit and manage a Crunch container request for executing a CWL CommandLineTool."""
- def __init__(self, runner, cluster_target,
+ def __init__(self, runner, job_runtime,
builder, # type: Builder
joborder, # type: Dict[Text, Union[Dict[Text, Any], List, Text]]
make_path_mapper, # type: Callable[..., PathMapper]
):
super(ArvadosContainer, self).__init__(builder, joborder, make_path_mapper, requirements, hints, name)
self.arvrunner = runner
- self.cluster_target = cluster_target
+ self.job_runtime = job_runtime
self.running = False
self.uuid = None
# ArvadosContainer object by CommandLineTool.job() before
# run() is called.
+ runtimeContext = self.job_runtime
+
container_request = {
"command": self.command_line,
"name": self.name,
scheduling_parameters["max_run_time"] = self.timelimit
extra_submit_params = {}
- if self.cluster_target is not None:
- if self.cluster_target.cluster_id:
- extra_submit_params["cluster_id"] = self.cluster_target.cluster_id
- if self.cluster_target.owner_uuid:
- container_request["owner_uuid"] = self.cluster_target.owner_uuid
+ if runtimeContext.submit_runner_cluster:
+ extra_submit_params["cluster_id"] = runtimeContext.submit_runner_cluster
container_request["output_name"] = "Output for step %s" % (self.name)
container_request["output_ttl"] = self.output_ttl
def make_job_runner(self, runtimeContext):
if runtimeContext.work_api == "containers":
- return partial(ArvadosContainer, self.arvrunner, runtimeContext.cluster_target)
+ return partial(ArvadosContainer, self.arvrunner, runtimeContext)
elif runtimeContext.work_api == "jobs":
return partial(ArvadosJob, self.arvrunner)
else:
runtimeContext = runtimeContext.copy()
cluster_target_req, _ = self.get_requirement("http://arvados.org/cwl#ClusterTarget")
- if runtimeContext.cluster_target is None or runtimeContext.cluster_target.instance != id(cluster_target_req):
- runtimeContext.cluster_target = ClusterTarget(id(cluster_target_req),
- builder.do_eval(cluster_target_req.get("clusterID")),
- builder.do_eval(cluster_target_req.get("ownerUUID")))
+ if cluster_target_req and runtimeContext.cluster_target_id != id(cluster_target_req):
+ runtimeContext.cluster_target_id = id(cluster_target_req)
+ runtimeContext.submit_runner_cluster = builder.do_eval(cluster_target_req.get("clusterID")) or runtimeContext.submit_runner_cluster
+ runtimeContext.project_uuid = builder.do_eval(cluster_target_req.get("ownerUUID")) or runtimeContext.project_uuid
if runtimeContext.work_api == "containers":
dockerReq, is_req = self.get_requirement("DockerRequirement")
def job(self, joborder, output_callback, runtimeContext):
cluster_target_req, _ = self.get_requirement("http://arvados.org/cwl#ClusterTarget")
- if runtimeContext.cluster_target is None or runtimeContext.cluster_target.instance != id(cluster_target_req):
- runtimeContext.cluster_target = ClusterTarget(id(cluster_target_req),
- builder.do_eval(cluster_target_req.get("clusterID")),
- builder.do_eval(cluster_target_req.get("ownerUUID")))
+ if cluster_target_req and runtimeContext.cluster_target_id != id(cluster_target_req):
+ runtimeContext.cluster_target_id = id(cluster_target_req)
+ runtimeContext.submit_runner_cluster = builder.do_eval(cluster_target_req.get("clusterID")) or runtimeContext.submit_runner_cluster
+ runtimeContext.project_uuid = builder.do_eval(cluster_target_req.get("ownerUUID")) or runtimeContext.project_uuid
req, _ = self.get_requirement("http://arvados.org/cwl#RunInSingleContainer")
if not req:
self.current_container = None
self.http_timeout = 300
self.submit_runner_cluster = None
- self.cluster_target = None
+ self.cluster_target_id = 0
super(ArvRuntimeContext, self).__init__(kwargs)