#
#
-# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 Google Inc.
+# Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
import errno
import itertools
import shlex
-import optparse
from cStringIO import StringIO
from ganeti import utils
from ganeti import netutils
from ganeti import qlang
-from optparse import (TitledHelpFormatter,
+from optparse import (OptionParser, TitledHelpFormatter,
Option, OptionValueError)
"NONICS_OPT",
"NONLIVE_OPT",
"NONPLUS1_OPT",
+ "NORUNTIME_CHGS_OPT",
"NOSHUTDOWN_OPT",
"NOSTART_OPT",
"NOSSH_KEYCHECK_OPT",
"SPECS_DISK_SIZE_OPT",
"SPECS_MEM_SIZE_OPT",
"SPECS_NIC_COUNT_OPT",
- "SPECS_DISK_TEMPLATES",
+ "IPOLICY_DISK_TEMPLATES",
+ "IPOLICY_VCPU_RATIO",
"SPICE_CACERT_OPT",
"SPICE_CERT_OPT",
"SRC_DIR_OPT",
msg = "Cannot pass options when removing parameter groups: %s" % value
raise errors.ParameterError(msg)
retval = (ident[len(NO_PREFIX):], False)
- elif ident.startswith(UN_PREFIX):
+ elif (ident.startswith(UN_PREFIX) and
+ (len(ident) <= len(UN_PREFIX) or
+ not ident[len(UN_PREFIX)][0].isdigit())):
if rest:
msg = "Cannot pass options when removing parameter groups: %s" % value
raise errors.ParameterError(msg)
help="Do not install the OS (will"
" enable no-start)")
+NORUNTIME_CHGS_OPT = cli_option("--no-runtime-changes",
+ dest="allow_runtime_chgs",
+ default=True, action="store_false",
+ help="Don't allow runtime changes")
+
BACKEND_OPT = cli_option("-B", "--backend-parameters", dest="beparams",
type="keyval", default={},
help="Backend parameters")
type="keyval", default={},
help="NIC count specs: min, max, std")
-SPECS_DISK_TEMPLATES = cli_option("--specs-disk-templates",
- dest="ispecs_disk_templates",
- type="list", default=None,
- help="Comma-separated list of"
- " enabled disk templates")
+IPOLICY_DISK_TEMPLATES = cli_option("--ipolicy-disk-templates",
+ dest="ipolicy_disk_templates",
+ type="list", default=None,
+ help="Comma-separated list of"
+ " enabled disk templates")
+
+IPOLICY_VCPU_RATIO = cli_option("--ipolicy-vcpu-ratio",
+ dest="ipolicy_vcpu_ratio",
+ type="float", default=None,
+ help="The maximum allowed vcpu-to-cpu ratio")
HYPERVISOR_OPT = cli_option("-H", "--hypervisor-parameters", dest="hypervisor",
help="Hypervisor and hypervisor options, in the"
SPECS_DISK_SIZE_OPT,
SPECS_MEM_SIZE_OPT,
SPECS_NIC_COUNT_OPT,
- SPECS_DISK_TEMPLATES,
+ IPOLICY_DISK_TEMPLATES,
+ IPOLICY_VCPU_RATIO,
]
argv = utils.InsertAtPos(argv, 1, shlex.split(env_args))
func, args_def, parser_opts, usage, description = commands[cmd]
- parser = CustomOptionParser(option_list=parser_opts + COMMON_OPTS,
- description=description,
- formatter=TitledHelpFormatter(),
- usage="%%prog %s %s" % (cmd, usage))
+ parser = OptionParser(option_list=parser_opts + COMMON_OPTS,
+ description=description,
+ formatter=TitledHelpFormatter(),
+ usage="%%prog %s %s" % (cmd, usage))
parser.disable_interspersed_args()
options, args = parser.parse_args(args=argv[1:])
return func, options, args
-class CustomOptionParser(optparse.OptionParser):
- def _match_long_opt(self, opt):
- """Override C{OptionParser}'s function for matching long options.
-
- The default implementation does prefix-based abbreviation matching. We
- disable such behaviour as it can can lead to confusing conflicts (e.g.
- C{--force} and C{--force-multi}).
-
- """
- if opt in self._long_opt:
- return opt
- else:
- raise optparse.BadOptionError(opt)
-
-
def _CheckArguments(cmd, args_def, args):
"""Verifies the arguments using the argument definition.
"""
# save the program name and the entire command line for later logging
if sys.argv:
- binary = os.path.basename(sys.argv[0]) or sys.argv[0]
+ binary = os.path.basename(sys.argv[0])
+ if not binary:
+ binary = sys.argv[0]
+
if len(sys.argv) >= 2:
- binary += " " + sys.argv[1]
- old_cmdline = " ".join(sys.argv[2:])
+ logname = utils.ShellQuoteArgs([binary, sys.argv[1]])
else:
- old_cmdline = ""
+ logname = binary
+
+ cmdline = utils.ShellQuoteArgs([binary] + sys.argv[1:])
else:
binary = "<unknown program>"
- old_cmdline = ""
+ cmdline = "<unknown>"
if aliases is None:
aliases = {}
for key, val in override.iteritems():
setattr(options, key, val)
- utils.SetupLogging(constants.LOG_COMMANDS, binary, debug=options.debug,
+ utils.SetupLogging(constants.LOG_COMMANDS, logname, debug=options.debug,
stderr_logging=True)
- if old_cmdline:
- logging.info("run with arguments '%s'", old_cmdline)
- else:
- logging.info("run with no arguments")
+ logging.info("Command line: %s", cmdline)
try:
result = func(options, args)