'StackExists',
'StackValidationFailed',
'InvalidTemplateReference',
+ 'UnknownUserParameter',
)
denied_errors = ('Forbidden', 'NotAuthorized')
'StackExists': exc.HTTPConflict,
'StackValidationFailed': exc.HTTPBadRequest,
'InvalidTemplateReference': exc.HTTPBadRequest,
+ 'UnknownUserParameter': exc.HTTPBadRequest,
}
Exc = error_map.get(ex.exc_type, exc.HTTPInternalServerError)
message = _("The Parameter (%(key)s) was not provided.")
+class UnknownUserParameter(OpenstackException):
+ message = _("The Parameter (%(key)s) was not defined in template.")
+
+
class InvalidTemplateAttribute(OpenstackException):
message = _("The Referenced Attribute (%(resource)s %(key)s)"
" is incorrect.")
import collections
import re
+from heat.common import exception
from heat.engine import template
PARAMETER_KEYS = (
for name, schema in tmpl[template.PARAMETERS].iteritems():
yield Parameter(name, schema, user_params.get(name))
+ self.tmpl = tmpl
+ self._validate(user_params)
self.params = dict((p.name, p) for p in parameters())
def __contains__(self, key):
Set the AWS::StackId pseudo parameter value
'''
self.params[PARAM_STACK_ID].schema[DEFAULT] = stack_id
+
+ def _validate(self, user_params):
+ for param in user_params:
+ if param not in self.tmpl[template.PARAMETERS]:
+ raise exception.UnknownUserParameter(key=param)
'args': engine_args},
'version': self.api_version}, None
).AndRaise(rpc_common.RemoteError("AttributeError"))
+ rpc.call(dummy_req.context, self.topic,
+ {'namespace': None,
+ 'method': 'create_stack',
+ 'args': {'stack_name': stack_name,
+ 'template': template,
+ 'params': engine_parms,
+ 'args': engine_args},
+ 'version': self.api_version}, None
+ ).AndRaise(rpc_common.RemoteError("UnknownUserParameter"))
self.m.ReplayAll()
self.assertEqual(type(result),
exception.HeatInvalidParameterValueError)
+
+ result = self.controller.create(dummy_req)
+
+ self.assertEqual(type(result),
+ exception.HeatInvalidParameterValueError)
+
self.m.VerifyAll()
def test_create_err_exists(self):
'args': {'timeout_mins': 30}},
'version': self.api_version},
None).AndRaise(rpc_common.RemoteError("AttributeError"))
+ rpc.call(req.context, self.topic,
+ {'namespace': None,
+ 'method': 'create_stack',
+ 'args': {'stack_name': stack_name,
+ 'template': template,
+ 'params': parameters,
+ 'args': {'timeout_mins': 30}},
+ 'version': self.api_version},
+ None).AndRaise(rpc_common.RemoteError("UnknownUserParameter"))
+
self.m.ReplayAll()
self.assertRaises(webob.exc.HTTPBadRequest,
self.controller.create,
req, tenant_id=self.tenant, body=body)
+ self.assertRaises(webob.exc.HTTPBadRequest,
+ self.controller.create,
+ req, tenant_id=self.tenant, body=body)
+
self.m.VerifyAll()
def test_create_err_existing(self):
nested_template = '''
HeatTemplateFormatVersion: '2012-12-12'
+Parameters:
+ KeyName:
+ Type: String
Outputs:
Foo:
Value: bar
import testtools
import json
+from heat.common import exception
from heat.engine import parameters
'AWS::StackName': 'test_params'}
self.assertEqual(params.map(str), expected)
+
+ def test_unknown_params(self):
+ user_params = {'Foo': 'wibble'}
+ self.assertRaises(exception.UnknownUserParameter,
+ parameters.Parameters,
+ 'test',
+ params_schema,
+ user_params)
empty_tmpl = {"template": {}}
tmpl = parser.Template(empty_tmpl)
stack_name = 'dummystack'
- params = parser.Parameters(stack_name, tmpl, {'foo': 'bar'})
+ params = parser.Parameters(stack_name, tmpl, {})
dummy_stack = parser.Stack(ctx, stack_name, tmpl, params)
dummy_stack.state_set(dummy_stack.CREATE_COMPLETE, 'Testing')
dummy_stack.store()