anvil/devstack/opts.py
2012-03-15 23:10:15 -07:00

113 lines
4.0 KiB
Python

# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright (C) 2012 Yahoo! Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from optparse import IndentedHelpFormatter
from optparse import OptionParser, OptionGroup
from devstack import log as logging
from devstack import settings
from devstack import version
HELP_WIDTH = 80
LOG = logging.getLogger("devstack.opts")
def _format_list(in_list):
sorted_list = sorted(in_list)
return "[" + ", ".join(sorted_list) + "]"
def parse():
version_str = "%prog v" + version.version_string()
help_formatter = IndentedHelpFormatter(width=HELP_WIDTH)
parser = OptionParser(version=version_str, formatter=help_formatter)
# Root options
parser.add_option("-v", "--verbose",
action="append_const",
const=1,
dest="verbosity",
default=[1],
help="increase the verbose level")
parser.add_option("--dryrun",
action="store_true",
dest="dryrun",
default=False,
help=("perform ACTION but do not actually run any of the commands"
" that would normally complete ACTION: (default: %default)"))
# Install/start/stop/uninstall specific options
base_group = OptionGroup(parser, "Install & uninstall & start & stop specific options")
base_group.add_option("-p", "--persona",
action="store",
type="string",
dest="persona_fn",
metavar="FILE",
help="required persona yaml file to apply")
base_group.add_option("-a", "--action",
action="store",
type="string",
dest="action",
metavar="ACTION",
help="required action to perform: %s" % (_format_list(settings.ACTIONS)))
base_group.add_option("-d", "--directory",
action="store",
type="string",
dest="dir",
metavar="DIR",
help=("empty root DIR for install or "
"DIR with existing components for start/stop/uninstall"))
base_group.add_option("--no-prompt-passwords",
action="store_false",
dest="prompt_for_passwords",
default=True,
help="do not prompt the user for passwords",
)
parser.add_option_group(base_group)
# Uninstall and stop options
stop_un_group = OptionGroup(parser, "Uninstall & stop specific options")
stop_un_group.add_option("-n", "--no-force",
action="store_true",
dest="force",
help="stop the continuation of ACTION if basic errors occur (default: %default)",
default=False)
parser.add_option_group(stop_un_group)
un_group = OptionGroup(parser, "Uninstall specific options")
un_group.add_option("-k", "--keep-old",
action="store_true",
dest="keep_old",
help="uninstall will keep as much of the old install as it can (default: %default)",
default=False)
parser.add_option_group(un_group)
# Extract only what we care about
(options, args) = parser.parse_args()
output = dict()
output['dir'] = options.dir or ""
output['dryrun'] = options.dryrun or False
output['action'] = options.action or ""
output['force'] = not options.force
output['keep_old'] = options.keep_old
output['extras'] = args
output['persona_fn'] = options.persona_fn
output['verbosity'] = len(options.verbosity)
output['prompt_for_passwords'] = options.prompt_for_passwords
return output