Currently the PySLURM API is a thin wrapper to the C calls. Until this is implemented as objects you may be required to passed a wrapped pointer between functions.
import pyslurm
import pyslurm
print "PySLURM\t%s" % (pyslurm.version())
print "SLURM\t%s-%s-%s\n" % (pyslurm.slurm_api_version())
import pyslurm
a = pyslurm.config()
ctl_dict = a.get()
for key in sorted(ctl_dict.iterkeys()):
print "%-35s : %s" % (key, ctl_dict[key])
import pyslurm
from time import gmtime, strftime
a = pyslurm.job()
jobs = pyslurm.get()
if jobs:
date_fields = [ 'start_time',
'suspend_time',
'submit_time',
'end_time',
'eligible_time',
'resize_time'
]
for key, value in jobs.iteritems():
print "Job ID : %s" % (key)
for part_key in sorted(value.iterkeys()):
if part_key in date_fields:
if value[part_key] == 0:
print "\t%-20s : N/A" % (part_key)
else:
ddate = gmtime(value[part_key])
ddate = strftime("%a %b %d %H:%M:%S %Y", ddate)
print "\t%-20s : %s" % (part_key, ddate)
else:
print "\t%-20s : %s" % (part_key, value[part_key])
print "-" * 80
else:
print "No jobs found !"
import pyslurm
a = pyslurm.node()
node_dict = a.get()
if len(node_dict) > 0:
print "-" * 80
for key, value in node_dict.iteritems():
print "%s :" % (key)
for part_key in sorted(value.iterkeys()):
print "\t%-15s : %s" % (part_key, value[part_key])
print "-" * 80
else:
print "No Nodes found !"
import pyslurm
Node_dict = {
'node_names': 'bps000',
'node_state': pyslurm.NODE_STATE_DRAIN,
'reason': 'API test'
}
a = pyslurm.node()
rc = a.update(Node_dict)
if rc == -1:
print "Error : %s" % pyslurm.slurm_strerror(pyslurm.slurm_get_errno())
elif rc == 0:
print "Node %s successfully updated" % Node_dict["node_names"]
import pyslurm
from time import gmtime, strftime
a = pyslurm.partitions()
part_dict = a.get()
if len(part_dict) > 0:
date_fields = ['default_time']
for key, value in part_dict.iteritems():
print "%s :" % key
for part_key in sorted(value.iterkeys()):
if part_key in date_fields:
ddate = gmtime(value[part_key])
ddate = strftime("%a %b %d %H:%M:%S %Y", ddate)
print "\t%-20s : %s" % (part_key, ddate)
else:
print "\t%-20s : %s" % (part_key, value[part_key])
print "-" * 80
else:
print "No partitions found !"
import pyslurm
import sys
import string
import time
import datetime
dstring = "2013-12-31T18:00:00"
dpattern = "%Y-%m-%dT%H:%M:%S"
start_epoch = int(time.mktime(time.strptime(dstring, dpattern)))
res_dict = pyslurm.create_reservation_dict()
res_dict["node_cnt"] = 1
res_dict["users"] = "root"
res_dict["start_time"] = start_epoch
res_dict["duration"] = 600
resid = pyslurm.slurm_create_reservation(res_dict)
rc = pyslurm.slurm_get_errno()
if rc != 0:
print "Failed - Error : %s" % pyslurm.slurm_strerror(pyslurm.slurm_get_errno())
sys.exit(-1)
else:
print "Success - Created reservation %s\n" % resid
a = pyslurm.reservation()
res_dict = a.get()
if res_dict.has_key(resid):
date_fields = [ 'end_time', 'start_time' ]
value = res_dict[resid]
print "Res ID : %s" % (resid)
for res_key in sorted(value.iterkeys()):
if res_key in date_fields:
if value[res_key] == 0:
print "\t%-20s : N/A" % (res_key)
else:
ddate = pyslurm.epoch2date(value[res_key])
print "\t%-20s : %s" % (res_key, ddate)
else:
print "\t%-20s : %s" % (res_key, value[res_key])
print "-" * 80
else:
print "No reservation %s found !" % resid
import pyslurm
a = pyslurm.trigger()
trigger_dict = a.get()
if len(triggers) > 0:
print "-" * 80
for key, value in trigger_dict.iteritems():
print "Trigger ID : %s" % (key)
for part_key in sorted(value.iterkeys()):
print "%-25s : %s" % (part_key, value[part_key])
print "-" * 80
else:
print "No triggers found !"
import pyslurm
trigger_dict = {
'node':'makalu',
'offset': 0,
'event':'down',
'program':'/tmp/test.sh'
}
a = pyslurm.trigger()
rc = a.set(trigger_dict)
if rc != 0:
print "Unable to set trigger : %s" % pyslurm.slurm_strerror(rc)
else:
print "Trigger set !"
import pyslurm
TrigID = 3
a = pyslurm.trigger()
rc = a.clear(TrigID, 0)
if rc == -1:
print "No triggerID (%s) found !" % TrigID
else:
print "TriggerID (%s) cleared" % TrigID