bc8943c8cc
Closes-Bug: #1563270 Change-Id: I987d846f1a86ecee1fcfb0f99877563a10481478
99 lines
3.1 KiB
Python
99 lines
3.1 KiB
Python
# Copyright (c) 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 os
|
|
|
|
from oslo_config import cfg
|
|
from oslo_log import log as logging
|
|
from paste import deploy
|
|
|
|
from murano.common.i18n import _
|
|
|
|
CONF = cfg.CONF
|
|
|
|
|
|
def _get_deployment_flavor():
|
|
"""Retrieve the paste_deploy.flavor config item
|
|
|
|
Retrieve the paste_deploy.flavor config item, formatted appropriately
|
|
for appending to the application name.
|
|
"""
|
|
flavor = CONF.paste_deploy.flavor
|
|
return '' if not flavor else ('-' + flavor)
|
|
|
|
|
|
def _get_paste_config_path():
|
|
paste_suffix = '-paste.ini'
|
|
conf_suffix = '.conf'
|
|
if CONF.config_file:
|
|
# Assume paste config is in a paste.ini file corresponding
|
|
# to the last config file
|
|
path = CONF.config_file[-1].replace(conf_suffix, paste_suffix)
|
|
else:
|
|
path = CONF.prog + '-paste.ini'
|
|
return CONF.find_file(os.path.basename(path))
|
|
|
|
|
|
def _get_deployment_config_file():
|
|
"""Retrieve the deployment_config_file config item
|
|
|
|
Retrieve the deployment_config_file config item, formatted as an
|
|
absolute pathname.
|
|
"""
|
|
path = CONF.paste_deploy.config_file
|
|
if not path:
|
|
path = _get_paste_config_path()
|
|
if not path:
|
|
msg = _("Unable to locate paste config file for %s.") % CONF.prog
|
|
raise RuntimeError(msg)
|
|
return os.path.abspath(path)
|
|
|
|
|
|
def load_paste_app(app_name=None):
|
|
"""Builds and returns a WSGI app from a paste config file.
|
|
|
|
We assume the last config file specified in the supplied ConfigOpts
|
|
object is the paste config file.
|
|
|
|
:param app_name: name of the application to load
|
|
|
|
:raises RuntimeError when config file cannot be located or application
|
|
cannot be loaded from config file
|
|
"""
|
|
if app_name is None:
|
|
app_name = CONF.prog
|
|
|
|
# append the deployment flavor to the application name,
|
|
# in order to identify the appropriate paste pipeline
|
|
app_name += _get_deployment_flavor()
|
|
|
|
conf_file = _get_deployment_config_file()
|
|
|
|
try:
|
|
logger = logging.getLogger(__name__)
|
|
logger.debug("Loading {app_name} from {conf_file}".format(
|
|
conf_file=conf_file, app_name=app_name))
|
|
|
|
app = deploy.loadapp("config:%s" % conf_file, name=app_name)
|
|
|
|
return app
|
|
except (LookupError, ImportError) as e:
|
|
msg = _("Unable to load %(app_name)s from configuration file"
|
|
" %(conf_file)s. \nGot: %(e)r") % {'conf_file': conf_file,
|
|
'app_name': app_name,
|
|
'e': e}
|
|
logger.error(msg)
|
|
raise RuntimeError(msg)
|