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:
parent
6cb3c7c7ac
commit
99670fb1cc
@ -511,7 +511,8 @@ class StackController(object):
|
|||||||
|
|
||||||
result = self.rpc_client.validate_template(req.context,
|
result = self.rpc_client.validate_template(req.context,
|
||||||
data.template(),
|
data.template(),
|
||||||
data.environment())
|
data.environment(),
|
||||||
|
files=data.files())
|
||||||
|
|
||||||
if 'Error' in result:
|
if 'Error' in result:
|
||||||
raise exc.HTTPBadRequest(result['Error'])
|
raise exc.HTTPBadRequest(result['Error'])
|
||||||
|
@ -273,7 +273,7 @@ class EngineService(service.Service):
|
|||||||
by the RPC caller.
|
by the RPC caller.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
RPC_API_VERSION = '1.16'
|
RPC_API_VERSION = '1.17'
|
||||||
|
|
||||||
def __init__(self, host, topic):
|
def __init__(self, host, topic):
|
||||||
super(EngineService, self).__init__()
|
super(EngineService, self).__init__()
|
||||||
@ -927,7 +927,7 @@ class EngineService(service.Service):
|
|||||||
engine_id=engine_id)
|
engine_id=engine_id)
|
||||||
|
|
||||||
@context.request_context
|
@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 validate_template method uses the stack parser to check
|
||||||
the validity of a template.
|
the validity of a template.
|
||||||
@ -935,13 +935,14 @@ class EngineService(service.Service):
|
|||||||
:param cnxt: RPC context.
|
:param cnxt: RPC context.
|
||||||
:param template: Template of stack you want to create.
|
:param template: Template of stack you want to create.
|
||||||
:param params: Stack Input Params
|
:param params: Stack Input Params
|
||||||
|
:param files: Files referenced from the template
|
||||||
"""
|
"""
|
||||||
LOG.info(_LI('validate_template'))
|
LOG.info(_LI('validate_template'))
|
||||||
if template is None:
|
if template is None:
|
||||||
msg = _("No Template provided.")
|
msg = _("No Template provided.")
|
||||||
return webob.exc.HTTPBadRequest(explanation=msg)
|
return webob.exc.HTTPBadRequest(explanation=msg)
|
||||||
|
|
||||||
tmpl = templatem.Template(template)
|
tmpl = templatem.Template(template, files=files)
|
||||||
|
|
||||||
# validate overall template
|
# validate overall template
|
||||||
try:
|
try:
|
||||||
|
@ -37,6 +37,7 @@ class EngineClient(object):
|
|||||||
1.14 - Add cancel_with_rollback option to stack_cancel_update
|
1.14 - Add cancel_with_rollback option to stack_cancel_update
|
||||||
1.15 - Add preview_update_stack() call
|
1.15 - Add preview_update_stack() call
|
||||||
1.16 - Adds version, type_name to list_resource_types()
|
1.16 - Adds version, type_name to list_resource_types()
|
||||||
|
1.17 - Add files to validate_template
|
||||||
'''
|
'''
|
||||||
|
|
||||||
BASE_RPC_API_VERSION = '1.0'
|
BASE_RPC_API_VERSION = '1.0'
|
||||||
@ -292,7 +293,7 @@ class EngineClient(object):
|
|||||||
),
|
),
|
||||||
version='1.15')
|
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 validate_template method uses the stack parser to check
|
||||||
the validity of a template.
|
the validity of a template.
|
||||||
@ -300,10 +301,13 @@ class EngineClient(object):
|
|||||||
:param ctxt: RPC context.
|
:param ctxt: RPC context.
|
||||||
:param template: Template of stack you want to create.
|
:param template: Template of stack you want to create.
|
||||||
:param params: Stack Input Params/Environment
|
:param params: Stack Input Params/Environment
|
||||||
|
:param files: files referenced from the environment/template.
|
||||||
"""
|
"""
|
||||||
return self.call(ctxt, self.make_msg('validate_template',
|
return self.call(ctxt, self.make_msg('validate_template',
|
||||||
template=template,
|
template=template,
|
||||||
params=params))
|
params=params,
|
||||||
|
files=files),
|
||||||
|
version='1.17')
|
||||||
|
|
||||||
def authenticated_to_backend(self, ctxt):
|
def authenticated_to_backend(self, ctxt):
|
||||||
"""
|
"""
|
||||||
|
@ -1073,7 +1073,9 @@ class CfnStackControllerTest(common.HeatTestCase):
|
|||||||
self.m.StubOutWithMock(rpc_client.EngineClient, 'call')
|
self.m.StubOutWithMock(rpc_client.EngineClient, 'call')
|
||||||
rpc_client.EngineClient.call(
|
rpc_client.EngineClient.call(
|
||||||
dummy_req.context,
|
dummy_req.context,
|
||||||
('validate_template', {'template': json_template, 'params': None})
|
('validate_template', {'template': json_template, 'params': None,
|
||||||
|
'files': None}),
|
||||||
|
version='1.17'
|
||||||
).AndReturn(response)
|
).AndReturn(response)
|
||||||
self.m.ReplayAll()
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
@ -2000,7 +2000,9 @@ class StackControllerTest(tools.ControllerTest, common.HeatTestCase):
|
|||||||
'params': {'parameters': {},
|
'params': {'parameters': {},
|
||||||
'encrypted_param_names': [],
|
'encrypted_param_names': [],
|
||||||
'parameter_defaults': {},
|
'parameter_defaults': {},
|
||||||
'resource_registry': {}}})
|
'resource_registry': {}},
|
||||||
|
'files': {}}),
|
||||||
|
version='1.17'
|
||||||
).AndReturn(engine_response)
|
).AndReturn(engine_response)
|
||||||
self.m.ReplayAll()
|
self.m.ReplayAll()
|
||||||
|
|
||||||
@ -2025,7 +2027,9 @@ class StackControllerTest(tools.ControllerTest, common.HeatTestCase):
|
|||||||
'params': {'parameters': {},
|
'params': {'parameters': {},
|
||||||
'encrypted_param_names': [],
|
'encrypted_param_names': [],
|
||||||
'parameter_defaults': {},
|
'parameter_defaults': {},
|
||||||
'resource_registry': {}}})
|
'resource_registry': {}},
|
||||||
|
'files': {}}),
|
||||||
|
version='1.17'
|
||||||
).AndReturn({'Error': 'fubar'})
|
).AndReturn({'Error': 'fubar'})
|
||||||
self.m.ReplayAll()
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ class ServiceEngineTest(common.HeatTestCase):
|
|||||||
|
|
||||||
def test_make_sure_rpc_version(self):
|
def test_make_sure_rpc_version(self):
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
'1.16',
|
'1.17',
|
||||||
service.EngineService.RPC_API_VERSION,
|
service.EngineService.RPC_API_VERSION,
|
||||||
('RPC version is changed, please update this test to new version '
|
('RPC version is changed, please update this test to new version '
|
||||||
'and make sure additional test cases are added for RPC APIs '
|
'and make sure additional test cases are added for RPC APIs '
|
||||||
|
@ -198,7 +198,8 @@ class EngineRpcAPITestCase(common.HeatTestCase):
|
|||||||
def test_validate_template(self):
|
def test_validate_template(self):
|
||||||
self._test_engine_api('validate_template', 'call',
|
self._test_engine_api('validate_template', 'call',
|
||||||
template={u'Foo': u'bar'},
|
template={u'Foo': u'bar'},
|
||||||
params={u'Egg': u'spam'})
|
params={u'Egg': u'spam'},
|
||||||
|
files=None)
|
||||||
|
|
||||||
def test_list_resource_types(self):
|
def test_list_resource_types(self):
|
||||||
self._test_engine_api('list_resource_types',
|
self._test_engine_api('list_resource_types',
|
||||||
|
Loading…
Reference in New Issue
Block a user