]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: fix zap_partitions() in devices.lvm.zap 55658/head
authorGuillaume Abrioux <gabrioux@ibm.com>
Tue, 30 Jan 2024 14:17:35 +0000 (14:17 +0000)
committerGuillaume Abrioux <gabrioux@ibm.com>
Mon, 19 Feb 2024 21:12:41 +0000 (22:12 +0100)
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>
src/ceph-volume/ceph_volume/devices/lvm/zap.py
src/ceph-volume/ceph_volume/util/disk.py

index 94751f23f0b92272164f2b6a49ca6bda90f1d348..08ca4315e605105ae83cb37d4a632b786a87368b 100644 (file)
@@ -202,8 +202,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 265ffd87d1d5677d958c73a6b2c8c2bea6fef92a..8f03f8a0c62d3a7f96f7e70f080f10ab612836ec 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__)
@@ -825,6 +825,7 @@ def get_devices(_sys_block_path='/sys/block', device=''):
         block_types.append('loop')
 
     for block in block_devs:
+        metadata: Dict[str, Any] = {}
         devname = os.path.basename(block[0])
         diskname = block[1]
         if block[2] not in block_types:
@@ -832,7 +833,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):
@@ -897,7 +897,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)