diff options
| author | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-02-02 10:59:43 -0800 |
|---|---|---|
| committer | Vishvananda Ishaya <vishvananda@gmail.com> | 2012-02-02 11:03:02 -0800 |
| commit | 8efe15209aaee6b15c8edb21362c08137294a7de (patch) | |
| tree | 180e5d4d64979201ff76faa84472b8d93c21e5a7 | |
| parent | def8544e804d4af22b89350b2d54c2c042833169 (diff) | |
| download | nova-8efe15209aaee6b15c8edb21362c08137294a7de.tar.gz nova-8efe15209aaee6b15c8edb21362c08137294a7de.tar.xz nova-8efe15209aaee6b15c8edb21362c08137294a7de.zip | |
Provides flag override for vlan interface
This means you can have your vlan_interface be different on
different hosts machines by setting vlan_interface differently
on each host.
* Allow non-homogenous vlan networks
* Fixes bug 833426
* Includes failing test for linux_net
Change-Id: I2f0d43c1366f88a8832a779c4065b37dd1a5bdf8
| -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( |
