Merge "Return an integer value for Cores and Threads"

This commit is contained in:
Zuul 2021-04-20 12:36:57 +00:00 committed by Gerrit Code Review
commit 17fd2a01d3
3 changed files with 77 additions and 15 deletions

View File

@ -776,22 +776,26 @@ class LibvirtDriver(AbstractSystemsDriver):
domain = self._get_domain(identity, readonly=True)
processors_count = self.get_total_cpus(identity)
# NOTE(rpittau) not a lot we can provide if the domain is not active
processors = [{'id': 'CPU{0}'.format(x),
'socket': 'CPU {0}'.format(x)}
for x in range(processors_count)]
if domain.isActive():
tree = ET.fromstring(domain.XMLDesc())
try:
model = tree.find('.//cpu/model').text
except AttributeError:
model = 'N/A'
try:
vendor = tree.find('.//cpu/vendor').text
except AttributeError:
vendor = 'N/A'
try:
cores = tree.find('.//cpu/topology').get('cores')
threads = tree.find('.//cpu/topology').get('threads')
except AttributeError:
cores = 'N/A'
threads = 'N/A'
# still return an integer as clients are expecting
cores = '1'
threads = '1'
for processor in processors:
processor['model'] = model

View File

@ -0,0 +1,31 @@
<domain type='kvm'>
<name>test-node</name>
<uuid>5729db1e-3162-40e4-9fc4-817e4c0c121d</uuid>
<memory unit='KiB'>2097152</memory>
<currentMemory unit='KiB'>2097152</currentMemory>
<vcpu placement='static'>1</vcpu>
<os>
<type arch='x86_64' machine='pc-i440fx-bionic'>hvm</type>
<loader readonly='yes' type='pflash'>/usr/share/OVMF/OVMF_CODE.fd</loader>
<nvram>/var/lib/libvirt/qemu/nvram/test-node_VARS.fd</nvram>
<boot dev='hd'/>
</os>
<features>
<acpi/>
<apic/>
<vmport state='off'/>
</features>
<cpu mode='custom' match='exact' check='partial'/>
<clock offset='utc'>
<timer name='rtc' tickpolicy='catchup'/>
<timer name='pit' tickpolicy='delay'/>
<timer name='hpet' present='no'/>
</clock>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<pm>
<suspend-to-mem enabled='no'/>
<suspend-to-disk enabled='no'/>
</pm>
</domain>

View File

@ -966,6 +966,33 @@ class LibvirtDriverTestCase(base.BaseTestCase):
'vendor': 'Intel'}],
sorted(processors, key=lambda k: k['id']))
@mock.patch('libvirt.openReadOnly', autospec=True)
def test_get_processors_notopology(self, libvirt_mock):
with open(
'sushy_tools/tests/unit/emulator/'
'domain_processors_notopology.xml') as f:
domain_xml = f.read()
conn_mock = libvirt_mock.return_value
domain_mock = conn_mock.lookupByUUID.return_value
domain_mock.XMLDesc.return_value = domain_xml
domain_mock.maxVcpus.return_value = 2
processors = self.test_driver.get_processors(self.uuid)
self.assertEqual([{'cores': '1',
'id': 'CPU0',
'model': 'N/A',
'socket': 'CPU 0',
'threads': '1',
'vendor': 'N/A'},
{'cores': '1',
'id': 'CPU1',
'model': 'N/A',
'socket': 'CPU 1',
'threads': '1',
'vendor': 'N/A'}],
sorted(processors, key=lambda k: k['id']))
@mock.patch('libvirt.openReadOnly', autospec=True)
def test_get_simple_storage_collection(self, libvirt_mock):
with open('sushy_tools/tests/unit/emulator/'