def exec_credential(yabiusername, uri): """ Return a exec_credential for a given user and uri Currently wraps legacy code in backendhelper raises ObjectDoesNotExist, DecryptedCredentialNotAvailable """ if _is_nullbackend(uri): return None from yabi.yabiengine import backendhelper return backendhelper.get_exec_backendcredential_for_uri(yabiusername, uri)
def json(self): # formulate our status url and our error url # use the yabi embedded in this server statusurl = webhelpers.url("/engine/status/task/%d" % self.id) syslogurl = webhelpers.url("/engine/syslog/task/%d" % self.id) remoteidurl = webhelpers.url("/engine/remote_id/%d" % self.id) remoteinfourl = webhelpers.url("/engine/remote_info/%d" % self.id) # get our tools fs_backend fsscheme, fsbackend_parts = uriparse(self.job.fs_backend) logger.debug("getting fs backend for user: %s fs_backend:%s" % (self.job.workflow.user.name, self.job.fs_backend)) fs_backend = backendhelper.get_fs_backend_for_uri(self.job.workflow.user.name, self.job.fs_backend) logger.debug("fs backend is: %s" % fs_backend) # get out exec backend so we can get our submission script logger.debug("getting exec backendcredential for user: %s exec_backend:%s" % (self.job.workflow.user.name, self.job.exec_backend)) submission_backendcredential = backendhelper.get_exec_backendcredential_for_uri(self.job.workflow.user.name, self.job.exec_backend) logger.debug("exec backendcredential is: %s" % (submission_backendcredential)) submission_backend = submission_backendcredential.backend submission = submission_backendcredential.submission if str(submission_backend.submission).isspace() else submission_backend.submission # if the tools filesystem and the users stageout area are on the same schema/host/port # then use the preferred_copy_method, else default to 'copy' so_backend = backendhelper.get_fs_backend_for_uri(self.job.workflow.user.name, self.job.stageout) soscheme, sobackend_parts = uriparse(self.job.stageout) if so_backend == fs_backend and soscheme == fsscheme and sobackend_parts.hostname == fsbackend_parts.hostname and sobackend_parts.port == fsbackend_parts.port and sobackend_parts.username == fsbackend_parts.username: stageout_method = self.job.preferred_stageout_method else: stageout_method = "copy" output = { "yabiusername": self.job.workflow.user.name, "taskid": self.id, "statusurl": statusurl, "syslogurl": syslogurl, "remoteidurl": remoteidurl, "remoteinfourl": remoteinfourl, "stagein": [], "exec": { "command": self.command, "backend": url_join(self.job.exec_backend), "fsbackend": url_join(self.job.fs_backend, self.working_dir), "workingdir": os.path.join(fsbackend_parts.path, self.working_dir), "cpus": self.job.cpus, "walltime": self.job.walltime, "module": self.job.module, "queue": self.job.queue, "memory": self.job.max_memory, "jobtype": self.job.job_type, "tasknum": self.task_num, "tasktotal": self.job.task_total, "submission": submission }, "stageout": self.job.stageout + ("" if self.job.stageout.endswith("/") else "/") + ("" if not self.name else self.name + "/"), "stageout_method": stageout_method } for s in self.stagein_set.all(): src_scheme, src_rest = uriparse(s.src) dst_scheme, dst_rest = uriparse(s.dst) # method may be 'copy', 'lcopy' or 'link' output["stagein"].append({"src": s.src, "dst": s.dst, "order": s.order, "method": s.method}) return json.dumps(output)