diff options
| author | Daniel P. Berrange <berrange@redhat.com> | 2012-12-18 23:09:59 +0000 |
|---|---|---|
| committer | Daniel P. Berrange <berrange@redhat.com> | 2012-12-21 10:16:07 +0000 |
| commit | e84dc2603532f4577bd42846191a530f3abd2e48 (patch) | |
| tree | a6171fe55e720787bde849285da32719cede57bf | |
| parent | a359b644c1f28b9a2e24aecc9f6f8d6581354f0f (diff) | |
| download | nova-e84dc2603532f4577bd42846191a530f3abd2e48.tar.gz nova-e84dc2603532f4577bd42846191a530f3abd2e48.tar.xz nova-e84dc2603532f4577bd42846191a530f3abd2e48.zip | |
Refactor libvirt VIF classes to reduce duplicate code
Irrespective of the VIF driver used, some config parameters are
always identical (mac addr, NIC model). Move creation of the
vconfig.LibvirtConfigGuestInterface instance into a base class,
so VIF driver impls only need to provide their custom data.
Change-Id: I7c9d5357c8ceff6d5eb2c982a7420bc93a7266bf
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
| -rw-r--r-- | nova/virt/libvirt/vif.py | 56 |
1 files changed, 35 insertions, 21 deletions
diff --git a/nova/virt/libvirt/vif.py b/nova/virt/libvirt/vif.py index c5f3e6fa1..16a80b937 100644 --- a/nova/virt/libvirt/vif.py +++ b/nova/virt/libvirt/vif.py @@ -48,7 +48,18 @@ CONF.import_opt('use_ipv6', 'nova.config') LINUX_DEV_LEN = 14 -class LibvirtBridgeDriver(vif.VIFDriver): +class LibvirtBaseVIFDriver(vif.VIFDriver): + + def get_config(self, instance, network, mapping): + conf = vconfig.LibvirtConfigGuestInterface() + conf.mac_addr = mapping['mac'] + if CONF.libvirt_use_virtio_for_bridges: + conf.model = "virtio" + + return conf + + +class LibvirtBridgeDriver(LibvirtBaseVIFDriver): """VIF driver for Linux bridge.""" def get_config(self, instance, network, mapping): @@ -56,13 +67,13 @@ class LibvirtBridgeDriver(vif.VIFDriver): mac_id = mapping['mac'].replace(':', '') - conf = vconfig.LibvirtConfigGuestInterface() + conf = super(LibvirtBridgeDriver, + self).get_config(instance, + network, + mapping) conf.net_type = "bridge" - conf.mac_addr = mapping['mac'] conf.source_dev = network['bridge'] conf.script = "" - if CONF.libvirt_use_virtio_for_bridges: - conf.model = "virtio" conf.filtername = "nova-instance-" + instance['name'] + "-" + mac_id conf.add_filter_param("IP", mapping['ips'][0]['ip']) @@ -113,7 +124,7 @@ class LibvirtBridgeDriver(vif.VIFDriver): pass -class LibvirtOpenVswitchDriver(vif.VIFDriver): +class LibvirtOpenVswitchDriver(LibvirtBaseVIFDriver): """VIF driver for Open vSwitch that uses libivrt type='ethernet' Used for libvirt versions that do not support @@ -126,14 +137,14 @@ class LibvirtOpenVswitchDriver(vif.VIFDriver): def get_config(self, instance, network, mapping): dev = self.get_dev_name(mapping['vif_uuid']) - conf = vconfig.LibvirtConfigGuestInterface() + conf = super(LibvirtOpenVswitchDriver, + self).get_config(instance, + network, + mapping) - 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 @@ -203,7 +214,9 @@ class LibvirtHybridOVSBridgeDriver(LibvirtBridgeDriver, br_name = self.get_br_name(mapping['vif_uuid']) network['bridge'] = br_name return super(LibvirtHybridOVSBridgeDriver, - self).get_config(instance, network, mapping) + self).get_config(instance, + network, + mapping) def plug(self, instance, vif): """Plug using hybrid strategy @@ -251,19 +264,19 @@ class LibvirtHybridOVSBridgeDriver(LibvirtBridgeDriver, LOG.exception(_("Failed while unplugging vif"), instance=instance) -class LibvirtOpenVswitchVirtualPortDriver(vif.VIFDriver): +class LibvirtOpenVswitchVirtualPortDriver(LibvirtBaseVIFDriver): """VIF driver for Open vSwitch that uses integrated libvirt OVS virtual port XML (introduced in libvirt 0.9.11).""" def get_config(self, instance, network, mapping): """ Pass data required to create OVS virtual port element""" - conf = vconfig.LibvirtConfigGuestInterface() + conf = super(LibvirtOpenVswitchVirtualPortDriver, + self).get_config(instance, + network, + mapping) conf.net_type = "bridge" conf.source_dev = CONF.libvirt_ovs_bridge - conf.mac_addr = mapping['mac'] - if CONF.libvirt_use_virtio_for_bridges: - conf.model = "virtio" conf.vporttype = "openvswitch" conf.add_vport_param("interfaceid", mapping['vif_uuid']) @@ -277,7 +290,7 @@ class LibvirtOpenVswitchVirtualPortDriver(vif.VIFDriver): pass -class QuantumLinuxBridgeVIFDriver(vif.VIFDriver): +class QuantumLinuxBridgeVIFDriver(LibvirtBaseVIFDriver): """VIF driver for Linux Bridge when running Quantum.""" def get_bridge_name(self, network_id): @@ -294,13 +307,14 @@ class QuantumLinuxBridgeVIFDriver(vif.VIFDriver): linux_net.LinuxBridgeInterfaceDriver.ensure_bridge(bridge, None, filtering=False) - conf = vconfig.LibvirtConfigGuestInterface() + conf = super(QuantumLinuxBridgeVIFDriver, + self).get_config(instance, + network, + mapping) + conf.target_dev = dev conf.net_type = "bridge" - conf.mac_addr = mapping['mac'] conf.source_dev = bridge - if CONF.libvirt_use_virtio_for_bridges: - conf.model = "virtio" return conf |
