-#!/usr/bin/python
+#!/usr/bin/env python
""" Private Bridge configurator. """
priority = 9
+class OvsException (Exception) :
+ def __init__ (self, message="no message"):
+ self.message=message
+ def __repr__ (self): return message
+
def start():
logger.log('private bridge plugin starting up...')
logger.log("log_call:end terminating command (%s) - exceeded timeout %d s"%(message,timeout))
return (-2, None)
break
- except:
- logger.log_exc("failed to run command %s" % message)
+ except Exception as e:
+ logger.log_exc("failed to run command %s -> %s" % (message,e))
return (-1, None)
+### Thierry - 23 Sept 2014
+# regardless of this being shipped on lxc-only or on all nodes,
+# it is safer to check for the availability of the ovs-vsctl command and just print
+# out a warning when it's not there, instead of a nasty traceback
+def ovs_available ():
+ "return True if ovs-vsctl can be run"
+ try:
+ child = subprocess.Popen (['ovs-ovsctl', '--help'])
+ child.communicate()
+ return True
+ except:
+ return False
+
def ovs_vsctl(args):
return log_call_read(["ovs-vsctl"] + args)
def ovs_listbridge():
(returncode, stdout) = ovs_vsctl(["list-br"])
- if (returncode != 0):
- raise OvsException()
+ if (returncode != 0): raise OvsException("list-br")
return stdout.split()
def ovs_addbridge(name):
(returncode, stdout) = ovs_vsctl(["add-br",name])
- if (returncode != 0):
- raise OvsException()
+ if (returncode != 0): raise OvsException("add-br")
def ovs_listports(name):
(returncode, stdout) = ovs_vsctl(["list-ports", name])
- if (returncode != 0):
- raise OvsException()
+ if (returncode != 0): raise OvsException("list-ports")
return stdout.split()
def ovs_delbridge(name):
(returncode, stdout) = ovs_vsctl(["del-br",name])
- if (returncode != 0):
- raise OvsException()
+ if (returncode != 0): raise OvsException("del-br")
def ovs_addport(name, portname, type, remoteip, key):
args = ["add-port", name, portname, "--", "set", "interface", portname, "type="+type]
args = args + ["options:key=" + str(key)]
(returncode, stdout) = ovs_vsctl(args)
- if (returncode != 0):
- raise OvsException()
+ if (returncode != 0): raise OvsException("add-port")
def ovs_delport(name, portname):
(returncode, stdout) = ovs_vsctl(["del-port",name,portname])
- if (returncode != 0):
- raise OvsException()
+ if (returncode != 0): raise OvsException("del-port")
def ensure_slicebridge_created(name, addr):
bridges = ovs_listbridge()
ensure_slicebridge_neighbors(slice_bridge_name, sliver_id, slice_bridge_neighbors)
def GetSlivers(data, conf = None, plc = None):
+
+ if not ovs_available():
+ logger.log ("privatebridge: warning, ovs-vsctl not found - exiting")
+ return
+
node_id = tools.node_id()
if 'slivers' not in data: