netdev-dpdk: fix mbuf leaks
[cascardo/ovs.git] / xenserver / etc_xapi.d_plugins_openvswitch-cfg-update
index aeaa1e7..e7404e3 100755 (executable)
@@ -30,6 +30,7 @@ import re
 vsctl = '/usr/bin/ovs-vsctl'
 ofctl = '/usr/bin/ovs-ofctl'
 cacert_filename = '/etc/openvswitch/vswitchd.cacert'
+ovsdb_port = '6640'
 
 
 # Delete the CA certificate, so that we go back to boot-strapping mode
@@ -59,10 +60,11 @@ def update(session, args):
         raise XenAPIPlugin.Failure('MORE_THAN_ONE_POOL_FOR_HOST', [])
     new_controller = False
     pool = session.xenapi.pool.get_record(pools[0])
-    controller = pool.get('vswitch_controller', '')
+    controller = pool.get('vswitch_controller')
     ret_str = ''
-    currentController = vswitchCurrentController()
-    if controller == '' and currentController != '':
+    currentControllers = vswitchCurrentControllers()
+
+    if not controller and currentControllers:
         delete_cacert()
         try:
             emergency_reset(session, None)
@@ -70,7 +72,8 @@ def update(session, args):
             pass
         removeControllerCfg()
         ret_str += 'Successfully removed controller config.  '
-    elif controller != currentController:
+    # controller cannot be empty, otherwise, this will always be True.
+    elif controller and controller not in currentControllers:
         delete_cacert()
         try:
             emergency_reset(session, None)
@@ -194,14 +197,18 @@ def update(session, args):
         return 'No change to configuration'
 
 
-def vswitchCurrentController():
-    controller = vswitchCfgQuery(['get-manager'])
-    if controller == '':
-        return controller
-    if len(controller) < 4 or controller[0:4] != 'ssl:':
-        return controller
-    else:
-        return controller.split(':')[1]
+def vswitchCurrentControllers():
+    controllers = vswitchCfgQuery(['get-manager'])
+
+    def parse_controller(controller):
+        if controller.startswith('ssl:'):
+            return controller.split(':')[1]
+
+        return controller.split(':')[0]
+
+    return [parse_controller(controller)
+            for controller in controllers.split('\n')
+            if controller]
 
 
 def removeControllerCfg():
@@ -218,7 +225,7 @@ def setControllerCfg(controller):
                    '/etc/xensource/xapi-ssl.pem',
                    '/etc/xensource/xapi-ssl.pem',
                    cacert_filename,
-                   '--', 'set-manager', 'ssl:' + controller + ':6632'])
+                   '--', 'set-manager', 'ssl:' + controller + ':' + ovsdb_port])
 
 
 def vswitchCfgQuery(action_args):