X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fprivatebridge.py;h=52c3932b386ea437e25f199cb8b8a2a3a5049cec;hb=5f75e88482dd462924a9687f8af9d2d3e1145489;hp=9efa9e382f6f8a3c96232a74851ed5a4f2d51d69;hpb=eae2fead723196e8b0ccae1bb5224f008d46911a;p=nodemanager.git diff --git a/plugins/privatebridge.py b/plugins/privatebridge.py index 9efa9e3..52c3932 100644 --- a/plugins/privatebridge.py +++ b/plugins/privatebridge.py @@ -80,6 +80,11 @@ def ovs_listports(name): raise OvsException() return stdout.split() +def ovs_delbridge(name): + (returncode, stdout) = ovs_vsctl(["del-br",name]) + if (returncode != 0): + raise OvsException() + def ovs_addport(name, portname, type, remoteip, key): args = ["add-port", name, portname, "--", "set", "interface", portname, "type="+type] if remoteip: @@ -152,6 +157,7 @@ def GetSlivers(data, conf = None, plc = None): logger.log_missing_data("privatebridge.GetSlivers",'slivers') return + valid_bridges = [] for sliver in data['slivers']: sliver_name = sliver['name'] @@ -160,7 +166,25 @@ def GetSlivers(data, conf = None, plc = None): 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) +