diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py index 6d97ca436..d3eda520d 100644 --- a/ironic_python_agent/hardware.py +++ b/ironic_python_agent/hardware.py @@ -265,7 +265,7 @@ def list_all_block_devices(block_type='disk', "Cause: %(error)s", {'path': disk_by_path_dir, 'error': e}) columns = ['KNAME', 'MODEL', 'SIZE', 'ROTA', 'TYPE'] - report = utils.execute('lsblk', '-Pbi', '-o{}'.format(','.join(columns)), + report = utils.execute('lsblk', '-Pbia', '-o{}'.format(','.join(columns)), check_exit_code=[0])[0] lines = report.splitlines() context = pyudev.Context() @@ -289,10 +289,12 @@ def list_all_block_devices(block_type='disk', # Other possible type values, which we skip recording: # lvm, part, rom, loop if devtype != block_type: - if devtype is not None and 'raid' in devtype and not ignore_raid: + if (devtype is not None and + any(x in devtype for x in ['raid', 'md']) and + not ignore_raid): LOG.debug( - "TYPE detected to contain 'raid', signifying a RAID " - "volume. Found: {!r}".format(line)) + "TYPE detected to contain 'raid or 'md', signifying a " + "RAID volume. Found: {!r}".format(line)) else: LOG.debug( "TYPE did not match. Wanted: {!r} but found: {!r}".format( @@ -338,7 +340,7 @@ def list_all_block_devices(block_type='disk', devices.append(BlockDevice(name=name, model=device['MODEL'], - size=int(device['SIZE']), + size=int(device['SIZE'] or 0), rotational=bool(int(device['ROTA'])), vendor=_get_device_info(device['KNAME'], 'block', 'vendor'), diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py index 530c2ccfd..a9fa5cab8 100644 --- a/ironic_python_agent/tests/unit/test_hardware.py +++ b/ironic_python_agent/tests/unit/test_hardware.py @@ -1103,7 +1103,7 @@ class TestGenericHardwareManager(base.IronicAgentTest): mocked_execute.return_value = (BLK_DEVICE_TEMPLATE, '') self.assertEqual('/dev/sdb', self.hardware.get_os_install_device()) mocked_execute.assert_called_once_with( - 'lsblk', '-Pbi', '-oKNAME,MODEL,SIZE,ROTA,TYPE', + 'lsblk', '-Pbia', '-oKNAME,MODEL,SIZE,ROTA,TYPE', check_exit_code=[0]) mock_cached_node.assert_called_once_with() @@ -1125,7 +1125,7 @@ class TestGenericHardwareManager(base.IronicAgentTest): # should always be smaller self.assertEqual('/dev/md0', self.hardware.get_os_install_device()) mocked_execute.assert_called_once_with( - 'lsblk', '-Pbi', '-oKNAME,MODEL,SIZE,ROTA,TYPE', + 'lsblk', '-Pbia', '-oKNAME,MODEL,SIZE,ROTA,TYPE', check_exit_code=[0]) mock_cached_node.assert_called_once_with() @@ -1144,7 +1144,7 @@ class TestGenericHardwareManager(base.IronicAgentTest): ex = self.assertRaises(errors.DeviceNotFound, self.hardware.get_os_install_device) mocked_execute.assert_called_once_with( - 'lsblk', '-Pbi', '-oKNAME,MODEL,SIZE,ROTA,TYPE', + 'lsblk', '-Pbia', '-oKNAME,MODEL,SIZE,ROTA,TYPE', check_exit_code=[0]) self.assertIn(str(4 * units.Gi), ex.details) mock_cached_node.assert_called_once_with() @@ -3051,7 +3051,7 @@ class TestModuleFunctions(base.IronicAgentTest): mocked_execute.return_value = (BLK_DEVICE_TEMPLATE_SMALL, '') result = hardware.list_all_block_devices() mocked_execute.assert_called_once_with( - 'lsblk', '-Pbi', '-oKNAME,MODEL,SIZE,ROTA,TYPE', + 'lsblk', '-Pbia', '-oKNAME,MODEL,SIZE,ROTA,TYPE', check_exit_code=[0]) self.assertEqual(BLK_DEVICE_TEMPLATE_SMALL_DEVICES, result) mocked_udev.assert_called_once_with() @@ -3070,7 +3070,7 @@ class TestModuleFunctions(base.IronicAgentTest): mocked_execute.return_value = (RAID_BLK_DEVICE_TEMPLATE, '') result = hardware.list_all_block_devices() mocked_execute.assert_called_once_with( - 'lsblk', '-Pbi', '-oKNAME,MODEL,SIZE,ROTA,TYPE', + 'lsblk', '-Pbia', '-oKNAME,MODEL,SIZE,ROTA,TYPE', check_exit_code=[0]) self.assertEqual(RAID_BLK_DEVICE_TEMPLATE_DEVICES, result) mocked_udev.assert_called_once_with() @@ -3083,7 +3083,7 @@ class TestModuleFunctions(base.IronicAgentTest): mocked_execute.return_value = ('TYPE="foo" MODEL="model"', '') result = hardware.list_all_block_devices() mocked_execute.assert_called_once_with( - 'lsblk', '-Pbi', '-oKNAME,MODEL,SIZE,ROTA,TYPE', + 'lsblk', '-Pbia', '-oKNAME,MODEL,SIZE,ROTA,TYPE', check_exit_code=[0]) self.assertEqual([], result) mocked_udev.assert_called_once_with()