ARIA-149 Enhance operation configuration

Project: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/commit/88587f82
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/tree/88587f82
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/diff/88587f82

Branch: refs/heads/ARIA-149-functions-in-operation-configuration
Commit: 88587f8280df12fb228cbed524ce95e652ba2441
Parents: 13bcb0e
Author: Tal Liron <[email protected]>
Authored: Wed Apr 19 20:07:33 2017 -0500
Committer: Tal Liron <[email protected]>
Committed: Thu May 18 13:18:27 2017 -0500

----------------------------------------------------------------------
 aria/modeling/contraints.py                     |  18 ++
 aria/modeling/service_common.py                 |   6 +
 aria/modeling/service_instance.py               |   7 +-
 aria/modeling/service_template.py               |   2 +-
 .../execution_plugin/instantiation.py           |  20 +-
 .../simple_v1_0/assignments.py                  |   4 +-
 .../simple_v1_0/modeling/__init__.py            |  14 ++
 .../simple_v1_0/modeling/artifacts.py           |   2 +-
 .../simple_v1_0/modeling/capabilities.py        |  22 +-
 .../simple_v1_0/modeling/data_types.py          |  16 ++
 .../simple_v1_0/modeling/interfaces.py          |  30 ++-
 .../simple_v1_0/modeling/parameters.py          | 211 +++++++++++++++++++
 .../simple_v1_0/modeling/policies.py            |   2 +
 .../simple_v1_0/modeling/properties.py          | 202 ------------------
 .../simple_v1_0/modeling/requirements.py        |  18 +-
 .../modeling/substitution_mappings.py           |   4 +
 .../simple_v1_0/templates.py                    |  14 +-
 .../aria_extension_tosca/simple_v1_0/types.py   |  24 +--
 .../node-cellar/node-cellar.yaml                |  20 +-
 19 files changed, 374 insertions(+), 262 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/aria/modeling/contraints.py
----------------------------------------------------------------------
diff --git a/aria/modeling/contraints.py b/aria/modeling/contraints.py
index 107b010..4f53fac 100644
--- a/aria/modeling/contraints.py
+++ b/aria/modeling/contraints.py
@@ -26,3 +26,21 @@ class NodeTemplateConstraint(object):
         Returns true is the target matches the constraint for the source.
         """
         raise NotImplementedError
+<<<<<<< HEAD
+=======
+
+
+class NodeTemplateContainerHolder(object):
+    """
+    Wrapper that allows using a :class:`aria.modeling.models.NodeTemplate` 
model directly as the
+    ``container_holder`` argument for :func:`evaluate`.
+    """
+
+    def __init__(self, node_template):
+        self.container = node_template
+        self.service = None
+
+    @property
+    def service_template(self):
+        return self.container.service_template
+>>>>>>> ARIA-139 Support attributes

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/aria/modeling/service_common.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_common.py b/aria/modeling/service_common.py
index e9c96a4..8504451 100644
--- a/aria/modeling/service_common.py
+++ b/aria/modeling/service_common.py
@@ -15,6 +15,8 @@
 
 # pylint: disable=no-self-argument, no-member, abstract-method
 
+import datetime
+
 from sqlalchemy import (
     Column,
     Text,
@@ -211,6 +213,10 @@ class ParameterBase(TemplateModelMixin, 
caching.HasCachedMethods):
         """
         Wraps an arbitrary value as a parameter. The type will be guessed via 
introspection.
 
+        For primitive types, we will prefer their TOSCA aliases. See the 
`TOSCA Simple Profile v1.0
+        cos01 specification 
<http://docs.oasis-open.org/tosca/TOSCA-Simple-Profile-YAML/v1.0/cos01
+        /TOSCA-Simple-Profile-YAML-v1.0-cos01.html#_Toc373867862>`__
+
         :param name: Parameter name
         :type name: basestring
         :param value: Parameter value

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/aria/modeling/service_instance.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_instance.py 
b/aria/modeling/service_instance.py
index 41a388d..633023a 100644
--- a/aria/modeling/service_instance.py
+++ b/aria/modeling/service_instance.py
@@ -20,7 +20,8 @@ from sqlalchemy import (
     Text,
     Integer,
     Enum,
-    Boolean
+    Boolean,
+    PickleType
 )
 from sqlalchemy import DateTime
 from sqlalchemy.ext.associationproxy import association_proxy
@@ -1733,7 +1734,7 @@ class OperationBase(InstanceModelMixin):
     description = Column(Text)
     relationship_edge = Column(Boolean)
     implementation = Column(Text)
-    configuration = Column(modeling_types.StrictDict(key_cls=basestring))
+    configuration = Column(PickleType)
     dependencies = Column(modeling_types.StrictList(item_cls=basestring))
     executor = Column(Text)
     max_attempts = Column(Integer)
@@ -1756,6 +1757,8 @@ class OperationBase(InstanceModelMixin):
         if arguments:
             for k, v in arguments.iteritems():
                 self.inputs[k] = models.Parameter.wrap(k, v)
+                # TEMP
+                self.inputs[k].coerce_values(True)
 
     @property
     def as_raw(self):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/aria/modeling/service_template.py
----------------------------------------------------------------------
diff --git a/aria/modeling/service_template.py 
b/aria/modeling/service_template.py
index 1eb95a3..82860e8 100644
--- a/aria/modeling/service_template.py
+++ b/aria/modeling/service_template.py
@@ -1864,7 +1864,7 @@ class OperationTemplateBase(TemplateModelMixin):
     description = Column(Text)
     relationship_edge = Column(Boolean)
     implementation = Column(Text)
-    configuration = Column(modeling_types.StrictDict(key_cls=basestring))
+    configuration = Column(PickleType)
     dependencies = Column(modeling_types.StrictList(item_cls=basestring))
     executor = Column(Text)
     max_attempts = Column(Integer)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/aria/orchestrator/execution_plugin/instantiation.py
----------------------------------------------------------------------
diff --git a/aria/orchestrator/execution_plugin/instantiation.py 
b/aria/orchestrator/execution_plugin/instantiation.py
index c09434e..96ddbe1 100644
--- a/aria/orchestrator/execution_plugin/instantiation.py
+++ b/aria/orchestrator/execution_plugin/instantiation.py
@@ -19,6 +19,7 @@ from ...utils.type import full_type_name
 from ...utils.collections import OrderedDict
 from ...parser import validation
 from ...parser.consumption import ConsumptionContext
+from ...modeling.functions import Function
 
 
 def configure_operation(operation):
@@ -50,6 +51,7 @@ def configure_operation(operation):
 
     return arguments
 
+
 def _configure_local(operation):
     """
     Local operation.
@@ -110,7 +112,7 @@ def _get_process(value):
     _validate_type(value, dict, 'process')
     for k, v in value.iteritems():
         if k == 'eval_python':
-            value[k] = _str_to_bool(v, 'process.eval_python')
+            value[k] = _coerce_bool(v, 'process.eval_python')
         elif k == 'cwd':
             _validate_type(v, basestring, 'process.cwd')
         elif k == 'command_prefix':
@@ -132,11 +134,11 @@ def _get_ssh(value):
     _validate_type(value, dict, 'ssh')
     for k, v in value.iteritems():
         if k == 'use_sudo':
-            value[k] = _str_to_bool(v, 'ssh.use_sudo')
+            value[k] = _coerce_bool(v, 'ssh.use_sudo')
         elif k == 'hide_output':
             value[k] = _dict_to_list(v, 'ssh.hide_output')
         elif k == 'warn_only':
-            value[k] = _str_to_bool(v, 'ssh.warn_only')
+            value[k] = _coerce_bool(v, 'ssh.warn_only')
         elif k == 'user':
             _validate_type(v, basestring, 'ssh.user')
         elif k == 'password':
@@ -155,6 +157,8 @@ def _get_ssh(value):
 
 
 def _validate_type(value, the_type, name):
+    if isinstance(value, Function):
+        return
     if not isinstance(value, the_type):
         context = ConsumptionContext.get_thread_local()
         context.validation.report('"{0}" configuration is not a {1}'
@@ -162,9 +166,11 @@ def _validate_type(value, the_type, name):
                                   level=validation.Issue.BETWEEN_TYPES)
 
 
-def _str_to_bool(value, name):
+def _coerce_bool(value, name):
     if value is None:
         return None
+    if isinstance(value, bool):
+        return value
     _validate_type(value, basestring, name)
     if value == 'true':
         return True
@@ -182,10 +188,6 @@ def _dict_to_list(the_dict, name):
     value = []
     for k in sorted(the_dict):
         v = the_dict[k]
-        if not isinstance(v, basestring):
-            context = ConsumptionContext.get_thread_local()
-            context.validation.report('"{0}.{1}" configuration is not a 
string: {2}'
-                                      .format(name, k, repr(v)),
-                                      level=validation.Issue.BETWEEN_TYPES)
+        _validate_type(v, basestring, '{0}.{1}'.format(name, k))
         value.append(v)
     return value

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/assignments.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/assignments.py 
b/extensions/aria_extension_tosca/simple_v1_0/assignments.py
index d929ce0..79f6377 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/assignments.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/assignments.py
@@ -23,7 +23,7 @@ from aria.parser.presentation import (AsIsPresentation, 
has_fields, allow_unknow
 
 from .filters import NodeFilter
 from .misc import Description, OperationImplementation
-from .modeling.properties import get_assigned_and_defined_property_values
+from .modeling.parameters import get_assigned_and_defined_parameter_values
 from .presentation.extensible import ExtensiblePresentation
 from .presentation.field_validators import (node_template_or_type_validator,
                                             
relationship_template_or_type_validator,
@@ -428,7 +428,7 @@ class ArtifactAssignment(ExtensiblePresentation):
 
     @cachedmethod
     def _get_property_values(self, context):
-        return FrozenDict(get_assigned_and_defined_property_values(context, 
self))
+        return FrozenDict(get_assigned_and_defined_parameter_values(context, 
self, 'property'))
 
     @cachedmethod
     def _validate(self, context):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/__init__.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/modeling/__init__.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/__init__.py
index 99389e4..e53c706 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/__init__.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/__init__.py
@@ -26,6 +26,8 @@ import re
 from types import FunctionType
 from datetime import datetime
 
+from ruamel import yaml 
+
 from aria.parser.validation import Issue
 from aria.utils.collections import StrictDict
 from aria.modeling.models import (Type, ServiceTemplate, NodeTemplate,
@@ -34,6 +36,7 @@ from aria.modeling.models import (Type, ServiceTemplate, 
NodeTemplate,
                                   SubstitutionTemplateMapping, 
InterfaceTemplate, OperationTemplate,
                                   ArtifactTemplate, Metadata, Parameter, 
PluginSpecification)
 
+from .parameters import coerce_parameter_value
 from .constraints import (Equal, GreaterThan, GreaterOrEqual, LessThan, 
LessOrEqual, InRange,
                           ValidValues, Length, MinLength, MaxLength, Pattern)
 from ..data_types import coerce_value
@@ -388,6 +391,17 @@ def create_operation_template_model(context, 
service_template, operation):
             for dependency in dependencies:
                 key, value = split_prefix(dependency)
                 if key is not None:
+                    # Parse as YAML
+                    try:
+                        value = yaml.load(value)
+                    except yaml.parser.MarkedYAMLError as e:
+                        context.validation.report(
+                            'YAML parser {0} in operation configuration: {1}'
+                            .format(e.problem, value),
+                            locator=implementation._locator,
+                            level=Issue.FIELD)
+                        continue
+                    value = coerce_parameter_value(context, implementation, 
None, value).value
                     if model.configuration is None:
                         model.configuration = {}
                     set_nested(model.configuration, key.split('.'), value)

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/artifacts.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/modeling/artifacts.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/artifacts.py
index 4f61ef5..dd9eeb4 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/artifacts.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/artifacts.py
@@ -15,11 +15,11 @@
 
 from aria.utils.collections import OrderedDict
 
+
 #
 # NodeType, NodeTemplate
 #
 
-
 def get_inherited_artifact_definitions(context, presentation, 
for_presentation=None):
 
     if hasattr(presentation, '_get_type'):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/capabilities.py
----------------------------------------------------------------------
diff --git 
a/extensions/aria_extension_tosca/simple_v1_0/modeling/capabilities.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/capabilities.py
index 6df7177..0d83d94 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/capabilities.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/capabilities.py
@@ -16,8 +16,9 @@
 from aria.utils.collections import deepcopy_with_locators, OrderedDict
 from aria.parser.validation import Issue
 
-from .properties import (convert_property_definitions_to_values, 
merge_raw_property_definitions,
-                         get_assigned_and_defined_property_values)
+from .parameters import (convert_parameter_definitions_to_values, 
merge_raw_parameter_definitions,
+                         get_assigned_and_defined_parameter_values)
+
 
 #
 # CapabilityType
@@ -38,6 +39,7 @@ def get_inherited_valid_source_types(context, presentation):
 
     return valid_source_types
 
+
 #
 # NodeType
 #
@@ -92,6 +94,7 @@ def get_inherited_capability_definitions(context, 
presentation, for_presentation
 
     return capability_definitions
 
+
 #
 # NodeTemplate
 #
@@ -127,8 +130,9 @@ def get_template_capabilities(context, presentation):
                 capability_assignment = capability_assignments[capability_name]
 
                 # Assign properties
-                values = get_assigned_and_defined_property_values(context,
-                                                                  
our_capability_assignment)
+                values = get_assigned_and_defined_parameter_values(context,
+                                                                   
our_capability_assignment,
+                                                                   'property')
                 if values:
                     capability_assignment._raw['properties'] = values
             else:
@@ -139,6 +143,7 @@ def get_template_capabilities(context, presentation):
 
     return capability_assignments
 
+
 #
 # Utils
 #
@@ -150,24 +155,25 @@ def 
convert_capability_from_definition_to_assignment(context, presentation, cont
 
     properties = presentation.properties
     if properties is not None:
-        raw['properties'] = convert_property_definitions_to_values(context, 
properties)
+        raw['properties'] = convert_parameter_definitions_to_values(context, 
properties)
 
     # TODO attributes
 
     return CapabilityAssignment(name=presentation._name, raw=raw, 
container=container)
 
+
 def merge_capability_definition_from_type(context, presentation, 
capability_definition):
     raw_properties = OrderedDict()
 
     # Merge properties from type
     the_type = capability_definition._get_type(context)
     type_property_defintions = the_type._get_properties(context)
-    merge_raw_property_definitions(context, presentation, raw_properties, 
type_property_defintions,
+    merge_raw_parameter_definitions(context, presentation, raw_properties, 
type_property_defintions,
                                    'properties')
 
     # Merge our properties
-    merge_raw_property_definitions(context, presentation, raw_properties,
-                                   capability_definition.properties, 
'properties')
+    merge_raw_parameter_definitions(context, presentation, raw_properties,
+                                    capability_definition.properties, 
'properties')
 
     if raw_properties:
         capability_definition._raw['properties'] = raw_properties

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/data_types.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/modeling/data_types.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/data_types.py
index 3952785..c0d79e5 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/data_types.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/data_types.py
@@ -26,6 +26,7 @@ from aria.parser.validation import Issue
 from .functions import get_function
 from ..presentation.types import get_type_by_full_or_shorthand_name
 
+
 #
 # DataType
 #
@@ -50,6 +51,7 @@ def get_inherited_constraints(context, presentation):
 
     return constraints
 
+
 def coerce_data_type_value(context, presentation, data_type, entry_schema, 
constraints, value, # pylint: disable=unused-argument
                            aspect):
     """
