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...')
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("del-br")
+
def ovs_addport(name, portname, type, remoteip, key):
args = ["add-port", name, portname, "--", "set", "interface", portname, "type="+type]
if remoteip:
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()
if not portname in ports:
ovs_addport(name, portname, "gre", neighbor_ip, sliver_id)
- for port in ports:
- if port.startswith("gre") and (port not in want_ports):
+ for portname in ports:
+ if portname.startswith("gre") and (portname not in want_ports):
ovs_delport(name, portname)
def configure_slicebridge(sliver, attributes):
logger.log_missing_data("privatebridge.GetSlivers",'slivers')
return
+ valid_bridges = []
for sliver in data['slivers']:
sliver_name = sliver['name']
for attribute in sliver['attributes']:
attributes[attribute['tagname']] = attribute['value']
- if attributes.get('slice_bridge_name',None):
+ bridge_name = attributes.get('slice_bridge_name',None)
+ if bridge_name:
configure_slicebridge(sliver, attributes)
+ valid_bridges.append(bridge_name)
+
+ # now, delete the bridges that we don't want
+ bridges = ovs_listbridge()
+ for bridge_name in bridges:
+ if not bridge_name.startswith("br-slice-"):
+ # ignore ones we didn't create
+ continue
+
+ if bridge_name in valid_bridges:
+ # ignore ones we want to keep
+ continue
+
+ logger.log("privatebridge: deleting unused bridge %s" % bridge_name)
+
+ ovs_delbridge(bridge_name)
+