# Copyright (c) 2009 Nicira Networks.
-import logging
-log = logging.getLogger("vswitch-cfg-update")
-logging.basicConfig(filename="/var/log/vswitch-xsplugin.log", level=logging.DEBUG)
+from XSConsoleLog import *
import os
+import socket
import subprocess
-cfg_mod="/root/vswitch/bin/ovs-cfg-mod"
+cfg_mod="/usr/bin/ovs-cfg-mod"
vswitchd_cfg_filename="/etc/ovs-vswitchd.conf"
if __name__ == "__main__":
if self.processname == None:
self.processname = name
+ def version(self):
+ try:
+ output = ShellPipe(["service", self.name, "version"]).Stdout()
+ except StandardError, e:
+ XSLogError("vswitch version retrieval error: " + str(e))
+ return "<unknown>"
+ for line in output:
+ if self.processname in line:
+ return line.split()[-1]
+ return "<unknown>"
+
def status(self):
try:
output = ShellPipe(["service", self.name, "status"]).Stdout()
except StandardError, e:
- log.error("status retrieval error: " + str(e))
+ XSLogError("vswitch status retrieval error: " + str(e))
return "<unknown>"
if len(output) == 0:
return "<unknown>"
- for l in output:
- if self.processname not in l:
+ for line in output:
+ if self.processname not in line:
continue
- elif "running" in l:
+ elif "running" in line:
return "Running"
- elif "stop" in l:
+ elif "stop" in line:
return "Stopped"
else:
return "<unknown>"
try:
ShellPipe(["service", self.name, "restart"]).Call()
except StandardError, e:
- log.error("restart error: " + str(e))
+ XSLogError("vswitch restart error: " + str(e))
@classmethod
def Inst(cls, name, processname=None):
output = ShellPipe([cfg_mod, "-vANY:console:emer", "-F",
vswitchd_cfg_filename, "-q", key]).Stdout()
except StandardError, e:
- log.error("config retrieval error: " + str(e))
+ XSLogError("config retrieval error: " + str(e))
return "<unknown>"
if len(output) == 0:
self.hostsInPool = 0
self.hostsUpdated = 0
- self.controller = data.GetPoolForThisHost().get("other_config", {}).get("vSwitchController", "")
+ pool = data.GetPoolForThisHost()
+ if pool is not None:
+ self.controller = pool.get("other_config", {}).get("vSwitchController", "")
+ else:
+ self.controller = ""
choiceDefs = [
ChoiceDef(Lang("Set pool-wide controller"),
inputValues = pane.GetFieldValues()
self.controller = inputValues['address']
Layout.Inst().PopDialogue()
+
+ # Make sure the controller is specified as a valid dotted quad
+ try:
+ socket.inet_aton(self.controller)
+ except socket.error:
+ Layout.Inst().PushDialogue(InfoDialogue(Lang("Please enter in dotted quad format")))
+ return True
+
Layout.Inst().TransientBanner(Lang("Setting controller..."))
try:
self.SetController(self.controller)
inPane.NewLine()
- versionStr = data.host.other_config({}).get("vSwitchVersion", "<Unknown>")
- inPane.AddStatusField(Lang("Version", 20), versionStr)
+ inPane.AddStatusField(Lang("Version", 20),
+ VSwitchService.Inst("vswitch", "ovs-vswitchd").version())
inPane.NewLine()
- dbController = data.GetPoolForThisHost().get("other_config", {}).get("vSwitchController", "")
+
+ pool = data.GetPoolForThisHost()
+ if pool is not None:
+ dbController = pool.get("other_config", {}).get("vSwitchController", "")
+ else:
+ dbController = ""
+
if dbController == "":
dbController = Lang("<None>")
inPane.AddStatusField(Lang("Controller (config)", 20), dbController)