From eea6aecf4ad18108e35cf86ab1be7e98e748fca6 Mon Sep 17 00:00:00 2001 From: Vishvananda Ishaya Date: Fri, 2 Mar 2012 15:16:34 -0800 Subject: Allows --flat_interface flag to override db * this replicates what commit 8efe15209 did for vlan_interface * includes a test to verify that the override works * cleans up memory usage in the vlan test * Fixes bug 944734 Change-Id: I21a04a43051f723029513c4c9548003f959cff37 --- nova/network/linux_net.py | 3 ++- nova/tests/test_linux_net.py | 35 ++++++++++++++++++++++++++++++++--- nova/virt/libvirt/vif.py | 3 ++- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py index 46d2aadd6..230755b81 100755 --- a/nova/network/linux_net.py +++ b/nova/network/linux_net.py @@ -951,9 +951,10 @@ class LinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver): network, mac_address) else: + iface = FLAGS.flat_interface or network['bridge_interface'] LinuxBridgeInterfaceDriver.ensure_bridge( network['bridge'], - network['bridge_interface'], + iface, network, gateway) # NOTE(vish): applying here so we don't get a lock conflict diff --git a/nova/tests/test_linux_net.py b/nova/tests/test_linux_net.py index 1c57220d5..39a5d3bed 100644 --- a/nova/tests/test_linux_net.py +++ b/nova/tests/test_linux_net.py @@ -421,9 +421,11 @@ class LinuxNetworkTestCase(test.TestCase): driver = linux_net.LinuxBridgeInterfaceDriver() + info = {} + @classmethod def test_ensure(_self, vlan, bridge, interface, network, mac_address): - self.passed_interface = interface + info['passed_interface'] = interface self.stubs.Set(linux_net.LinuxBridgeInterfaceDriver, 'ensure_vlan_bridge', test_ensure) @@ -434,10 +436,37 @@ class LinuxNetworkTestCase(test.TestCase): "vlan": "fake" } driver.plug(network, "fakemac") - self.assertEqual(self.passed_interface, "base_interface") + self.assertEqual(info['passed_interface'], "base_interface") self.flags(vlan_interface="override_interface") driver.plug(network, "fakemac") - self.assertEqual(self.passed_interface, "override_interface") + self.assertEqual(info['passed_interface'], "override_interface") + driver.plug(network, "fakemac") + + def test_flat_override(self): + """Makes sure flat_interface flag overrides network bridge_interface. + + Allows heterogeneous networks a la bug 833426""" + + driver = linux_net.LinuxBridgeInterfaceDriver() + + info = {} + + @classmethod + def test_ensure(_self, bridge, interface, network, gateway): + info['passed_interface'] = interface + + self.stubs.Set(linux_net.LinuxBridgeInterfaceDriver, + 'ensure_bridge', test_ensure) + + network = { + "bridge": "br100", + "bridge_interface": "base_interface", + } + driver.plug(network, "fakemac") + self.assertEqual(info['passed_interface'], "base_interface") + self.flags(flat_interface="override_interface") + driver.plug(network, "fakemac") + self.assertEqual(info['passed_interface'], "override_interface") def _test_initialize_gateway(self, existing, expected, routes=''): self.flags(fake_network=False) diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index 268a84525..ada4a7701 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -90,10 +90,11 @@ class LibvirtBridgeDriver(VIFDriver): network['bridge'], iface) else: + iface = FLAGS.flat_interface or network['bridge_interface'] LOG.debug(_("Ensuring bridge %s"), network['bridge']) linux_net.LinuxBridgeInterfaceDriver.ensure_bridge( network['bridge'], - network['bridge_interface']) + iface) return self._get_configurations(network, mapping) -- cgit