From 4d432413e13f4cba88e9ed8a4f9ddd15925bc501 Mon Sep 17 00:00:00 2001 From: Tomas Sedovic Date: Wed, 9 May 2012 18:23:22 +0200 Subject: [PATCH] Allow sending events using metadata server Signed-off-by: Tomas Sedovic --- heat/engine/manager.py | 14 ++++++++++++++ heat/metadata/api/v1/__init__.py | 3 +++ heat/metadata/api/v1/metadata.py | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/heat/engine/manager.py b/heat/engine/manager.py index 9c5499a42d..6f32583d67 100644 --- a/heat/engine/manager.py +++ b/heat/engine/manager.py @@ -223,6 +223,20 @@ class EngineManager(manager.Manager): return {'events': [parse_event(e) for e in events]} + def event_create(self, context, event): + try: + result = db_api.event_create(None, event) + event['id'] = result.id + return [None, event] + except Exception as ex: + logger.warn('db error %s' % str(ex)) + try: + # This returns the error message without the entire SQL request + msg = ex.inner_exception.orig[1] + except: + msg = 'Error creating event' + return [msg, None] + def metadata_register_address(self, context, url): config.FLAGS.heat_metadata_server_url = url diff --git a/heat/metadata/api/v1/__init__.py b/heat/metadata/api/v1/__init__.py index c0957f966e..a213e06b3f 100644 --- a/heat/metadata/api/v1/__init__.py +++ b/heat/metadata/api/v1/__init__.py @@ -48,6 +48,9 @@ class API(wsgi.Router): mapper.connect('/stacks/:stack_name/resources/:resource_id', controller=metadata_controller, action='update_metadata', conditions=dict(method=['PUT'])) + mapper.connect('/events/', + controller=metadata_controller, action='create_event', + conditions=dict(method=['POST'])) # TODO(shadower): make sure all responses are JSON-encoded # currently, calling an unknown route uses the default handler which diff --git a/heat/metadata/api/v1/metadata.py b/heat/metadata/api/v1/metadata.py index 9df424e908..7acd585eb8 100644 --- a/heat/metadata/api/v1/metadata.py +++ b/heat/metadata/api/v1/metadata.py @@ -98,6 +98,15 @@ class MetadataController: 'metadata': body, }) + def create_event(self, req, body=None): + con = context.get_admin_context() + [error, event] = rpc.call(con, 'engine', + {'method': 'event_create', + 'args': {'event': body}}) + if error: + return json_error(400, error) + return json_response(201, event) + def create_resource(options): """