From fa55a6984205ce9356b7c533309380e8c9e1a696 Mon Sep 17 00:00:00 2001 From: Tomas Sedovic Date: Sat, 5 May 2012 03:01:31 +0200 Subject: [PATCH] Register metadata server's entry point with Engine Signed-off-by: Tomas Sedovic --- bin/heat-metadata | 12 ++++++++++++ heat/common/config.py | 3 +++ heat/engine/manager.py | 8 +++++++- heat/engine/parser.py | 6 +++--- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/bin/heat-metadata b/bin/heat-metadata index f58dcad2..701a7ec5 100755 --- a/bin/heat-metadata +++ b/bin/heat-metadata @@ -37,10 +37,21 @@ import logging from heat import rpc from heat.common import config from heat.common import wsgi +from heat import context from paste import httpserver +from socket import gethostbyname, gethostname LOG = logging.getLogger('heat.metadata') + +def send_address_to_engine(port): + host = gethostbyname(gethostname()) + con = context.get_admin_context() + resp = rpc.call(con, 'engine', + {'method': 'metadata_register_address', + 'args': {'url': 'http://%s:%s' % (host, port)}}) + + if __name__ == '__main__': try: conf = config.HeatMetadataConfigOpts() @@ -52,6 +63,7 @@ if __name__ == '__main__': app = config.load_paste_app(conf) port = conf.bind_port + send_address_to_engine(port) LOG.info(('Starting Heat Metadata on port %s') % port) httpserver.serve(app, port=port) except RuntimeError, e: diff --git a/heat/common/config.py b/heat/common/config.py index be14f9d7..2d26e53e 100644 --- a/heat/common/config.py +++ b/heat/common/config.py @@ -189,6 +189,9 @@ class HeatEngineConfigOpts(cfg.CommonConfigOpts): cfg.IntOpt('osapi_volume_listen_port', default=8776, help='port for os volume api to listen'), + cfg.StrOpt('heat_metadata_server_url', + default="", + help='URL of the Heat metadata server'), ] db_opts = [ cfg.StrOpt('sql_connection', diff --git a/heat/engine/manager.py b/heat/engine/manager.py index ece2c59c..9ba29c0d 100644 --- a/heat/engine/manager.py +++ b/heat/engine/manager.py @@ -26,6 +26,7 @@ import traceback import logging import webob from heat import manager +from heat.common import config from heat.engine import parser from heat.engine import resources from heat.db import api as db_api @@ -122,7 +123,9 @@ class EngineManager(manager.Manager): if db_api.stack_get(None, stack_name): return {'Error': 'Stack already exists with that name.'} - stack = parser.Stack(stack_name, template, 0, params) + metadata_server = config.FLAGS.heat_metadata_server_url + stack = parser.Stack(stack_name, template, 0, params, + metadata_server=metadata_server) response = stack.validate() if 'Malformed Query Response' in response['ValidateTemplateResult']['Description']: return response['ValidateTemplateResult']['Description'] @@ -216,6 +219,9 @@ class EngineManager(manager.Manager): return {'events': [parse_event(e) for e in events]} + def metadata_register_address(self, context, url): + config.FLAGS.heat_metadata_server_url = url + def metadata_list_stacks(self, context): """ Return the names of the stacks registered with Heat. diff --git a/heat/engine/parser.py b/heat/engine/parser.py index c7268bd7..fa0e558b 100644 --- a/heat/engine/parser.py +++ b/heat/engine/parser.py @@ -38,7 +38,8 @@ class Stack(object): DELETE_FAILED = 'DELETE_FAILED' DELETE_COMPLETE = 'DELETE_COMPLETE' - def __init__(self, stack_name, template, stack_id=0, parms=None): + def __init__(self, stack_name, template, stack_id=0, parms=None, + metadata_server=None): self.id = stack_id self.t = template self.parms = self.t.get('Parameters', {}) @@ -48,8 +49,7 @@ class Stack(object): self.doc = None self.name = stack_name self.parsed_template_id = 0 - # TODO(shadower) load this from a config file - self.metadata_server = 'http://10.0.0.1' + self.metadata_server = metadata_server self.parms['AWS::StackName'] = {"Description": "AWS StackName", "Type": "String", -- 2.45.2