Use pbr wsgi_scripts feature to build ceilometer-api

Change-Id: I8812ea1a92d6dc7f41a490e971bb7a09dee9b304
This commit is contained in:
Julien Danjou 2016-08-17 11:10:14 +02:00
parent 6d301dd952
commit 2d09bce4da
7 changed files with 5 additions and 103 deletions

View File

@ -1,36 +0,0 @@
#
# Copyright 2012 New Dream Network, LLC (DreamHost)
#
# 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 oslo_config import cfg
# Register options for the service
OPTS = [
cfg.PortOpt('port',
default=8777,
deprecated_name='metering_api_port',
deprecated_group='DEFAULT',
help='The port for the ceilometer API server.',
),
cfg.StrOpt('host',
default='0.0.0.0',
help='The listen IP for the ceilometer API server.',
),
]
CONF = cfg.CONF
opt_group = cfg.OptGroup(name='api',
title='Options for the ceilometer-api service')
CONF.register_group(opt_group)
CONF.register_opts(OPTS, opt_group)

View File

@ -1,5 +1,6 @@
#
# Copyright 2012 New Dream Network, LLC (DreamHost)
# 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
@ -19,11 +20,9 @@ from oslo_config import cfg
from oslo_log import log
from paste import deploy
import pecan
from werkzeug import serving
from ceilometer.api import hooks
from ceilometer.api import middleware
from ceilometer.i18n import _LI, _LW
LOG = log.getLogger(__name__)
@ -67,16 +66,9 @@ def setup_app(pecan_config=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 and 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
@ -100,26 +92,5 @@ def load_app():
return deploy.loadapp("config:" + cfg_file)
def build_server():
app = load_app()
# Create the WSGI server and start it
host, port = cfg.CONF.api.host, cfg.CONF.api.port
LOG.info(_LI('Starting server in PID %s'), os.getpid())
LOG.info(_LI("Configuration:"))
cfg.CONF.log_opt_values(LOG, log.INFO)
if host == '0.0.0.0':
LOG.info(_LI(
'serving on 0.0.0.0:%(sport)s, view at http://127.0.0.1:%(vport)s')
% ({'sport': port, 'vport': port}))
else:
LOG.info(_LI("serving on http://%(host)s:%(port)s") % (
{'host': host, 'port': port}))
serving.run_simple(cfg.CONF.api.host, cfg.CONF.api.port,
app, processes=CONF.api.workers)
def app_factory(global_config, **local_conf):
return setup_app()

View File

@ -16,7 +16,6 @@ import itertools
from keystoneauth1 import loading
import ceilometer.agent.manager
import ceilometer.api
import ceilometer.api.app
import ceilometer.cmd.polling
import ceilometer.collector
@ -76,10 +75,7 @@ def list_opts():
ceilometer.sample.OPTS,
ceilometer.service.OPTS,
ceilometer.utils.OPTS,)),
('api',
itertools.chain(ceilometer.api.OPTS,
ceilometer.api.app.API_OPTS,
[ceilometer.service.API_OPT])),
('api', ceilometer.api.app.API_OPTS),
('collector',
itertools.chain(ceilometer.collector.OPTS,
[ceilometer.service.COLL_OPT])),

View File

@ -40,14 +40,6 @@ OPTS = [
]
cfg.CONF.register_opts(OPTS)
API_OPT = cfg.IntOpt('workers',
default=1,
min=1,
deprecated_group='DEFAULT',
deprecated_name='api_workers',
help='Number of workers for api, default value is 1.')
cfg.CONF.register_opt(API_OPT, 'api')
NOTI_OPT = cfg.IntOpt('workers',
default=1,
min=1,

View File

@ -34,25 +34,3 @@ class TestApp(base.BaseTestCase):
with mock.patch.object(self.CONF, 'find_file') as ff:
ff.return_value = None
self.assertRaises(cfg.ConfigFilesNotFoundError, app.load_app)
@mock.patch('ceilometer.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, group='api')
app.setup_app()
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

@ -42,7 +42,6 @@ SQLAlchemy<1.1.0,>=1.0.10 # MIT
sqlalchemy-migrate>=0.9.6 # Apache-2.0
stevedore>=1.9.0 # Apache-2.0
tooz>=1.28.0 # Apache-2.0
Werkzeug>=0.7 # BSD License
WebOb>=1.2.3 # MIT
WSME>=0.8 # MIT
# NOTE(jd) We do not import it directly, but WSME datetime string parsing

View File

@ -252,6 +252,8 @@ ceilometer.event.trait_plugin =
bitfield = ceilometer.event.trait_plugins:BitfieldTraitPlugin
timedelta = ceilometer.event.trait_plugins:TimedeltaPlugin
wsgi_scripts =
ceilometer-api = ceilometer.api.app:load_app
console_scripts =
ceilometer-api = ceilometer.cmd.api:main