96 lines
3.3 KiB
Python
96 lines
3.3 KiB
Python
# Copyright 2015 Mirantis, Inc.
|
|
#
|
|
# 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 logging
|
|
import sys
|
|
|
|
from cliff import app
|
|
from cliff.commandmanager import CommandManager
|
|
|
|
from fuelclient.cli import error
|
|
from fuelclient import consts
|
|
from fuelclient import fuelclient_settings
|
|
from fuelclient import utils
|
|
|
|
|
|
LOG = logging.getLogger(__name__)
|
|
|
|
|
|
class FuelClient(app.App):
|
|
"""Main cliff application class.
|
|
|
|
Performs initialization of the command manager and
|
|
configuration of basic engines.
|
|
|
|
"""
|
|
_is_advanced_mode = None
|
|
|
|
@property
|
|
def is_advanced_mode(self):
|
|
if self._is_advanced_mode is None:
|
|
self._is_advanced_mode = False
|
|
settings = fuelclient_settings.get_settings()
|
|
try:
|
|
if settings.MODE == consts.CLIENT_MODES.advanced:
|
|
self._is_advanced_mode = True
|
|
except error.SettingsException:
|
|
pass
|
|
return self._is_advanced_mode
|
|
|
|
def build_option_parser(self, description, version, argparse_kwargs=None):
|
|
"""Overrides default options for backwards compatibility."""
|
|
|
|
p_inst = super(FuelClient, self)
|
|
parser = p_inst.build_option_parser(description=description,
|
|
version=version,
|
|
argparse_kwargs=argparse_kwargs)
|
|
|
|
utils.add_os_cli_parameters(parser)
|
|
|
|
return parser
|
|
|
|
def configure_logging(self):
|
|
super(FuelClient, self).configure_logging()
|
|
|
|
# there is issue with management url processing by keystone client
|
|
# code in our workflow, so we have to mute appropriate keystone
|
|
# loggers in order to get rid from unprocessable errors
|
|
logging.getLogger('keystoneclient.httpclient').setLevel(logging.ERROR)
|
|
|
|
# increase level of loggin for urllib3 to avoid of displaying
|
|
# of useless messages. List of logger names is needed for
|
|
# consistency on different execution environments that could have
|
|
# installed requests packages (which is used urllib3) of different
|
|
# versions in turn
|
|
for logger_name in ('requests.packages.urllib3.connectionpool',
|
|
'urllib3.connectionpool'):
|
|
logging.getLogger(logger_name).setLevel(logging.WARNING)
|
|
|
|
def run(self, argv):
|
|
options, _ = self.parser.parse_known_args(argv)
|
|
|
|
settings = fuelclient_settings.get_settings()
|
|
settings.update_from_command_line_options(options)
|
|
|
|
return super(FuelClient, self).run(argv)
|
|
|
|
|
|
def main(argv=sys.argv[1:]):
|
|
fuelclient_app = FuelClient(
|
|
description='Command line interface and Python API wrapper for Fuel.',
|
|
version='10.0.0',
|
|
command_manager=CommandManager('fuelclient', convert_underscores=True)
|
|
)
|
|
return fuelclient_app.run(argv)
|