]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume: improve mpath devices support
authorGuillaume Abrioux <gabrioux@redhat.com>
Tue, 14 Dec 2021 08:57:10 +0000 (09:57 +0100)
committerGuillaume Abrioux <gabrioux@redhat.com>
Mon, 14 Feb 2022 14:01:07 +0000 (15:01 +0100)
ee8887f4c0ff4f91117f31b621b95c8d08019130 was intended for adding
mpath devices support in ceph-volume but it has missed the lvm batch scenario.
This also fixes the zapping of mpath devices prepared with `ceph-volume raw`

Fixes: https://tracker.ceph.com/issues/52908
Signed-off-by: Guillaume Abrioux <gabrioux@redhat.com>
(cherry picked from commit 601ff7ed0a3ba5172b6bd886ca8ba2bd4d9e655a)

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

index 20023a27c901143213b15e2231279b58963d4a4e..b81b7b8b1e9b19de96a099e2cfb3daf09d8f7864 100644 (file)
@@ -267,7 +267,7 @@ class Zap(object):
 
         for device in devices:
             mlogger.info("Zapping: %s", device.abspath)
-            if device.is_mapper:
+            if device.is_mapper and not device.is_mpath:
                 terminal.error("Refusing to zap the mapper device: {}".format(device))
                 raise SystemExit(1)
             if device.is_lvm_member:
index 010aad65d2a0d0d570df0b1983e2b0428b388f02..958872ba3563bc7ea917fa0f0426bea401dea7b8 100644 (file)
@@ -365,6 +365,17 @@ class Device(object):
     def is_mapper(self):
         return self.path.startswith(('/dev/mapper', '/dev/dm-'))
 
+    @property
+    def device_type(self):
+        if self.disk_api:
+            return self.disk_api['TYPE']
+        elif self.blkid_api:
+            return self.blkid_api['TYPE']
+
+    @property
+    def is_mpath(self):
+        return self.device_type == 'mpath'
+
     @property
     def is_lv(self):
         return self.lv_api is not None
@@ -385,10 +396,7 @@ class Device(object):
         elif self.blkid_api:
             api = self.blkid_api
         if api:
-            is_device = api['TYPE'] == 'device'
-            is_disk = api['TYPE'] == 'disk'
-            if is_device or is_disk:
-                return True
+            return self.device_type in ['disk', 'device', 'mpath']
         return False
 
     @property