Merge "Bump MIN_{LIBVIRT,QEMU} for "Epoxy""
This commit is contained in:
commit
6042300453
@ -211,6 +211,12 @@ support the decided libvirt version.
|
||||
- 8.0.0
|
||||
- 5.2.0
|
||||
- 6.2.0
|
||||
* - 2025.1 Epoxy
|
||||
- 31.0.0
|
||||
- 8.0.0
|
||||
- 10.0.0
|
||||
- 6.2.0
|
||||
- 8.2.2
|
||||
|
||||
|
||||
OS distribution versions
|
||||
@ -244,10 +250,10 @@ important OS distros.
|
||||
- 5.2.0-16
|
||||
- 1.44.0-2
|
||||
* - 9
|
||||
- As of 2021-11-18.
|
||||
- 7.8.0-1
|
||||
- 6.1.0-6
|
||||
- 1.46.0-4
|
||||
- As of 2025-02-27.
|
||||
- 10.10.0
|
||||
- 9.1.0
|
||||
- 1.50.1
|
||||
* - **Debian**
|
||||
-
|
||||
-
|
||||
@ -258,41 +264,16 @@ important OS distros.
|
||||
- 7.0.0
|
||||
- 5.2
|
||||
- 1.42.0
|
||||
* - 12.x (Bookworm) ("testing")
|
||||
- No GA date as of 2021-11-18
|
||||
- 7.6.0
|
||||
- 6.1
|
||||
- 1.42.0
|
||||
* - **Fedora**
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
* - 34
|
||||
- 2021-04-27
|
||||
- 7.0.0
|
||||
- 5.2.0
|
||||
- 1.45.4
|
||||
* - 35
|
||||
- 2021-11-02
|
||||
- 7.6.0
|
||||
- 6.1.0
|
||||
- 1.46.0
|
||||
* - **SUSE**
|
||||
-
|
||||
-
|
||||
-
|
||||
-
|
||||
* - Leap 15.2
|
||||
- 2020-07-02
|
||||
- 6.0.0
|
||||
- 4.2.0
|
||||
- 1.38.0
|
||||
* - Leap 15.3
|
||||
- 2021-06-02
|
||||
* - 12.x (Bookworm)
|
||||
- 2023-06-10
|
||||
- 9.0.0
|
||||
- 7.2.0
|
||||
- 6.0.0
|
||||
- 1.44.1
|
||||
- 1.48.6
|
||||
* - 13.x (Trixie) ("testing")
|
||||
- No GA date as of 2025-02-27
|
||||
- 11.0.0
|
||||
- 9.2.1
|
||||
- 1.54.0
|
||||
* - **RHEL**
|
||||
-
|
||||
-
|
||||
@ -348,6 +329,16 @@ important OS distros.
|
||||
- 7.0.0
|
||||
- 5.2
|
||||
- 1.44.1
|
||||
* - 22.04 (Jammy Jellyfish)
|
||||
- 2022-04-21
|
||||
- 8.0.0
|
||||
- 6.2
|
||||
- 1.44.2
|
||||
* - 24.04 (Noble Numbat)
|
||||
- 2024-04-25
|
||||
- 10.0.0
|
||||
- 8.2.2
|
||||
- 1.52.0
|
||||
|
||||
.. NB: maintain alphabetical ordering of distros, followed by oldest released
|
||||
versions first
|
||||
|
@ -4879,7 +4879,7 @@ class RemoteManagedServersTest(_PCIServersWithMigrationTestBase):
|
||||
vf_ratio = NUM_VFS // NUM_PFS
|
||||
|
||||
# Min Libvirt version that supports working with PCI VPD.
|
||||
FAKE_LIBVIRT_VERSION = 7_009_000 # 7.9.0
|
||||
FAKE_LIBVIRT_VERSION = 8_000_000 # 8.0.0
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
@ -36,8 +36,8 @@ class ServerSharesTestBase(base.ServersTestBase):
|
||||
api_major_version = 'v2.1'
|
||||
microversion = 'latest'
|
||||
ADMIN_API = True
|
||||
FAKE_LIBVIRT_VERSION = 7000000
|
||||
FAKE_QEMU_VERSION = 5002000
|
||||
FAKE_LIBVIRT_VERSION = 8000000
|
||||
FAKE_QEMU_VERSION = 6002000
|
||||
|
||||
def setUp(self):
|
||||
super(ServerSharesTestBase, self).setUp()
|
||||
|
@ -42,8 +42,8 @@ class VGPUTestBase(base.ServersTestBase):
|
||||
microversion = 'latest'
|
||||
ADMIN_API = True
|
||||
|
||||
FAKE_LIBVIRT_VERSION = 7000000
|
||||
FAKE_QEMU_VERSION = 5002000
|
||||
FAKE_LIBVIRT_VERSION = 8000000
|
||||
FAKE_QEMU_VERSION = 6002000
|
||||
|
||||
# Since we run all computes by a single process, we need to identify which
|
||||
# current compute service we use at the moment.
|
||||
@ -869,10 +869,3 @@ class DifferentMdevClassesTests(VGPUTestBase):
|
||||
expected_rc='CUSTOM_NOTVGPU')
|
||||
self.assert_mdev_usage(self.compute2, expected_amount=1,
|
||||
expected_rc='CUSTOM_NOTVGPU')
|
||||
|
||||
|
||||
class VGPUTestsLibvirt7_3(VGPUTests):
|
||||
|
||||
# Minimum version supporting persistent mdevs is 7.3.0.
|
||||
# https://libvirt.org/drvnodedev.html#mediated-devices-mdevs
|
||||
FAKE_LIBVIRT_VERSION = 7003000
|
||||
|
@ -1,49 +0,0 @@
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from nova.tests.fixtures import libvirt as fakelibvirt
|
||||
from nova.tests.functional.libvirt import test_vgpu
|
||||
|
||||
|
||||
class VGPUTestsLibvirt7_7(test_vgpu.VGPUTestBase):
|
||||
|
||||
FAKE_LIBVIRT_VERSION = 7007000
|
||||
|
||||
def setUp(self):
|
||||
super(VGPUTestsLibvirt7_7, self).setUp()
|
||||
extra_spec = {"resources:VGPU": "1"}
|
||||
self.flavor = self._create_flavor(extra_spec=extra_spec)
|
||||
|
||||
# Start compute1 supporting only nvidia-11
|
||||
self.flags(
|
||||
enabled_mdev_types=fakelibvirt.NVIDIA_11_VGPU_TYPE,
|
||||
group='devices')
|
||||
|
||||
self.compute1 = self.start_compute_with_vgpu('host1')
|
||||
|
||||
def test_create_servers_with_vgpu(self):
|
||||
|
||||
# Create a single instance against a specific compute node.
|
||||
self._create_server(
|
||||
image_uuid='155d900f-4e14-4e4c-a73d-069cbf4541e6',
|
||||
flavor_id=self.flavor, host=self.compute1.host,
|
||||
networks='auto', expected_state='ACTIVE')
|
||||
|
||||
self.assert_mdev_usage(self.compute1, expected_amount=1)
|
||||
|
||||
self._create_server(
|
||||
image_uuid='155d900f-4e14-4e4c-a73d-069cbf4541e6',
|
||||
flavor_id=self.flavor, host=self.compute1.host,
|
||||
networks='auto', expected_state='ACTIVE')
|
||||
|
||||
self.assert_mdev_usage(self.compute1, expected_amount=2)
|
@ -17,7 +17,7 @@ from nova.tests.functional.libvirt import test_vgpu
|
||||
|
||||
class VGPUTestVolumeOPs(test_vgpu.VGPUTestBase):
|
||||
|
||||
FAKE_LIBVIRT_VERSION = 7007000
|
||||
FAKE_LIBVIRT_VERSION = 8000000
|
||||
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
|
@ -28043,53 +28043,6 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin):
|
||||
get_unassigned_mdevs.assert_called_once_with('pci_0000_06_00_0',
|
||||
['nvidia-11'])
|
||||
|
||||
@mock.patch.object(nova.privsep.libvirt, 'create_mdev')
|
||||
@mock.patch.object(libvirt_driver.LibvirtDriver,
|
||||
'_get_mdev_capable_devices')
|
||||
@mock.patch.object(libvirt_driver.LibvirtDriver,
|
||||
'_get_existing_mdevs_not_assigned')
|
||||
def test_allocate_mdevs_with_no_mdevs_but_capacity(self,
|
||||
unallocated_mdevs,
|
||||
get_mdev_capable_devs,
|
||||
privsep_create_mdev):
|
||||
self.flags(enabled_mdev_types=['nvidia-11', 'nvidia-12'],
|
||||
group='devices')
|
||||
# we need to call the below again to ensure the updated
|
||||
# 'device_addresses' value is read and the new groups created
|
||||
nova.conf.devices.register_dynamic_opts(CONF)
|
||||
self.flags(device_addresses=['0000:06:00.0'], group='mdev_nvidia-11')
|
||||
self.flags(device_addresses=['0000:07:00.0'], group='mdev_nvidia-12')
|
||||
allocations = {
|
||||
uuids.rp1: {
|
||||
'resources': {
|
||||
orc.VGPU: 1,
|
||||
}
|
||||
}
|
||||
}
|
||||
unallocated_mdevs.return_value = set()
|
||||
get_mdev_capable_devs.return_value = [
|
||||
{"dev_id": "pci_0000_06_00_0",
|
||||
"vendor_id": 0x10de,
|
||||
# This pGPU can support both types but the operator only wanted
|
||||
# to use nvidia-11 for it.
|
||||
"types": {'nvidia-10': {'availableInstances': 16,
|
||||
'name': 'GRID M60-8Q',
|
||||
'deviceAPI': 'vfio-pci'},
|
||||
'nvidia-11': {'availableInstances': 16,
|
||||
'name': 'GRID M60-0B',
|
||||
'deviceAPI': 'vfio-pci'},
|
||||
}
|
||||
}]
|
||||
privsep_create_mdev.return_value = uuids.mdev1
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), False)
|
||||
# Mock the fact update_provider_tree() should have run
|
||||
drvr.provider_tree = self._get_fake_provider_tree_with_vgpu()
|
||||
self.assertEqual([uuids.mdev1],
|
||||
drvr._allocate_mdevs(allocations=allocations))
|
||||
privsep_create_mdev.assert_called_once_with("0000:06:00.0",
|
||||
'nvidia-11',
|
||||
uuid=None)
|
||||
|
||||
@mock.patch.object(nova.privsep.libvirt, 'create_mdev')
|
||||
@mock.patch.object(libvirt_driver.LibvirtDriver,
|
||||
'_get_mdev_capable_devices')
|
||||
@ -28229,90 +28182,6 @@ class LibvirtDriverTestCase(test.NoDBTestCase, TraitsComparisonMixin):
|
||||
self.assertEqual(set([uuids.mdev1]),
|
||||
drvr._get_existing_mdevs_not_assigned(parent=None))
|
||||
|
||||
@mock.patch.object(libvirt_driver.LibvirtDriver,
|
||||
'_register_all_undefined_instance_details',
|
||||
new=mock.Mock())
|
||||
@mock.patch('nova.compute.utils.get_machine_ips',
|
||||
new=mock.Mock(return_value=[]))
|
||||
@mock.patch.object(nova.privsep.libvirt, 'create_mdev')
|
||||
@mock.patch.object(libvirt_driver.LibvirtDriver,
|
||||
'_get_mdev_capable_devices')
|
||||
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
|
||||
'_get_mediated_device_information')
|
||||
@mock.patch.object(os.path, 'exists')
|
||||
@mock.patch.object(libvirt_driver.LibvirtDriver,
|
||||
'_get_all_assigned_mediated_devices')
|
||||
def test_recreate_mediated_device_on_init_host(
|
||||
self, get_all_assigned_mdevs, exists, mock_get_mdev_info,
|
||||
get_mdev_capable_devs, privsep_create_mdev):
|
||||
self.flags(enabled_mdev_types=['nvidia-11', 'nvidia-12'],
|
||||
group='devices')
|
||||
# we need to call the below again to ensure the updated
|
||||
# 'device_addresses' value is read and the new groups created
|
||||
nova.conf.devices.register_dynamic_opts(CONF)
|
||||
self.flags(device_addresses=['0000:06:00.0'], group='mdev_nvidia-11')
|
||||
self.flags(device_addresses=['0000:07:00.0'], group='mdev_nvidia-12')
|
||||
get_all_assigned_mdevs.return_value = {uuids.mdev1: uuids.inst1,
|
||||
uuids.mdev2: uuids.inst2}
|
||||
|
||||
# Fake the fact that mdev1 is existing but mdev2 not
|
||||
def _exists(path):
|
||||
# Keep the AMD SEV support check happy
|
||||
if path == '/sys/module/kvm_amd/parameters/sev':
|
||||
return False
|
||||
|
||||
# Just verify what we ask
|
||||
self.assertIn('/sys/bus/mdev/devices/', path)
|
||||
return True if uuids.mdev1 in path else False
|
||||
|
||||
exists.side_effect = _exists
|
||||
mock_get_mdev_info.side_effect = [
|
||||
{"dev_id": "mdev_fake",
|
||||
"uuid": uuids.mdev2,
|
||||
"parent": "pci_0000_06_00_0",
|
||||
"type": "nvidia-11",
|
||||
"iommu_group": 12
|
||||
}]
|
||||
get_mdev_capable_devs.return_value = [
|
||||
{"dev_id": "pci_0000_06_00_0",
|
||||
"vendor_id": 0x10de,
|
||||
"types": {'nvidia-11': {'availableInstances': 16,
|
||||
'name': 'GRID M60-0B',
|
||||
'deviceAPI': 'vfio-pci'},
|
||||
}
|
||||
}]
|
||||
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
drvr.init_host(host='foo')
|
||||
# Only mdev2 will be recreated as mdev1 already exists.
|
||||
privsep_create_mdev.assert_called_once_with(
|
||||
"0000:06:00.0", 'nvidia-11', uuid=uuids.mdev2)
|
||||
|
||||
@mock.patch('nova.virt.libvirt.driver.LibvirtDriver.'
|
||||
'_get_mediated_device_information')
|
||||
@mock.patch.object(os.path, 'exists')
|
||||
@mock.patch.object(libvirt_driver.LibvirtDriver,
|
||||
'_get_all_assigned_mediated_devices')
|
||||
def test_recreate_mediated_device_on_init_host_with_wrong_config(
|
||||
self, get_all_assigned_mdevs, exists, mock_get_mdev_info):
|
||||
self.flags(enabled_mdev_types=['nvidia-11', 'nvidia-12'],
|
||||
group='devices')
|
||||
get_all_assigned_mdevs.return_value = {uuids.mdev1: uuids.inst1}
|
||||
# We pretend this mdev doesn't exist hence it needs recreation
|
||||
exists.return_value = False
|
||||
mock_get_mdev_info.side_effect = [
|
||||
{"dev_id": "mdev_fake",
|
||||
"uuid": uuids.mdev1,
|
||||
"parent": "pci_0000_06_00_0",
|
||||
"type": "nvidia-99",
|
||||
"iommu_group": 12
|
||||
}]
|
||||
drvr = libvirt_driver.LibvirtDriver(fake.FakeVirtAPI(), True)
|
||||
# mdev1 was originally created for nvidia-99 but the operator messed up
|
||||
# the configuration by removing this type, we want to hardstop.
|
||||
self.assertRaises(exception.InvalidLibvirtMdevConfig,
|
||||
drvr.init_host, host='foo')
|
||||
|
||||
@mock.patch('oslo_utils.uuidutils.generate_uuid')
|
||||
def test_create_mdev(self, mock_generate_uuid, uuid=None, drvr=None):
|
||||
if drvr is None:
|
||||
|
@ -219,10 +219,10 @@ patch_tpool_proxy()
|
||||
# doc/source/reference/libvirt-distro-support-matrix.rst
|
||||
#
|
||||
# DO NOT FORGET to update this document when touching any versions below!
|
||||
MIN_LIBVIRT_VERSION = (7, 0, 0)
|
||||
MIN_QEMU_VERSION = (5, 2, 0)
|
||||
NEXT_MIN_LIBVIRT_VERSION = (8, 0, 0)
|
||||
NEXT_MIN_QEMU_VERSION = (6, 2, 0)
|
||||
MIN_LIBVIRT_VERSION = (8, 0, 0)
|
||||
MIN_QEMU_VERSION = (6, 2, 0)
|
||||
NEXT_MIN_LIBVIRT_VERSION = (10, 0, 0)
|
||||
NEXT_MIN_QEMU_VERSION = (8, 2, 2)
|
||||
|
||||
# vIOMMU model value `virtio` minimal support version
|
||||
MIN_LIBVIRT_VIOMMU_VIRTIO_MODEL = (8, 3, 0)
|
||||
@ -892,6 +892,7 @@ class LibvirtDriver(driver.ComputeDriver):
|
||||
if not self._host.has_min_version(MIN_LIBVIRT_PERSISTENT_MDEV):
|
||||
# TODO(sbauza): Remove this code once mediated devices are
|
||||
# persisted across reboots.
|
||||
# TODO(Uggla): Remove in bump cleanup patch
|
||||
self._recreate_assigned_mediated_devices()
|
||||
else:
|
||||
# NOTE(melwitt): We shouldn't need to do this with libvirt 7.8.0
|
||||
@ -8987,6 +8988,11 @@ class LibvirtDriver(driver.ComputeDriver):
|
||||
self._host.device_create(conf)
|
||||
# Define it to make it persistent.
|
||||
mdev_dev = self._host.device_define(conf)
|
||||
# TODO(Uggla): Remove this in the libvirt bump cleanup patch
|
||||
# As we are not setting autostart anymore, because we are not
|
||||
# passing in following code.
|
||||
# It makes test_allocate_mdevs_with_no_mdevs_but_capacity test to fail.
|
||||
# So removing the tests.
|
||||
if self._host.has_min_version(MIN_LIBVIRT_NODEDEV_AUTOSTART):
|
||||
# Set it to automatically start when the compute host boots or the
|
||||
# parent device becomes available.
|
||||
|
@ -0,0 +1,10 @@
|
||||
---
|
||||
upgrade:
|
||||
- |
|
||||
The minimum required version of libvirt by the `nova-compute`
|
||||
service is now 8.0.0, and the minimum required version of QEMU is
|
||||
6.2.0. Failing to meet these minimum versions when using the libvirt
|
||||
compute driver will result in the `nova-compute` service not
|
||||
starting.
|
||||
The next minimum required version of libvirt to be used in a future
|
||||
release is 10.0.0, while the next minimum QEMU is 8.2.2.
|
Loading…
x
Reference in New Issue
Block a user