From: Jonas Pfefferle Date: Thu, 3 Jun 2021 07:44:16 +0000 (+0200) Subject: ceph-volume: data_allocate_fraction: new validation class X-Git-Tag: v16.2.15~63^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=f8d641c508fd4faa19eee8eb12eafc810610e001;p=ceph.git ceph-volume: data_allocate_fraction: new validation class Move validator for data_allocate_fraction to utils.arg_validators Signed-off-by: Jonas Pfefferle (cherry picked from commit 287ab0e04980acff2edff3d142bd96a9f8ebb0d0) Conflicts: src/ceph-volume/ceph_volume/util/arg_validators.py --- diff --git a/src/ceph-volume/ceph_volume/devices/lvm/batch.py b/src/ceph-volume/ceph_volume/devices/lvm/batch.py index 44e0fc73c99..d867fe2d87e 100644 --- a/src/ceph-volume/ceph_volume/devices/lvm/batch.py +++ b/src/ceph-volume/ceph_volume/devices/lvm/batch.py @@ -1,7 +1,6 @@ import argparse from collections import namedtuple import json -import math import logging from textwrap import dedent from ceph_volume import terminal, decorators @@ -298,14 +297,9 @@ class Batch(object): ' if more slots then osds-per-device are specified, slots' 'will stay unoccupied'), ) - def data_allocate_fraction(pct): - pct_float = float(pct) - if math.isnan(pct_float) or pct_float == 0.0 or pct_float < 0.0 or pct_float > 1.0: - raise argparse.ArgumentTypeError('Percentage not in (0,1.0]') - return pct_float parser.add_argument( '--data-allocate-fraction', - type=data_allocate_fraction, + type=arg_validators.ValidFraction(), help='Fraction to allocate from data device (0,1.0]', default=1.0 ) diff --git a/src/ceph-volume/ceph_volume/util/arg_validators.py b/src/ceph-volume/ceph_volume/util/arg_validators.py index 270c8a64879..ae62ace256f 100644 --- a/src/ceph-volume/ceph_volume/util/arg_validators.py +++ b/src/ceph-volume/ceph_volume/util/arg_validators.py @@ -1,5 +1,6 @@ import argparse import os +import math from ceph_volume import terminal, decorators, process from ceph_volume.util.device import Device from ceph_volume.util import disk @@ -220,3 +221,14 @@ def exclude_group_options(parser, groups, argv=None): terminal.warning(msg) last_group = group_name last_flag = flag + +class ValidFraction(object): + """ + Validate fraction is in (0, 1.0] + """ + + def __call__(self, fraction): + fraction_float = float(fraction) + if math.isnan(fraction_float) or fraction_float <= 0.0 or fraction_float > 1.0: + raise argparse.ArgumentTypeError('Fraction not in (0,1.0]') + return fraction_float