ovs-vsctl: Remove default timeout.
[sliver-openvswitch.git] / xenserver / usr_lib_xsconsole_plugins-base_XSFeatureVSwitch.py
index 74eb212..d2f6a6a 100644 (file)
@@ -79,7 +79,7 @@ class VSwitchConfig:
     @staticmethod
     def Get(action):
         try:
-            arg = [vsctl, "-vANY:console:emer"] + action.split()
+            arg = [vsctl, "--timeout=30", "-vANY:console:emer"] + action.split()
             output = ShellPipe(arg).Stdout()
         except StandardError, e:
             XSLogError("config retrieval error: " + str(e))
@@ -99,9 +99,13 @@ class VSwitchControllerDialogue(Dialogue):
 
         self.hostsInPool = 0
         self.hostsUpdated = 0
+        self.xs_version = data.host.software_version.product_version('')
         pool = data.GetPoolForThisHost()
         if pool is not None:
-            self.controller = pool.get("other_config", {}).get("vSwitchController", "")
+            if self.xs_version == "5.5.0":
+                self.controller = pool.get("other_config", {}).get("vSwitchController", "")
+            else:
+                self.controller = pool.get("vswitch_controller", "")
         else:
             self.controller = ""
 
@@ -222,14 +226,15 @@ class VSwitchControllerDialogue(Dialogue):
     def SetController(self, ip):
         self.hostsInPool = 0
         self.hostsUpdated = 0
-        Task.Sync(lambda s: self._modifyPoolConfig(s, "vSwitchController", ip))
+        Task.Sync(lambda s: self._modifyPoolConfig(s, ip or ""))
         # Should be done asynchronously, maybe with an external script?
         Task.Sync(lambda s: self._updateActiveServers(s))
 
-    def _modifyPoolConfig(self, session, key, value):
+    def _modifyPoolConfig(self, session, value):
         """Modify pool configuration.
 
-        If value == None then delete key, otherwise set key to value."""
+        If value == "" then delete configuration, otherwise set to value.
+        """
         pools = session.xenapi.pool.get_all()
         # We assume there is only ever one pool...
         if len(pools) == 0:
@@ -238,9 +243,13 @@ class VSwitchControllerDialogue(Dialogue):
         if len(pools) > 1:
             XSLogFatal(Lang("More than one pool for host."))
             return
-        session.xenapi.pool.remove_from_other_config(pools[0], key)
-        if value != None:
-            session.xenapi.pool.add_to_other_config(pools[0], key, value)
+        if self.xs_version == "5.5.0":
+            key = "vSwitchController"
+            session.xenapi.pool.remove_from_other_config(pools[0], key)
+            if value != None:
+                session.xenapi.pool.add_to_other_config(pools[0], key, value)
+        else:
+            session.xenapi.pool.set_vswitch_controller(value)
         Data.Inst().Update()
 
     def _updateActiveServers(self, session):
@@ -265,6 +274,7 @@ class XSFeatureVSwitch:
     @classmethod
     def StatusUpdateHandler(cls, inPane):
         data = Data.Inst()
+        xs_version = data.host.software_version.product_version('')
 
         inPane.AddTitleField(Lang("Open vSwitch"))
 
@@ -277,7 +287,10 @@ class XSFeatureVSwitch:
 
         pool = data.GetPoolForThisHost()
         if pool is not None:
-            dbController = pool.get("other_config", {}).get("vSwitchController", "")
+            if (xs_version == "5.5.0"):
+                dbController = pool.get("other_config", {}).get("vSwitchController", "")
+            else:
+                dbController = pool.get("vswitch_controller", "")
         else:
             dbController = ""
 
@@ -300,7 +313,6 @@ class XSFeatureVSwitch:
                               VSwitchService.Inst("openvswitch", "ovsdb-server").status())
 
         # Only XenServer 5.5.0 runs ovs-brcompatd
-        xs_version = data.host.software_version.product_version('')
         if (xs_version == "5.5.0"):
             inPane.AddStatusField(Lang("ovs-brcompatd status", 20),
                    VSwitchService.Inst("openvswitch", "ovs-brcompatd").status())
@@ -327,5 +339,6 @@ class XSFeatureVSwitch:
             }
         )
 
-# Register this plugin when module is imported
-XSFeatureVSwitch().Register()
+# Register this plugin when module is imported, IFF vswitchd is running
+if os.path.exists('/var/run/openvswitch/ovs-vswitchd.pid'):
+    XSFeatureVSwitch().Register()