Use pbr wsgi_scripts to build aodh-api

Change-Id: Iefd6f4d9f76c69ed9b49483e1feda0b7dbe2cb81
This commit is contained in:
Julien Danjou 2016-04-05 19:49:22 +02:00
parent 942e0d8d9b
commit 67b607fdb6
9 changed files with 10 additions and 94 deletions

View File

@ -17,14 +17,6 @@ from oslo_config import cfg
# Register options for the service # Register options for the service
OPTS = [ OPTS = [
cfg.PortOpt('port',
default=8042,
help='The port for the aodh API server.',
),
cfg.StrOpt('host',
default='0.0.0.0',
help='The listen IP for the aodh API server.',
),
cfg.StrOpt('paste_config', cfg.StrOpt('paste_config',
default="api_paste.ini", default="api_paste.ini",
help="Configuration file for WSGI definition of API."), help="Configuration file for WSGI definition of API."),

View File

@ -1,6 +1,6 @@
# #
# Copyright 2012 New Dream Network, LLC (DreamHost) # Copyright 2012 New Dream Network, LLC (DreamHost)
# Copyright 2015 Red Hat, Inc. # Copyright 2015-2016 Red Hat, Inc.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may # 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 # not use this file except in compliance with the License. You may obtain
@ -20,12 +20,9 @@ from oslo_config import cfg
from oslo_log import log from oslo_log import log
from paste import deploy from paste import deploy
import pecan import pecan
from werkzeug import serving
from aodh.api import hooks from aodh.api import hooks
from aodh.api import middleware from aodh.api import middleware
from aodh.i18n import _
from aodh.i18n import _LW
from aodh import service from aodh import service
from aodh import storage from aodh import storage
@ -51,16 +48,9 @@ def setup_app(pecan_config=PECAN_CONFIG, conf=None):
pecan.configuration.set_config(dict(pecan_config), overwrite=True) pecan.configuration.set_config(dict(pecan_config), overwrite=True)
# NOTE(sileht): pecan debug won't work in multi-process environment
pecan_debug = conf.api.pecan_debug
if conf.api.workers != 1 and pecan_debug:
pecan_debug = False
LOG.warning(_LW('pecan_debug cannot be enabled, if workers is > 1, '
'the value is overrided with False'))
app = pecan.make_app( app = pecan.make_app(
pecan_config['app']['root'], pecan_config['app']['root'],
debug=pecan_debug, debug=conf.api.pecan_debug,
hooks=app_hooks, hooks=app_hooks,
wrap_app=middleware.ParsableErrorMiddleware, wrap_app=middleware.ParsableErrorMiddleware,
guess_content_type_from_ext=False guess_content_type_from_ext=False
@ -84,25 +74,8 @@ def load_app(conf):
return deploy.loadapp("config:" + cfg_file) return deploy.loadapp("config:" + cfg_file)
def build_server(conf): def build_wsgi_app(argv=None):
app = load_app(conf) return load_app(service.prepare_service(argv=argv))
# Create the WSGI server and start it
host, port = conf.api.host, conf.api.port
LOG.info(_('Starting server in PID %s') % os.getpid())
LOG.info(_("Configuration:"))
conf.log_opt_values(LOG, log.INFO)
if host == '0.0.0.0':
LOG.info(_(
'serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s')
% ({'sport': port, 'vport': port}))
else:
LOG.info(_("serving on http://%(host)s:%(port)s") % (
{'host': host, 'port': port}))
serving.run_simple(host, port,
app, processes=conf.api.workers)
def _app(): def _app():

View File

@ -19,9 +19,5 @@
See http://pecan.readthedocs.org/en/latest/deployment.html for details. See http://pecan.readthedocs.org/en/latest/deployment.html for details.
""" """
from aodh.api import app from aodh.api import app
from aodh import service
application = app.build_wsgi_app(argv=[])
# Initialize the oslo configuration library and logging
conf = service.prepare_service([])
application = app.load_app(conf)

View File

@ -1,24 +0,0 @@
# -*- encoding: utf-8 -*-
#
# Copyright 2014 OpenStack Foundation
# Copyright 2015 Red Hat, 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.
from aodh.api import app
from aodh import service
def main():
conf = service.prepare_service()
app.build_server(conf)

View File

@ -35,25 +35,3 @@ class TestApp(base.BaseTestCase):
ff.return_value = None ff.return_value = None
self.assertRaises(cfg.ConfigFilesNotFoundError, self.assertRaises(cfg.ConfigFilesNotFoundError,
app.load_app, self.CONF) app.load_app, self.CONF)
@mock.patch('aodh.storage.get_connection_from_config',
mock.MagicMock())
@mock.patch('pecan.make_app')
def test_pecan_debug(self, mocked):
def _check_pecan_debug(g_debug, p_debug, expected, workers=1):
self.CONF.set_override('debug', g_debug)
if p_debug is not None:
self.CONF.set_override('pecan_debug', p_debug, group='api')
self.CONF.set_override('workers', workers, 'api')
app.setup_app(conf=self.CONF)
args, kwargs = mocked.call_args
self.assertEqual(expected, kwargs.get('debug'))
_check_pecan_debug(g_debug=False, p_debug=None, expected=False)
_check_pecan_debug(g_debug=True, p_debug=None, expected=False)
_check_pecan_debug(g_debug=True, p_debug=False, expected=False)
_check_pecan_debug(g_debug=False, p_debug=True, expected=True)
_check_pecan_debug(g_debug=True, p_debug=None, expected=False,
workers=5)
_check_pecan_debug(g_debug=False, p_debug=True, expected=False,
workers=5)

View File

@ -23,7 +23,7 @@ fi
if [ -z "$AODH_DEPLOY" ]; then if [ -z "$AODH_DEPLOY" ]; then
# Default # Default
AODH_DEPLOY=werkzeug AODH_DEPLOY=simple
# Fallback to common wsgi devstack configuration # Fallback to common wsgi devstack configuration
if [ "$ENABLE_HTTPD_MOD_WSGI_SERVICES" == "True" ]; then if [ "$ENABLE_HTTPD_MOD_WSGI_SERVICES" == "True" ]; then

View File

@ -23,7 +23,7 @@ AODH_SERVICE_PORT=${AODH_SERVICE_PORT:-8042}
# AODH_DEPLOY defines how Aodh is deployed, allowed values: # AODH_DEPLOY defines how Aodh is deployed, allowed values:
# - mod_wsgi : Run Aodh under Apache HTTPd mod_wsgi # - mod_wsgi : Run Aodh under Apache HTTPd mod_wsgi
# - werkzeug : Run aodh-api # - simple : Run aodh-api
# - uwsgi : Run Aodh under uwsgi # - uwsgi : Run Aodh under uwsgi
# - <empty>: Fallback to AODH_USE_MOD_WSGI or ENABLE_HTTPD_MOD_WSGI_SERVICES # - <empty>: Fallback to AODH_USE_MOD_WSGI or ENABLE_HTTPD_MOD_WSGI_SERVICES
AODH_DEPLOY=${AODH_DEPLOY} AODH_DEPLOY=${AODH_DEPLOY}

View File

@ -30,6 +30,5 @@ requests>=2.5.2
six>=1.9.0 six>=1.9.0
stevedore>=1.5.0 # Apache-2.0 stevedore>=1.5.0 # Apache-2.0
tooz>=1.28.0 # Apache-2.0 tooz>=1.28.0 # Apache-2.0
Werkzeug>=0.7 # BSD License
WebOb>=1.2.3 WebOb>=1.2.3
WSME>=0.8 WSME>=0.8

View File

@ -105,8 +105,10 @@ aodh.notifier =
trust+https = aodh.notifier.trust:TrustRestAlarmNotifier trust+https = aodh.notifier.trust:TrustRestAlarmNotifier
zaqar = aodh.notifier.zaqar:ZaqarAlarmNotifier zaqar = aodh.notifier.zaqar:ZaqarAlarmNotifier
wsgi_scripts =
aodh-api = aodh.api.app:build_wsgi_app
console_scripts = console_scripts =
aodh-api = aodh.cmd.api:main
aodh-dbsync = aodh.cmd.storage:dbsync aodh-dbsync = aodh.cmd.storage:dbsync
aodh-expirer = aodh.cmd.storage:expirer aodh-expirer = aodh.cmd.storage:expirer
aodh-evaluator = aodh.cmd.alarm:evaluator aodh-evaluator = aodh.cmd.alarm:evaluator