added options so the reset script can run in verbose mode, or on
authorThierry Parmentelat <thierry.parmentelat@inria.fr>
Fri, 12 Oct 2012 12:21:37 +0000 (14:21 +0200)
committerThierry Parmentelat <thierry.parmentelat@inria.fr>
Fri, 12 Oct 2012 12:21:37 +0000 (14:21 +0200)
selected slices

omf/omf_slicemgr.py
omf/reset_xmpp_pubsub_nodes.py

index ab02652..24e5aee 100755 (executable)
@@ -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])
index d0bdfa1..86c72bb 100755 (executable)
@@ -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()