]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph-volume lvm.batch add new strategy validators for LVM devices
authorAlfredo Deza <adeza@redhat.com>
Thu, 23 Aug 2018 13:14:08 +0000 (09:14 -0400)
committerAndrew Schoen <aschoen@redhat.com>
Wed, 29 Aug 2018 18:42:19 +0000 (13:42 -0500)
Signed-off-by: Alfredo Deza <adeza@redhat.com>
(cherry picked from commit f67732cd9fb11830cc134deaa3ec7ebc107fa1fe)

src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py

index aa618f58c8a839655b74c71d83463ceb2be9347d..06c5ebeaf61e3121d03e4ae0fff1f3799df4831b 100644 (file)
@@ -1,4 +1,5 @@
 from ceph_volume.util import disk
+from ceph_volume.api import lvm
 
 
 def minimum_device_size(devices):
@@ -8,6 +9,40 @@ def minimum_device_size(devices):
     """
     msg = 'Unable to use device smaller than 5GB: %s (%s)'
     for device in devices:
-        device_size = disk.Size(b=device['size'])
+        device_size = disk.Size(b=device.sys_api['size'])
         if device_size < disk.Size(gb=5):
             raise RuntimeError(msg % (device, device_size))
+
+
+def no_lvm_membership(devices):
+    """
+    Do not allow devices that are part of LVM
+    """
+    msg = 'Unable to use device, already a member of LVM: %s'
+    for device in devices:
+        if device.is_lvm_member:
+            raise RuntimeError(msg % device.abspath)
+
+
+def has_common_vg(ssd_devices):
+    """
+    Ensure that devices have a common VG between them
+    """
+    msg = 'Could not find a common VG between devices: %s'
+    system_vgs = lvm.VolumeGroups()
+    ssd_vgs = {}
+
+    for ssd_device in ssd_devices:
+        for pv in ssd_device.pvs_api:
+            vg = system_vgs.get(vg_name=pv.vg_name)
+            if not vg:
+                continue
+            try:
+                ssd_vgs[vg.name].append(ssd_device.abspath)
+            except KeyError:
+                ssd_vgs[vg.name] = [ssd_device.abspath]
+    # len of 1 means they all have a common vg, and len of 0 means that these
+    # are blank
+    if len(ssd_vgs) <= 1:
+        return
+    raise RuntimeError(msg % ', '.join(ssd_vgs.keys()))