Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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)