X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plc.py;h=363bc8c5fa5c35c3143ae8d097f1abddab5808d2;hb=b1ca4a9e46c616a187ba0fc7218be7f27d0fd44b;hp=7b924459f6bb140337b91627223e024b6892c342;hpb=f38420ff4bc9fb114db5f62b01cc8990dc0a0af2;p=monitor.git diff --git a/plc.py b/plc.py index 7b92445..363bc8c 100644 --- a/plc.py +++ b/plc.py @@ -10,31 +10,40 @@ import xml, xmlrpclib import logging -try: - import auth -except: - class Anon: - def __init__(self): - self.auth = {'AuthMethod': "anonymous"} - auth = Anon() - import time +import traceback try: - from config import config - config = config() + import config debug = config.debug except: debug = False +logger = logging.getLogger("monitor") -XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/" +class Auth: + def __init__(self): + self.auth = {'AuthMethod': "anonymous"} -logger = logging.getLogger("monitor") +# NOTE: this host is used by default when there are no auth files. +XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/" -api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) +# NOTE: by default, use anonymous access, but if auth files are +# configured, use them, with their auth definitions. +auth = Auth() +try: + import monitorconfig + auth.auth = {'Username' : monitorconfig.API_AUTH_USER, + 'AuthMethod' : 'password', + 'AuthString' : monitorconfig.API_AUTH_PASSWORD} + auth.server = monitorconfig.API_SERVER +except: + try: + import auth + auth.server = auth.plc + except: + auth = Auth() + auth.server = XMLRPC_SERVER -def getAPI(url): - api = xmlrpclib.Server(url, verbose=False, allow_none=True) - return api +api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) class PLC: def __init__(self, auth, url): @@ -52,12 +61,18 @@ class PLC: def __repr__(self): return self.api.__repr__() +def getAPI(url): + return xmlrpclib.Server(url, verbose=False, allow_none=True) + +def getAuthAPI(): + return PLC(auth.auth, auth.server) + ''' Returns list of nodes in dbg as reported by PLC ''' def nodesDbg(): dbgNodes = [] - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) anon = {'AuthMethod': "anonymous"} for node in api.GetNodes(anon, {"boot_state":"dbg"},["hostname"]): dbgNodes.append(node['hostname']) @@ -69,7 +84,7 @@ def nodesDbg(): Returns loginbase for given nodename ''' def siteId(nodename): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) anon = {'AuthMethod': "anonymous"} site_id = api.GetNodes (anon, {"hostname": nodename}, ['site_id']) if len(site_id) == 1: @@ -81,7 +96,7 @@ Returns list of slices for a site. ''' def slices(loginbase): siteslices = [] - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) sliceids = api.GetSites (auth.auth, {"login_base" : loginbase}, ["slice_ids"])[0]['slice_ids'] for slice in api.GetSlices(auth.auth, {"slice_id" : sliceids}, ["name"]): siteslices.append(slice['name']) @@ -91,7 +106,7 @@ def slices(loginbase): Returns dict of PCU info of a given node. ''' def getpcu(nodename): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) anon = {'AuthMethod': "anonymous"} nodeinfo = api.GetNodes(auth.auth, {"hostname": nodename}, ["pcu_ids", "ports"])[0] if nodeinfo['pcu_ids']: @@ -103,7 +118,7 @@ def getpcu(nodename): return False def GetPCUs(filter=None, fields=None): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) pcu_list = api.GetPCUs(auth.auth, filter, fields) return pcu_list @@ -111,7 +126,7 @@ def GetPCUs(filter=None, fields=None): Returns all site nodes for site id (loginbase). ''' def getSiteNodes(loginbase, fields=None): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) nodelist = [] anon = {'AuthMethod': "anonymous"} try: @@ -124,7 +139,7 @@ def getSiteNodes(loginbase, fields=None): return nodelist def getPersons(filter=None, fields=None): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) persons = [] try: persons = api.GetPersons(auth.auth, filter, fields) @@ -134,21 +149,20 @@ def getPersons(filter=None, fields=None): return persons def getSites(filter=None, fields=None): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) sites = [] anon = {'AuthMethod': "anonymous"} try: #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 def getSiteNodes2(loginbase): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) nodelist = [] anon = {'AuthMethod': "anonymous"} try: @@ -159,12 +173,12 @@ def getSiteNodes2(loginbase): return nodelist def getNodeNetworks(filter=None): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) nodenetworks = api.GetNodeNetworks(auth.auth, filter, None) return nodenetworks def getNodes(filter=None, fields=None): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) nodes = api.GetNodes(auth.auth, filter, fields) #['boot_state', 'hostname', #'site_id', 'date_created', 'node_id', 'version', 'nodenetwork_ids', @@ -175,14 +189,14 @@ def getNodes(filter=None, fields=None): Sets boot state of a node. ''' def nodeBootState(nodename, state): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) try: return api.UpdateNode(auth.auth, nodename, {'boot_state': state}) except Exception, exc: logger.info("nodeBootState: %s" % exc) def updateNodeKey(nodename, key): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) try: return api.UpdateNode(auth.auth, nodename, {'key': key}) except Exception, exc: @@ -192,7 +206,7 @@ def updateNodeKey(nodename, key): Sends Ping Of Death to node. ''' def nodePOD(nodename): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) logger.info("Sending POD to %s" % nodename) try: if not debug: @@ -204,7 +218,7 @@ def nodePOD(nodename): Freeze all site slices. ''' def suspendSlices(nodename): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) for slice in slices(siteId(nodename)): logger.info("Suspending slice %s" % slice) try: @@ -214,7 +228,7 @@ def suspendSlices(nodename): logger.info("suspendSlices: %s" % exc) def enableSlices(nodename): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) for slice in slices(siteId(nodename)): logger.info("Enabling slices %s" % slice) try: @@ -237,13 +251,13 @@ def enableSlices(nodename): #Enable suspended site slices. #''' #def enableSlices(nodename, slicelist): -# api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) +# api = xmlrpclib.Server(auth.server, verbose=False) # for slice in slices(siteId(nodename)): # logger.info("Suspending slice %s" % slice) # api.SliceAttributeAdd(auth.auth, slice, "plc_slice_state", {"state" : "suspended"}) # def enableSliceCreation(nodename): - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False, allow_none=True) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) try: loginbase = siteId(nodename) logger.info("Enabling slice creation for site %s" % loginbase) @@ -259,7 +273,7 @@ Removes ability to create slices. Returns previous max_slices ''' def removeSliceCreation(nodename): print "removeSliceCreation(%s)" % nodename - api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False) try: loginbase = siteId(nodename) #numslices = api.GetSites(auth.auth, {"login_base": loginbase}, @@ -275,7 +289,7 @@ def removeSliceCreation(nodename): QED ''' #def enableSliceCreation(nodename, maxslices): -# api = xmlrpclib.Server(XMLRPC_SERVER, verbose=False) +# api = xmlrpclib.Server(auth.server, verbose=False) # anon = {'AuthMethod': "anonymous"} # siteid = api.AnonAdmQuerySite (anon, {"node_hostname": nodename}) # if len(siteid) == 1: @@ -309,5 +323,4 @@ def main(): #print slices("princeton") if __name__=="__main__": - import reboot main()