Revision cd415612 lib/cli.py
b/lib/cli.py | ||
---|---|---|
617 | 617 |
return utils.UnescapeAndSplit(value) |
618 | 618 |
|
619 | 619 |
|
620 |
def check_maybefloat(option, opt, value): # pylint: disable=W0613 |
|
621 |
"""Custom parser for float numbers which might be also defaults. |
|
622 |
|
|
623 |
""" |
|
624 |
value = value.lower() |
|
625 |
|
|
626 |
if value == constants.VALUE_DEFAULT: |
|
627 |
return value |
|
628 |
else: |
|
629 |
return float(value) |
|
630 |
|
|
631 |
|
|
620 | 632 |
# completion_suggestion is normally a list. Using numeric values not evaluating |
621 | 633 |
# to False for dynamic completion. |
622 | 634 |
(OPT_COMPL_MANY_NODES, |
... | ... | |
651 | 663 |
"unit", |
652 | 664 |
"bool", |
653 | 665 |
"list", |
666 |
"maybefloat", |
|
654 | 667 |
) |
655 | 668 |
TYPE_CHECKER = Option.TYPE_CHECKER.copy() |
656 | 669 |
TYPE_CHECKER["identkeyval"] = check_ident_key_val |
... | ... | |
658 | 671 |
TYPE_CHECKER["unit"] = check_unit |
659 | 672 |
TYPE_CHECKER["bool"] = check_bool |
660 | 673 |
TYPE_CHECKER["list"] = check_list |
674 |
TYPE_CHECKER["maybefloat"] = check_maybefloat |
|
661 | 675 |
|
662 | 676 |
|
663 | 677 |
# optparse.py sets make_option, so we do it for our own option class, too |
... | ... | |
844 | 858 |
|
845 | 859 |
IPOLICY_VCPU_RATIO = cli_option("--ipolicy-vcpu-ratio", |
846 | 860 |
dest="ipolicy_vcpu_ratio", |
847 |
type="float", default=None, |
|
861 |
type="maybefloat", default=None,
|
|
848 | 862 |
help="The maximum allowed vcpu-to-cpu ratio") |
849 | 863 |
|
850 | 864 |
IPOLICY_SPINDLE_RATIO = cli_option("--ipolicy-spindle-ratio", |
851 | 865 |
dest="ipolicy_spindle_ratio", |
852 |
type="float", default=None, |
|
866 |
type="maybefloat", default=None,
|
|
853 | 867 |
help=("The maximum allowed instances to" |
854 | 868 |
" spindle ratio")) |
855 | 869 |
|
... | ... | |
3423 | 3437 |
return choice |
3424 | 3438 |
|
3425 | 3439 |
|
3440 |
def _MaybeParseUnit(elements): |
|
3441 |
"""Parses and returns an array of potential values with units. |
|
3442 |
|
|
3443 |
""" |
|
3444 |
parsed = [] |
|
3445 |
for e in elements: |
|
3446 |
if e == constants.VALUE_DEFAULT: |
|
3447 |
parsed.append(e) |
|
3448 |
else: |
|
3449 |
parsed.append(utils.ParseUnit(e)) |
|
3450 |
return parsed |
|
3451 |
|
|
3452 |
|
|
3426 | 3453 |
def CreateIPolicyFromOpts(ispecs_mem_size=None, |
3427 | 3454 |
ispecs_cpu_count=None, |
3428 | 3455 |
ispecs_disk_count=None, |
... | ... | |
3443 | 3470 |
""" |
3444 | 3471 |
try: |
3445 | 3472 |
if ispecs_mem_size: |
3446 |
for k in ispecs_mem_size: |
|
3447 |
ispecs_mem_size[k] = utils.ParseUnit(ispecs_mem_size[k]) |
|
3473 |
ispecs_mem_size = _MaybeParseUnit(ispecs_mem_size) |
|
3448 | 3474 |
if ispecs_disk_size: |
3449 |
for k in ispecs_disk_size: |
|
3450 |
ispecs_disk_size[k] = utils.ParseUnit(ispecs_disk_size[k]) |
|
3475 |
ispecs_disk_size = _MaybeParseUnit(ispecs_disk_size) |
|
3451 | 3476 |
except (TypeError, ValueError, errors.UnitParseError), err: |
3452 | 3477 |
raise errors.OpPrereqError("Invalid disk (%s) or memory (%s) size" |
3453 | 3478 |
" in policy: %s" % |
Also available in: Unified diff