summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--nova/tests/fake_network.py5
-rw-r--r--nova/tests/test_libvirt_vif.py2
-rw-r--r--nova/virt/libvirt/driver.py4
-rw-r--r--nova/virt/libvirt/vif.py51
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