Revision e7b61bb0 lib/cli.py

b/lib/cli.py
457 457
  return _SplitKeyVal(opt, value)
458 458

  
459 459

  
460
def check_bool(option, opt, value): # pylint: disable-msg=W0613
461
  """Custom parser for yes/no options.
462

  
463
  This will store the parsed value as either True or False.
464

  
465
  """
466
  value = value.lower()
467
  if value == constants.VALUE_FALSE or value == "no":
468
    return False
469
  elif value == constants.VALUE_TRUE or value == "yes":
470
    return True
471
  else:
472
    raise errors.ParameterError("Invalid boolean value '%s'" % value)
473

  
474

  
460 475
# completion_suggestion is normally a list. Using numeric values not evaluating
461 476
# to False for dynamic completion.
462 477
(OPT_COMPL_MANY_NODES,
......
487 502
    "identkeyval",
488 503
    "keyval",
489 504
    "unit",
505
    "bool",
490 506
    )
491 507
  TYPE_CHECKER = Option.TYPE_CHECKER.copy()
492 508
  TYPE_CHECKER["identkeyval"] = check_ident_key_val
493 509
  TYPE_CHECKER["keyval"] = check_key_val
494 510
  TYPE_CHECKER["unit"] = check_unit
511
  TYPE_CHECKER["bool"] = check_bool
495 512

  
496 513

  
497 514
# optparse.py sets make_option, so we do it for our own option class, too
498 515
cli_option = CliOption
499 516

  
500 517

  
501
_YESNO = ("yes", "no")
502 518
_YORNO = "yes|no"
503 519

  
504 520
DEBUG_OPT = cli_option("-d", "--debug", default=0, action="count",
......
759 775

  
760 776

  
761 777
MC_OPT = cli_option("-C", "--master-candidate", dest="master_candidate",
762
                    choices=_YESNO, default=None, metavar=_YORNO,
778
                    type="bool", default=None, metavar=_YORNO,
763 779
                    help="Set the master_candidate flag on the node")
764 780

  
765 781
OFFLINE_OPT = cli_option("-O", "--offline", dest="offline", metavar=_YORNO,
766
                         choices=_YESNO, default=None,
782
                         type="bool", default=None,
767 783
                         help="Set the offline flag on the node")
768 784

  
769 785
DRAINED_OPT = cli_option("-D", "--drained", dest="drained", metavar=_YORNO,
770
                         choices=_YESNO, default=None,
786
                         type="bool", default=None,
771 787
                         help="Set the drained flag on the node")
772 788

  
773 789
ALLOCATABLE_OPT = cli_option("--allocatable", dest="allocatable",
774
                             choices=_YESNO, default=None, metavar=_YORNO,
790
                             type="bool", default=None, metavar=_YORNO,
775 791
                             help="Set the allocatable flag on a volume")
776 792

  
777 793
NOLVM_STORAGE_OPT = cli_option("--no-lvm-storage", dest="lvm_storage",

Also available in: Unified diff