python-fuelclient/fuelclient/main.py

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)