From 35e1139c41cb3eed8edf4e04b3b13e1c86bf0e74 Mon Sep 17 00:00:00 2001 From: Jan Fajerski Date: Mon, 27 Apr 2020 11:34:19 +0200 Subject: [PATCH] ceph-volume: Device - add vg_free property This new property returns the free space in any VGs present. If no VGs are on the device we project how much space a VG will have. Signed-off-by: Jan Fajerski (cherry picked from commit b34f130f30daeca034b6b2365cc5a832ba8faa56) --- src/ceph-volume/ceph_volume/util/device.py | 31 +++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/ceph-volume/ceph_volume/util/device.py b/src/ceph-volume/ceph_volume/util/device.py index 572e2afaea4cf..f5e418ad76314 100644 --- a/src/ceph-volume/ceph_volume/util/device.py +++ b/src/ceph-volume/ceph_volume/util/device.py @@ -421,10 +421,39 @@ class Device(object): @property def vg_free_percent(self): if self.vgs: - return [vg.vg_free_count / vg.vg_extent_count for vg in self.vgs] + return [vg.free_percent for vg in self.vgs] else: return [1] + @property + def vg_size(self): + if self.vgs: + return [vg.size for vg in self.vgs] + else: + # TODO fix this...we can probably get rid of vg_free + return self.vg_free + + @property + def vg_free(self): + ''' + Returns the free space in all VGs on this device. If no VGs are + present, returns the disk size. + ''' + if self.vgs: + return [vg.free for vg in self.vgs] + else: + # We could also query 'lvmconfig + # --typeconfig full' and use allocations -> physical_extent_size + # value to project the space for a vg + # assuming 4M extents here + extent_size = 4194304 + vg_free = int(self.size / extent_size) * extent_size + if self.size % 4194304 == 0: + # If the extent size divides size exactly, deduct on extent for + # LVM metadata + vg_free -= extent_size + return [vg_free] + def _check_generic_reject_reasons(self): reasons = [ ('removable', 1, 'removable'), -- 2.39.5