]> review.fuel-infra Code Review - openstack-build/heat-build.git/commitdiff
Register metadata server's entry point with Engine
authorTomas Sedovic <tomas@sedovic.cz>
Sat, 5 May 2012 01:01:31 +0000 (03:01 +0200)
committerTomas Sedovic <tomas@sedovic.cz>
Sat, 5 May 2012 01:01:31 +0000 (03:01 +0200)
Signed-off-by: Tomas Sedovic <tomas@sedovic.cz>
bin/heat-metadata
heat/common/config.py
heat/engine/manager.py
heat/engine/parser.py

index f58dcad2d50c52e4110d3c0fd5c602f3f4c36133..701a7ec566cff6ccf6adbddff0f8107890e08983 100755 (executable)
@@ -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:
index be14f9d765788484044086639d9c4f389de032ae..2d26e53e1ce6bfcb29287101c637365692d10cbf 100644 (file)
@@ -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',
index ece2c59cf475fccc6dc6a84af7c8b9f5cb86feac..9ba29c0d023d1c68ba564af554d4ce25ccece7fc 100644 (file)
@@ -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.
index c7268bd74769bf10ce12fcc74955038d16357450..fa0e558b0944fc6be62a229cd97fc22e7d36ada8 100644 (file)
@@ -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",