]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: include LVM mapper devices in get_devices() 67231/head
authorGuillaume Abrioux <gabrioux@ibm.com>
Thu, 5 Feb 2026 15:34:26 +0000 (15:34 +0000)
committerGuillaume Abrioux <gabrioux@ibm.com>
Thu, 5 Feb 2026 16:16:06 +0000 (17:16 +0100)
`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>
src/ceph-volume/ceph_volume/tests/util/test_disk.py
src/ceph-volume/ceph_volume/util/disk.py

index 6abe8571b4e86cddfdd14397689bde5b91ee4124..68eb944a34c68be24eeed8407b22673f7ebaca9f 100644 (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):
 
index 31b35bb566df2c18225717614e686275e927d0b1..d8871a17437936502ed403aadb5041b6db63c86a 100644 (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'),