summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-17 11:52:10 +0000
committerGerrit Code Review <review@openstack.org>2013-01-17 11:52:10 +0000
commit2cdc27b752fa53fd936df1d1a7f4c51701b5e39a (patch)
treeec0b394a77e5d5333c7902f877dff41ab891e2fe
parentd806266d2367535f19f542a0716cadf6c64d243b (diff)
parent84341f7c51dca01c03d2d0a771f1afadc8b5131f (diff)
downloadnova-2cdc27b752fa53fd936df1d1a7f4c51701b5e39a.tar.gz
nova-2cdc27b752fa53fd936df1d1a7f4c51701b5e39a.tar.xz
nova-2cdc27b752fa53fd936df1d1a7f4c51701b5e39a.zip
Merge "Fix fallback when Quantum doesn't provide a 'vif_type'"
-rw-r--r--nova/virt/libvirt/vif.py54
1 files changed, 39 insertions, 15 deletions
diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py
index 54de9da2d..83d43a6db 100644
--- a/nova/virt/libvirt/vif.py
+++ b/nova/virt/libvirt/vif.py
@@ -32,6 +32,11 @@ from nova.virt import netutils
LOG = logging.getLogger(__name__)
libvirt_vif_opts = [
+ # quantum_ovs_bridge is used, if Quantum provides Nova
+ # the 'vif_type' portbinding field
+ cfg.StrOpt('libvirt_ovs_bridge',
+ default='br-int',
+ help='Name of Integration Bridge used by Open vSwitch'),
cfg.BoolOpt('libvirt_use_virtio_for_bridges',
default=True,
help='Use virtio for bridge interfaces with KVM/QEMU'),
@@ -71,6 +76,9 @@ class LibvirtBaseVIFDriver(object):
class LibvirtBridgeDriver(LibvirtBaseVIFDriver):
"""VIF driver for Linux bridge."""
+ def get_bridge_name(self, network):
+ return network['bridge']
+
def get_config(self, instance, network, mapping):
"""Get VIF configurations for bridge type."""
@@ -82,7 +90,8 @@ class LibvirtBridgeDriver(LibvirtBaseVIFDriver):
mapping)
designer.set_vif_host_backend_bridge_config(
- conf, network['bridge'], self.get_vif_devname(mapping))
+ conf, self.get_bridge_name(network),
+ self.get_vif_devname(mapping))
name = "nova-instance-" + instance['name'] + "-" + mac_id
primary_addr = mapping['ips'][0]['ip']
@@ -112,18 +121,18 @@ class LibvirtBridgeDriver(LibvirtBaseVIFDriver):
iface = CONF.vlan_interface or network['bridge_interface']
LOG.debug(_('Ensuring vlan %(vlan)s and bridge %(bridge)s'),
{'vlan': network['vlan'],
- 'bridge': network['bridge']},
+ 'bridge': self.get_bridge_name(network)},
instance=instance)
linux_net.LinuxBridgeInterfaceDriver.ensure_vlan_bridge(
network['vlan'],
- network['bridge'],
+ self.get_bridge_name(network),
iface)
else:
iface = CONF.flat_interface or network['bridge_interface']
- LOG.debug(_("Ensuring bridge %s"), network['bridge'],
- instance=instance)
+ LOG.debug(_("Ensuring bridge %s"),
+ self.get_bridge_name(network), instance=instance)
linux_net.LinuxBridgeInterfaceDriver.ensure_bridge(
- network['bridge'],
+ self.get_bridge_name(network),
iface)
def unplug(self, instance, vif):
@@ -138,6 +147,9 @@ class LibvirtOpenVswitchDriver(LibvirtBaseVIFDriver):
OVS virtual port XML (0.9.10 or earlier).
"""
+ def get_bridge_name(self, network):
+ return network.get('bridge') or CONF.libvirt_ovs_bridge
+
def get_config(self, instance, network, mapping):
dev = self.get_vif_devname(mapping)
@@ -183,7 +195,7 @@ class LibvirtOpenVswitchDriver(LibvirtBaseVIFDriver):
utils.execute('tunctl', '-b', '-t', dev, run_as_root=True)
utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True)
- self.create_ovs_vif_port(network['bridge'],
+ self.create_ovs_vif_port(self.get_bridge_name(network),
dev, iface_id, mapping['mac'],
instance['uuid'])
@@ -191,7 +203,7 @@ class LibvirtOpenVswitchDriver(LibvirtBaseVIFDriver):
"""Unplug the VIF by deleting the port from the bridge."""
try:
network, mapping = vif
- self.delete_ovs_vif_port(network['bridge'],
+ self.delete_ovs_vif_port(self.get_bridge_name(network),
self.get_vif_devname(mapping))
except exception.ProcessExecutionError:
LOG.exception(_("Failed while unplugging vif"), instance=instance)
@@ -214,6 +226,9 @@ class LibvirtHybridOVSBridgeDriver(LibvirtBridgeDriver,
return (("qvb%s" % iface_id)[:network_model.NIC_NAME_LEN],
("qvo%s" % iface_id)[:network_model.NIC_NAME_LEN])
+ def get_bridge_name(self, network):
+ return network.get('bridge') or CONF.libvirt_ovs_bridge
+
def get_config(self, instance, network, mapping):
br_name = self.get_br_name(mapping['vif_uuid'])
network['bridge'] = br_name
@@ -243,7 +258,7 @@ class LibvirtHybridOVSBridgeDriver(LibvirtBridgeDriver,
linux_net._create_veth_pair(v1_name, v2_name)
utils.execute('ip', 'link', 'set', br_name, 'up', run_as_root=True)
utils.execute('brctl', 'addif', br_name, v1_name, run_as_root=True)
- self.create_ovs_vif_port(network['bridge'],
+ self.create_ovs_vif_port(self.get_bridge_name(network),
v2_name, iface_id, mapping['mac'],
instance['uuid'])
@@ -264,7 +279,7 @@ class LibvirtHybridOVSBridgeDriver(LibvirtBridgeDriver,
run_as_root=True)
utils.execute('brctl', 'delbr', br_name, run_as_root=True)
- self.delete_ovs_vif_port(network['bridge'], v2_name)
+ self.delete_ovs_vif_port(self.get_bridge_name(network), v2_name)
except exception.ProcessExecutionError:
LOG.exception(_("Failed while unplugging vif"), instance=instance)
@@ -273,6 +288,9 @@ class LibvirtOpenVswitchVirtualPortDriver(LibvirtBaseVIFDriver):
"""VIF driver for Open vSwitch that uses integrated libvirt
OVS virtual port XML (introduced in libvirt 0.9.11)."""
+ def get_bridge_name(self, network):
+ return network.get('bridge') or CONF.libvirt_ovs_bridge
+
def get_config(self, instance, network, mapping):
"""Pass data required to create OVS virtual port element."""
conf = super(LibvirtOpenVswitchVirtualPortDriver,
@@ -281,7 +299,7 @@ class LibvirtOpenVswitchVirtualPortDriver(LibvirtBaseVIFDriver):
mapping)
designer.set_vif_host_backend_ovs_config(
- conf, network['bridge'], mapping['vif_uuid'],
+ conf, self.get_bridge_name(network), mapping['vif_uuid'],
self.get_vif_devname(mapping))
return conf
@@ -297,10 +315,15 @@ class LibvirtOpenVswitchVirtualPortDriver(LibvirtBaseVIFDriver):
class QuantumLinuxBridgeVIFDriver(LibvirtBaseVIFDriver):
"""VIF driver for Linux Bridge when running Quantum."""
+ 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(network['bridge'],
- None,
- filtering=False)
+ linux_net.LinuxBridgeInterfaceDriver.ensure_bridge(
+ self.get_bridge_name(network),
+ None,
+ filtering=False)
conf = super(QuantumLinuxBridgeVIFDriver,
self).get_config(instance,
@@ -308,7 +331,8 @@ class QuantumLinuxBridgeVIFDriver(LibvirtBaseVIFDriver):
mapping)
designer.set_vif_host_backend_bridge_config(
- conf, network['bridge'], self.get_vif_devname(mapping))
+ conf, self.get_bridge_name(network),
+ self.get_vif_devname(mapping))
return conf