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" %
|