Merge "Added PolicyType definitions for TOSCA"
This commit is contained in:
		@@ -718,3 +718,32 @@ tosca.artifacts.Deployment.Image.VM.QCOW2:
 | 
			
		||||
  description: Virtual Machine (VM) image in QCOW v2 standard disk format
 | 
			
		||||
  mime_type: application/octet-stream
 | 
			
		||||
  file_ext: [ qcow2 ]
 | 
			
		||||
 | 
			
		||||
##########################################################################
 | 
			
		||||
 # Policy Type.
 | 
			
		||||
 # TOSCA Policy Types represent logical grouping of TOSCA nodes that have
 | 
			
		||||
 # an implied relationship and need to be orchestrated or managed together
 | 
			
		||||
 # to achieve some result.
 | 
			
		||||
##########################################################################
 | 
			
		||||
tosca.policies.Root:
 | 
			
		||||
  description: The TOSCA Policy Type all other TOSCA Policy Types derive from.
 | 
			
		||||
 | 
			
		||||
tosca.policies.Placement:
 | 
			
		||||
  derived_from: tosca.policies.Root
 | 
			
		||||
  description: The TOSCA Policy Type definition that is used to govern
 | 
			
		||||
    placement of TOSCA nodes or groups of nodes.
 | 
			
		||||
 | 
			
		||||
tosca.policies.Scaling:
 | 
			
		||||
  derived_from: tosca.policies.Root
 | 
			
		||||
  description: The TOSCA Policy Type definition that is used to govern
 | 
			
		||||
    scaling of TOSCA nodes or groups of nodes.
 | 
			
		||||
 | 
			
		||||
tosca.policies.Update:
 | 
			
		||||
  derived_from: tosca.policies.Root
 | 
			
		||||
  description: The TOSCA Policy Type definition that is used to govern
 | 
			
		||||
    update of TOSCA nodes or groups of nodes.
 | 
			
		||||
 | 
			
		||||
tosca.policies.Performance:
 | 
			
		||||
  derived_from: tosca.policies.Root
 | 
			
		||||
  description: The TOSCA Policy Type definition that is used to declare
 | 
			
		||||
    performance requirements for TOSCA nodes or groups of nodes.
 | 
			
		||||
 
 | 
			
		||||
@@ -48,6 +48,7 @@ class EntityType(object):
 | 
			
		||||
    CAPABILITY_PREFIX = 'tosca.capabilities.'
 | 
			
		||||
    INTERFACE_PREFIX = 'tosca.interfaces.'
 | 
			
		||||
    ARTIFACT_PREFIX = 'tosca.artifacts.'
 | 
			
		||||
    POLICY_PREFIX = 'tosca.policies.'
 | 
			
		||||
    # currently the data types are defined only for network
 | 
			
		||||
    # but may have changes in the future.
 | 
			
		||||
    DATATYPE_PREFIX = 'tosca.datatypes.network.'
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										45
									
								
								toscaparser/elements/policytype.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										45
									
								
								toscaparser/elements/policytype.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,45 @@
 | 
			
		||||
#    Licensed 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 toscaparser.elements.statefulentitytype import StatefulEntityType
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class PolicyType(StatefulEntityType):
 | 
			
		||||
    '''TOSCA built-in policies type.'''
 | 
			
		||||
 | 
			
		||||
    def __init__(self, ptype, custom_def=None):
 | 
			
		||||
        super(PolicyType, self).__init__(ptype, self.POLICY_PREFIX,
 | 
			
		||||
                                         custom_def)
 | 
			
		||||
        self.type = ptype
 | 
			
		||||
        self.properties = None
 | 
			
		||||
        if self.PROPERTIES in self.defs:
 | 
			
		||||
            self.properties = self.defs[self.PROPERTIES]
 | 
			
		||||
        self.parent_policies = self._get_parent_policies()
 | 
			
		||||
 | 
			
		||||
    def _get_parent_policies(self):
 | 
			
		||||
        policies = {}
 | 
			
		||||
        parent_policy = self.parent_type
 | 
			
		||||
        if parent_policy:
 | 
			
		||||
            while parent_policy != 'tosca.policies.Root':
 | 
			
		||||
                policies[parent_policy] = self.TOSCA_DEF[parent_policy]
 | 
			
		||||
                parent_policy = policies[parent_policy]['derived_from']
 | 
			
		||||
        return policies
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def parent_type(self):
 | 
			
		||||
        '''Return a policy this policy is derived from.'''
 | 
			
		||||
        return self.derived_from(self.defs)
 | 
			
		||||
 | 
			
		||||
    def get_policy(self, name):
 | 
			
		||||
        '''Return the definition of a policy field by name.'''
 | 
			
		||||
        if name in self.defs:
 | 
			
		||||
            return self.defs[name]
 | 
			
		||||
@@ -14,6 +14,7 @@ from toscaparser.common import exception
 | 
			
		||||
from toscaparser.elements.artifacttype import ArtifactTypeDef
 | 
			
		||||
