113 lines
4.0 KiB
Python
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
|