ceph-volume: include LVM mapper devices in get_devices()

`ceph-volume inventory --list-all` doesn't include LVs devices:

```
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
vda           253:0    0   61G  0 disk
└─vda1        253:1    0   61G  0 part /etc/ceph/ceph.keyring
                                       /etc/ceph/ceph.conf
                                       /run/podman-init
                                       /rootfs/var/lib/containers/storage/overlay
                                       /rootfs
vdb           253:16   0  200G  0 disk
vdc           253:32   0  200G  0 disk
vdd           253:48   0  200G  0 disk
vde           253:64   0  200G  0 disk
vdf           253:80   0  200G  0 disk
vdg           253:96   0  200G  0 disk
vdh           253:112  0  200G  0 disk
vdi           253:128  0  200G  0 disk
vdj           253:144  0  200G  0 disk
vdk           253:160  0  200G  0 disk
└─vg_test-lv1 252:0    0  200G  0 lvm

Device Path               Size         Device nodes    rotates available
Model name
/dev/vdb                  200.00 GB    vdb             True    True
/dev/vdc                  200.00 GB    vdc             True    True
/dev/vdd                  200.00 GB    vdd             True    True
/dev/vde                  200.00 GB    vde             True    True
/dev/vdf                  200.00 GB    vdf             True    True
/dev/vdg                  200.00 GB    vdg             True    True
/dev/vdh                  200.00 GB    vdh             True    True
/dev/vdi                  200.00 GB    vdi             True    True
/dev/vdj                  200.00 GB    vdj             True    True
/dev/vda                  61.00 GB     vda             True    False
/dev/vda1                 61.00 GB     vda             False   False
/dev/vdk                  200.00 GB    vdk             True    False
```

This commit removes the UdevData(diskname).is_lvm check so LVs devices
are no longer skipped when listing devices.

```

Device Path               Size         Device nodes    rotates available
Model name
/dev/vdb                  200.00 GB    vdb             True    True
/dev/vdc                  200.00 GB    vdc             True    True
/dev/vdd                  200.00 GB    vdd             True    True
/dev/vde                  200.00 GB    vde             True    True
/dev/vdf                  200.00 GB    vdf             True    True
/dev/vdg                  200.00 GB    vdg             True    True
/dev/vdh                  200.00 GB    vdh             True    True
/dev/vdi                  200.00 GB    vdi             True    True
/dev/vdj                  200.00 GB    vdj             True    True
/dev/vda                  61.00 GB     vda             True    False
/dev/vda1                 61.00 GB     vda             False   False
/dev/vdk                  200.00 GB    vdk             True    False
/dev/vg_test/lv1          200.00 GB    vdk             True    False
```

Fixes: https://tracker.ceph.com/issues/74775

Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
This commit is contained in:
Guillaume Abrioux 2026-02-05 15:34:26 +00:00
parent a8c3b0b241
commit c06bee965f
2 changed files with 22 additions and 8 deletions

View File

@ -344,6 +344,28 @@ class TestGetDevices(object):
result = disk.get_devices()
assert result[sda_path]['actuators'] == fake_actuator_nb
def test_lvm_device_is_included(self, patched_get_block_devs_sysfs, fake_filesystem):
lv_path = '/dev/vg_test/lv1'
dm_path = '/dev/dm-0'
mapper_path = '/dev/mapper/vg_test-lv1'
patched_get_block_devs_sysfs.return_value = [
[dm_path, mapper_path, 'lvm', dm_path]
]
fake_filesystem.create_dir('/sys/block/dm-0/slaves')
fake_filesystem.create_dir('/sys/block/dm-0/queue')
fake_filesystem.create_file('/sys/block/dm-0/size', contents='204800')
fake_filesystem.create_file('/sys/block/dm-0/queue/rotational', contents='1')
fake_filesystem.create_file('/sys/block/dm-0/queue/hw_sector_size', contents='512')
with patch("ceph_volume.util.disk.UdevData") as MockUdevData:
mock_instance = MagicMock()
mock_instance.slashed_path = lv_path
mock_instance.environment = {}
MockUdevData.return_value = mock_instance
result = disk.get_devices()
assert lv_path in result
assert result[lv_path]['type'] == 'lvm'
assert result[lv_path]['human_readable_size'] == '100.00 MB'
class TestSizeCalculations(object):

View File

@ -800,14 +800,6 @@ def get_devices(_sys_block_path='/sys/block', device=''):
if is_ceph_rbd(diskname):
continue
# If the mapper device is a logical volume it gets excluded
try:
if UdevData(diskname).is_lvm:
continue
except RuntimeError:
logger.debug("get_devices(): device {} couldn't be found.".format(diskname))
continue
# all facts that have no defaults
# (<name>, <path relative to _sys_block_path>)
facts = [('removable', 'removable'),