import traceback
from monitor import database
+# note: this needs to be consistent with the value in PLEWWW/planetlab/includes/plc_functions.php
+PENDING_CONSORTIUM_ID = 0
+# not used in monitor
+#APPROVED_CONSORTIUM_ID = 999999
+
try:
from monitor import config
debug = config.debug
except:
print "Call %s FAILED: Using old cached data" % cachename
load_old_cache = True
-
+
if load_old_cache:
values = database.dbLoad(cachename)
else:
database.dbDump(cachename, values)
-
+
return values
else:
values = database.dbLoad(cachename)
nodeauth = Auth(session=session)
return PLC(nodeauth.auth, auth.server)
-def getAuthAPI():
- return PLC(auth.auth, auth.server)
+def getAuthAPI(url=None):
+ if url:
+ return PLC(auth.auth, url)
+ else:
+ return PLC(auth.auth, auth.server)
def getCachedAuthAPI():
return CachedPLC(auth.auth, auth.server)
def getpcu(nodename):
api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True)
anon = {'AuthMethod': "anonymous"}
- nodeinfo = api.GetNodes(auth.auth, {"hostname": nodename}, ["pcu_ids", "ports"])[0]
+ try:
+ nodeinfo = api.GetNodes(auth.auth, {"hostname": nodename}, ["pcu_ids", "ports"])[0]
+ except IndexError:
+ logger.info("Can not find node: %s" % nodename)
+ return False
if nodeinfo['pcu_ids']:
print nodeinfo
sitepcu = api.GetPCUs(auth.auth, nodeinfo['pcu_ids'])[0]
#'last_updated', 'peer_node_id', 'ssh_rsa_key' ])
return nodes
+
+# Check if the site is a pending site that needs to be approved.
+def isPendingSite(loginbase):
+ api = xmlrpclib.Server(auth.server, verbose=False)
+ try:
+ site = api.GetSites(auth.auth, loginbase)[0]
+ except Exception, exc:
+ logger.info("ERROR: No site %s" % loginbase)
+ return False
+
+ if not site['enabled'] and site['ext_consortium_id'] == PENDING_CONSORTIUM_ID:
+ return True
+
+ return False
+
+
'''
Sets boot state of a node.
'''
Freeze all site slices.
'''
def suspendSiteSlices(loginbase):
+ if isPendingSite(loginbase):
+ msg = "INFO: suspendSiteSlices: Pending Site (%s)" % loginbase
+ print msg
+ logger.info(msg)
+ return
+
api = xmlrpclib.Server(auth.server, verbose=False)
for slice in slices(loginbase):
logger.info("Suspending slice %s" % slice)
Freeze all site slices.
'''
def suspendSlices(nodename):
- api = xmlrpclib.Server(auth.server, verbose=False)
- for slice in slices(siteId(nodename)):
- logger.info("Suspending slice %s" % slice)
- try:
- if not debug:
- api.AddSliceAttribute(auth.auth, slice, "enabled", "0")
- except Exception, exc:
- logger.info("suspendSlices: %s" % exc)
+ loginbase = siteId(nodename)
+ suspendSiteSlices(loginbase)
+
def enableSiteSlices(loginbase):
+ if isPendingSite(loginbase):
+ msg = "INFO: enableSiteSlices: Pending Site (%s)" % loginbase
+ print msg
+ logger.info(msg)
+ return
+
api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True)
for slice in slices(loginbase):
logger.info("Enabling slices %s" % slice)
print "exception: %s" % exc
def enableSlices(nodename):
- api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True)
- for slice in slices(siteId(nodename)):
- logger.info("Enabling slices %s" % slice)
- try:
- if not debug:
- slice_list = api.GetSlices(auth.auth, {'name': slice}, None)
- if len(slice_list) == 0:
- return
- slice_id = slice_list[0]['slice_id']
- l_attr = api.GetSliceAttributes(auth.auth, {'slice_id': slice_id}, None)
- for attr in l_attr:
- if "enabled" == attr['name'] and attr['value'] == "0":
- logger.info("Deleted enable=0 attribute from slice %s" % slice)
- api.DeleteSliceAttribute(auth.auth, attr['slice_attribute_id'])
- except Exception, exc:
- logger.info("enableSlices: %s" % exc)
- print "exception: %s" % exc
+ loginbase = siteId(nodename)
+ enableSiteSlices(loginbase)
+
#I'm commenting this because this really should be a manual process.
#'''
# api.SliceAttributeAdd(auth.auth, slice, "plc_slice_state", {"state" : "suspended"})
#
def enableSiteSliceCreation(loginbase):
+ if isPendingSite(loginbase):
+ msg = "INFO: enableSiteSliceCreation: Pending Site (%s)" % loginbase
+ print msg
+ logger.info(msg)
+ return
+
api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True)
try:
logger.info("Enabling slice creation for site %s" % loginbase)
if not debug:
- logger.info("\tcalling UpdateSite(%s, enabled=True)" % loginbase)
- api.UpdateSite(auth.auth, loginbase, {'enabled': True})
+ site = api.GetSites(auth.auth, loginbase)[0]
+ if site['enabled'] == False:
+ logger.info("\tcalling UpdateSite(%s, enabled=True)" % loginbase)
+ api.UpdateSite(auth.auth, loginbase, {'enabled': True})
except Exception, exc:
print "ERROR: enableSiteSliceCreation: %s" % exc
logger.info("ERROR: enableSiteSliceCreation: %s" % exc)
def enableSliceCreation(nodename):
- api = xmlrpclib.Server(auth.server, verbose=False, allow_none=True)
- try:
- loginbase = siteId(nodename)
- logger.info("Enabling slice creation for site %s" % loginbase)
- if not debug:
- logger.info("\tcalling UpdateSite(%s, enabled=True)" % loginbase)
- api.UpdateSite(auth.auth, loginbase, {'enabled': True})
- except Exception, exc:
- print "ERROR: enableSliceCreation: %s" % exc
- logger.info("ERROR: enableSliceCreation: %s" % exc)
+ loginbase = siteId(nodename)
+ enableSiteSliceCreation(loginbase)
'''
Removes site's ability to create slices. Returns previous max_slices
'''
-def removeSiteSliceCreation(sitename):
- print "removeSiteSliceCreation(%s)" % sitename
+def removeSiteSliceCreation(loginbase):
+ print "removeSiteSliceCreation(%s)" % loginbase
+
+ if isPendingSite(loginbase):
+ msg = "INFO: removeSiteSliceCreation: Pending Site (%s)" % loginbase
+ print msg
+ logger.info(msg)
+ return
+
api = xmlrpclib.Server(auth.server, verbose=False)
try:
- logger.info("Removing slice creation for site %s" % sitename)
+ logger.info("Removing slice creation for site %s" % loginbase)
if not debug:
- api.UpdateSite(auth.auth, sitename, {'enabled': False})
+ api.UpdateSite(auth.auth, loginbase, {'enabled': False})
except Exception, exc:
logger.info("removeSiteSliceCreation: %s" % exc)
Removes ability to create slices. Returns previous max_slices
'''
def removeSliceCreation(nodename):
- print "removeSliceCreation(%s)" % nodename
- api = xmlrpclib.Server(auth.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 debug:
- #api.UpdateSite(auth.auth, loginbase, {'max_slices': 0})
- api.UpdateSite(auth.auth, loginbase, {'enabled': False})
- except Exception, exc:
- logger.info("removeSliceCreation: %s" % exc)
+ loginbase = siteId(nodename)
+ removeSiteSliceCreation(loginbase)
+
'''
QED