Currently LinuxBridge L2-agent[1] defines get_all_neutron_bridges which
lists all bridges managed by the agent including user-defined ones BUT
this method is only used by neutron-linuxbridge-cleanup[2] in order to
remove empty non-user-defined bridges returned get_all_neutron_bridges.
This change replaces this method by get_deletable_bridges which returns
bridges managed by LB agent which are "deletable" (ie: non user-defined).
This allows to simplify code and move the computation of "deletable"
bridges to LB agent code.
[1] neutron.plugins.ml2.drivers.linuxbridge.agent.linuxbridge_neutron_agent
[2] neutron.cmd.linuxbridge_cleanup
Partial-Bug: #
1514548
Change-Id: I2f8a9a6982ce0ce77187ae4b7a58b3ef752aab34
lb_manager = linuxbridge_neutron_agent.LinuxBridgeManager(
bridge_mappings, interface_mappings)
- # NOTE(mgagne) Don't remove pre-existing user-defined bridges
- bridge_names = set(lb_manager.get_all_neutron_bridges())
- bridge_names -= set(bridge_mappings.values())
-
+ bridge_names = lb_manager.get_deletable_bridges()
for bridge_name in bridge_names:
if lb_manager.get_tap_devices_count(bridge_name):
continue
"range"),
cfg.CONF.VXLAN.vxlan_group)
- def get_all_neutron_bridges(self):
- neutron_bridge_list = []
+ def get_deletable_bridges(self):
bridge_list = bridge_lib.get_bridge_names()
- for bridge in bridge_list:
- if bridge.startswith(BRIDGE_NAME_PREFIX):
- neutron_bridge_list.append(bridge)
-
- # NOTE(nick-ma-z): Add pre-existing user-defined bridges
- for bridge_name in self.bridge_mappings.values():
- if bridge_name not in neutron_bridge_list:
- neutron_bridge_list.append(bridge_name)
- return neutron_bridge_list
+ bridges = {b for b in bridge_list if b.startswith(BRIDGE_NAME_PREFIX)}
+ bridges.difference_update(self.bridge_mappings.values())
+ return bridges
def get_tap_devices_count(self, bridge_name):
if_list = bridge_lib.BridgeDevice(bridge_name).get_interfaces()
cfg.CONF.set_override('vxlan_group', '224.0.0.1/', 'VXLAN')
self.assertIsNone(self.lbm.get_vxlan_group(vn_id))
- def test_get_all_neutron_bridges(self):
- br_list = ["br-int", "brq1", "brq2", "br-ex"]
- result = br_list[1:3]
- result.append('br-eth2')
-
+ def test_get_deletable_bridges(self):
+ br_list = ["br-int", "brq1", "brq2", "brq-user"]
+ expected = set(br_list[1:3])
+ lbm = get_linuxbridge_manager(
+ bridge_mappings={"physnet0": "brq-user"}, interface_mappings={})
with mock.patch.object(
bridge_lib, 'get_bridge_names', return_value=br_list):
- self.assertEqual(result, self.lbm.get_all_neutron_bridges())
+ self.assertEqual(expected, lbm.get_deletable_bridges())
def test_get_tap_devices_count(self):
with mock.patch.object(