Fix traits to cpu flags mapping

Following keys like HW_CPU_X86_SVM and HW_CPU_X86_VMX are placed in TRAITS_CPU_MAPPING as part of a tuple instead of being direct keys.
This patch will flaten these tuples.
Closes-Bug: #2043030

Change-Id: Ia600ceb22c5939117095593b97ed94735c8f953c
This commit is contained in:
Ali Safari 2023-11-29 23:02:50 +03:30
parent 8ac050c253
commit 99fe8c93a1
2 changed files with 22 additions and 2 deletions

View File

@ -710,6 +710,10 @@ sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
os_mach_type = libvirt_utils.get_machine_type(image_meta)
self.assertEqual('q35', os_mach_type)
def test_make_reverse_cpu_traits_mapping(self):
for k in libvirt_utils.make_reverse_cpu_traits_mapping():
self.assertIsInstance(k, str)
def test_get_flags_by_flavor_specs(self):
flavor = objects.Flavor(
id=1, flavorid='fakeid-1', name='fake1.small', memory_mb=128,
@ -718,11 +722,15 @@ sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
'trait:%s' % os_traits.HW_CPU_X86_3DNOW: 'required',
'trait:%s' % os_traits.HW_CPU_X86_SSE2: 'required',
'trait:%s' % os_traits.HW_CPU_HYPERTHREADING: 'required',
'trait:%s' % os_traits.HW_CPU_X86_INTEL_VMX: 'required',
'trait:%s' % os_traits.HW_CPU_X86_VMX: 'required',
'trait:%s' % os_traits.HW_CPU_X86_SVM: 'required',
'trait:%s' % os_traits.HW_CPU_X86_AMD_SVM: 'required',
})
traits = libvirt_utils.get_flags_by_flavor_specs(flavor)
# we shouldn't see the hyperthreading trait since that's a valid trait
# but not a CPU flag
self.assertEqual(set(['3dnow', 'sse2']), traits)
self.assertEqual(set(['3dnow', 'sse2', 'vmx', 'svm']), traits)
@mock.patch('nova.virt.libvirt.utils.copy_image')
@mock.patch('nova.privsep.path.chown')

View File

@ -103,8 +103,20 @@ CPU_TRAITS_MAPPING = {
'xop': os_traits.HW_CPU_X86_XOP
}
def make_reverse_cpu_traits_mapping() -> ty.Dict[str, str]:
traits_cpu_mapping = dict()
for k, v in CPU_TRAITS_MAPPING.items():
if isinstance(v, tuple):
for trait in v:
traits_cpu_mapping[trait] = k
else:
traits_cpu_mapping[v] = k
return traits_cpu_mapping
# Reverse CPU_TRAITS_MAPPING
TRAITS_CPU_MAPPING = {v: k for k, v in CPU_TRAITS_MAPPING.items()}
TRAITS_CPU_MAPPING = make_reverse_cpu_traits_mapping()
# global directory for emulated TPM
VTPM_DIR = '/var/lib/libvirt/swtpm/'