xenserver: Make OVS xsconsole plugin configure management channel
authorJustin Pettit <jpettit@nicira.com>
Sat, 13 Mar 2010 14:11:47 +0000 (06:11 -0800)
committerJustin Pettit <jpettit@nicira.com>
Sat, 13 Mar 2010 15:22:00 +0000 (07:22 -0800)
Previously, the xsconsole plugin configured a single OpenFlow controller
configuration across all bridges.  With the management channel, we can
now have the manager configure the bridges' controllers individually.
This changes the plugin to only set that management IP.

xenserver/etc_xapi.d_plugins_vswitch-cfg-update
xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py

index 6e38a80..4cebe85 100755 (executable)
@@ -62,26 +62,27 @@ def update(session, args):
         return "No change to configuration"
 
 def vswitchCurrentController():
-    controller = vswitchCfgQuery("get-controller")
+    controller = vswitchCfgQuery("get Open_vSwitch . managers").strip('[]"')
     if controller == "":
         return controller
     if len(controller) < 4 or controller[0:4] != "ssl:":
         return controller
     else:
-        return controller[4:]
+        return controller.split(':')[1]
 
 def removeControllerCfg():
-    vswitchCfgMod(["--", "del-controller",
+    vswitchCfgMod(["--", "clear", "Open_vSwitch", ".", "managers",
                    "--", "del-ssl"])
 
 def setControllerCfg(controller):
-    vswitchCfgMod(["--", "del-controller",
+    vswitchCfgMod(["--", "clear", "Open_vSwitch", ".", "managers",
                    "--", "del-ssl",
                    "--", "--bootstrap", "set-ssl",
                    "/etc/xensource/xapi-ssl.pem",
                    "/etc/xensource/xapi-ssl.pem",
                    "/etc/ovs-vswitchd.cacert",
-                   "--", "set-controller", "ssl:" + controller])
+                   "--", "set", "Open_vSwitch", ".",
+                   'managers="ssl:' + controller + ':6632"'])
 
 def vswitchCfgQuery(action):
     cmd = [vsctl, "-vANY:console:emer", action]
index 99dd15d..6ecf478 100644 (file)
@@ -79,7 +79,8 @@ class VSwitchConfig:
     @staticmethod
     def Get(action):
         try:
-            output = ShellPipe([vsctl, "-vANY:console:emer", action]).Stdout()
+            arg = [vsctl, "-vANY:console:emer"] + action.split()
+            output = ShellPipe(arg).Stdout()
         except StandardError, e:
             XSLogError("config retrieval error: " + str(e))
             return "<unknown>"
@@ -283,11 +284,13 @@ class XSFeatureVSwitch:
         if dbController == "":
             dbController = Lang("<None>")
         inPane.AddStatusField(Lang("Controller (config)", 20), dbController)
-        controller = VSwitchConfig.Get("get-controller")
+        controller = VSwitchConfig.Get("get Open_vSwitch . managers")
+        controller = controller.strip('[]"')
+
         if controller == "":
             controller = Lang("<None>")
         elif controller[0:4] == "ssl:":
-            controller = controller[4:]
+            controller = controller.split(':')[1]
         inPane.AddStatusField(Lang("Controller (in-use)", 20), controller)
 
         inPane.NewLine()