pyslurm

Table Of Contents

Previous topic

About

Next topic

Get the Source Code

This Page

Simple API Examples

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.

Importing the module

import pyslurm

Query SLURM API & PySLURM Version

import pyslurm

print "PySLURM\t%s" % (pyslurm.version())
print "SLURM\t%s-%s-%s\n" % (pyslurm.slurm_api_version())

Read And Display SLURM Configuration

import pyslurm

a = pyslurm.config()
ctl_dict = a.get()

for key in sorted(ctl_dict.iterkeys()):
   print "%-35s : %s" % (key, ctl_dict[key])

Query Job Queue

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 !"

Query Node List

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 !"

Update A Node Status To Down With Reason

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"]

Query Partition List

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 !"

Create Reservation And Display

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

Query Triggers

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 !"

Create A Trigger

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 !"

Clear A Numbered Trigger

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