]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
Merge pull request #67996 from guits/fix-cv-nvme-vendor
authorGuillaume Abrioux <gabrioux@ibm.com>
Mon, 30 Mar 2026 13:50:34 +0000 (15:50 +0200)
committerGitHub <noreply@github.com>
Mon, 30 Mar 2026 13:50:34 +0000 (15:50 +0200)
ceph-volume: fix vendor detection for nvme devices

1  2 
src/ceph-volume/ceph_volume/tests/util/test_disk.py
src/ceph-volume/ceph_volume/util/disk.py

index 2adc95eabe000ed821c584505f9dcbeaf5cdb8f6,d3d6632e748f2509a6a859c3a1f25c94d440658c..d0161952b1d51de9160d63b59b3f865fe2661631
@@@ -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', [