From: Guillaume Abrioux Date: Tue, 19 Jul 2022 12:06:10 +0000 (+0000) Subject: ceph-volume: report slave devices in inventory X-Git-Tag: v18.0.0~394^2~2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=1ac2a8270cf4aece58ae3f952cc4d1ef978384ed;p=ceph-ci.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 --- diff --git a/src/ceph-volume/ceph_volume/tests/conftest.py b/src/ceph-volume/ceph_volume/tests/conftest.py index 2f11f44fa10..4a832873fa7 100644 --- a/src/ceph-volume/ceph_volume/tests/conftest.py +++ b/src/ceph-volume/ceph_volume/tests/conftest.py @@ -287,7 +287,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 fa5393123a8..785d8b56e86 100644 --- a/src/ceph-volume/ceph_volume/tests/test_inventory.py +++ b/src/ceph-volume/ceph_volume/tests/test_inventory.py @@ -30,7 +30,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] @@ -58,7 +59,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] @@ -89,6 +91,7 @@ def device_data(device_info): 'size': 1999844147200.0, 'support_discard': '', 'vendor': 'DELL', + 'device_nodes': 'sdb' } } ) @@ -144,6 +147,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 069e2d7ab26..86249894e54 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 @@ -275,6 +279,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 4b1d5494976..5cad442b039 100644 --- a/src/ceph-volume/ceph_volume/util/disk.py +++ b/src/ceph-volume/ceph_volume/util/disk.py @@ -866,6 +866,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: