From f67732cd9fb11830cc134deaa3ec7ebc107fa1fe Mon Sep 17 00:00:00 2001 From: Alfredo Deza Date: Thu, 23 Aug 2018 09:14:08 -0400 Subject: [PATCH] ceph-volume lvm.batch add new strategy validators for LVM devices Signed-off-by: Alfredo Deza --- .../devices/lvm/strategies/validators.py | 37 ++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py b/src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py index aa618f58c8a83..06c5ebeaf61e3 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/strategies/validators.py @@ -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())) -- 2.39.5