@@ -121,6 +123,7 @@ def coerce_data_type_value(context, presentation, 
data_type, entry_schema, const
 
     return value
 
+
 def validate_data_type_name(context, presentation):
     """
     Makes sure the complex data type's name is not that of a built-in type.
@@ -132,6 +135,7 @@ def validate_data_type_name(context, presentation):
                                   % safe_repr(name),
                                   locator=presentation._locator, 
level=Issue.BETWEEN_TYPES)
 
+
 #
 # PropertyDefinition, AttributeDefinition, EntrySchema, DataType
 #
@@ -172,6 +176,7 @@ def get_data_type(context, presentation, field_name, 
allow_none=False):
     # Try primitive data type
     return get_primitive_data_type(type_name)
 
+
 #
 # PropertyDefinition, EntrySchema
 #
@@ -195,6 +200,7 @@ def get_property_constraints(context, presentation):
 
     return constraints
 
+
 #
 # ConstraintClause
 #
@@ -310,6 +316,7 @@ def apply_constraint_to_value(context, presentation, 
constraint_clause, value):
 
     return True
 
+
 #
 # Repository
 #
@@ -326,6 +333,7 @@ def get_data_type_value(context, presentation, field_name, 
type_name):
                                   locator=presentation._locator, 
level=Issue.BETWEEN_TYPES)
     return None
 
+
 #
 # Utils
 #
@@ -345,6 +353,7 @@ PRIMITIVE_DATA_TYPES = {
     'boolean': bool,
     'null': None.__class__}
 
+
 @implements_specification('3.2.1-3', 'tosca-simple-1.0')
 def get_primitive_data_type(type_name):
     """
@@ -358,6 +367,7 @@ def get_primitive_data_type(type_name):
 
     return PRIMITIVE_DATA_TYPES.get(type_name)
 
+
 def get_data_type_name(the_type):
     """
     Returns the name of the type, whether it's a DataType, a primitive type, 
or another class.
@@ -365,6 +375,7 @@ def get_data_type_name(the_type):
 
     return the_type._name if hasattr(the_type, '_name') else 
full_type_name(the_type)
 
+
 def coerce_value(context, presentation, the_type, entry_schema, constraints, 
value, aspect=None): # pylint: disable=too-many-return-statements
     """
     Returns the value after it's coerced to its type, reporting validation 
errors if it cannot be
@@ -410,6 +421,7 @@ def coerce_value(context, presentation, the_type, 
entry_schema, constraints, val
     # Coerce to primitive type
     return coerce_to_primitive(context, presentation, the_type, constraints, 
value, aspect)
 
+
 def coerce_to_primitive(context, presentation, primitive_type, constraints, 
value, aspect=None):
     """
     Returns the value after it's coerced to a primitive type, translating 
exceptions to validation
@@ -435,6 +447,7 @@ def coerce_to_primitive(context, presentation, 
primitive_type, constraints, valu
 
     return value
 
+
 def coerce_to_data_type_class(context, presentation, cls, entry_schema, 
constraints, value,
                               aspect=None):
     """
@@ -463,6 +476,7 @@ def coerce_to_data_type_class(context, presentation, cls, 
entry_schema, constrai
 
     return value
 
+
 def apply_constraints_to_value(context, presentation, constraints, value):
     """
     Applies all constraints to the value. If the value conforms, returns the 
value. If it does not
@@ -478,6 +492,7 @@ def apply_constraints_to_value(context, presentation, 
constraints, value):
             value = None
     return value
 
+
 def get_container_data_type(presentation):
     if presentation is None:
         return None
@@ -485,6 +500,7 @@ def get_container_data_type(presentation):
         return presentation
     return get_container_data_type(presentation._container)
 
+
 def report_issue_for_bad_format(context, presentation, the_type, value, 
aspect, e):
     if aspect == 'default':
         aspect = '"default" value'

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/interfaces.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/modeling/interfaces.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/interfaces.py
index 3e6aa6f..abf2c64 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/interfaces.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/interfaces.py
@@ -13,11 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from aria.utils.collections import merge, deepcopy_with_locators, OrderedDict
+from aria.utils.collections import (merge, deepcopy_with_locators, OrderedDict)
 from aria.parser.presentation import get_locator
 from aria.parser.validation import Issue
 
-from .properties import (coerce_property_value, 
convert_property_definitions_to_values)
+from .parameters import (coerce_parameter_value, 
convert_parameter_definitions_to_values)
+
 
 #
 # InterfaceType
@@ -45,6 +46,7 @@ def get_inherited_operations(context, presentation):
 
     return operations
 
+
 #
 # InterfaceDefinition
 #
@@ -73,6 +75,7 @@ def get_and_override_input_definitions_from_type(context, 
presentation):
 
     return inputs
 
+
 def get_and_override_operation_definitions_from_type(context, presentation):
     """
     Returns our operation definitions added on top of those of the interface 
type, if specified.
@@ -96,6 +99,7 @@ def get_and_override_operation_definitions_from_type(context, 
presentation):
 
     return operations
 
+
 #
 # NodeType, RelationshipType, GroupType
 #
@@ -124,6 +128,7 @@ def get_inherited_interface_definitions(context, 
presentation, type_name, for_pr
 
     return interfaces
 
+
 #
 # NodeTemplate, RelationshipTemplate, GroupTemplate
 #
@@ -186,6 +191,7 @@ def get_template_interfaces(context, presentation, 
type_name):
 
     return template_interfaces
 
+
 #
 # Utils
 #
@@ -200,13 +206,14 @@ def 
convert_interface_definition_from_type_to_template(context, presentation, co
     raw = convert_interface_definition_from_type_to_raw_template(context, 
presentation)
     return InterfaceAssignment(name=presentation._name, raw=raw, 
container=container)
 
+
 def convert_interface_definition_from_type_to_raw_template(context, 
presentation): # pylint: disable=invalid-name
     raw = OrderedDict()
 
     # Copy default values for inputs
     inputs = presentation._get_inputs(context)
     if inputs is not None:
-        raw['inputs'] = convert_property_definitions_to_values(context, inputs)
+        raw['inputs'] = convert_parameter_definitions_to_values(context, 
inputs)
 
     # Copy operations
     operations = presentation._get_operations(context)
@@ -221,11 +228,12 @@ def 
convert_interface_definition_from_type_to_raw_template(context, presentation
                 raw[operation_name]['implementation'] = 
deepcopy_with_locators(implementation._raw)
             inputs = operation.inputs
             if inputs is not None:
-                raw[operation_name]['inputs'] = 
convert_property_definitions_to_values(context,
+                raw[operation_name]['inputs'] = 
convert_parameter_definitions_to_values(context,
                                                                                
        inputs)
 
     return raw
 
+
 def 
convert_requirement_interface_definitions_from_type_to_raw_template(context, 
raw_requirement, # pylint: disable=invalid-name
                                                                         
interface_definitions):
     if not interface_definitions:
@@ -240,6 +248,7 @@ def 
convert_requirement_interface_definitions_from_type_to_raw_template(context,
         else:
             raw_requirement['interfaces'][interface_name] = raw_interface
 
+
 def merge_interface(context, presentation, interface_assignment, 
our_interface_assignment,
                     interface_definition, interface_name):
     # Assign/merge interface inputs
@@ -282,6 +291,7 @@ def merge_interface(context, presentation, 
interface_assignment, our_interface_a
                               our_input_assignments, input_definitions, 
interface_name,
                               operation_name, presentation)
 
+
 def merge_raw_input_definition(context, the_raw_input, our_input, 
interface_name, operation_name,
                                presentation, type_name):
     # Check if we changed the type
@@ -305,6 +315,7 @@ def merge_raw_input_definition(context, the_raw_input, 
our_input, interface_name
     # Merge
     merge(the_raw_input, our_input._raw)
 
+
 def merge_input_definitions(context, inputs, our_inputs, interface_name, 
operation_name,
                             presentation, type_name):
     for input_name, our_input in our_inputs.iteritems():
@@ -314,6 +325,7 @@ def merge_input_definitions(context, inputs, our_inputs, 
interface_name, operati
         else:
             inputs[input_name] = our_input._clone(presentation)
 
+
 def merge_raw_input_definitions(context, raw_inputs, our_inputs, 
interface_name, operation_name,
                                 presentation, type_name):
     for input_name, our_input in our_inputs.iteritems():
@@ -323,6 +335,7 @@ def merge_raw_input_definitions(context, raw_inputs, 
our_inputs, interface_name,
         else:
             raw_inputs[input_name] = deepcopy_with_locators(our_input._raw)
 
+
 def merge_raw_operation_definition(context, raw_operation, our_operation, 
interface_name,
                                    presentation, type_name):
     if not isinstance(our_operation._raw, dict):
@@ -353,6 +366,7 @@ def merge_raw_operation_definition(context, raw_operation, 
our_operation, interf
             raw_operation['implementation'] = \
                 deepcopy_with_locators(our_operation._raw['implementation'])
 
+
 def merge_operation_definitions(context, operations, our_operations, 
interface_name, presentation,
                                 type_name):
     if not our_operations:
@@ -364,6 +378,7 @@ def merge_operation_definitions(context, operations, 
our_operations, interface_n
         else:
             operations[operation_name] = our_operation._clone(presentation)
 
+
 def merge_raw_operation_definitions(context, raw_operations, our_operations, 
interface_name,
                                     presentation, type_name):
     for operation_name, our_operation in our_operations.iteritems():
@@ -378,6 +393,7 @@ def merge_raw_operation_definitions(context, 
raw_operations, our_operations, int
         else:
             raw_operations[operation_name] = 
deepcopy_with_locators(our_operation._raw)
 
+
 # From either an InterfaceType or an InterfaceDefinition:
 def merge_interface_definition(context, interface, our_source, presentation, 
type_name):
     if hasattr(our_source, 'type'):
@@ -408,6 +424,7 @@ def merge_interface_definition(context, interface, 
our_source, presentation, typ
         merge_raw_operation_definitions(context, interface._raw, 
our_operations, our_source._name,
                                         presentation, type_name)
 
+
 def merge_interface_definitions(context, interfaces, our_interfaces, 
presentation,
                                 for_presentation=None):
     if not our_interfaces:
@@ -419,12 +436,14 @@ def merge_interface_definitions(context, interfaces, 
our_interfaces, presentatio
         else:
             interfaces[name] = our_interface._clone(for_presentation)
 
+
 def merge_interface_definitions_from_their_types(context, interfaces, 
presentation):
     for interface in interfaces.itervalues():
         the_type = interface._get_type(context) # InterfaceType
         if the_type is not None:
             merge_interface_definition(context, interface, the_type, 
presentation, 'type')
 
+
 def assign_raw_inputs(context, values, assignments, definitions, 
interface_name, operation_name,
                       presentation):
     if not assignments:
@@ -454,9 +473,10 @@ def assign_raw_inputs(context, values, assignments, 
definitions, interface_name,
         # Note: default value has already been assigned
 
         # Coerce value
-        values['inputs'][input_name] = coerce_property_value(context, 
assignment, definition,
+        values['inputs'][input_name] = coerce_parameter_value(context, 
assignment, definition,
                                                              assignment.value)
 
+
 def validate_required_inputs(context, presentation, assignment, definition, 
original_assignment,
                              interface_name, operation_name=None):
     input_definitions = definition.inputs

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/parameters.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/modeling/parameters.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/parameters.py
new file mode 100644
index 0000000..52d074c
--- /dev/null
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/parameters.py
@@ -0,0 +1,211 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+from aria.utils.collections import (merge, deepcopy_with_locators, OrderedDict)
+from aria.utils.formatting import pluralize
+from aria.parser.presentation import Value
+from aria.parser.validation import Issue
+
+from .data_types import coerce_value
+
+
+#
+# ArtifactType, DataType, CapabilityType, RelationshipType, NodeType, 
GroupType, PolicyType
+#
+
+def get_inherited_parameter_definitions(context, presentation, field_name, 
for_presentation=None):
+    """
+    Returns our parameter definitions added on top of those of our parent, if 
we have one
+    (recursively).
+
+    Allows overriding all aspects of parent properties except data type.
+    """
+
+    # Get definitions from parent
+    # If we inherit from a primitive, it does not have a parent:
+    parent = presentation._get_parent(context) if hasattr(presentation, 
'_get_parent') else None
+    definitions = get_inherited_parameter_definitions(context, parent, 
field_name,
+                                                      
for_presentation=presentation) \
+                                                      if parent is not None 
else OrderedDict()
+
+    # Add/merge our definitions
+    # If we inherit from a primitive, it does not have our field
+    our_definitions = getattr(presentation, field_name, None)
+    if our_definitions:
+        our_definitions_clone = OrderedDict()
+        for name, our_definition in our_definitions.iteritems():
+            our_definitions_clone[name] = 
our_definition._clone(for_presentation)
+        our_definitions = our_definitions_clone
+        merge_parameter_definitions(context, presentation, definitions, 
our_definitions, field_name)
+
+    for definition in definitions.itervalues():
+        definition._reset_method_cache()
+
+    return definitions
+
+
+#
+# NodeTemplate, RelationshipTemplate, GroupTemplate, PolicyTemplate
+#
+
+def get_assigned_and_defined_parameter_values(context, presentation, 
field_name):
+    """
+    Returns the assigned property values while making sure they are defined in 
our type.
+
+    The property definition's default value, if available, will be used if we 
did not assign it.
+
+    Makes sure that required properties indeed end up with a value.
+    """
+
+    values = OrderedDict()
+
+    the_type = presentation._get_type(context)
+    field_name_plural = pluralize(field_name)
+    assignments = getattr(presentation, field_name_plural)
+    get_fn_name = '_get_{0}'.format(field_name_plural)
+    definitions = getattr(the_type, get_fn_name)(context) if the_type is not 
None else None
+
+    # Fill in our assignments, but make sure they are defined
+    if assignments:
+        for name, value in assignments.iteritems():
+            if (definitions is not None) and (name in definitions):
+                definition = definitions[name]
+                values[name] = coerce_parameter_value(context, value, 
definition, value.value)
+            else:
+                context.validation.report('assignment to undefined {0} "{1}" 
in "{2}"'
+                                          .format(field_name, name, 
presentation._fullname),
+                                          locator=value._locator, 
level=Issue.BETWEEN_TYPES)
+
+    # Fill in defaults from the definitions
+    if definitions:
+        for name, definition in definitions.iteritems():
+            if values.get(name) is None:
+                values[name] = coerce_parameter_value(context, presentation, 
definition,
+                                                     definition.default)
+
+    validate_required_values(context, presentation, values, definitions)
+
+    return values
+
+
+#
+# TopologyTemplate
+#
+
+def get_parameter_values(context, presentation, field_name):
+    values = OrderedDict()
+
+    parameters = getattr(presentation, field_name)
+
+    # Fill in defaults and values
+    if parameters:
+        for name, parameter in parameters.iteritems():
+            if values.get(name) is None:
+                if hasattr(parameter, 'value') and (parameter.value is not 
None):
+                    # For parameters only:
+                    values[name] = coerce_parameter_value(context, 
presentation, parameter,
+                                                         parameter.value)
+                else:
+                    default = parameter.default if hasattr(parameter, 
'default') else None
+                    values[name] = coerce_parameter_value(context, 
presentation, parameter, default)
+
+    return values
+
+
+#
+# Utils
+#
+
+def validate_required_values(context, presentation, values, definitions):
+    """
+    Check if required properties have not been assigned.
+    """
+
+    if not definitions:
+        return
+    for name, definition in definitions.iteritems():
+        if getattr(definition, 'required', False) \
+            and ((values is None) or (values.get(name) is None)):
+            context.validation.report('required property "%s" is not assigned 
a value in "%s"'
+                                      % (name, presentation._fullname),
+                                      
locator=presentation._get_child_locator('properties'),
+                                      level=Issue.BETWEEN_TYPES)
+
+
+def merge_raw_parameter_definition(context, presentation, 
raw_property_definition,
+                                   our_property_definition, field_name, 
property_name):
+    # Check if we changed the type
+    # TODO: allow a sub-type?
+    type1 = raw_property_definition.get('type')
+    type2 = our_property_definition.type
+    if type1 != type2:
+        context.validation.report(
+            'override changes type from "%s" to "%s" for property "%s" in "%s"'
+            % (type1, type2, property_name, presentation._fullname),
+            locator=presentation._get_child_locator(field_name, property_name),
+            level=Issue.BETWEEN_TYPES)
+
+    merge(raw_property_definition, our_property_definition._raw)
+
+
+def merge_raw_parameter_definitions(context, presentation, 
raw_property_definitions,
+                                    our_property_definitions, field_name):
+    if not our_property_definitions:
+        return
+    for property_name, our_property_definition in 
our_property_definitions.iteritems():
+        if property_name in raw_property_definitions:
+            raw_property_definition = raw_property_definitions[property_name]
+            merge_raw_parameter_definition(context, presentation, 
raw_property_definition,
+                                          our_property_definition, field_name, 
property_name)
+        else:
+            raw_property_definitions[property_name] = \
+                deepcopy_with_locators(our_property_definition._raw)
+
+
+def merge_parameter_definitions(context, presentation, property_definitions,
+                                our_property_definitions, field_name):
+    if not our_property_definitions:
+        return
+    for property_name, our_property_definition in 
our_property_definitions.iteritems():
+        if property_name in property_definitions:
+            property_definition = property_definitions[property_name]
+            merge_raw_parameter_definition(context, presentation, 
property_definition._raw,
+                                           our_property_definition, 
field_name, property_name)
+        else:
+            property_definitions[property_name] = our_property_definition
+
+
+# Works on properties, inputs, and parameters
+def coerce_parameter_value(context, presentation, definition, value, 
aspect=None):
+    the_type = definition._get_type(context) if definition is not None else 
None
+    entry_schema = definition.entry_schema if definition is not None else None
+    constraints = definition._get_constraints(context) \
+        if ((definition is not None) and hasattr(definition, 
'_get_constraints')) else None
+    value = coerce_value(context, presentation, the_type, entry_schema, 
constraints, value, aspect)
+    if (the_type is not None) and hasattr(the_type, '_name'):
+        type_name = the_type._name
+    else:
+        type_name = getattr(definition, 'type', None)
+    description = getattr(definition, 'description', None)
+    description = description.value if description is not None else None
+    return Value(type_name, value, description)
+
+
+def convert_parameter_definitions_to_values(context, definitions):
+    values = OrderedDict()
+    for name, definition in definitions.iteritems():
+        default = definition.default
+        values[name] = coerce_parameter_value(context, definition, definition, 
default)
+    return values

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/policies.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/modeling/policies.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/policies.py
index fba1972..7dd803b 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/policies.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/policies.py
@@ -15,6 +15,7 @@
 
 from ..presentation.types import convert_shorthand_to_full_type_name
 
+
 #
 # PolicyType
 #
@@ -49,6 +50,7 @@ def get_inherited_targets(context, presentation):
 
     return node_types, group_types
 
+
 #
 # PolicyTemplate
 #

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/properties.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/modeling/properties.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/properties.py
deleted file mode 100644
index 9c3ea42..0000000
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/properties.py
+++ /dev/null
@@ -1,202 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-from aria.utils.collections import merge, deepcopy_with_locators, OrderedDict
-from aria.parser.presentation import Value
-from aria.parser.validation import Issue
-
-from .data_types import coerce_value
-
-#
-# ArtifactType, DataType, CapabilityType, RelationshipType, NodeType, 
GroupType, PolicyType
-#
-
-# Works on properties, parameters, inputs, and attributes
-def get_inherited_property_definitions(context, presentation, field_name, 
for_presentation=None):
-    """
-    Returns our property definitions added on top of those of our parent, if 
we have one
-    (recursively).
-
-    Allows overriding all aspects of parent properties except data type.
-    """
-
-    # Get definitions from parent
-    # If we inherit from a primitive, it does not have a parent:
-    parent = presentation._get_parent(context) if hasattr(presentation, 
'_get_parent') else None
-    definitions = get_inherited_property_definitions(context, parent, 
field_name,
-                                                     
for_presentation=presentation) \
-                                                     if parent is not None 
else OrderedDict()
-
-    # Add/merge our definitions
-    # If we inherit from a primitive, it does not have our field
-    our_definitions = getattr(presentation, field_name, None)
-    if our_definitions:
-        our_definitions_clone = OrderedDict()
-        for name, our_definition in our_definitions.iteritems():
-            our_definitions_clone[name] = 
our_definition._clone(for_presentation)
-        our_definitions = our_definitions_clone
-        merge_property_definitions(context, presentation, definitions, 
our_definitions, field_name)
-
-    for definition in definitions.itervalues():
-        definition._reset_method_cache()
-
-    return definitions
-
-#
-# NodeTemplate, RelationshipTemplate, GroupTemplate, PolicyTemplate
-#
-
-def get_assigned_and_defined_property_values(context, presentation, 
field_name='property',
-                                             field_name_plural='properties'):
-    """
-    Returns the assigned property values while making sure they are defined in 
our type.
-
-    The property definition's default value, if available, will be used if we 
did not assign it.
-
-    Makes sure that required properties indeed end up with a value.
-    """
-
-    values = OrderedDict()
-
-    the_type = presentation._get_type(context)
-    assignments = getattr(presentation, field_name_plural)
-    get_fn_name = '_get_{0}'.format(field_name_plural)
-    definitions = getattr(the_type, get_fn_name)(context) if the_type is not 
None else None
-
-    # Fill in our assignments, but make sure they are defined
-    if assignments:
-        for name, value in assignments.iteritems():
-            if (definitions is not None) and (name in definitions):
-                definition = definitions[name]
-                values[name] = coerce_property_value(context, value, 
definition, value.value)
-            else:
-                context.validation.report('assignment to undefined {0} "{1}" 
in "{2}"'
-                                          .format(field_name, name, 
presentation._fullname),
-                                          locator=value._locator, 
level=Issue.BETWEEN_TYPES)
-
-    # Fill in defaults from the definitions
-    if definitions:
-        for name, definition in definitions.iteritems():
-            if values.get(name) is None:
-                values[name] = coerce_property_value(context, presentation, 
definition,
-                                                     definition.default)
-
-    validate_required_values(context, presentation, values, definitions)
-
-    return values
-
-#
-# TopologyTemplate
-#
-
-def get_parameter_values(context, presentation, field_name):
-    values = OrderedDict()
-
-    parameters = getattr(presentation, field_name)
-
-    # Fill in defaults and values
-    if parameters:
-        for name, parameter in parameters.iteritems():
-            if values.get(name) is None:
-                if hasattr(parameter, 'value') and (parameter.value is not 
None):
-                    # For parameters only:
-                    values[name] = coerce_property_value(context, 
presentation, parameter,
-                                                         parameter.value)
-                else:
-                    default = parameter.default if hasattr(parameter, 
'default') else None
-                    values[name] = coerce_property_value(context, 
presentation, parameter, default)
-
-    return values
-
-#
-# Utils
-#
-
-def validate_required_values(context, presentation, values, definitions):
-    """
-    Check if required properties have not been assigned.
-    """
-
-    if not definitions:
-        return
-    for name, definition in definitions.iteritems():
-        if getattr(definition, 'required', False) \
-            and ((values is None) or (values.get(name) is None)):
-            context.validation.report('required property "%s" is not assigned 
a value in "%s"'
-                                      % (name, presentation._fullname),
-                                      
locator=presentation._get_child_locator('properties'),
-                                      level=Issue.BETWEEN_TYPES)
-
-def merge_raw_property_definition(context, presentation, 
raw_property_definition,
-                                  our_property_definition, field_name, 
property_name):
-    # Check if we changed the type
-    # TODO: allow a sub-type?
-    type1 = raw_property_definition.get('type')
-    type2 = our_property_definition.type
-    if type1 != type2:
-        context.validation.report(
-            'override changes type from "%s" to "%s" for property "%s" in "%s"'
-            % (type1, type2, property_name, presentation._fullname),
-            locator=presentation._get_child_locator(field_name, property_name),
-            level=Issue.BETWEEN_TYPES)
-
-    merge(raw_property_definition, our_property_definition._raw)
-
-def merge_raw_property_definitions(context, presentation, 
raw_property_definitions,
-                                   our_property_definitions, field_name):
-    if not our_property_definitions:
-        return
-    for property_name, our_property_definition in 
our_property_definitions.iteritems():
-        if property_name in raw_property_definitions:
-            raw_property_definition = raw_property_definitions[property_name]
-            merge_raw_property_definition(context, presentation, 
raw_property_definition,
-                                          our_property_definition, field_name, 
property_name)
-        else:
-            raw_property_definitions[property_name] = \
-                deepcopy_with_locators(our_property_definition._raw)
-
-def merge_property_definitions(context, presentation, property_definitions,
-                               our_property_definitions, field_name):
-    if not our_property_definitions:
-        return
-    for property_name, our_property_definition in 
our_property_definitions.iteritems():
-        if property_name in property_definitions:
-            property_definition = property_definitions[property_name]
-            merge_raw_property_definition(context, presentation, 
property_definition._raw,
-                                          our_property_definition, field_name, 
property_name)
-        else:
-            property_definitions[property_name] = our_property_definition
-
-# Works on properties, inputs, and parameters
-def coerce_property_value(context, presentation, definition, value, 
aspect=None):
-    the_type = definition._get_type(context) if definition is not None else 
None
-    entry_schema = definition.entry_schema if definition is not None else None
-    constraints = definition._get_constraints(context) \
-        if ((definition is not None) and hasattr(definition, 
'_get_constraints')) else None
-    value = coerce_value(context, presentation, the_type, entry_schema, 
constraints, value, aspect)
-    if (the_type is not None) and hasattr(the_type, '_name'):
-        type_name = the_type._name
-    else:
-        type_name = getattr(definition, 'type', None)
-    description = getattr(definition, 'description', None)
-    description = description.value if description is not None else None
-    return Value(type_name, value, description)
-
-def convert_property_definitions_to_values(context, definitions):
-    values = OrderedDict()
-    for name, definition in definitions.iteritems():
-        default = definition.default
-        values[name] = coerce_property_value(context, definition, definition, 
default)
-    return values

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/requirements.py
----------------------------------------------------------------------
diff --git 
a/extensions/aria_extension_tosca/simple_v1_0/modeling/requirements.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/requirements.py
index 2a68da2..7181549 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/modeling/requirements.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/modeling/requirements.py
@@ -14,13 +14,14 @@
 # limitations under the License.
 
 from aria.parser.validation import Issue
-from aria.utils.collections import deepcopy_with_locators, OrderedDict
+from aria.utils.collections import (deepcopy_with_locators, OrderedDict)
 
-from .properties import (convert_property_definitions_to_values, 
validate_required_values,
-                         coerce_property_value)
+from .parameters import (convert_parameter_definitions_to_values, 
validate_required_values,
+                         coerce_parameter_value)
 from .interfaces import 
(convert_requirement_interface_definitions_from_type_to_raw_template,
                          merge_interface_definitions, merge_interface, 
validate_required_inputs)
 
+
 #
 # NodeType
 #
@@ -49,6 +50,7 @@ def get_inherited_requirement_definitions(context, 
presentation):
 
     return requirement_definitions
 
+
 #
 # NodeTemplate
 #
@@ -127,6 +129,7 @@ def get_template_requirements(context, presentation):
 
     return requirement_assignments
 
+
 #
 # Utils
 #
@@ -195,7 +198,7 @@ def 
convert_requirement_from_definition_to_assignment(context, requirement_defin
             if relationship_property_definitions:
                 # Convert property definitions to values
                 raw['relationship']['properties'] = \
-                    convert_property_definitions_to_values(context,
+                    convert_parameter_definitions_to_values(context,
                                                            
relationship_property_definitions)
 
         # These are our interface definitions
@@ -229,6 +232,7 @@ def 
convert_requirement_from_definition_to_assignment(context, requirement_defin
         relationship_property_definitions, \
         relationship_interface_definitions
 
+
 def add_requirement_assignments(context, presentation, requirement_assignments,
                                 requirement_definitions, 
our_requirement_assignments):
     for requirement_name, our_requirement_assignment in 
our_requirement_assignments:
@@ -258,6 +262,7 @@ def add_requirement_assignments(context, presentation, 
requirement_assignments,
                                       
locator=our_requirement_assignment._locator,
                                       level=Issue.BETWEEN_TYPES)
 
+
 def merge_requirement_assignment(context, relationship_property_definitions,
                                  relationship_interface_definitions, 
requirement, our_requirement):
     our_capability = our_requirement.capability
@@ -283,6 +288,7 @@ def merge_requirement_assignment(context, 
relationship_property_definitions,
                                                   
relationship_interface_definitions,
                                                   requirement, 
our_relationship)
 
+
 def merge_requirement_assignment_relationship(context, presentation, 
property_definitions,
                                               interface_definitions, 
requirement, our_relationship):
     our_relationship_properties = our_relationship._raw.get('properties')
@@ -296,7 +302,7 @@ def merge_requirement_assignment_relationship(context, 
presentation, property_de
             if property_name in property_definitions:
                 definition = property_definitions[property_name]
                 requirement._raw['relationship']['properties'][property_name] 
= \
-                    coerce_property_value(context, presentation, definition, 
prop)
+                    coerce_parameter_value(context, presentation, definition, 
prop)
             else:
                 context.validation.report(
                     'relationship property "%s" not declared at definition of 
requirement "%s"'
@@ -330,6 +336,7 @@ def merge_requirement_assignment_relationship(context, 
presentation, property_de
                        presentation._container._container._fullname),
                     locator=our_relationship._locator, 
level=Issue.BETWEEN_TYPES)
 
+
 def validate_requirement_assignment(context, presentation, 
requirement_assignment,
                                     relationship_property_definitions,
                                     relationship_interface_definitions):
@@ -348,6 +355,7 @@ def validate_requirement_assignment(context, presentation, 
requirement_assignmen
             validate_required_inputs(context, presentation, 
interface_assignment,
                                      relationship_interface_definition, None, 
interface_name)
 
+
 def get_first_requirement(requirement_definitions, name):
     if requirement_definitions is not None:
         for requirement_name, requirement_definition in 
requirement_definitions:

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/modeling/substitution_mappings.py
----------------------------------------------------------------------
diff --git 
a/extensions/aria_extension_tosca/simple_v1_0/modeling/substitution_mappings.py 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/substitution_mappings.py
index c1e21de..8f7ec4c 100644
--- 
a/extensions/aria_extension_tosca/simple_v1_0/modeling/substitution_mappings.py
+++ 
b/extensions/aria_extension_tosca/simple_v1_0/modeling/substitution_mappings.py
@@ -16,6 +16,7 @@
 from aria.utils.formatting import safe_repr
 from aria.parser.validation import Issue
 
+
 def validate_subtitution_mappings_requirement(context, presentation):
     if not validate_format(context, presentation, 'requirement'):
         return
@@ -57,6 +58,7 @@ def validate_subtitution_mappings_requirement(context, 
presentation):
             locator=presentation._locator, level=Issue.BETWEEN_TYPES)
         return
 
+
 def validate_subtitution_mappings_capability(context, presentation):
     if not validate_format(context, presentation, 'capability'):
         return
@@ -99,6 +101,7 @@ def validate_subtitution_mappings_capability(context, 
presentation):
             % (capability_type._name, presentation._name, 
type_capability_type._name),
             locator=presentation._locator, level=Issue.BETWEEN_TYPES)
 
+
 #
 # Utils
 #
@@ -114,6 +117,7 @@ def validate_format(context, presentation, name):
         return False
     return True
 
+
 def get_node_template(context, presentation, name):
     node_template_name = presentation._raw[0]
     node_template = context.presentation.get_from_dict('service_template', 
'topology_template',

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/templates.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/templates.py 
b/extensions/aria_extension_tosca/simple_v1_0/templates.py
index ce6b5d9..0e80fbb 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/templates.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/templates.py
@@ -26,7 +26,7 @@ from .assignments import (PropertyAssignment, 
AttributeAssignment, RequirementAs
 from .definitions import ParameterDefinition
 from .filters import NodeFilter
 from .misc import (Description, MetaData, Repository, Import, 
SubstitutionMappings)
-from .modeling.properties import (get_assigned_and_defined_property_values, 
get_parameter_values)
+from .modeling.parameters import (get_assigned_and_defined_parameter_values, 
get_parameter_values)
 from .modeling.interfaces import get_template_interfaces
 from .modeling.requirements import get_template_requirements
 from .modeling.capabilities import get_template_capabilities
@@ -157,7 +157,11 @@ class NodeTemplate(ExtensiblePresentation):
 
     @cachedmethod
     def _get_property_values(self, context):
-        return FrozenDict(get_assigned_and_defined_property_values(context, 
self))
+        return FrozenDict(get_assigned_and_defined_parameter_values(context, 
self, 'property'))
+
+    @cachedmethod
+    def _get_attribute_default_values(self, context):
+        return FrozenDict(get_assigned_and_defined_parameter_values(context, 
self, 'attribute'))
 
     @cachedmethod
     def _get_attribute_default_values(self, context):
@@ -281,7 +285,7 @@ class RelationshipTemplate(ExtensiblePresentation):
 
     @cachedmethod
     def _get_property_values(self, context):
-        return FrozenDict(get_assigned_and_defined_property_values(context, 
self))
+        return FrozenDict(get_assigned_and_defined_parameter_values(context, 
self, 'property'))
 
     @cachedmethod
     def _get_interfaces(self, context):
@@ -363,7 +367,7 @@ class GroupTemplate(ExtensiblePresentation):
 
     @cachedmethod
     def _get_property_values(self, context):
-        return FrozenDict(get_assigned_and_defined_property_values(context, 
self))
+        return FrozenDict(get_assigned_and_defined_parameter_values(context, 
self, 'property'))
 
     @cachedmethod
     def _get_interfaces(self, context):
@@ -427,7 +431,7 @@ class PolicyTemplate(ExtensiblePresentation):
 
     @cachedmethod
     def _get_property_values(self, context):
-        return FrozenDict(get_assigned_and_defined_property_values(context, 
self))
+        return FrozenDict(get_assigned_and_defined_parameter_values(context, 
self, 'property'))
 
     @cachedmethod
     def _get_targets(self, context):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/extensions/aria_extension_tosca/simple_v1_0/types.py
----------------------------------------------------------------------
diff --git a/extensions/aria_extension_tosca/simple_v1_0/types.py 
b/extensions/aria_extension_tosca/simple_v1_0/types.py
index bc80eb9..d97b89c 100644
--- a/extensions/aria_extension_tosca/simple_v1_0/types.py
+++ b/extensions/aria_extension_tosca/simple_v1_0/types.py
@@ -33,9 +33,9 @@ from .modeling.capabilities import 
(get_inherited_valid_source_types,
                                     get_inherited_capability_definitions)
 from .modeling.data_types import (get_data_type, get_inherited_constraints, 
coerce_data_type_value,
                                   validate_data_type_name)
-from .modeling.interfaces import get_inherited_interface_definitions, 
get_inherited_operations
+from .modeling.interfaces import (get_inherited_interface_definitions, 
get_inherited_operations)
 from .modeling.policies import get_inherited_targets
-from .modeling.properties import get_inherited_property_definitions
+from .modeling.parameters import get_inherited_parameter_definitions
 from .modeling.requirements import get_inherited_requirement_definitions
 from .presentation.extensible import ExtensiblePresentation
 from .presentation.field_getters import data_type_class_getter
@@ -115,7 +115,7 @@ class ArtifactType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_properties(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'properties'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'properties'))
 
     def _validate(self, context):
         super(ArtifactType, self)._validate(context)
@@ -201,7 +201,7 @@ class DataType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_properties(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'properties'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'properties'))
 
     @cachedmethod
     def _get_constraints(self, context):
@@ -307,7 +307,7 @@ class CapabilityType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_properties(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'properties'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'properties'))
 
     @cachedmethod
     def _get_valid_source_types(self, context):
@@ -385,7 +385,7 @@ class InterfaceType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_inputs(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'inputs'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'inputs'))
 
     @cachedmethod
     def _get_operations(self, context):
@@ -493,11 +493,11 @@ class RelationshipType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_properties(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'properties'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'properties'))
 
     @cachedmethod
     def _get_attributes(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'attributes'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'attributes'))
 
     @cachedmethod
     def _get_interfaces(self, context):
@@ -624,11 +624,11 @@ class NodeType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_properties(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'properties'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'properties'))
 
     @cachedmethod
     def _get_attributes(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'attributes'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'attributes'))
 
     @cachedmethod
     def _get_requirements(self, context):
@@ -760,7 +760,7 @@ class GroupType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_properties(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'properties'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'properties'))
 
     @cachedmethod
     def _get_interfaces(self, context):
@@ -848,7 +848,7 @@ class PolicyType(ExtensiblePresentation):
 
     @cachedmethod
     def _get_properties(self, context):
-        return FrozenDict(get_inherited_property_definitions(context, self, 
'properties'))
+        return FrozenDict(get_inherited_parameter_definitions(context, self, 
'properties'))
 
     @cachedmethod
     def _get_targets(self, context):

http://git-wip-us.apache.org/repos/asf/incubator-ariatosca/blob/88587f82/tests/resources/service-templates/tosca-simple-1.0/node-cellar/node-cellar.yaml
----------------------------------------------------------------------
diff --git 
a/tests/resources/service-templates/tosca-simple-1.0/node-cellar/node-cellar.yaml
 
b/tests/resources/service-templates/tosca-simple-1.0/node-cellar/node-cellar.yaml
index 8e80640..6bbff79 100644
--- 
a/tests/resources/service-templates/tosca-simple-1.0/node-cellar/node-cellar.yaml
+++ 
b/tests/resources/service-templates/tosca-simple-1.0/node-cellar/node-cellar.yaml
@@ -161,16 +161,7 @@ topology_template:
             relationship:
               interfaces:
                 Configure:
-                  target_changed:
-                    implementation:
-                      primary: changed.sh
-                      dependencies:
-                        #- { concat: [ process.args.1 >, mongodb ] }
-                        - process.args.1 > mongodb
-                        - process.args.2 > host
-                        - ssh.user > admin
-                        - ssh.password > 1234
-                        - ssh.use_sudo > true
+                  target_changed: changed.sh
 
     nginx:
       type: nginx.Nginx
@@ -251,6 +242,15 @@ topology_template:
         Standard:
           inputs:
             openstack_credential: { get_input: openstack_credential }
+          create:
+            implementation:
+              primary: create_data_volume.sh
+              dependencies:
+                - "process.args.1 > { get_property: [ SELF, size ] }"
+                - "process.args.2 > { get_attribute: [ SELF, tosca_id ] }"
+                - ssh.user > admin
+                - ssh.password > '1234'
+                - ssh.use_sudo > true
 
   groups:
   

Reply via email to