Merge "Validate template requirements as list"
This commit is contained in:
@@ -54,7 +54,7 @@ class NodeTemplate(EntityTemplate):
|
|||||||
def relationships(self):
|
def relationships(self):
|
||||||
if not self._relationships:
|
if not self._relationships:
|
||||||
requires = self.requirements
|
requires = self.requirements
|
||||||
if requires:
|
if requires and isinstance(requires, list):
|
||||||
for r in requires:
|
for r in requires:
|
||||||
for r1, value in r.items():
|
for r1, value in r.items():
|
||||||
explicit = self._get_explicit_relationship(r, value)
|
explicit = self._get_explicit_relationship(r, value)
|
||||||
@@ -206,13 +206,15 @@ class NodeTemplate(EntityTemplate):
|
|||||||
TypeMismatchError(
|
TypeMismatchError(
|
||||||
what='"requirements" of template "%s"' % self.name,
|
what='"requirements" of template "%s"' % self.name,
|
||||||
type='list'))
|
type='list'))
|
||||||
|
else:
|
||||||
for req in requires:
|
for req in requires:
|
||||||
for r1, value in req.items():
|
for r1, value in req.items():
|
||||||
if isinstance(value, dict):
|
if isinstance(value, dict):
|
||||||
self._validate_requirements_keys(value)
|
self._validate_requirements_keys(value)
|
||||||
self._validate_requirements_properties(value)
|
self._validate_requirements_properties(value)
|
||||||
allowed_reqs.append(r1)
|
allowed_reqs.append(r1)
|
||||||
self._common_validate_field(req, allowed_reqs, 'requirements')
|
self._common_validate_field(req, allowed_reqs,
|
||||||
|
'requirements')
|
||||||
|
|
||||||
def _validate_requirements_properties(self, requirements):
|
def _validate_requirements_properties(self, requirements):
|
||||||
# TODO(anyone): Only occurrences property of the requirements is
|
# TODO(anyone): Only occurrences property of the requirements is
|
||||||
|
|||||||
@@ -1707,3 +1707,54 @@ heat-translator/master/translator/tests/data/custom_types/wordpress.yaml
|
|||||||
toscaparser.utils.yamlparser.simple_parse(
|
toscaparser.utils.yamlparser.simple_parse(
|
||||||
tpl_snippet_qualified_name))
|
tpl_snippet_qualified_name))
|
||||||
TopologyTemplate(tpl, None)
|
TopologyTemplate(tpl, None)
|
||||||
|
|
||||||
|
def test_requirements_as_list(self):
|
||||||
|
"""Node template with requirements provided with or without list
|
||||||
|
|
||||||
|
Node template requirements are required to be provided as list.
|
||||||
|
"""
|
||||||
|
|
||||||
|
expectedmessage = _('"requirements" of template "my_webserver"'
|
||||||
|
' must be of type "list".')
|
||||||
|
|
||||||
|
# requirements provided as dictionary
|
||||||
|
tpl_snippet1 = '''
|
||||||
|
node_templates:
|
||||||
|
my_webserver:
|
||||||
|
type: tosca.nodes.WebServer
|
||||||
|
requirements:
|
||||||
|
host: server
|
||||||
|
server:
|
||||||
|
type: tosca.nodes.Compute
|
||||||
|
'''
|
||||||
|
err1 = self.assertRaises(
|
||||||
|
exception.TypeMismatchError,
|
||||||
|
lambda: self._single_node_template_content_test(tpl_snippet1))
|
||||||
|
self.assertEqual(expectedmessage, err1.__str__())
|
||||||
|
|
||||||
|
# requirements provided as string
|
||||||
|
tpl_snippet2 = '''
|
||||||
|
node_templates:
|
||||||
|
my_webserver:
|
||||||
|
type: tosca.nodes.WebServer
|
||||||
|
requirements: server
|
||||||
|
server:
|
||||||
|
type: tosca.nodes.Compute
|
||||||
|
'''
|
||||||
|
err2 = self.assertRaises(
|
||||||
|
exception.TypeMismatchError,
|
||||||
|
lambda: self._single_node_template_content_test(tpl_snippet2))
|
||||||
|
self.assertEqual(expectedmessage, err2.__str__())
|
||||||
|
|
||||||
|
# requirements provided as list
|
||||||
|
tpl_snippet3 = '''
|
||||||
|
node_templates:
|
||||||
|
my_webserver:
|
||||||
|
type: tosca.nodes.WebServer
|
||||||
|
requirements:
|
||||||
|
- host: server
|
||||||
|
server:
|
||||||
|
type: tosca.nodes.Compute
|
||||||
|
'''
|
||||||
|
self.assertIsNone(
|
||||||
|
self._single_node_template_content_test(tpl_snippet3))
|
||||||
|
|||||||
@@ -259,7 +259,8 @@ class TopologyTemplate(object):
|
|||||||
self,
|
self,
|
||||||
node_template,
|
node_template,
|
||||||
value)
|
value)
|
||||||
if node_template.requirements:
|
if node_template.requirements and \
|
||||||
|
isinstance(node_template.requirements, list):
|
||||||
for req in node_template.requirements:
|
for req in node_template.requirements:
|
||||||
rel = req
|
rel = req
|
||||||
for req_name, req_item in req.items():
|
for req_name, req_item in req.items():
|
||||||
|
|||||||
Reference in New Issue
Block a user