added _validate_capabilities_properties function & UT
added _common_validate_properties function. It validates properties of nodes & capabilities properties added validating capability properties values in _validate_capabilities_properties function & UT case. Change-Id: I8709085738e82739d2cd46e1f7c5d8d4f033e806 Partially-Implements: blueprint tosca-capabilities-scalable
This commit is contained in:
parent
c3be3aa78e
commit
8761ac5631
@ -13,6 +13,7 @@
|
||||
from translator.toscalib.capabilities import Capability
|
||||
from translator.toscalib.common.exception import MissingRequiredFieldError
|
||||
from translator.toscalib.common.exception import UnknownFieldError
|
||||
from translator.toscalib.common.exception import ValidationError
|
||||
from translator.toscalib.elements.interfaces import InterfacesDef
|
||||
from translator.toscalib.elements.nodetype import NodeType
|
||||
from translator.toscalib.elements.relationshiptype import RelationshipType
|
||||
@ -87,6 +88,47 @@ class EntityTemplate(object):
|
||||
|
||||
def _validate_properties(self, template, entitytype):
|
||||
properties = entitytype.get_value(self.PROPERTIES, template)
|
||||
self._common_validate_properties(entitytype, properties)
|
||||
|
||||
def _validate_capabilities(self):
|
||||
type_capabilities = self.type_definition.capabilities
|
||||
allowed_caps = []
|
||||
if type_capabilities:
|
||||
for tcap in type_capabilities:
|
||||
allowed_caps.append(tcap.name)
|
||||
capabilities = self.type_definition.get_value(self.CAPABILITIES,
|
||||
self.entity_tpl)
|
||||
if capabilities:
|
||||
self._common_validate_field(capabilities, allowed_caps,
|
||||
'Capabilities')
|
||||
self._validate_capabilities_properties(capabilities)
|
||||
|
||||
def _validate_capabilities_properties(self, capabilities):
|
||||
for cap, props in capabilities.items():
|
||||
capabilitydef = self.get_capability(cap).definition
|
||||
self._common_validate_properties(capabilitydef,
|
||||
props[self.PROPERTIES])
|
||||
|
||||
#validating capability properties values
|
||||
for prop in self.get_capability(cap).properties:
|
||||
prop.validate()
|
||||
|
||||
#TODO(srinivas_tadepalli): temporary work around to validate
|
||||
# default_instances until standardized in specification
|
||||
if cap == "scalable" and prop.name == "default_instances":
|
||||
prop_dict = props[self.PROPERTIES]
|
||||
min_instances = prop_dict.get("min_instances")
|
||||
max_instances = prop_dict.get("max_instances")
|
||||
default_instances = prop_dict.get("default_instances")
|
||||
if not (min_instances <= default_instances
|
||||
<= max_instances):
|
||||
err_msg = ("Properties of template %s : "
|
||||
"default_instances value is not"
|
||||
" between min_instances and "
|
||||
"max_instances" % self.name)
|
||||
raise ValidationError(message=err_msg)
|
||||
|
||||
def _common_validate_properties(self, entitytype, properties):
|
||||
allowed_props = []
|
||||
required_props = []
|
||||
for p in entitytype.properties_def:
|
||||
@ -111,18 +153,6 @@ class EntityTemplate(object):
|
||||
what='Properties of template %s' % self.name,
|
||||
required=missingprop)
|
||||
|
||||
def _validate_capabilities(self):
|
||||
type_capabilities = self.type_definition.capabilities
|
||||
allowed_caps = []
|
||||
if type_capabilities:
|
||||
for tcap in type_capabilities:
|
||||
allowed_caps.append(tcap.name)
|
||||
capabilities = self.type_definition.get_value(self.CAPABILITIES,
|
||||
self.entity_tpl)
|
||||
if capabilities:
|
||||
self._common_validate_field(capabilities, allowed_caps,
|
||||
'Capabilities')
|
||||
|
||||
def _validate_field(self, template):
|
||||
if not isinstance(template, dict):
|
||||
raise MissingRequiredFieldError(
|
||||
|
@ -93,7 +93,7 @@ node_templates:
|
||||
capabilities:
|
||||
search_endpoint:
|
||||
properties:
|
||||
search_api_port: { get_input: search_api_port }
|
||||
port: { get_input: search_api_port }
|
||||
kibana:
|
||||
type: tosca.nodes.SoftwareComponent.Kibana
|
||||
requirements:
|
||||
|
@ -426,3 +426,83 @@ class ToscaTemplateValidationTest(TestCase):
|
||||
ex_err_msg = ('The template version "tosca_xyz" is invalid. '
|
||||
'The valid versions are: "%s"' % valid_versions)
|
||||
self.assertEqual(six.text_type(err), ex_err_msg)
|
||||
|
||||
def test_node_template_capabilities_properties(self):
|
||||
tpl_snippet = '''
|
||||
node_templates:
|
||||
server:
|
||||
type: tosca.nodes.Compute
|
||||
properties:
|
||||
# compute properties (flavor)
|
||||
disk_size: 10
|
||||
num_cpus: { get_input: cpus }
|
||||
mem_size: 4096
|
||||
capabilities:
|
||||
os:
|
||||
properties:
|
||||
architecture: x86_64
|
||||
type: Linux
|
||||
distribution: Fedora
|
||||
version: 18
|
||||
scalable:
|
||||
properties:
|
||||
min_instances: 1
|
||||
default_instances: 5
|
||||
'''
|
||||
expectedmessage = ('Properties of template server is missing '
|
||||
'required field: '
|
||||
'"[\'max_instances\']".')
|
||||
|
||||
self._single_node_template_content_test(
|
||||
tpl_snippet,
|
||||
exception.MissingRequiredFieldError,
|
||||
expectedmessage)
|
||||
|
||||
# validatating capability property values
|
||||
tpl_snippet = '''
|
||||
node_templates:
|
||||
server:
|
||||
type: tosca.nodes.WebServer
|
||||
capabilities:
|
||||
http_endpoint:
|
||||
properties:
|
||||
initiator: test
|
||||
'''
|
||||
expectedmessage = ('initiator: test is not an valid value '
|
||||
'"[source, target, peer]".')
|
||||
|
||||
self._single_node_template_content_test(
|
||||
tpl_snippet,
|
||||
exception.ValidationError,
|
||||
expectedmessage)
|
||||
|
||||
tpl_snippet = '''
|
||||
node_templates:
|
||||
server:
|
||||
type: tosca.nodes.Compute
|
||||
properties:
|
||||
# compute properties (flavor)
|
||||
disk_size: 10
|
||||
num_cpus: { get_input: cpus }
|
||||
mem_size: 4096
|
||||
capabilities:
|
||||
os:
|
||||
properties:
|
||||
architecture: x86_64
|
||||
type: Linux
|
||||
distribution: Fedora
|
||||
version: 18
|
||||
scalable:
|
||||
properties:
|
||||
min_instances: 1
|
||||
max_instances: 3
|
||||
default_instances: 5
|
||||
'''
|
||||
expectedmessage = ('Properties of template server : '
|
||||
'default_instances value is not between'
|
||||
' min_instances and max_instances')
|
||||
|
||||
self._single_node_template_content_test(
|
||||
tpl_snippet,
|
||||
exception.ValidationError,
|
||||
expectedmessage)
|
||||
|
Loading…
x
Reference in New Issue
Block a user