diff options
-rw-r--r-- | nova/tests/fake_network.py | 5 | ||||
-rw-r--r-- | nova/tests/test_libvirt_vif.py | 2 | ||||
-rw-r--r-- | nova/virt/libvirt/driver.py | 4 | ||||
-rw-r--r-- | nova/virt/libvirt/vif.py | 51 |
4 files changed, 37 insertions, 25 deletions
diff --git a/nova/tests/fake_network.py b/nova/tests/fake_network.py index 1b96f95dd..4a04986ec 100644 --- a/nova/tests/fake_network.py +++ b/nova/tests/fake_network.py @@ -54,7 +54,7 @@ class FakeVIFDriver(object): def setattr(self, key, val): self.__setattr__(key, val) - def plug(self, instance, vif): + def get_config(self, instance, network, mapping): conf = libvirt_config.LibvirtConfigGuestInterface() for attr, val in conf.__dict__.iteritems(): @@ -63,6 +63,9 @@ class FakeVIFDriver(object): return conf + def plug(self, instance, vif): + pass + class FakeModel(dict): """Represent a model from the db""" diff --git a/nova/tests/test_libvirt_vif.py b/nova/tests/test_libvirt_vif.py index bd51bf01a..5cd2ea83c 100644 --- a/nova/tests/test_libvirt_vif.py +++ b/nova/tests/test_libvirt_vif.py @@ -74,7 +74,7 @@ class LibvirtVifTestCase(test.TestCase): conf.memory = 100 * 1024 conf.vcpus = 4 - nic = driver.plug(self.instance, (self.net, self.mapping)) + nic = driver.get_config(self.instance, self.net, self.mapping) conf.add_device(nic) return conf.to_xml() diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py index 263fd5ca4..2cf941620 100644 --- a/nova/virt/libvirt/driver.py +++ b/nova/virt/libvirt/driver.py @@ -1828,7 +1828,9 @@ class LibvirtDriver(driver.ComputeDriver): guest.add_device(cfg) for (network, mapping) in network_info: - cfg = self.vif_driver.plug(instance, (network, mapping)) + self.vif_driver.plug(instance, (network, mapping)) + cfg = self.vif_driver.get_config(instance, + network, mapping) guest.add_device(cfg) if CONF.libvirt_type == "qemu" or CONF.libvirt_type == "kvm": diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index 8e54c3466..c5f3e6fa1 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -51,7 +51,7 @@ LINUX_DEV_LEN = 14 class LibvirtBridgeDriver(vif.VIFDriver): """VIF driver for Linux bridge.""" - def _get_configurations(self, instance, network, mapping): + def get_config(self, instance, network, mapping): """Get VIF configurations for bridge type.""" mac_id = mapping['mac'].replace(':', '') @@ -108,8 +108,6 @@ class LibvirtBridgeDriver(vif.VIFDriver): network['bridge'], iface) - return self._get_configurations(instance, network, mapping) - def unplug(self, instance, vif): """No manual unplugging required.""" pass @@ -125,6 +123,20 @@ class LibvirtOpenVswitchDriver(vif.VIFDriver): def get_dev_name(self, iface_id): return ("tap" + iface_id)[:LINUX_DEV_LEN] + def get_config(self, instance, network, mapping): + dev = self.get_dev_name(mapping['vif_uuid']) + + conf = vconfig.LibvirtConfigGuestInterface() + + if CONF.libvirt_use_virtio_for_bridges: + conf.model = "virtio" + conf.net_type = "ethernet" + conf.target_dev = dev + conf.script = "" + conf.mac_addr = mapping['mac'] + + return conf + def create_ovs_vif_port(self, dev, iface_id, mac, instance_id): utils.execute('ovs-vsctl', '--', '--may-exist', 'add-port', CONF.libvirt_ovs_bridge, dev, @@ -161,17 +173,6 @@ class LibvirtOpenVswitchDriver(vif.VIFDriver): self.create_ovs_vif_port(dev, iface_id, mapping['mac'], instance['uuid']) - conf = vconfig.LibvirtConfigGuestInterface() - - if CONF.libvirt_use_virtio_for_bridges: - conf.model = "virtio" - conf.net_type = "ethernet" - conf.target_dev = dev - conf.script = "" - conf.mac_addr = mapping['mac'] - - return conf - def unplug(self, instance, vif): """Unplug the VIF by deleting the port from the bridge.""" try: @@ -198,6 +199,12 @@ class LibvirtHybridOVSBridgeDriver(LibvirtBridgeDriver, return (("qvb%s" % iface_id)[:LINUX_DEV_LEN], ("qvo%s" % iface_id)[:LINUX_DEV_LEN]) + def get_config(self, instance, network, mapping): + br_name = self.get_br_name(mapping['vif_uuid']) + network['bridge'] = br_name + return super(LibvirtHybridOVSBridgeDriver, + self).get_config(instance, network, mapping) + def plug(self, instance, vif): """Plug using hybrid strategy @@ -222,9 +229,6 @@ class LibvirtHybridOVSBridgeDriver(LibvirtBridgeDriver, self.create_ovs_vif_port(v2_name, iface_id, mapping['mac'], instance['uuid']) - network['bridge'] = br_name - return self._get_configurations(instance, network, mapping) - def unplug(self, instance, vif): """UnPlug using hybrid strategy @@ -251,10 +255,8 @@ class LibvirtOpenVswitchVirtualPortDriver(vif.VIFDriver): """VIF driver for Open vSwitch that uses integrated libvirt OVS virtual port XML (introduced in libvirt 0.9.11).""" - def plug(self, instance, vif): + def get_config(self, instance, network, mapping): """ Pass data required to create OVS virtual port element""" - network, mapping = vif - conf = vconfig.LibvirtConfigGuestInterface() conf.net_type = "bridge" @@ -267,6 +269,9 @@ class LibvirtOpenVswitchVirtualPortDriver(vif.VIFDriver): return conf + def plug(self, instance, vif): + pass + def unplug(self, instance, vif): """No action needed. Libvirt takes care of cleanup""" pass @@ -281,8 +286,7 @@ class QuantumLinuxBridgeVIFDriver(vif.VIFDriver): def get_dev_name(self, iface_id): return ("tap" + iface_id)[:LINUX_DEV_LEN] - def plug(self, instance, vif): - network, mapping = vif + def get_config(self, instance, network, mapping): iface_id = mapping['vif_uuid'] dev = self.get_dev_name(iface_id) @@ -300,6 +304,9 @@ class QuantumLinuxBridgeVIFDriver(vif.VIFDriver): return conf + def plug(self, instance, vif): + pass + def unplug(self, instance, vif): """No action needed. Libvirt takes care of cleanup""" pass |