X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc.py;h=f609abbd12470620dc8978f2ec26a04768ba0f5f;hb=dee691cab200c81c553a2c03e566a7574754f18c;hp=d7a846b2d24173e0c8a4bdefc038688398e71d7a;hpb=5822f1e740aadefd45b31bf04da02a437c458480;p=monitor.git diff --git a/plc.py b/plc.py index d7a846b..f609abb 100644 --- a/plc.py +++ b/plc.py @@ -8,18 +8,53 @@ # $Id: plc.py,v 1.18 2007/08/29 17:26:50 soltesz Exp $ # -from emailTxt import * import xml, xmlrpclib import logging -import auth +try: + import auth +except: + class Anon: + def __init__(self): + self.auth = {'AuthMethod': "anonymous"} + auth = Anon() + import time -from config import config,XMLRPC_SERVER +try: + from config import config + config = config() + debug = config.debug +except: + debug = False + +XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/" logger = logging.getLogger("monitor") -#XMLRPC_SERVER = config.XMLRPC_SERVER +api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + +def getAPI(url): + api = xmlrpclib.Server(url, verbose=False, allow_none=True) + return api + +class PLC: + def __init__(self, auth, url): + self.auth = auth + self.url = url + self.api = xmlrpclib.Server(self.url, verbose=False, allow_none=True) + + def __getattr__(self, name): + method = getattr(self.api, name) + if method is None: + raise AssertionError("method does not exist") -config = config() + return lambda *params : method(self.auth, *params) + + def __repr__(self): + return self.api.__repr__() + +def getAuthAPI(): + import auth + return PLC(auth.auth, auth.plc) ''' Returns list of nodes in dbg as reported by PLC @@ -89,15 +124,29 @@ def getSiteNodes(loginbase, fields=None): nodelist.append(node['hostname']) except Exception, exc: logger.info("getSiteNodes: %s" % exc) + print "getSiteNodes: %s" % exc return nodelist +def getPersons(filter=None, fields=None): + api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + persons = [] + try: + persons = api.GetPersons(auth.auth, filter, fields) + except Exception, exc: + print "getPersons: %s" % exc + logger.info("getPersons: %s" % exc) + return persons + def getSites(filter=None, fields=None): api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) sites = [] anon = {'AuthMethod': "anonymous"} try: - sites = api.GetSites(anon, filter, fields) + #sites = api.GetSites(anon, filter, fields) + sites = api.GetSites(auth.auth, filter, fields) except Exception, exc: + import traceback + traceback.print_exc() print "getSites: %s" % exc logger.info("getSites: %s" % exc) return sites @@ -120,7 +169,8 @@ def getNodeNetworks(filter=None): def getNodes(filter=None, fields=None): api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) - nodes = api.GetNodes(auth.auth, filter, fields) #['boot_state', 'hostname', + nodes = api.GetNodes(auth.auth, filter, fields) + #['boot_state', 'hostname', #'site_id', 'date_created', 'node_id', 'version', 'nodenetwork_ids', #'last_updated', 'peer_node_id', 'ssh_rsa_key' ]) return nodes @@ -135,6 +185,13 @@ def nodeBootState(nodename, state): except Exception, exc: logger.info("nodeBootState: %s" % exc) +def updateNodeKey(nodename, key): + api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + try: + return api.UpdateNode(auth.auth, nodename, {'key': key}) + except Exception, exc: + logger.info("updateNodeKey: %s" % exc) + ''' Sends Ping Of Death to node. ''' @@ -142,7 +199,7 @@ def nodePOD(nodename): api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) logger.info("Sending POD to %s" % nodename) try: - if not config.debug: + if not debug: return api.RebootNode(auth.auth, nodename) except Exception, exc: logger.info("nodePOD: %s" % exc) @@ -155,7 +212,7 @@ def suspendSlices(nodename): for slice in slices(siteId(nodename)): logger.info("Suspending slice %s" % slice) try: - if not config.debug: + if not debug: api.AddSliceAttribute(auth.auth, slice, "enabled", "0") except Exception, exc: logger.info("suspendSlices: %s" % exc) @@ -165,7 +222,7 @@ def enableSlices(nodename): for slice in slices(siteId(nodename)): logger.info("Enabling slices %s" % slice) try: - if not config.debug: + if not debug: slice_list = api.GetSlices(auth.auth, {'name': slice}, None) if len(slice_list) == 0: return @@ -194,7 +251,7 @@ def enableSliceCreation(nodename): try: loginbase = siteId(nodename) logger.info("Enabling slice creation for site %s" % loginbase) - if not config.debug: + if not debug: logger.info("\tcalling UpdateSite(%s, enabled=True)" % loginbase) api.UpdateSite(auth.auth, loginbase, {'enabled': True}) except Exception, exc: @@ -205,13 +262,14 @@ def enableSliceCreation(nodename): Removes ability to create slices. Returns previous max_slices ''' def removeSliceCreation(nodename): + print "removeSliceCreation(%s)" % nodename api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) try: loginbase = siteId(nodename) #numslices = api.GetSites(auth.auth, {"login_base": loginbase}, # ["max_slices"])[0]['max_slices'] logger.info("Removing slice creation for site %s" % loginbase) - if not config.debug: + if not debug: #api.UpdateSite(auth.auth, loginbase, {'max_slices': 0}) api.UpdateSite(auth.auth, loginbase, {'enabled': False}) except Exception, exc: @@ -227,7 +285,7 @@ QED # if len(siteid) == 1: # logger.info("Enabling slice creation for site %s" % siteId(nodename)) # try: -# if not config.debug: +# if not debug: # api.AdmUpdateSite(auth.auth, siteid[0], {"max_slices" : maxslices}) # except Exception, exc: # logger.info("API: %s" % exc)