summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladyslav Drok <vdrok@mirantis.com>2020-11-16 14:51:53 +0100
committerVladyslav Drok <vdrok@mirantis.com>2020-11-16 15:25:12 +0100
commit3761a448009467dd342bc0cb3ca3b182969def42 (patch)
treebc21c4ff35526386909e8622b4d46f148b94fc94
parent37dc11fcc1056dd367f9ae36897e01e37f97fccf (diff)
downloadironic-python-agent-3761a448009467dd342bc0cb3ca3b182969def42.tar.gz
Fix vendor info retrieval for some versions of lshw
There is one more place that relies on lshw json output being a dict, so let's fix the function that gets the dict rather than places it is being used in. Change-Id: Ia1c2c2e6a32c76ac0249e6a46e4cced18d6093a9 Task: 39527 Story: 2007588
-rw-r--r--ironic_python_agent/hardware.py11
-rw-r--r--ironic_python_agent/tests/unit/test_hardware.py8
2 files changed, 14 insertions, 5 deletions
diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py
index e142fdb9..ecc9fba2 100644
--- a/ironic_python_agent/hardware.py
+++ b/ironic_python_agent/hardware.py
@@ -97,7 +97,12 @@ def _get_system_lshw_dict():
:return: A python dict from the lshw json output
"""
out, _e = utils.execute('lshw', '-quiet', '-json', log_stdout=False)
- return json.loads(out)
+ out = json.loads(out)
+ # Depending on lshw version, output might be a list, starting with
+ # https://github.com/lyonel/lshw/commit/135a853c60582b14c5b67e5cd988a8062d9896f4 # noqa
+ if isinstance(out, list):
+ return out[0]
+ return out
def _udev_settle():
@@ -1143,10 +1148,6 @@ class GenericHardwareManager(HardwareManager):
LOG.warning('Could not get real physical RAM from lshw: %s', e)
physical = None
else:
- # Depending on lshw version, output might be a list, starting with
- # https://github.com/lyonel/lshw/commit/135a853c60582b14c5b67e5cd988a8062d9896f4 # noqa
- if isinstance(sys_dict, list):
- sys_dict = sys_dict[0]
physical = _calc_memory(sys_dict)
if not physical:
diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py
index 060e71b3..b69c80d1 100644
--- a/ironic_python_agent/tests/unit/test_hardware.py
+++ b/ironic_python_agent/tests/unit/test_hardware.py
@@ -4391,6 +4391,14 @@ class TestGenericHardwareManager(base.IronicAgentTest):
self.assertEqual('GENERIC', vendor_info.manufacturer)
@mock.patch.object(utils, 'execute', autospec=True)
+ def test_get_system_vendor_info_lshw_list(self, mocked_execute):
+ mocked_execute.return_value = (f"[{LSHW_JSON_OUTPUT_V2[0]}]", "")
+ vendor_info = self.hardware.get_system_vendor_info()
+ self.assertEqual('ABCD', vendor_info.product_name)
+ self.assertEqual('1234', vendor_info.serial_number)
+ self.assertEqual('ABCD', vendor_info.manufacturer)
+
+ @mock.patch.object(utils, 'execute', autospec=True)
def test_get_system_vendor_info_failure(self, mocked_execute):
mocked_execute.side_effect = processutils.ProcessExecutionError()
vendor_info = self.hardware.get_system_vendor_info()