예제 #1
0
def vnodes_enabled(job):
    # see if power operations are allowed on all job vnodes
    for vn in _get_vnode_names(job):
        if not _svr_vnode(vn).power_provisioning:
            pbs.logjobmsg(job.id,
                          "power functionality is disabled on vnode %s" % vn)
            return False
    return True
예제 #2
0
def nodenids(hosts):
    """
    Return the set of nids from the host list.

    :param hosts: list of exec hosts from the job.
    :type hosts: str
    :returns: set of nids from node's resources_available[craynid].
    """
    nidset = set()
    craynid = "PBScraynid"
    for vnames in hosts:
        vnode = _svr_vnode(vnames)
        try:
            nidset.add(int(vnode.resources_available[craynid]))
        except Exception:
            pass
    return nidset
예제 #3
0
def jobnids(job):
    """
    Return the set of nids belonging to a job.

    :param job: job id
    :type job: str
    :returns: set of nids from node's resources_available[craynid].
    """
    nidset = set()
    craynid = "PBScraynid"
    for vname in _get_vnode_names(job):
        vnode = _svr_vnode(vname)
        try:
            nidset.add(int(vnode.resources_available[craynid]))
        except Exception:
            pass
    return nidset
예제 #4
0
def nodenids(hosts):
    """
    Return the set of nids from the host list.

    :param hosts: list of exec hosts from the job.
    :type hosts: str
    :returns: set of nids from node's resources_available[craynid].
    """
    nidset = set()
    craynid = "PBScraynid"
    for vnames in hosts:
        vnode = _svr_vnode(vnames)
        try:
            nidset.add(int(vnode.resources_available[craynid]))
        except Exception:
            pass
    return nidset
예제 #5
0
def jobnids(job):
    """
    Return the set of nids belonging to a job.

    :param job: job id
    :type job: str
    :returns: set of nids from node's resources_available[craynid].
    """
    nidset = set()
    craynid = "PBScraynid"
    for vname in _get_vnode_names(job):
        vnode = _svr_vnode(vname)
        try:
            nidset.add(int(vnode.resources_available[craynid]))
        except Exception:
            pass
    return nidset
예제 #6
0
 def _pmi_power_status(self, hosts):
     # Do a capmc node_status and return a list of ready nodes.
     pbs.logmsg(pbs.EVENT_DEBUG3, "Cray: status of the nodes")
     nidset = nodenids(hosts)
     nids, _ = nidlist(nidset=nidset)
     cmd = "node_status --nids " + nids
     func = "pmi_power_status"
     out = launch(func, cmd)
     ready = []
     nodeset = set()
     if 'ready' in out:
         ready = out['ready']
     else:
         return nodeset
     craynid = "PBScraynid"
     for vnames in hosts:
         vnode = _svr_vnode(vnames)
         if craynid in vnode.resources_available:
             nid = int(vnode.resources_available[craynid])
             if nid in ready:
                 nodeset.add(vnames)
     return nodeset
예제 #7
0
 def _pmi_power_status(self, hosts):
     # Do a capmc node_status and return a list of ready nodes.
     pbs.logmsg(pbs.EVENT_DEBUG3, "Cray: status of the nodes")
     nidset = nodenids(hosts)
     nids, _ = nidlist(nidset=nidset)
     cmd = "node_status --nids " + nids
     func = "pmi_power_status"
     out = launch(func, cmd)
     ready = []
     nodeset = set()
     if 'ready' in out:
         ready = out['ready']
     else:
         return nodeset
     craynid = "PBScraynid"
     for vnames in hosts:
         vnode = _svr_vnode(vnames)
         if craynid in vnode.resources_available:
             nid = int(vnode.resources_available[craynid])
             if nid in ready:
                 nodeset.add(vnames)
     return nodeset
예제 #8
0
        try:
            usage = power.get_usage(job)
            if usage is not None:
                job.resources_used["energy"] = usage
        except Exception as e:
            pbs.logmsg(pbs.LOG_ERROR, str(e))
    power.disconnect()
    this_event.accept()

# From this point on, the event will have a job.
this_job = this_event.job

if this_event.type == pbs.EXECJOB_BEGIN:
    me = pbs.get_local_nodename()
    try:
        if not _svr_vnode(me).power_provisioning:
            this_event.accept()
    except:
        # Try with different hostname
        vn = get_local_node(me)
        if not _svr_vnode(vn.name).power_provisioning:
            this_event.accept()
    requested_profile = str(this_job.schedselect).partition(
        'eoe=')[2].partition('+')[0].partition(':')[0]
    if requested_profile != "":
        try:
            this_event.vnode_list[me].current_eoe = requested_profile
        except KeyError, ValueError:
            pass
    this_event.accept()
if this_event.type == pbs.EXECJOB_END: