[ovs-dev] [PATCH 3/4] xenserver: Find managers referenced in manager_options column, if any.

Andrew Evans aevans at nicira.com
Wed Feb 2 08:12:03 UTC 2011


---
 .../etc_xapi.d_plugins_openvswitch-cfg-update      |   14 ++++++++++++--
 ..._lib_xsconsole_plugins-base_XSFeatureVSwitch.py |   12 ++++++++++--
 ...sr_share_openvswitch_scripts_sysconfig.template |    2 +-
 3 files changed, 23 insertions(+), 5 deletions(-)

diff --git a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
index 5189d04..2466750 100755
--- a/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
+++ b/xenserver/etc_xapi.d_plugins_openvswitch-cfg-update
@@ -128,8 +128,16 @@ def update(session, args):
         return "No change to configuration"
 
 def vswitchCurrentController():
-    controller = vswitchCfgQuery(["get", "Open_vSwitch", 
-                                  ".", "managers"]).strip('[]"')
+    # Manager rows referenced in manager_options column get priority.
+    # We arbitrarily grab the first one.
+    uuid = vswitchCfgQuery(["get", "Open_vSwitch", ".",
+                             "manager_options"]).strip('[]').split(', ')[0]
+    if uuid:
+        controller = vswitchCfgQuery(["get", "Manager", uuid, "target"
+                                      ]).strip('[]"').split()[0]
+    else:
+        controller = vswitchCfgQuery(["get", "Open_vSwitch",
+                                      ".", "managers"]).strip('[]"')
     if controller == "":
         return controller
     if len(controller) < 4 or controller[0:4] != "ssl:":
@@ -139,12 +147,14 @@ def vswitchCurrentController():
 
 def removeControllerCfg():
     vswitchCfgMod(["--", "clear", "Open_vSwitch", ".", "managers",
+                   "--", "clear", "Open_vSwitch", ".", "manager_options",
                    "--", "del-ssl"])
 
 def setControllerCfg(controller):
     # /etc/xensource/xapi-ssl.pem is mentioned twice below because it
     # contains both the private key and the certificate.
     vswitchCfgMod(["--", "clear", "Open_vSwitch", ".", "managers",
+                   "--", "clear", "Open_vSwitch", ".", "manager_options",
                    "--", "del-ssl",
                    "--", "--bootstrap", "set-ssl",
                    "/etc/xensource/xapi-ssl.pem",
diff --git a/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py b/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
index 015f4cc..0ad8db3 100644
--- a/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
+++ b/xenserver/usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
@@ -304,8 +304,16 @@ class XSFeatureVSwitch:
         if dbController == "":
             dbController = Lang("<None>")
         inPane.AddStatusField(Lang("Controller (config)", 20), dbController)
-        controller = VSwitchConfig.Get("get Open_vSwitch . managers")
-        controller = controller.strip('[]"')
+
+        # Find all controllers referenced by manager_options column, if any.
+        controller = ""
+        for uuid in VSwitchConfig.Get("get Open_vSwitch . manager_options").strip('[]').split(', '):
+            controller += VSwitchConfig.Get("get Manager " + uuid + " target").strip('"') + " "
+        controller = controller.rstrip()
+
+        # Fallback: use legacy managers map.
+        if not controller:
+            controller = VSwitchConfig.Get("get Open_vSwitch . managers").strip('[]"')
 
         if controller == "":
             controller = Lang("<None>")
diff --git a/xenserver/usr_share_openvswitch_scripts_sysconfig.template b/xenserver/usr_share_openvswitch_scripts_sysconfig.template
index c639df8..0b356fa 100644
--- a/xenserver/usr_share_openvswitch_scripts_sysconfig.template
+++ b/xenserver/usr_share_openvswitch_scripts_sysconfig.template
@@ -35,7 +35,7 @@
 
 # OVSDB_SERVER_REMOTES: Space-separated list of methods on which to have
 #     ovsdb-server listen or connect for a JSON-RPC connection.
-# OVSDB_SERVER_REMOTES="punix:/var/run/openvswitch/db.sock db:Open_vSwitch,managers"
+# OVSDB_SERVER_REMOTES="punix:/var/run/openvswitch/db.sock db:Open_vSwitch,managers db:Open_vSwitch,manager_options"
 
 # OVSDB_SERVER_DB: File for which ovsdb-server uses for storage.
 # OVSDB_SERVER_DB=/etc/openvswitch/conf.db
-- 
1.7.2.3





More information about the dev mailing list