Wire in files to template validate

heatclient already supplies the files map, as for create/update
but the API and RPC interfaces ignore it.  So wire in the optional
files map, which will enable moving to validation logic which
more closely aligns with the create/update code.

Change-Id: I32a4b8d8c02829398f4792fcb06783ce9233b645
Co-Authored-By: Jay Dobies <jdobies@redhat.com>
Partial-Bug: 1467573
This commit is contained in:
Steven Hardy 2015-09-15 12:01:05 +01:00
parent 6cb3c7c7ac
commit 99670fb1cc
7 changed files with 24 additions and 11 deletions

View File

@ -511,7 +511,8 @@ class StackController(object):
result = self.rpc_client.validate_template(req.context,
data.template(),
data.environment())
data.environment(),
files=data.files())
if 'Error' in result:
raise exc.HTTPBadRequest(result['Error'])

View File

@ -273,7 +273,7 @@ class EngineService(service.Service):
by the RPC caller.
"""
RPC_API_VERSION = '1.16'
RPC_API_VERSION = '1.17'
def __init__(self, host, topic):
super(EngineService, self).__init__()
@ -927,7 +927,7 @@ class EngineService(service.Service):
engine_id=engine_id)
@context.request_context
def validate_template(self, cnxt, template, params=None):
def validate_template(self, cnxt, template, params=None, files=None):
"""
The validate_template method uses the stack parser to check
the validity of a template.
@ -935,13 +935,14 @@ class EngineService(service.Service):
:param cnxt: RPC context.
:param template: Template of stack you want to create.
:param params: Stack Input Params
:param files: Files referenced from the template
"""
LOG.info(_LI('validate_template'))
if template is None:
msg = _("No Template provided.")
return webob.exc.HTTPBadRequest(explanation=msg)
tmpl = templatem.Template(template)
tmpl = templatem.Template(template, files=files)
# validate overall template
try:

View File

@ -37,6 +37,7 @@ class EngineClient(object):
1.14 - Add cancel_with_rollback option to stack_cancel_update
1.15 - Add preview_update_stack() call
1.16 - Adds version, type_name to list_resource_types()
1.17 - Add files to validate_template
'''
BASE_RPC_API_VERSION = '1.0'
@ -292,7 +293,7 @@ class EngineClient(object):
),
version='1.15')
def validate_template(self, ctxt, template, params=None):
def validate_template(self, ctxt, template, params=None, files=None):
"""
The validate_template method uses the stack parser to check
the validity of a template.
@ -300,10 +301,13 @@ class EngineClient(object):
:param ctxt: RPC context.
:param template: Template of stack you want to create.
:param params: Stack Input Params/Environment
:param files: files referenced from the environment/template.
"""
return self.call(ctxt, self.make_msg('validate_template',
template=template,
params=params))
params=params,
files=files),
version='1.17')
def authenticated_to_backend(self, ctxt):
"""

View File

@ -1073,7 +1073,9 @@ class CfnStackControllerTest(common.HeatTestCase):
self.m.StubOutWithMock(rpc_client.EngineClient, 'call')
rpc_client.EngineClient.call(
dummy_req.context,
('validate_template', {'template': json_template, 'params': None})
('validate_template', {'template': json_template, 'params': None,
'files': None}),
version='1.17'
).AndReturn(response)
self.m.ReplayAll()

View File

@ -2000,7 +2000,9 @@ class StackControllerTest(tools.ControllerTest, common.HeatTestCase):
'params': {'parameters': {},
'encrypted_param_names': [],
'parameter_defaults': {},
'resource_registry': {}}})
'resource_registry': {}},
'files': {}}),
version='1.17'
).AndReturn(engine_response)
self.m.ReplayAll()
@ -2025,7 +2027,9 @@ class StackControllerTest(tools.ControllerTest, common.HeatTestCase):
'params': {'parameters': {},
'encrypted_param_names': [],
'parameter_defaults': {},
'resource_registry': {}}})
'resource_registry': {}},
'files': {}}),
version='1.17'
).AndReturn({'Error': 'fubar'})
self.m.ReplayAll()

View File

@ -39,7 +39,7 @@ class ServiceEngineTest(common.HeatTestCase):
def test_make_sure_rpc_version(self):
self.assertEqual(
'1.16',
'1.17',
service.EngineService.RPC_API_VERSION,
('RPC version is changed, please update this test to new version '
'and make sure additional test cases are added for RPC APIs '

View File

@ -198,7 +198,8 @@ class EngineRpcAPITestCase(common.HeatTestCase):
def test_validate_template(self):
self._test_engine_api('validate_template', 'call',
template={u'Foo': u'bar'},
params={u'Egg': u'spam'})
params={u'Egg': u'spam'},
files=None)
def test_list_resource_types(self):
self._test_engine_api('list_resource_types',