Get numa_node info when collecting pci devices info
IPA now includes information about numa node id when collecting information about PCI devices. Closes-bug: #1622940 Co-Authored-By: Jay Faulkner <jay@jvf.cc> Change-Id: I70b0cb3eff66d67bb8168982acbbf335de0599cd
This commit is contained in:
parent
b42f0be422
commit
76ad06225a
@ -357,6 +357,16 @@ def collect_pci_devices_info(data, failures):
|
|||||||
LOG.warning('Wrong format of PCI revision in PCI '
|
LOG.warning('Wrong format of PCI revision in PCI '
|
||||||
'device %s: %s', subdir, exc)
|
'device %s: %s', subdir, exc)
|
||||||
|
|
||||||
|
pci_numa_node_id = None
|
||||||
|
pci_numa_path = os.path.join(pci_devices_path, subdir, 'numa_node')
|
||||||
|
if os.path.isfile(pci_numa_path):
|
||||||
|
try:
|
||||||
|
with open(pci_numa_path) as vendor_numa_node:
|
||||||
|
pci_numa_node_id = vendor_numa_node.read().strip()
|
||||||
|
except IOError as exc:
|
||||||
|
LOG.warning('Failed to gather numa_node id '
|
||||||
|
'from PCI device %s: %s', subdir, exc)
|
||||||
|
|
||||||
LOG.debug(
|
LOG.debug(
|
||||||
'Found a PCI device with vendor id %s, product id %s, class %s '
|
'Found a PCI device with vendor id %s, product id %s, class %s '
|
||||||
'and revision %s', vendor, device, pci_class, pci_revision)
|
'and revision %s', vendor, device, pci_class, pci_revision)
|
||||||
@ -364,7 +374,9 @@ def collect_pci_devices_info(data, failures):
|
|||||||
'product_id': device,
|
'product_id': device,
|
||||||
'class': pci_class,
|
'class': pci_class,
|
||||||
'revision': pci_revision,
|
'revision': pci_revision,
|
||||||
'bus': subdir})
|
'bus': subdir,
|
||||||
|
'numa_node_id': pci_numa_node_id})
|
||||||
|
|
||||||
data['pci_devices'] = pci_devices_info
|
data['pci_devices'] = pci_devices_info
|
||||||
|
|
||||||
|
|
||||||
|
@ -385,14 +385,14 @@ class TestCollectPciDevicesInfo(base.IronicAgentTest):
|
|||||||
mock_listdir.return_value = subdirs
|
mock_listdir.return_value = subdirs
|
||||||
mock_isfile.return_value = True
|
mock_isfile.return_value = True
|
||||||
mock_isdir.return_value = True
|
mock_isdir.return_value = True
|
||||||
reads = ['0x1234', '0x5678', '0x060000', '0x01',
|
reads = ['0x1234', '0x5678', '0x060000', '0x01', '-1',
|
||||||
'0x9876', '0x5432', '0x030000', '0x00']
|
'0x9876', '0x5432', '0x030000', '0x02', '-1']
|
||||||
expected_pci_devices = [{'vendor_id': '1234', 'product_id': '5678',
|
expected_pci_devices = [{'vendor_id': '1234', 'product_id': '5678',
|
||||||
'class': '060000', 'revision': '01',
|
'class': '060000', 'revision': '01',
|
||||||
'bus': 'foo'},
|
'bus': 'foo', 'numa_node_id': '-1'},
|
||||||
{'vendor_id': '9876', 'product_id': '5432',
|
{'vendor_id': '9876', 'product_id': '5432',
|
||||||
'class': '030000', 'revision': '00',
|
'class': '030000', 'revision': '02',
|
||||||
'bus': 'bar'}]
|
'bus': 'bar', 'numa_node_id': '-1'}]
|
||||||
|
|
||||||
mock_open = mock.mock_open()
|
mock_open = mock.mock_open()
|
||||||
with mock.patch('builtins.open', mock_open):
|
with mock.patch('builtins.open', mock_open):
|
||||||
@ -400,7 +400,32 @@ class TestCollectPciDevicesInfo(base.IronicAgentTest):
|
|||||||
mock_read.side_effect = reads
|
mock_read.side_effect = reads
|
||||||
inspector.collect_pci_devices_info(self.data, self.failures)
|
inspector.collect_pci_devices_info(self.data, self.failures)
|
||||||
|
|
||||||
self.assertEqual(4 * len(subdirs), mock_open.call_count)
|
self.assertEqual(5 * len(subdirs), mock_open.call_count)
|
||||||
|
self.assertListEqual(expected_pci_devices, self.data['pci_devices'])
|
||||||
|
|
||||||
|
@mock.patch.object(os.path, 'isdir', autospec=True)
|
||||||
|
@mock.patch.object(os.path, 'isfile', autospec=True)
|
||||||
|
def test_success_numa_ioerror(self, mock_isdir, mock_isfile, mock_listdir):
|
||||||
|
subdirs = ['foo', 'bar']
|
||||||
|
mock_listdir.return_value = subdirs
|
||||||
|
mock_isfile.return_value = True
|
||||||
|
mock_isdir.return_value = True
|
||||||
|
reads = ['0x1234', '0x5678', '0x060000', '0x01', IOError,
|
||||||
|
'0x9876', '0x5432', '0x030000', '0x00', IOError]
|
||||||
|
expected_pci_devices = [{'vendor_id': '1234', 'product_id': '5678',
|
||||||
|
'class': '060000', 'revision': '01',
|
||||||
|
'bus': 'foo', 'numa_node_id': None},
|
||||||
|
{'vendor_id': '9876', 'product_id': '5432',
|
||||||
|
'class': '030000', 'revision': '00',
|
||||||
|
'bus': 'bar', 'numa_node_id': None}]
|
||||||
|
|
||||||
|
mock_open = mock.mock_open()
|
||||||
|
with mock.patch('builtins.open', mock_open):
|
||||||
|
mock_read = mock_open.return_value.read
|
||||||
|
mock_read.side_effect = reads
|
||||||
|
inspector.collect_pci_devices_info(self.data, self.failures)
|
||||||
|
|
||||||
|
self.assertEqual(5 * len(subdirs), mock_open.call_count)
|
||||||
self.assertListEqual(expected_pci_devices, self.data['pci_devices'])
|
self.assertListEqual(expected_pci_devices, self.data['pci_devices'])
|
||||||
|
|
||||||
def test_wrong_path(self, mock_listdir):
|
def test_wrong_path(self, mock_listdir):
|
||||||
@ -416,13 +441,13 @@ class TestCollectPciDevicesInfo(base.IronicAgentTest):
|
|||||||
def test_bad_pci_device_info(self, mock_isdir, mock_isfile, mock_listdir):
|
def test_bad_pci_device_info(self, mock_isdir, mock_isfile, mock_listdir):
|
||||||
subdirs = ['foo', 'bar', 'baz']
|
subdirs = ['foo', 'bar', 'baz']
|
||||||
mock_listdir.return_value = subdirs
|
mock_listdir.return_value = subdirs
|
||||||
mock_isfile.return_value = False
|
mock_isfile.return_value = True
|
||||||
mock_isdir.return_value = True
|
mock_isdir.return_value = True
|
||||||
reads = ['0x1234', '0x5678', '0x060000', '0x9876',
|
reads = ['0x1234', '0x5678', '0x060000', '0x01', '-1',
|
||||||
IOError, IndexError]
|
IOError, IndexError]
|
||||||
expected_pci_devices = [{'vendor_id': '1234', 'product_id': '5678',
|
expected_pci_devices = [{'vendor_id': '1234', 'product_id': '5678',
|
||||||
'class': '060000', 'revision': None,
|
'class': '060000', 'revision': '01',
|
||||||
'bus': 'foo'}]
|
'bus': 'foo', 'numa_node_id': '-1'}]
|
||||||
|
|
||||||
mock_open = mock.mock_open()
|
mock_open = mock.mock_open()
|
||||||
with mock.patch('builtins.open', mock_open):
|
with mock.patch('builtins.open', mock_open):
|
||||||
@ -431,8 +456,8 @@ class TestCollectPciDevicesInfo(base.IronicAgentTest):
|
|||||||
inspector.collect_pci_devices_info(self.data, self.failures)
|
inspector.collect_pci_devices_info(self.data, self.failures)
|
||||||
|
|
||||||
# note(sborkows): due to throwing IOError, the corresponding mock_open
|
# note(sborkows): due to throwing IOError, the corresponding mock_open
|
||||||
# will not be called, so there are 6 mock_open calls in total
|
# will not be called, so there are 7 mock_open calls in total
|
||||||
self.assertEqual(6, mock_open.call_count)
|
self.assertEqual(7, mock_open.call_count)
|
||||||
self.assertListEqual(expected_pci_devices, self.data['pci_devices'])
|
self.assertListEqual(expected_pci_devices, self.data['pci_devices'])
|
||||||
|
|
||||||
|
|
||||||
|
3
releasenotes/notes/get_numa_node-eeab34a92739b6f6.yaml
Normal file
3
releasenotes/notes/get_numa_node-eeab34a92739b6f6.yaml
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- Adds numa_node id when collecting pci device info during inspection.
|
Loading…
Reference in New Issue
Block a user