summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Tantsur <dtantsur@protonmail.com>2020-07-09 16:31:55 +0200
committerRiccardo Pittau <elfosardo@gmail.com>2020-07-28 07:24:08 +0000
commit458dc2cc043f99a3ed48f5d42d138700b530924f (patch)
tree98d62ece4991a4e6f900364a8b622df02a5ca5bc
parentfd02912f6eddda6c9565530f985c77c01873a5c4 (diff)
downloadironic-python-agent-458dc2cc043f99a3ed48f5d42d138700b530924f.tar.gz
Ignore devices with size 0 when collecting inventory
delete_configuration still fetches all devices as it needs to clean ones with broken RAID. Story: #2007907 Task: #40307 Change-Id: I4b0be2b0755108490f9cd3c4f3b71a5e036761a1 (cherry picked from commit 1f3b70c4e968464a93ea68e6f64c4836b90446de)
-rw-r--r--ironic_python_agent/hardware.py13
-rw-r--r--ironic_python_agent/tests/unit/test_hardware.py11
-rw-r--r--releasenotes/notes/zero-size-78d3be2ac8fd59c2.yaml6
3 files changed, 25 insertions, 5 deletions
diff --git a/ironic_python_agent/hardware.py b/ironic_python_agent/hardware.py
index 32aa4515..cae30228 100644
--- a/ironic_python_agent/hardware.py
+++ b/ironic_python_agent/hardware.py
@@ -272,7 +272,8 @@ def _md_scan_and_assemble():
def list_all_block_devices(block_type='disk',
ignore_raid=False,
- ignore_floppy=True):
+ ignore_floppy=True,
+ ignore_empty=True):
"""List all physical block devices
The switches we use for lsblk: P for KEY="value" output, b for size output
@@ -288,6 +289,7 @@ def list_all_block_devices(block_type='disk',
devices and should be treated as such if encountered.
:param ignore_floppy: Ignore floppy disk devices in the block device
list. By default, these devices are filtered out.
+ :param ignore_empty: Whether to ignore disks with size equal 0.
:return: A list of BlockDevices
"""
@@ -381,6 +383,12 @@ def list_all_block_devices(block_type='disk',
LOG.debug('Skipping RAM device %s', device)
continue
+ # NOTE(dtantsur): some hardware represents virtual floppy devices as
+ # normal block devices with size 0. Filter them out.
+ if ignore_empty and not int(device['SIZE'] or 0):
+ LOG.debug('Skipping device %s with zero size', device)
+ continue
+
name = os.path.join('/dev', device['KNAME'])
try:
@@ -1776,7 +1784,8 @@ class GenericHardwareManager(HardwareManager):
utils.execute('mdadm', '--assemble', '--scan',
check_exit_code=False)
raid_devices = list_all_block_devices(block_type='raid',
- ignore_raid=False)
+ ignore_raid=False,
+ ignore_empty=False)
return raid_devices
raid_devices = _scan_raids()
diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py
index 25558fc5..4a69692f 100644
--- a/ironic_python_agent/tests/unit/test_hardware.py
+++ b/ironic_python_agent/tests/unit/test_hardware.py
@@ -141,7 +141,8 @@ BLK_DEVICE_TEMPLATE = (
'KNAME="ram1" MODEL="" SIZE="8388608" ROTA="0" TYPE="disk"\n'
'KNAME="ram2" MODEL="" SIZE="8388608" ROTA="0" TYPE="disk"\n'
'KNAME="ram3" MODEL="" SIZE="8388608" ROTA="0" TYPE="disk"\n'
- 'KNAME="fd1" MODEL="magic" SIZE="4096" ROTA="1" TYPE="disk"'
+ 'KNAME="fd1" MODEL="magic" SIZE="4096" ROTA="1" TYPE="disk"\n'
+ 'KNAME="sdf" MODEL="virtual floppy" SIZE="0" ROTA="1" TYPE="disk"'
)
# NOTE(pas-ha) largest device is 1 byte smaller than 4GiB
@@ -172,7 +173,8 @@ RAID_BLK_DEVICE_TEMPLATE = (
'KNAME="md0" MODEL="RAID" SIZE="1765517033470" '
'ROTA="0" TYPE="raid1"\n'
'KNAME="md0" MODEL="RAID" SIZE="1765517033470" '
- 'ROTA="0" TYPE="raid1"'
+ 'ROTA="0" TYPE="raid1"\n'
+ 'KNAME="md1" MODEL="RAID" SIZE="" ROTA="0" TYPE="raid1"'
)
RAID_BLK_DEVICE_TEMPLATE_DEVICES = [
hardware.BlockDevice(name='/dev/sda', model='DRIVE 0',
@@ -184,6 +186,9 @@ RAID_BLK_DEVICE_TEMPLATE_DEVICES = [
hardware.BlockDevice(name='/dev/md0', model='RAID',
size=1765517033470, rotational=False,
vendor="FooTastic"),
+ hardware.BlockDevice(name='/dev/md1', model='RAID',
+ size=0, rotational=False,
+ vendor="FooTastic"),
]
SHRED_OUTPUT_0_ITERATIONS_ZERO_FALSE = ()
@@ -4268,7 +4273,7 @@ class TestModuleFunctions(base.IronicAgentTest):
mocked_readlink.return_value = '../../sda'
mocked_fromdevfile.return_value = {}
mocked_execute.return_value = (RAID_BLK_DEVICE_TEMPLATE, '')
- result = hardware.list_all_block_devices()
+ result = hardware.list_all_block_devices(ignore_empty=False)
mocked_execute.assert_called_once_with(
'lsblk', '-Pbia', '-oKNAME,MODEL,SIZE,ROTA,TYPE',
check_exit_code=[0])
diff --git a/releasenotes/notes/zero-size-78d3be2ac8fd59c2.yaml b/releasenotes/notes/zero-size-78d3be2ac8fd59c2.yaml
new file mode 100644
index 00000000..d395e9d5
--- /dev/null
+++ b/releasenotes/notes/zero-size-78d3be2ac8fd59c2.yaml
@@ -0,0 +1,6 @@
+---
+fixes:
+ - |
+ Devices with size 0 are now ignored when collecting inventory. Some
+ hardware represents virtual floppy devices this way, see e.g.
+ https://www.dell.com/community/Systems-Management-General/How-to-disable-iDRAC-Virtual-CD/td-p/4734424