X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=monitor%2Fwrapper%2Fplc.py;h=2ab180872d51df05a41e1e971efc074dce614198;hb=4d56ef5473c6486c321dd2797be45b45b0606dae;hp=63f17a4e6fe42c852ab7c3871088efc2fa51c164;hpb=6f2351e4b44590221425fa9b4bfa77c92db49b6a;p=monitor.git diff --git a/monitor/wrapper/plc.py b/monitor/wrapper/plc.py index 63f17a4..2ab1808 100644 --- a/monitor/wrapper/plc.py +++ b/monitor/wrapper/plc.py @@ -15,15 +15,24 @@ import traceback from monitor import database try: - import config + from monitor import config debug = config.debug except: debug = False logger = logging.getLogger("monitor") class Auth: - def __init__(self): - self.auth = {'AuthMethod': "anonymous"} + def __init__(self, username=None, password=None, **kwargs): + if 'session' in kwargs: + self.auth= { 'AuthMethod' : 'session', + 'session' : kwargs['session'] } + else: + if username==None and password==None: + self.auth = {'AuthMethod': "anonymous"} + else: + self.auth = {'Username' : username, + 'AuthMethod' : 'password', + 'AuthString' : password} # NOTE: this host is used by default when there are no auth files. XMLRPC_SERVER="https://boot.planet-lab.org/PLCAPI/" @@ -81,6 +90,11 @@ class CachedPLC(PLC): def run_or_returncached(*params): cachename = self._param_to_str(name, *params) #print "cachename is %s" % cachename + if hasattr(config, 'refresh'): + refresh = config.refresh + else: + refresh = False + if 'Get' in name: if not database.cachedRecently(cachename): load_old_cache = False @@ -108,6 +122,10 @@ class CachedPLC(PLC): def getAPI(url): return xmlrpclib.Server(url, verbose=False, allow_none=True) +def getNodeAPI(session): + nodeauth = Auth(session=session) + return PLC(nodeauth.auth, auth.server) + def getAuthAPI(): return PLC(auth.auth, auth.server) @@ -122,7 +140,7 @@ def getTechEmails(loginbase): # get site details. s = api.GetSites(loginbase)[0] # get people at site - p = api.GetPersons(s['person_ids'])[0] + p = api.GetPersons(s['person_ids']) # pull out those with the right role. emails = [ person['email'] for person in filter(lambda x: 'tech' in x['roles'], p) ] return emails @@ -135,7 +153,7 @@ def getPIEmails(loginbase): # get site details. s = api.GetSites(loginbase)[0] # get people at site - p = api.GetPersons(s['person_ids'])[0] + p = api.GetPersons(s['person_ids']) # pull out those with the right role. emails = [ person['email'] for person in filter(lambda x: 'pi' in x['roles'], p) ] return emails @@ -144,7 +162,7 @@ def getSliceUserEmails(loginbase): """ For the given site, return all user email addresses that have the 'tech' role. """ - #api = getAuthAPI() + api = getAuthAPI() # get site details. s = api.GetSites(loginbase)[0] # get people at site @@ -174,19 +192,20 @@ def nodesDbg(): Returns loginbase for given nodename ''' def siteId(nodename): - api = xmlrpclib.Server(auth.server, verbose=False) - anon = {'AuthMethod': "anonymous"} - site_id = api.GetNodes (anon, {"hostname": nodename}, ['site_id']) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) + site_id = api.GetNodes (auth.auth, {"hostname": nodename}, ['site_id']) if len(site_id) == 1: - loginbase = api.GetSites (anon, site_id[0], ["login_base"]) + loginbase = api.GetSites (auth.auth, site_id[0], ["login_base"]) return loginbase[0]['login_base'] + else: + print "Not nodes returned!!!!" ''' Returns list of slices for a site. ''' def slices(loginbase): siteslices = [] - api = xmlrpclib.Server(auth.server, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) 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']) @@ -196,11 +215,14 @@ def slices(loginbase): Returns dict of PCU info of a given node. ''' def getpcu(nodename): - api = xmlrpclib.Server(auth.server, verbose=False) + api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True) anon = {'AuthMethod': "anonymous"} nodeinfo = api.GetNodes(auth.auth, {"hostname": nodename}, ["pcu_ids", "ports"])[0] if nodeinfo['pcu_ids']: + print nodeinfo sitepcu = api.GetPCUs(auth.auth, nodeinfo['pcu_ids'])[0] + print sitepcu + print nodeinfo["ports"] sitepcu[nodename] = nodeinfo["ports"][0] return sitepcu else: