From: Guillaume Abrioux Date: Tue, 19 Jul 2022 12:06:10 +0000 (+0000) Subject: ceph-volume: report slave devices in inventory X-Git-Tag: v16.2.11~391^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a57d88a373933b9453ba784c42c557efe37f41e5;p=ceph.git ceph-volume: report slave devices in inventory `ceph-volume inventory` currently reports the following: ``` Device Path Size rotates available Model name /dev/mapper/mpatha 50.00 GB True True /dev/mapper/mpathaa 6.00 GB True True /dev/mapper/mpathab 6.00 GB True True /dev/mapper/mpathac 6.00 GB True True /dev/mapper/mpathad 6.00 GB True True /dev/mapper/mpathae 6.00 GB True True ``` whereas something like following would be useful: ``` Device Path Size Device nodes rotates available Model name /dev/mapper/mpatha 50.00 GB sdf,sde True True /dev/mapper/mpathaa 6.00 GB sdbe,sdat True True /dev/mapper/mpathab 6.00 GB sdav,sdbf True True /dev/mapper/mpathac 6.00 GB sdbb,sdbl True True /dev/mapper/mpathad 6.00 GB sdas,sdbc True True /dev/mapper/mpathae 6.00 GB sdax,sdbh True True ``` Fixes: https://tracker.ceph.com/issues/56624 Signed-off-by: Guillaume Abrioux (cherry picked from commit 1ac2a8270cf4aece58ae3f952cc4d1ef978384ed) --- diff --git a/src/ceph-volume/ceph_volume/tests/conftest.py b/src/ceph-volume/ceph_volume/tests/conftest.py index 545a5f3453d..f857853c4e5 100644 --- a/src/ceph-volume/ceph_volume/tests/conftest.py +++ b/src/ceph-volume/ceph_volume/tests/conftest.py @@ -279,7 +279,11 @@ def patch_bluestore_label(): def device_info(monkeypatch, patch_bluestore_label): def apply(devices=None, lsblk=None, lv=None, blkid=None, udevadm=None, has_bluestore_label=False): - devices = devices if devices else {} + if devices: + for dev in devices.keys(): + devices[dev]['device_nodes'] = os.path.basename(dev) + else: + devices = {} lsblk = lsblk if lsblk else {} blkid = blkid if blkid else {} udevadm = udevadm if udevadm else {} diff --git a/src/ceph-volume/ceph_volume/tests/test_inventory.py b/src/ceph-volume/ceph_volume/tests/test_inventory.py index 13a0c08422a..624d8c12a6b 100644 --- a/src/ceph-volume/ceph_volume/tests/test_inventory.py +++ b/src/ceph-volume/ceph_volume/tests/test_inventory.py @@ -28,7 +28,8 @@ def device_report_keys(device_info): 'size': 1999844147200.0, 'support_discard': '', 'vendor': 'DELL', - 'device_id': 'Vendor-Model-Serial'} + 'device_id': 'Vendor-Model-Serial', + 'device_nodes': 'sdb'} } ) report = Devices().json_report()[0] @@ -55,7 +56,8 @@ def device_sys_api_keys(device_info): 'sectorsize': '512', 'size': 1999844147200.0, 'support_discard': '', - 'vendor': 'DELL'} + 'vendor': 'DELL', + 'device_nodes': 'sdb'} } ) report = Devices().json_report()[0] @@ -85,6 +87,7 @@ def device_data(device_info): 'size': 1999844147200.0, 'support_discard': '', 'vendor': 'DELL', + 'device_nodes': 'sdb' } } ) @@ -140,6 +143,7 @@ class TestInventory(object): 'size', 'support_discard', 'vendor', + 'device_nodes' ] expected_lsm_keys = [ diff --git a/src/ceph-volume/ceph_volume/util/device.py b/src/ceph-volume/ceph_volume/util/device.py index e5d819dc74c..042a9c1dbea 100644 --- a/src/ceph-volume/ceph_volume/util/device.py +++ b/src/ceph-volume/ceph_volume/util/device.py @@ -15,7 +15,7 @@ logger = logging.getLogger(__name__) report_template = """ -{dev:<25} {size:<12} {rot!s:<7} {available!s:<9} {model}""" +{dev:<25} {size:<12} {device_nodes:<15} {rot!s:<7} {available!s:<9} {model}""" def encryption_status(abspath): @@ -56,6 +56,8 @@ class Devices(object): rot='rotates', model='Model name', available='available', + device_nodes='Device nodes', + )] for device in sorted(self.devices): output.append(device.report()) @@ -110,6 +112,8 @@ class Device(object): self.path = real_path if not sys_info.devices: sys_info.devices = disk.get_devices() + if sys_info.devices.get(self.path, {}): + self.device_nodes = sys_info.devices[self.path]['device_nodes'] self.sys_api = sys_info.devices.get(self.path, {}) self.partitions = self._get_partitions() self.lv_api = None @@ -279,6 +283,7 @@ class Device(object): rot=self.rotational, available=self.available, model=self.model, + device_nodes=self.device_nodes ) def json_report(self): diff --git a/src/ceph-volume/ceph_volume/util/disk.py b/src/ceph-volume/ceph_volume/util/disk.py index 7f3586a527c..7191cf411c9 100644 --- a/src/ceph-volume/ceph_volume/util/disk.py +++ b/src/ceph-volume/ceph_volume/util/disk.py @@ -864,6 +864,12 @@ def get_devices(_sys_block_path='/sys/block', device=''): for key, file_ in facts: metadata[key] = get_file_contents(os.path.join(sysdir, file_)) + device_slaves = os.listdir(os.path.join(sysdir, 'slaves')) + if device_slaves: + metadata['device_nodes'] = ','.join(device_slaves) + else: + metadata['device_nodes'] = devname + metadata['scheduler_mode'] = "" scheduler = get_file_contents(sysdir + "/queue/scheduler") if scheduler is not None: