summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVishvananda Ishaya <vishvananda@gmail.com>2012-02-02 10:59:43 -0800
committerVishvananda Ishaya <vishvananda@gmail.com>2012-02-02 11:03:02 -0800
commit8efe15209aaee6b15c8edb21362c08137294a7de (patch)
tree180e5d4d64979201ff76faa84472b8d93c21e5a7
parentdef8544e804d4af22b89350b2d54c2c042833169 (diff)
downloadnova-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-xnova/network/linux_net.py3
-rw-r--r--nova/tests/test_linux_net.py25
-rw-r--r--nova/virt/libvirt/vif.py3
-rw-r--r--nova/virt/xenapi/vif.py2
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(