summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2014-07-15 18:35:01 +0100
committerDaniel P. Berrange <berrange@redhat.com>2014-07-16 09:01:37 +0100
commit3bfc25a74e9dfbeb664eecf89d959428713eb178 (patch)
tree33e5daa73e741e440c8bc1a071d8b555e4f6b9ff
parent26dbf7355256e32467dfbe28b304a1050f0132eb (diff)
downloadnova-3bfc25a74e9dfbeb664eecf89d959428713eb178.tar.gz
libvirt: add version cap tied to gate CI testing
Limit the libvirt features that Nova will use in a default configuration to only those which are tested in the CI gate. The end user can override the limit if they wish to opt-in to use of untested features via the 'version_cap' setting in the 'libvirt' group. Change-Id: Ib91164cc572b1dbde2a31beee5751c52b0445d3e
-rw-r--r--nova/tests/virt/libvirt/test_driver.py15
-rw-r--r--nova/virt/libvirt/driver.py13
2 files changed, 28 insertions, 0 deletions
diff --git a/nova/tests/virt/libvirt/test_driver.py b/nova/tests/virt/libvirt/test_driver.py
index ccde7975ec..0280be9ff5 100644
--- a/nova/tests/virt/libvirt/test_driver.py
+++ b/nova/tests/virt/libvirt/test_driver.py
@@ -576,6 +576,21 @@ class LibvirtConnTestCase(test.TestCase,
inst = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
self.assertPublicAPISignatures(inst)
+ def test_min_version_cap(self):
+ drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
+
+ with mock.patch.object(drvr._conn, 'getLibVersion') as mock_ver:
+ mock_ver.return_value = utils.convert_version_to_int((1, 5, 0))
+
+ self.flags(version_cap="2.0.0", group="libvirt")
+ self.assertTrue(drvr._has_min_version((1, 4, 0)))
+
+ self.flags(version_cap="1.3.0", group="libvirt")
+ self.assertFalse(drvr._has_min_version((1, 4, 0)))
+
+ self.flags(version_cap="", group="libvirt")
+ self.assertTrue(drvr._has_min_version((1, 4, 0)))
+
def test_set_host_enabled_with_disable(self):
# Tests disabling an enabled host.
conn = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
diff --git a/nova/virt/libvirt/driver.py b/nova/virt/libvirt/driver.py
index 31712fdfd8..68889ccfa4 100644
--- a/nova/virt/libvirt/driver.py
+++ b/nova/virt/libvirt/driver.py
@@ -106,6 +106,11 @@ libvirt = None
LOG = logging.getLogger(__name__)
libvirt_opts = [
+ cfg.StrOpt('version_cap',
+ default='1.2.2', # Must always match the version in the gate
+ help='Limit use of features from newer libvirt versions. '
+ 'Defaults to the version that is used for automated '
+ 'testing of OpenStack.'),
cfg.StrOpt('rescue_image_id',
help='Rescue ami image. This will not be used if an image id '
'is provided by the user.'),
@@ -413,6 +418,14 @@ class LibvirtDriver(driver.ComputeDriver):
try:
if lv_ver is not None:
libvirt_version = conn.getLibVersion()
+
+ if CONF.libvirt.version_cap:
+ libvirt_version_cap = utils.convert_version_to_int(
+ utils.convert_version_to_tuple(
+ CONF.libvirt.version_cap))
+ if libvirt_version > libvirt_version_cap:
+ libvirt_version = libvirt_version_cap
+
if libvirt_version < utils.convert_version_to_int(lv_ver):
return False