# Mark Huang <mlhuang@cs.princeton.edu>
# Copyright (C) 2006 The Trustees of Princeton University
#
-# $Id$
+# $Id: pl_mom.py,v 1.4 2006/06/02 04:00:00 mlhuang Exp $
#
import os
Simple interface to local Node Manager API
"""
- def __init__(self, url = "http://localhost:812/", timeout = 10):
+ def __init__(self, url = "http://localhost:812/", timeout = 30):
"""
Open a new connection to the local Node Manager
"""
-
socket.setdefaulttimeout(timeout)
try:
self.nm = xmlrpclib.ServerProxy(url)
print "Warning: Exception received while opening connection to Node Manager:", err
self.nm = None
- def close(self):
- """
- Close connection to the local Node Manager
- """
-
- if self.nm is not None:
- self.nm.close()
-
def query(self, slice, attributes):
"""
Get values of various slice attributes from the local Node Manager
slice - slice name
- attributes - [attribute_name, (attribute_name, return_value_if_not_set), ...]
+ attributes - [(attribute_name, return_value_if_not_set), ...]
"""
- values = [None for attribute in attributes]
+ values = [attribute[1] for attribute in attributes]
if self.nm is not None:
- try:
- # Read rspec (the NM hash code for the slice)
+ # Read rspec (the NM hash code for the slice)
rcap = open("/var/run/pl_nm/%s.vm_rcap" % slice, "r")
rspec = rcap.readline().strip()
rcap.close()
- for i, attribute in enumerate(attributes):
- # NM interface allows you to pass in a tuple
- # (attribute, default) instead of just an
- # attribute name. default is returned if the
- # attribute is not set.
- if type(attribute) != tuple:
- attribute = (attribute, 0)
- (rc, (value,)) = self.nm.nm_inspect(rspec, [attribute])
- if rc == 0 and value != attribute[1]:
- values[i] = value
- except Exception, err:
- print "Warning: Exception received while querying Node Manager:", err
-
+ (rc, result) = self.nm.nm_inspect(rspec, attributes)
+ if rc == 0 and type(result) == list and len(result) == len(values):
+ values = result
return values