]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: fix zap_partitions() in devices.lvm.zap 55477/head
authorGuillaume Abrioux <gabrioux@ibm.com>
Tue, 30 Jan 2024 14:17:35 +0000 (14:17 +0000)
committerGuillaume Abrioux <gabrioux@redhat.com>
Wed, 7 Feb 2024 14:17:01 +0000 (14:17 +0000)
The current logic is unable to find the holders for the
partition being zapped.

This commit fixes this issue.

Fixes: https://tracker.ceph.com/issues/64248
Signed-off-by: Guillaume Abrioux <gabrioux@ibm.com>
(cherry picked from commit 36c83bf5424308214228b1c86d8e1d215b8519c5)

src/ceph-volume/ceph_volume/devices/lvm/zap.py
src/ceph-volume/ceph_volume/util/disk.py

index d4d78ad0181094c6fb4375c47d1252a065ccddaa..7d808a5f4fc37a8ebcd51c1f4ada835f3bd3c430 100644 (file)
@@ -201,8 +201,11 @@ class Zap(object):
         """
         if device.is_encrypted:
             # find the holder
-            holders = [
-                '/dev/%s' % holder for holder in device.sys_api.get('holders', [])
+            pname = device.sys_api.get('parent')
+            devname = device.sys_api.get('devname')
+            parent_device = Device(f'/dev/{pname}')
+            holders: List[str] = [
+                f'/dev/{holder}' for holder in parent_device.sys_api['partitions'][devname]['holders']
             ]
             for mapper_uuid in os.listdir('/dev/mapper'):
                 mapper_path = os.path.join('/dev/mapper', mapper_uuid)
index 01c389993baba713bbd18db9f578f26a026cdf1b..2984c391d069ff91ffbfb8f02c1a3d6f676ec74a 100644 (file)
@@ -6,7 +6,7 @@ import time
 from ceph_volume import process
 from ceph_volume.api import lvm
 from ceph_volume.util.system import get_file_contents
-from typing import Dict, List
+from typing import Dict, List, Any
 
 
 logger = logging.getLogger(__name__)
@@ -829,6 +829,7 @@ def get_devices(_sys_block_path='/sys/block', device=''):
         block_types.append('loop')
 
     for block in block_devs:
+        metadata: Dict[str, Any] = {}
         if block[2] == 'lvm':
             block[1] = lvm.get_lv_path_from_mapper(block[1])
         devname = os.path.basename(block[0])
@@ -838,7 +839,6 @@ def get_devices(_sys_block_path='/sys/block', device=''):
         sysdir = os.path.join(_sys_block_path, devname)
         if block[2] == 'part':
             sysdir = os.path.join(_sys_block_path, block[3], devname)
-        metadata = {}
 
         # If the device is ceph rbd it gets excluded
         if is_ceph_rbd(diskname):
@@ -903,7 +903,9 @@ def get_devices(_sys_block_path='/sys/block', device=''):
         metadata['size'] = float(size) * 512
         metadata['human_readable_size'] = human_readable_size(metadata['size'])
         metadata['path'] = diskname
+        metadata['devname'] = devname
         metadata['type'] = block[2]
+        metadata['parent'] = block[3]
 
         # some facts from udevadm
         p = udevadm_property(sysdir)