import toscaparser.elements.interfaces as ifaces
 | 
			
		||||
from toscaparser.elements.nodetype import NodeType
 | 
			
		||||
from toscaparser.elements.policytype import PolicyType
 | 
			
		||||
from toscaparser.tests.base import TestCase
 | 
			
		||||
 | 
			
		||||
compute_type = NodeType('tosca.nodes.Compute')
 | 
			
		||||
@@ -33,6 +34,11 @@ artif_vm_iso_type = ArtifactTypeDef('tosca.artifacts.'
 | 
			
		||||
                                    'Deployment.Image.VM.ISO')
 | 
			
		||||
artif_vm_qcow2_type = ArtifactTypeDef('tosca.artifacts.'
 | 
			
		||||
                                      'Deployment.Image.VM.QCOW2')
 | 
			
		||||
policy_root_type = PolicyType('tosca.policies.Root')
 | 
			
		||||
policy_placement_type = PolicyType('tosca.policies.Placement')
 | 
			
		||||
policy_scaling_type = PolicyType('tosca.policies.Scaling')
 | 
			
		||||
policy_update_type = PolicyType('tosca.policies.Update')
 | 
			
		||||
policy_performance_type = PolicyType('tosca.policies.Performance')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ToscaDefTest(TestCase):
 | 
			
		||||
@@ -258,3 +264,52 @@ class ToscaDefTest(TestCase):
 | 
			
		||||
                                get_artifact(name) for name in
 | 
			
		||||
                                artif_vm_qcow2_type.defs],
 | 
			
		||||
                                key=lambda x: str(x)))
 | 
			
		||||
 | 
			
		||||
    def test_policies(self):
 | 
			
		||||
        self.assertEqual('tosca.policies.Root',
 | 
			
		||||
                         policy_placement_type.parent_type)
 | 
			
		||||
        self.assertEqual({}, policy_placement_type.parent_policies)
 | 
			
		||||
        self.assertEqual(sorted(['tosca.policies.Root',
 | 
			
		||||
                                 'The TOSCA Policy Type definition that is '
 | 
			
		||||
                                 'used to govern placement of TOSCA nodes or '
 | 
			
		||||
                                 'groups of nodes.'],
 | 
			
		||||
                                key=lambda x: str(x)),
 | 
			
		||||
                         sorted([policy_placement_type.get_policy(name)
 | 
			
		||||
                                for name in policy_placement_type.defs],
 | 
			
		||||
                                key=lambda x: str(x)))
 | 
			
		||||
 | 
			
		||||
        self.assertEqual('tosca.policies.Root',
 | 
			
		||||
                         policy_scaling_type.parent_type)
 | 
			
		||||
        self.assertEqual({}, policy_scaling_type.parent_policies)
 | 
			
		||||
        self.assertEqual(sorted(['tosca.policies.Root',
 | 
			
		||||
                                 'The TOSCA Policy Type definition that is '
 | 
			
		||||
                                 'used to govern scaling of TOSCA nodes or '
 | 
			
		||||
                                 'groups of nodes.'],
 | 
			
		||||
                                key=lambda x: str(x)),
 | 
			
		||||
                         sorted([policy_scaling_type.get_policy(name)
 | 
			
		||||
                                for name in policy_scaling_type.defs],
 | 
			
		||||
                                key=lambda x: str(x)))
 | 
			
		||||
 | 
			
		||||
        self.assertEqual('tosca.policies.Root',
 | 
			
		||||
                         policy_update_type.parent_type)
 | 
			
		||||
        self.assertEqual({}, policy_update_type.parent_policies)
 | 
			
		||||
        self.assertEqual(sorted(['tosca.policies.Root',
 | 
			
		||||
                                 'The TOSCA Policy Type definition that is '
 | 
			
		||||
                                 'used to govern update of TOSCA nodes or '
 | 
			
		||||
                                 'groups of nodes.'],
 | 
			
		||||
                                key=lambda x: str(x)),
 | 
			
		||||
                         sorted([policy_update_type.get_policy(name)
 | 
			
		||||
                                for name in policy_update_type.defs],
 | 
			
		||||
                                key=lambda x: str(x)))
 | 
			
		||||
 | 
			
		||||
        self.assertEqual('tosca.policies.Root',
 | 
			
		||||
                         policy_performance_type.parent_type)
 | 
			
		||||
        self.assertEqual({}, policy_performance_type.parent_policies)
 | 
			
		||||
        self.assertEqual(sorted(['tosca.policies.Root',
 | 
			
		||||
                                 'The TOSCA Policy Type definition that is '
 | 
			
		||||
                                 'used to declare performance requirements '
 | 
			
		||||
                                 'for TOSCA nodes or groups of nodes.'],
 | 
			
		||||
                                key=lambda x: str(x)),
 | 
			
		||||
                         sorted([policy_performance_type.get_policy(name)
 | 
			
		||||
                                for name in policy_performance_type.defs],
 | 
			
		||||
                                key=lambda x: str(x)))
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user