msg = _("Stack already exists with that name.")
return webob.exc.HTTPConflict(msg)
- stack_db[body['StackName']] = parser.Stack(body['StackName'], body)
+ stack_db[body['StackName']] = parser.Stack(body['StackName'], body, req.params)
stack_db[body['StackName']].start()
return {'stack': {'id': body['StackName']}}
"""
import json
+import logging
from heat.common.client import BaseClient
from heat.common import crypt
from heat.cloudformations import *
+logger = logging.getLogger(__name__)
+
_CLIENT_CREDS = None
_CLIENT_HOST = None
_CLIENT_PORT = None
return data
- def create_stack(self, template):
+ def create_stack(self, template, **kwargs):
"""
Tells engine about an stack's metadata
"""
'Content-Type': 'application/json',
}
- res = self.do_request("POST", "/stacks", json.dumps(template), headers=headers)
+ res = self.do_request("POST", "/stacks", json.dumps(template),
+ headers=headers, params=kwargs)
data = json.loads(res.read())
return data
class Stack:
- def __init__(self, stack_name, template):
+ def __init__(self, stack_name, template, parms=None):
self.t = template
if self.t.has_key('Parameters'):
"AllowedValues" : ["us-east-1","us-west-1","us-west-2","sa-east-1","eu-west-1","ap-southeast-1","ap-northeast-1"],
"ConstraintDescription" : "must be a valid EC2 instance type." }
-
-######
-# stack['StackId'] = body['StackName']
-# stack['StackStatus'] = 'CREATE_COMPLETE'
-# # TODO self._apply_user_parameters(req, stack)
-# stack_db[body['StackName']] = stack
-######
+ if parms != None:
+ self._apply_user_parameters(parms)
self.resources = {}
for r in self.t['Resources']:
for index, item in enumerate(s):
self.calulate_dependancies(item, r)
+
+ def _apply_user_parameter(self, key, value):
+ logger.info('_apply_user_parameter %s=%s ' % (key, value))
+ if not self.t.has_key('Parameters'):
+ self.t['Parameters'] = {}
+
+ if not self.t['Parameters'].has_key(key):
+ self.t['Parameters'][key] = {}
+
+ self.t['Parameters'][key]['Value'] = value
+
+ def _apply_user_parameters(self, parms):
+ for p in parms:
+ if 'Parameters.member.' in p and 'ParameterKey' in p:
+ s = p.split('.')
+ try:
+ key_name = 'Parameters.member.%s.ParameterKey' % s[2]
+ value_name = 'Parameters.member.%s.ParameterValue' % s[2]
+ self._apply_user_parameter(parms[key_name], parms[value_name])
+ except:
+ logger.error('could not apply parameter %s' % p)
+
+
def parameter_get(self, key):
if self.parms[key] == None:
#print 'None Ref: %s' % key