From 67b607fdb69d104372f62fa40af6ff4e126978f7 Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Tue, 5 Apr 2016 19:49:22 +0200 Subject: [PATCH] Use pbr wsgi_scripts to build aodh-api Change-Id: Iefd6f4d9f76c69ed9b49483e1feda0b7dbe2cb81 --- aodh/api/__init__.py | 8 ------ aodh/api/app.py | 35 +++------------------------ aodh/api/app.wsgi | 6 +---- aodh/cmd/api.py | 24 ------------------ aodh/tests/functional/api/test_app.py | 22 ----------------- devstack/plugin.sh | 2 +- devstack/settings | 2 +- requirements.txt | 1 - setup.cfg | 4 ++- 9 files changed, 10 insertions(+), 94 deletions(-) delete mode 100644 aodh/cmd/api.py diff --git a/aodh/api/__init__.py b/aodh/api/__init__.py index ae724df26..ad5b2b4c7 100644 --- a/aodh/api/__init__.py +++ b/aodh/api/__init__.py @@ -17,14 +17,6 @@ from oslo_config import cfg # Register options for the service 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', default="api_paste.ini", help="Configuration file for WSGI definition of API."), diff --git a/aodh/api/app.py b/aodh/api/app.py index 3df82ef77..be3cb57e3 100644 --- a/aodh/api/app.py +++ b/aodh/api/app.py @@ -1,6 +1,6 @@ # # 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 # 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 paste import deploy import pecan -from werkzeug import serving from aodh.api import hooks from aodh.api import middleware -from aodh.i18n import _ -from aodh.i18n import _LW from aodh import service 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) - # 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( pecan_config['app']['root'], - debug=pecan_debug, + debug=conf.api.pecan_debug, hooks=app_hooks, wrap_app=middleware.ParsableErrorMiddleware, guess_content_type_from_ext=False @@ -84,25 +74,8 @@ def load_app(conf): return deploy.loadapp("config:" + cfg_file) -def build_server(conf): - app = load_app(conf) - # 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 build_wsgi_app(argv=None): + return load_app(service.prepare_service(argv=argv)) def _app(): diff --git a/aodh/api/app.wsgi b/aodh/api/app.wsgi index 697ecd60b..fb8eb6030 100644 --- a/aodh/api/app.wsgi +++ b/aodh/api/app.wsgi @@ -19,9 +19,5 @@ See http://pecan.readthedocs.org/en/latest/deployment.html for details. """ from aodh.api import app -from aodh import service - -# Initialize the oslo configuration library and logging -conf = service.prepare_service([]) -application = app.load_app(conf) +application = app.build_wsgi_app(argv=[]) diff --git a/aodh/cmd/api.py b/aodh/cmd/api.py deleted file mode 100644 index 71297c8de..000000000 --- a/aodh/cmd/api.py +++ /dev/null @@ -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) diff --git a/aodh/tests/functional/api/test_app.py b/aodh/tests/functional/api/test_app.py index 34212e376..cdf12cf82 100644 --- a/aodh/tests/functional/api/test_app.py +++ b/aodh/tests/functional/api/test_app.py @@ -35,25 +35,3 @@ class TestApp(base.BaseTestCase): ff.return_value = None self.assertRaises(cfg.ConfigFilesNotFoundError, 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) diff --git a/devstack/plugin.sh b/devstack/plugin.sh index de792ecd2..d5c431a34 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -23,7 +23,7 @@ fi if [ -z "$AODH_DEPLOY" ]; then # Default - AODH_DEPLOY=werkzeug + AODH_DEPLOY=simple # Fallback to common wsgi devstack configuration if [ "$ENABLE_HTTPD_MOD_WSGI_SERVICES" == "True" ]; then diff --git a/devstack/settings b/devstack/settings index 34ca1287e..99e7c3e1a 100644 --- a/devstack/settings +++ b/devstack/settings @@ -23,7 +23,7 @@ AODH_SERVICE_PORT=${AODH_SERVICE_PORT:-8042} # AODH_DEPLOY defines how Aodh is deployed, allowed values: # - mod_wsgi : Run Aodh under Apache HTTPd mod_wsgi -# - werkzeug : Run aodh-api +# - simple : Run aodh-api # - uwsgi : Run Aodh under uwsgi # - : Fallback to AODH_USE_MOD_WSGI or ENABLE_HTTPD_MOD_WSGI_SERVICES AODH_DEPLOY=${AODH_DEPLOY} diff --git a/requirements.txt b/requirements.txt index 6404c2242..72457eae4 100644 --- a/requirements.txt +++ b/requirements.txt @@ -30,6 +30,5 @@ requests>=2.5.2 six>=1.9.0 stevedore>=1.5.0 # Apache-2.0 tooz>=1.28.0 # Apache-2.0 -Werkzeug>=0.7 # BSD License WebOb>=1.2.3 WSME>=0.8 diff --git a/setup.cfg b/setup.cfg index beb65a859..c01611bc5 100644 --- a/setup.cfg +++ b/setup.cfg @@ -105,8 +105,10 @@ aodh.notifier = trust+https = aodh.notifier.trust:TrustRestAlarmNotifier zaqar = aodh.notifier.zaqar:ZaqarAlarmNotifier +wsgi_scripts = + aodh-api = aodh.api.app:build_wsgi_app + console_scripts = - aodh-api = aodh.cmd.api:main aodh-dbsync = aodh.cmd.storage:dbsync aodh-expirer = aodh.cmd.storage:expirer aodh-evaluator = aodh.cmd.alarm:evaluator