From 445d711dd0e4fe59d7787fcea12d6024434c61aa Mon Sep 17 00:00:00 2001 From: Julien Danjou Date: Wed, 31 Oct 2012 18:29:52 +0100 Subject: [PATCH] Allow no configured sources, provide a default file This fixes bug #1073654 Change-Id: I7cfb5016ab8a70bf9738baa497f6fe173f307242 Signed-off-by: Julien Danjou --- bin/ceilometer-api | 5 +---- ceilometer/api/app.py | 39 ++++++++++++++++++++++++------------- ceilometer/tests/api.py | 5 ++--- etc/ceilometer/sources.json | 3 +++ 4 files changed, 32 insertions(+), 20 deletions(-) create mode 100644 etc/ceilometer/sources.json diff --git a/bin/ceilometer-api b/bin/ceilometer-api index 38692ece..a4c8a6c8 100755 --- a/bin/ceilometer-api +++ b/bin/ceilometer-api @@ -37,13 +37,10 @@ if __name__ == '__main__': cfg.CONF(sys.argv[1:]) logging.setup('ceilometer.api') - root = app.app + root = app.make_app() # Enable debug mode if cfg.CONF.verbose or cfg.CONF.debug: root.debug = True - # Install the middleware wrapper - root = acl.install(root, cfg.CONF) - root.run(host='0.0.0.0', port=cfg.CONF.metering_api_port) diff --git a/ceilometer/api/app.py b/ceilometer/api/app.py index c6d473e0..6b446d0f 100644 --- a/ceilometer/api/app.py +++ b/ceilometer/api/app.py @@ -24,23 +24,36 @@ from ceilometer.openstack.common import cfg from ceilometer.openstack.common import jsonutils from ceilometer import storage from ceilometer.api import v1 +from ceilometer.api import acl -app = flask.Flask('ceilometer.api') -app.register_blueprint(v1.blueprint, url_prefix='/v1') - storage.register_opts(cfg.CONF) -@app.before_request -def attach_config(): - flask.request.cfg = cfg.CONF - storage_engine = storage.get_engine(cfg.CONF) - flask.request.storage_engine = storage_engine - flask.request.storage_conn = storage_engine.get_connection(cfg.CONF) +def make_app(enable_acl=True, attach_storage=True): + app = flask.Flask('ceilometer.api') + app.register_blueprint(v1.blueprint, url_prefix='/v1') + try: + with open("sources.json", "r") as f: + sources = jsonutils.load(f) + except IOError: + sources = {} -@app.before_request -def attach_sources(): - with open("sources.json", "r") as f: - flask.request.sources = jsonutils.load(f) + @app.before_request + def attach_config(): + flask.request.cfg = cfg.CONF + flask.request.sources = sources + + if attach_storage: + @app.before_request + def attach_storage(): + storage_engine = storage.get_engine(cfg.CONF) + flask.request.storage_engine = storage_engine + flask.request.storage_conn = \ + storage_engine.get_connection(cfg.CONF) + + # Install the middleware wrapper + if enable_acl: + return acl.install(app, cfg.CONF) + return app diff --git a/ceilometer/tests/api.py b/ceilometer/tests/api.py index 375fbbf8..d5c707d3 100644 --- a/ceilometer/tests/api.py +++ b/ceilometer/tests/api.py @@ -26,13 +26,14 @@ import flask from ceilometer.tests import db as db_test_base from ceilometer.api import v1 from ceilometer.api import app +from ceilometer.openstack.common import cfg class TestBase(db_test_base.TestBase): def setUp(self): super(TestBase, self).setUp() - self.app = flask.Flask('test') + self.app = app.make_app(enable_acl=False, attach_storage=False) self.app.register_blueprint(v1.blueprint) self.test_app = self.app.test_client() @@ -40,8 +41,6 @@ class TestBase(db_test_base.TestBase): def attach_storage_connection(): flask.request.storage_conn = self.conn - self.app.before_request(app.attach_sources) - def get(self, path, **kwds): if kwds: query = path + '?' + urllib.urlencode(kwds) diff --git a/etc/ceilometer/sources.json b/etc/ceilometer/sources.json new file mode 100644 index 00000000..58f8189f --- /dev/null +++ b/etc/ceilometer/sources.json @@ -0,0 +1,3 @@ +{ + "openstack": {} +}