-# Copyright (c) Citrix Systems 2008. All rights reserved.
-# xsconsole is proprietary software.
+# Copyright (c) 2007-2010 Citrix Systems Inc.
+# Copyright (c) 2009,2010 Nicira Networks.
#
-# Xen, the Xen logo, XenCenter, XenMotion are trademarks or registered
-# trademarks of Citrix Systems, Inc., in the United States and other
-# countries.
-
-# Copyright (c) 2009, 2010 Nicira Networks.
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 only.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
from XSConsoleLog import *
@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))
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 = ""
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:
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):
@classmethod
def StatusUpdateHandler(cls, inPane):
data = Data.Inst()
+ xs_version = data.host.software_version.product_version('')
inPane.AddTitleField(Lang("Open vSwitch"))
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 = ""
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())