From: Cedric Brandily Date: Thu, 5 Nov 2015 23:49:21 +0000 (+0100) Subject: Replace get_all_neutron_bridges by get_deletable_bridges X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=cc2d30eba4f7b2d0676dd308c9c9fe6328e44447;p=openstack-build%2Fneutron-build.git Replace get_all_neutron_bridges by get_deletable_bridges 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 --- diff --git a/neutron/cmd/linuxbridge_cleanup.py b/neutron/cmd/linuxbridge_cleanup.py index 3ecb315ab..4daf665ad 100644 --- a/neutron/cmd/linuxbridge_cleanup.py +++ b/neutron/cmd/linuxbridge_cleanup.py @@ -45,10 +45,7 @@ def remove_empty_bridges(): 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 diff --git a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py index 9568db251..1ba1b6e00 100644 --- a/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py +++ b/neutron/plugins/ml2/drivers/linuxbridge/agent/linuxbridge_neutron_agent.py @@ -163,18 +163,11 @@ class LinuxBridgeManager(object): "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() diff --git a/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py b/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py index 2d3e94ef7..aab03ea30 100644 --- a/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py +++ b/neutron/tests/unit/plugins/ml2/drivers/linuxbridge/agent/test_linuxbridge_neutron_agent.py @@ -436,14 +436,14 @@ class TestLinuxBridgeManager(base.BaseTestCase): 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(