]> xenbits.xensource.com Git - osstest/openstack-nova.git/commitdiff
Provides flag override for vlan interface
authorVishvananda Ishaya <vishvananda@gmail.com>
Thu, 2 Feb 2012 18:59:43 +0000 (10:59 -0800)
committerVishvananda Ishaya <vishvananda@gmail.com>
Thu, 2 Feb 2012 19:03:02 +0000 (11:03 -0800)
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

nova/network/linux_net.py
nova/tests/test_linux_net.py
nova/virt/libvirt/vif.py
nova/virt/xenapi/vif.py

index 56d07f9837a2bcbf617a47198380770402e9723f..eda615bad5dfa53fbf5f28b03e15696f6e0fa8c9 100755 (executable)
@@ -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:
index 21c5284a533c995af161986e6849184df1c0c941..f81bb0cbcf2f769df9bcac2b86a4d2e8b9499cbd 100644 (file)
@@ -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 = []
index 503c33d0f303c8ca5050501231db49be0116d2a0..bd59b2da1b1049aa7a4bd023c6d25260b54906c1 100644 (file)
@@ -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(
index c1b752d5a02a19e1ccbc1fba3b77df46e794e25b..c257c8030c30ef4b52105ee70a4fbc46b8a6cc60 100644 (file)
@@ -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(