Register metadata server's entry point with Engine

Signed-off-by: Tomas Sedovic <tomas@sedovic.cz>
This commit is contained in:
Tomas Sedovic 2012-05-05 03:01:31 +02:00
parent da366b43b9
commit fa55a69842
4 changed files with 25 additions and 4 deletions

View File

@ -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:

View 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',

View 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.

View 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",