diff options
-rw-r--r-- | nova/tests/test_libvirt_vif.py | 68 | ||||
-rw-r--r-- | nova/virt/libvirt/vif.py | 27 |
2 files changed, 50 insertions, 45 deletions
diff --git a/nova/tests/test_libvirt_vif.py b/nova/tests/test_libvirt_vif.py index 7ce81cc09..58504dcd8 100644 --- a/nova/tests/test_libvirt_vif.py +++ b/nova/tests/test_libvirt_vif.py @@ -44,6 +44,20 @@ class LibvirtVifTestCase(test.TestCase): 'id': 'network-id-xxx-yyy-zzz' } + net_bridge_quantum = { + 'cidr': '101.168.1.0/24', + 'cidr_v6': '101:1db9::/64', + 'gateway_v6': '101:1db9::1', + 'netmask_v6': '64', + 'netmask': '255.255.255.0', + 'bridge_interface': 'eth0', + 'vlan': 99, + 'gateway': '101.168.1.1', + 'broadcast': '101.168.1.255', + 'dns1': '8.8.8.8', + 'id': 'network-id-xxx-yyy-zzz' + } + mapping_bridge = { 'mac': 'ca:fe:de:ad:be:ef', 'gateway_v6': net_bridge['gateway_v6'], @@ -54,6 +68,15 @@ class LibvirtVifTestCase(test.TestCase): 'vif_type': network_model.VIF_TYPE_BRIDGE, } + mapping_bridge_quantum = { + 'mac': 'ca:fe:de:ad:be:ef', + 'gateway_v6': net_bridge['gateway_v6'], + 'ips': [{'ip': '101.168.1.9'}], + 'dhcp_server': '191.168.1.1', + 'vif_uuid': 'vif-xxx-yyy-zzz', + 'vif_devname': 'tap-xxx-yyy-zzz', + } + net_ovs = { 'cidr': '101.168.1.0/24', 'cidr_v6': '101:1db9::/64', @@ -241,10 +264,8 @@ class LibvirtVifTestCase(test.TestCase): self.net_bridge, self.mapping_none) - def _check_bridge_driver(self, d): - xml = self._get_instance_xml(d, - self.net_bridge, - self.mapping_bridge) + def _check_bridge_driver(self, d, net, mapping, br_want): + xml = self._get_instance_xml(d, net, mapping) doc = etree.fromstring(xml) ret = doc.findall('./devices/interface') @@ -252,17 +273,32 @@ class LibvirtVifTestCase(test.TestCase): node = ret[0] self.assertEqual(node.get("type"), "bridge") br_name = node.find("source").get("bridge") - self.assertEqual(br_name, self.net_bridge['bridge']) + self.assertEqual(br_name, br_want) mac = node.find("mac").get("address") self.assertEqual(mac, self.mapping_bridge['mac']) def test_bridge_driver(self): d = vif.LibvirtBridgeDriver() - self._check_bridge_driver(d) + self._check_bridge_driver(d, + self.net_bridge, + self.mapping_bridge, + self.net_bridge['bridge']) def test_generic_driver_bridge(self): d = vif.LibvirtGenericVIFDriver() - self._check_bridge_driver(d) + self._check_bridge_driver(d, + self.net_bridge, + self.mapping_bridge, + self.net_bridge['bridge']) + + def test_quantum_bridge_driver(self): + br_want = 'brq' + self.net_bridge_quantum['id'] + br_want = br_want[:network_model.NIC_NAME_LEN] + d = vif.QuantumLinuxBridgeVIFDriver() + self._check_bridge_driver(d, + self.net_bridge_quantum, + self.mapping_bridge_quantum, + br_want) def test_ovs_ethernet_driver(self): d = vif.LibvirtOpenVswitchDriver() @@ -310,24 +346,6 @@ class LibvirtVifTestCase(test.TestCase): self.assertTrue(iface_id_found) - def test_quantum_bridge_ethernet_driver(self): - d = vif.QuantumLinuxBridgeVIFDriver() - xml = self._get_instance_xml(d, - self.net_bridge, - self.mapping_bridge) - - doc = etree.fromstring(xml) - ret = doc.findall('./devices/interface') - self.assertEqual(len(ret), 1) - node = ret[0] - self.assertEqual(node.get("type"), "bridge") - dev_name = node.find("target").get("dev") - self.assertTrue(dev_name.startswith("tap")) - mac = node.find("mac").get("address") - self.assertEqual(mac, self.mapping_ovs['mac']) - br_name = node.find("source").get("bridge") - self.assertEqual(br_name, "br0") - def test_quantum_hybrid_driver(self): d = vif.LibvirtHybridOVSBridgeDriver() xml = self._get_instance_xml(d, diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index 78ed848a2..3ffdfd0ac 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -372,33 +372,20 @@ class LibvirtOpenVswitchVirtualPortDriver(LibvirtBaseVIFDriver): pass -class QuantumLinuxBridgeVIFDriver(LibvirtBaseVIFDriver): - """VIF driver for Linux Bridge when running Quantum.""" +class QuantumLinuxBridgeVIFDriver(LibvirtGenericVIFDriver): + """Retained in Grizzly for compatibility with Quantum + drivers which do not yet report 'vif_type' port binding. + Will be deprecated in Havana, and removed in Ixxxx.""" def get_bridge_name(self, network): def_bridge = ("brq" + network['id'])[:network_model.NIC_NAME_LEN] return network.get('bridge') or def_bridge def get_config(self, instance, network, mapping): - linux_net.LinuxBridgeInterfaceDriver.ensure_bridge( - self.get_bridge_name(network), - None, - filtering=False) - - conf = super(QuantumLinuxBridgeVIFDriver, - self).get_config(instance, - network, - mapping) - - designer.set_vif_host_backend_bridge_config( - conf, self.get_bridge_name(network), - self.get_vif_devname(mapping)) - - return conf + return self.get_config_bridge(instance, network, mapping) def plug(self, instance, vif): - pass + self.plug_bridge(instance, vif) def unplug(self, instance, vif): - """No action needed. Libvirt takes care of cleanup.""" - pass + self.unplug_bridge(instance, vif) |