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