diff options
author | Vladyslav Drok <vdrok@mirantis.com> | 2020-11-16 14:51:53 +0100 |
---|---|---|
committer | Vladyslav Drok <vdrok@mirantis.com> | 2020-11-16 15:25:12 +0100 |
commit | 3761a448009467dd342bc0cb3ca3b182969def42 (patch) | |
tree | bc21c4ff35526386909e8622b4d46f148b94fc94 | |
parent | 37dc11fcc1056dd367f9ae36897e01e37f97fccf (diff) | |
download | ironic-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.py | 11 | ||||
-rw-r--r-- | ironic_python_agent/tests/unit/test_hardware.py | 8 |
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() |