summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-01-29 12:22:20 +0000
committerGerrit Code Review <review@openstack.org>2013-01-29 12:22:20 +0000
commit3ddd1aeda69b1d8d0bc689fea8d4c2c530d55fc0 (patch)
treec379d21baa8030b4089941bfcf67957c893612bd /nova/virt
parent1cad17aeb603410a588de58461fb90fe750bde4a (diff)
parent78ebb445b349e9407c60c3fe2d21552977a3c299 (diff)
downloadnova-3ddd1aeda69b1d8d0bc689fea8d4c2c530d55fc0.tar.gz
nova-3ddd1aeda69b1d8d0bc689fea8d4c2c530d55fc0.tar.xz
nova-3ddd1aeda69b1d8d0bc689fea8d4c2c530d55fc0.zip
Merge "Merge LibvirtBridgeDriver class into LibvirtGenericVIFDriver"
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/libvirt/driver.py2
-rw-r--r--nova/virt/libvirt/vif.py107
2 files changed, 98 insertions, 11 deletions
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 46b63d1c6..c865e4b3a 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -140,7 +140,7 @@ libvirt_opts = [
'raw, qcow2, vmdk, vdi). '
'Defaults to same as source image'),
cfg.StrOpt('libvirt_vif_driver',
- default='nova.virt.libvirt.vif.LibvirtBridgeDriver',
+ default='nova.virt.libvirt.vif.LibvirtGenericVIFDriver',
help='The libvirt VIF driver to configure the VIFs.'),
cfg.ListOpt('libvirt_volume_drivers',
default=[
diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py
index eb1614873..45c299830 100644
--- a/nova/virt/libvirt/vif.py
+++ b/nova/virt/libvirt/vif.py
@@ -72,19 +72,22 @@ class LibvirtBaseVIFDriver(object):
return conf
+ def plug(self, instance, vif):
+ pass
+
+ def unplug(self, instance, vif):
+ pass
+
-class LibvirtBridgeDriver(LibvirtBaseVIFDriver):
- """VIF driver for Linux bridge."""
+class LibvirtGenericVIFDriver(LibvirtBaseVIFDriver):
+ """Generic VIF driver for libvirt networking."""
def get_bridge_name(self, network):
return network['bridge']
- def get_config(self, instance, network, mapping):
+ def get_config_bridge(self, instance, network, mapping):
"""Get VIF configurations for bridge type."""
-
- mac_id = mapping['mac'].replace(':', '')
-
- conf = super(LibvirtBridgeDriver,
+ conf = super(LibvirtGenericVIFDriver,
self).get_config(instance,
network,
mapping)
@@ -93,6 +96,7 @@ class LibvirtBridgeDriver(LibvirtBaseVIFDriver):
conf, self.get_bridge_name(network),
self.get_vif_devname(mapping))
+ mac_id = mapping['mac'].replace(':', '')
name = "nova-instance-" + instance['name'] + "-" + mac_id
primary_addr = mapping['ips'][0]['ip']
dhcp_server = ra_server = ipv4_cidr = ipv6_cidr = None
@@ -112,8 +116,29 @@ class LibvirtBridgeDriver(LibvirtBaseVIFDriver):
return conf
- def plug(self, instance, vif):
+ def get_config(self, instance, network, mapping):
+ vif_type = mapping.get('vif_type')
+
+ LOG.debug(_("vif_type=%(vif_type)s instance=%(instance)s "
+ "network=%(network)s mapping=%(mapping)s")
+ % locals())
+
+ if vif_type is None:
+ raise exception.NovaException(
+ _("vif_type parameter must be present "
+ "for this vif_driver implementation"))
+
+ if vif_type == network_model.VIF_TYPE_BRIDGE:
+ return self.get_config_bridge(instance, network, mapping)
+ else:
+ raise exception.NovaException(
+ _("Unexpected vif_type=%s") % vif_type)
+
+ def plug_bridge(self, instance, vif):
"""Ensure that the bridge exists, and add VIF to it."""
+ super(LibvirtGenericVIFDriver,
+ self).plug(instance, vif)
+
network, mapping = vif
if (not network.get('multi_host') and
mapping.get('should_create_bridge')):
@@ -135,9 +160,71 @@ class LibvirtBridgeDriver(LibvirtBaseVIFDriver):
self.get_bridge_name(network),
iface)
- def unplug(self, instance, vif):
+ def plug(self, instance, vif):
+ network, mapping = vif
+ vif_type = mapping.get('vif_type')
+
+ LOG.debug(_("vif_type=%(vif_type)s instance=%(instance)s "
+ "network=%(network)s mapping=%(mapping)s")
+ % locals())
+
+ if vif_type is None:
+ raise exception.NovaException(
+ _("vif_type parameter must be present "
+ "for this vif_driver implementation"))
+
+ if vif_type == network_model.VIF_TYPE_BRIDGE:
+ self.plug_bridge(instance, vif)
+ else:
+ raise exception.NovaException(
+ _("Unexpected vif_type=%s") % vif_type)
+
+ def unplug_bridge(self, instance, vif):
"""No manual unplugging required."""
- pass
+ super(LibvirtGenericVIFDriver,
+ self).unplug(instance, vif)
+
+ def unplug(self, instance, vif):
+ network, mapping = vif
+ vif_type = mapping.get('vif_type')
+
+ LOG.debug(_("vif_type=%(vif_type)s instance=%(instance)s "
+ "network=%(network)s mapping=%(mapping)s")
+ % locals())
+
+ if vif_type is None:
+ raise exception.NovaException(
+ _("vif_type parameter must be present "
+ "for this vif_driver implementation"))
+
+ if vif_type == network_model.VIF_TYPE_BRIDGE:
+ self.unplug_bridge(instance, vif)
+ else:
+ raise exception.NovaException(
+ _("Unexpected vif_type=%s") % vif_type)
+
+
+class LibvirtBridgeDriver(LibvirtGenericVIFDriver):
+ """Deprecated in favour of LibvirtGenericVIFDriver.
+ Retained in Grizzly for compatibility with Quantum
+ drivers which do not yet report 'vif_type' port binding.
+ To be removed in Hxxxx."""
+
+ def __init__(self):
+ LOG.deprecated(
+ _("LibvirtBridgeDriver is deprecated and "
+ "will be removed in the Hxxxx release. Please "
+ "update the 'libvirt_vif_driver' config parameter "
+ "to use the LibvirtGenericVIFDriver class instead"))
+
+ def get_config(self, instance, network, mapping):
+ return self.get_config_bridge(instance, network, mapping)
+
+ def plug(self, instance, vif):
+ self.plug_bridge(instance, vif)
+
+ def unplug(self, instance, vif):
+ self.unplug_bridge(instance, vif)
class LibvirtOpenVswitchDriver(LibvirtBaseVIFDriver):