161 lines
4.7 KiB
Python
161 lines
4.7 KiB
Python
# 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.
|
|
|
|
|
|
import os.path
|
|
import shlex
|
|
import sys
|
|
|
|
from cliff import app
|
|
from cliff import commandmanager
|
|
from cliff import interactive
|
|
from oslo_config import cfg
|
|
from oslo_log import log
|
|
|
|
from kolla_kubernetes.common import file_utils
|
|
from kolla_kubernetes.common import utils
|
|
|
|
PROJECT = 'kolla_kubernetes'
|
|
VERSION = '1.0'
|
|
|
|
CONF = cfg.CONF
|
|
CONF.import_group('kolla', 'kolla_kubernetes.config')
|
|
CONF.import_group('kolla_kubernetes', 'kolla_kubernetes.config')
|
|
|
|
log.register_options(CONF)
|
|
log.set_defaults(
|
|
default_log_levels='requests.packages.urllib3.connectionpool=WARNING')
|
|
|
|
cli_opts = [
|
|
cfg.StrOpt('service-dir',
|
|
default=utils.env(
|
|
'KM_SERVICE_DIR', default=os.path.join(
|
|
file_utils.find_base_dir(), 'services')),
|
|
help='Directory with services, (Env: KM_SERVICE_DIR)'),
|
|
]
|
|
CONF.register_cli_opts(cli_opts)
|
|
|
|
|
|
class KollaKubernetesInteractiveApp(interactive.InteractiveApp):
|
|
def do_run(self, arg):
|
|
self.default(arg)
|
|
|
|
def do_help(self, arg):
|
|
line_parts = shlex.split(arg)
|
|
try:
|
|
self.command_manager.find_command(line_parts)
|
|
return self.default(self.parsed('help ' + arg))
|
|
except ValueError:
|
|
# There is a builtin cmd2 command
|
|
pass
|
|
return interactive.InteractiveApp.do_help(self, arg)
|
|
|
|
|
|
class KollaKubernetesShell(app.App):
|
|
def __init__(self):
|
|
super(KollaKubernetesShell, self).__init__(
|
|
description='Kolla-kubernetes command-line interface',
|
|
version=VERSION,
|
|
command_manager=commandmanager.CommandManager(
|
|
'kolla_kubernetes.cli'),
|
|
deferred_help=True,
|
|
interactive_app_factory=KollaKubernetesInteractiveApp
|
|
)
|
|
|
|
def configure_logging(self):
|
|
return
|
|
|
|
def initialize_app(self, argv):
|
|
self.options.service_dir = CONF.service_dir
|
|
|
|
def print_help(self):
|
|
outputs = []
|
|
max_len = 0
|
|
self.stdout.write('\nCommands :\n')
|
|
|
|
for name, ep in sorted(self.command_manager):
|
|
factory = ep.load()
|
|
cmd = factory(self, None)
|
|
one_liner = cmd.get_description().split('\n')[0]
|
|
outputs.append((name, one_liner))
|
|
max_len = max(len(name), max_len)
|
|
|
|
for name, one_liner in outputs:
|
|
self.stdout.write(' %s %s\n' % (name.ljust(max_len), one_liner))
|
|
|
|
|
|
def _separate_args(argv):
|
|
conf_opts = _config_opts_map()
|
|
config_args = []
|
|
command_args = argv[:]
|
|
while command_args:
|
|
nargs = conf_opts.get(command_args[0])
|
|
if nargs:
|
|
config_args.extend(command_args[:nargs])
|
|
command_args = command_args[nargs:]
|
|
else:
|
|
break
|
|
return config_args, command_args
|
|
|
|
|
|
def _config_opts_map():
|
|
opts = {'--help': 1, '-h': 1, '--config-dir': 2, '--config-file': 2,
|
|
'--version': 1}
|
|
for opt in CONF._all_cli_opts():
|
|
if opt[1]:
|
|
arg = '%s-%s' % (opt[1].name, opt[0].name)
|
|
else:
|
|
arg = opt[0].name
|
|
|
|
if isinstance(opt[0], cfg.BoolOpt):
|
|
nargs = 1
|
|
opts['--no%s' % arg] = 1
|
|
else:
|
|
nargs = 2
|
|
opts['--%s' % arg] = nargs
|
|
|
|
if opt[0].short:
|
|
opts['-%s' % opt[0].short] = nargs
|
|
|
|
for dep_opt in opt[0].deprecated_opts:
|
|
if getattr(dep_opt, 'group'):
|
|
opts['--%s-%s' % (dep_opt.group, dep_opt.name)] = nargs
|
|
else:
|
|
opts['--%s' % dep_opt.name] = nargs
|
|
|
|
return opts
|
|
|
|
|
|
def main(argv=sys.argv[1:]):
|
|
config_args, command_args = _separate_args(argv)
|
|
|
|
need_help = (['help'] == command_args or '-h' in config_args or
|
|
'--help' in config_args)
|
|
if need_help:
|
|
CONF([], project=PROJECT, version=VERSION)
|
|
CONF.print_help()
|
|
return KollaKubernetesShell().print_help()
|
|
|
|
CONF(config_args, project=PROJECT, version=VERSION)
|
|
log.setup(CONF, PROJECT, VERSION)
|
|
|
|
if '-d' in config_args or '--debug' in config_args:
|
|
command_args.insert(0, '--debug')
|
|
CONF.log_opt_values(
|
|
log.getLogger(PROJECT), log.INFO)
|
|
|
|
return KollaKubernetesShell().run(command_args)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main(sys.argv[1:]))
|