From: Thierry Parmentelat Date: Fri, 12 Oct 2012 12:21:37 +0000 (+0200) Subject: added options so the reset script can run in verbose mode, or on X-Git-Tag: plcapi-5.1-4~1^2 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=20d1a95586c4eb6397ff96e52b088c331caf0a99;p=plcapi.git added options so the reset script can run in verbose mode, or on selected slices --- diff --git a/omf/omf_slicemgr.py b/omf/omf_slicemgr.py index ab02652..24e5aee 100755 --- a/omf/omf_slicemgr.py +++ b/omf/omf_slicemgr.py @@ -338,7 +338,8 @@ class Slicemgr(xmlrpc.XMLRPC, PubSubClient): self.command_queue.put(( self.create_node, "/".join([self.DOMAIN,slice,self.RESOURCES]) )) def add_resource(self, slice, resource): - self.command_queue.put(( self.create_node, "/".join([self.DOMAIN,slice,self.RESOURCES,resource]) )) + resname = "/".join([self.DOMAIN,slice,self.RESOURCES,resource]) + self.command_queue.put(( self.create_node, resname )) def delete_slice(self, slice): slice_prefix = "/".join([self.DOMAIN,slice]) diff --git a/omf/reset_xmpp_pubsub_nodes.py b/omf/reset_xmpp_pubsub_nodes.py index d0bdfa1..86c72bb 100755 --- a/omf/reset_xmpp_pubsub_nodes.py +++ b/omf/reset_xmpp_pubsub_nodes.py @@ -2,22 +2,33 @@ import sys import xmlrpclib +from optparse import OptionParser + sys.path.append("/usr/bin/") from omf_slicemgr import * +from PLC.Config import Config -xmppserver = config.PLC_OMF_XMPP_SERVER -xmppuser = "@".join([config.PLC_OMF_XMPP_USER, xmppserver]) -xmpppass = config.PLC_OMF_XMPP_PASSWORD -xmlrpc = xmlrpclib.ServerProxy(config.PLC_OMF_SLICEMGR_URL) +config = Config("/etc/planetlab/plc_config") +pubsub=None +verbose=False -pubsub = PubSubClient(xmppuser, xmpppass, verbose=False) +def init_global_pubsub(verbose): + xmppserver = config.PLC_OMF_XMPP_SERVER + xmppuser = "@".join([config.PLC_OMF_XMPP_USER, xmppserver]) + xmpppass = config.PLC_OMF_XMPP_PASSWORD + global pubsub + pubsub = PubSubClient(xmppuser, xmpppass, verbose=verbose) +def init_xmlrpc (): + return xmlrpclib.ServerProxy(config.PLC_OMF_SLICEMGR_URL) + def delete_all_nodes(iq): global pubsub print "Deleting PubSub groups..." for i in iq.query.elements(): node = i['node'] + if verbose: print 'deleting node',node reactor.callLater(1, pubsub.delete_node, node) def is_local_node(node_id, slice_name): @@ -28,7 +39,23 @@ def is_local_node(node_id, slice_name): print "WARNING: node_id %s was referenced in slice %s" % (node_id, slice_name) return False -if __name__ == "__main__": +def main (): + usage="Usage: %prog -- [options]" + parser=OptionParser (usage=usage) + parser.add_option ("-v","--verbose",action='store_true',dest='verbose',default=False, + help="be verbose") + parser.add_option ("-s","--slice_pattern", action='store', dest='slice_pattern', default=None, + help="specify just one slice (or a slice name pattern), for debug mostly") + (options,args) = parser.parse_args() + global verbose + verbose=options.verbose + if args: + parser.print_help() + sys.exit(1) + + init_global_pubsub (options.verbose) + xmlrpc = init_xmlrpc () + pubsub.add_result_hook("discover", delete_all_nodes) reactor.callLater(1, pubsub.discover) reactor.callLater(2, pubsub.create_node, "/OMF") @@ -39,16 +66,23 @@ if __name__ == "__main__": reactor.run() print "Re-creating PubSub groups..." - slices = GetSlices() + if options.slice_pattern: + slices=GetSlices({'name':options.slice_pattern}) + if not slices: + print 'Could not find any slice with',options.slice_pattern + sys.exit(1) + else: + slices = GetSlices() # optimizing the API calls nodes = GetNodes ({},['node_id','hrn','peer_id']) local_node_hash = dict ( [ (n['node_id'],n['hrn']) for n in nodes if n['peer_id'] is None ] ) foreign_node_hash = dict ( [ (n['node_id'],n['hrn']) for n in nodes if n['peer_id'] is not None ] ) total=len(slices) - counter=1 + slice_counter=1 + node_counter=0 for slice in slices: - print 40*'x' + " slice %s (%d/%d)"%(slice['name'],counter,total) - counter +=1 + print 40*'x' + " slice %s (%d/%d)"%(slice['name'],slice_counter,total) + slice_counter +=1 xmlrpc.createSlice(slice['name']) for node_id in slice['node_ids']: # silently ignore foreign nodes @@ -56,8 +90,14 @@ if __name__ == "__main__": elif node_id in local_node_hash: hrn=local_node_hash[node_id] if hrn: + print 'add resource',slice['name'],hrn xmlrpc.addResource(slice['name'],hrn) + node_counter +=1 else: print "WARNING: missing hrn tag for node_id: %s" % node_id else: print "Cannot find node with node_id %d (in slice %s)"%(node_id,slice['name']) + print "Re-created a total of %d pubsub nodes"%node_counter + +if __name__ == "__main__": + main()