diff options
-rwxr-xr-x | nova/network/linux_net.py | 3 | ||||
-rw-r--r-- | nova/tests/test_linux_net.py | 25 | ||||
-rw-r--r-- | nova/virt/libvirt/vif.py | 3 | ||||
-rw-r--r-- | nova/virt/xenapi/vif.py | 2 |
4 files changed, 30 insertions, 3 deletions
diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py index 56d07f983..eda615bad 100755 --- a/nova/network/linux_net.py +++ b/nova/network/linux_net.py @@ -944,10 +944,11 @@ class LinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver): def plug(self, network, mac_address, gateway=True): if network.get('vlan', None) is not None: + iface = FLAGS.vlan_interface or network['bridge_interface'] LinuxBridgeInterfaceDriver.ensure_vlan_bridge( network['vlan'], network['bridge'], - network['bridge_interface'], + iface, network, mac_address) else: diff --git a/nova/tests/test_linux_net.py b/nova/tests/test_linux_net.py index 21c5284a5..f81bb0cbc 100644 --- a/nova/tests/test_linux_net.py +++ b/nova/tests/test_linux_net.py @@ -432,6 +432,31 @@ class LinuxNetworkTestCase(test.TestCase): driver.plug({"bridge": "br100", "bridge_interface": "eth0"}, "fakemac") + def test_vlan_override(self): + """Makes sure vlan_interface flag overrides network bridge_interface. + + Allows heterogeneous networks a la bug 833426""" + + driver = linux_net.LinuxBridgeInterfaceDriver() + + @classmethod + def test_ensure(_self, vlan, bridge, interface, network, mac_address): + self.passed_interface = interface + + self.stubs.Set(linux_net.LinuxBridgeInterfaceDriver, + 'ensure_vlan_bridge', test_ensure) + + network = { + "bridge": "br100", + "bridge_interface": "base_interface", + "vlan": "fake" + } + driver.plug(network, "fakemac") + self.assertEqual(self.passed_interface, "base_interface") + self.flags(vlan_interface="override_interface") + driver.plug(network, "fakemac") + self.assertEqual(self.passed_interface, "override_interface") + def _test_initialize_gateway(self, existing, expected, routes=''): self.flags(fake_network=False) executes = [] diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index 503c33d0f..bd59b2da1 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -82,13 +82,14 @@ class LibvirtBridgeDriver(VIFDriver): if (not network.get('multi_host') and mapping.get('should_create_bridge')): if mapping.get('should_create_vlan'): + iface = FLAGS.vlan_interface or network['bridge_interface'] LOG.debug(_('Ensuring vlan %(vlan)s and bridge %(bridge)s'), {'vlan': network['vlan'], 'bridge': network['bridge']}) linux_net.LinuxBridgeInterfaceDriver.ensure_vlan_bridge( network['vlan'], network['bridge'], - network['bridge_interface']) + iface) else: LOG.debug(_("Ensuring bridge %s"), network['bridge']) linux_net.LinuxBridgeInterfaceDriver.ensure_bridge( diff --git a/nova/virt/xenapi/vif.py b/nova/virt/xenapi/vif.py index c1b752d5a..c257c8030 100644 --- a/nova/virt/xenapi/vif.py +++ b/nova/virt/xenapi/vif.py @@ -77,7 +77,7 @@ class XenAPIBridgeDriver(XenVIFDriver): vlan_num = network['vlan'] bridge = network['bridge'] - bridge_interface = network['bridge_interface'] + bridge_interface = FLAGS.vlan_interface or network['bridge_interface'] # Check whether bridge already exists # Retrieve network whose name_label is "bridge" network_ref = NetworkHelper.find_network_with_name_label( |