From: Guillaume Abrioux Date: Mon, 30 Mar 2026 13:50:34 +0000 (+0200) Subject: Merge pull request #67996 from guits/fix-cv-nvme-vendor X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=600f939da711ee94d8dcaf95724514de1e6313c5;p=ceph.git Merge pull request #67996 from guits/fix-cv-nvme-vendor ceph-volume: fix vendor detection for nvme devices --- 600f939da711ee94d8dcaf95724514de1e6313c5 diff --cc src/ceph-volume/ceph_volume/tests/util/test_disk.py index 2adc95eabe00,d3d6632e748f..d0161952b1d5 --- a/src/ceph-volume/ceph_volume/tests/util/test_disk.py +++ b/src/ceph-volume/ceph_volume/tests/util/test_disk.py @@@ -368,28 -366,37 +368,58 @@@ class TestGetDevices(object) assert result[lv_path]['type'] == 'lvm' assert result[lv_path]['human_readable_size'] == '100.00 MB' + def test_nvme_reads_vendor_model_rev_under_controller( + self, patched_get_block_devs_sysfs, fake_filesystem + ): + nvme_path = '/dev/nvme0n1' + patched_get_block_devs_sysfs.return_value = [ + [nvme_path, nvme_path, 'disk', nvme_path] + ] + fake_filesystem.create_dir('/sys/block/nvme0n1/slaves') + fake_filesystem.create_dir('/sys/block/nvme0n1/queue') + fake_filesystem.create_file( + '/sys/block/nvme0n1/device/nvme0/device/vendor', + contents='Samsung', + ) + fake_filesystem.create_file( + '/sys/block/nvme0n1/device/nvme0/device/model', + contents='SSD 990 PRO', + ) + fake_filesystem.create_file( + '/sys/block/nvme0n1/device/nvme0/device/rev', + contents='1B2Q', + ) + with patch('ceph_volume.util.disk.UdevData') as MockUdevData: + mock_instance = MagicMock() + mock_instance.is_lvm = False + MockUdevData.return_value = mock_instance + result = disk.get_devices() + assert result[nvme_path]['vendor'] == 'Samsung' + assert result[nvme_path]['model'] == 'SSD 990 PRO' + assert result[nvme_path]['rev'] == '1B2Q' + +class TestGetBlockDevsSysfs(object): + def test_optical_device_is_skipped(self, fake_filesystem): + # sr0 is a CDROM (IPMI/BMC virtual media),not a usable disk. + fake_filesystem.create_file('/dev/sr0') + fake_filesystem.create_dir('/sys/dev/block') + fake_filesystem.create_dir('/sys/block/sr0/holders') + fake_filesystem.create_dir('/sys/block/sr0/device') + fake_filesystem.create_file('/sys/block/sr0/device/type', contents='5\n') + + assert disk.get_block_devs_sysfs(device='sr0') == [] + + def test_regular_device_is_not_skipped(self, fake_filesystem): + # normal disk should still be reported. + fake_filesystem.create_file('/dev/sda') + fake_filesystem.create_dir('/sys/dev/block') + fake_filesystem.create_dir('/sys/block/sda/holders') + + result = disk.get_block_devs_sysfs(device='sda') + assert result == [['/dev/sda', '/dev/sda', 'disk', '/dev/sda']] + + class TestSizeCalculations(object): @pytest.mark.parametrize('aliases', [