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
 | 
					  description: Virtual Machine (VM) image in QCOW v2 standard disk format
 | 
				
			||||||
  mime_type: application/octet-stream
 | 
					  mime_type: application/octet-stream
 | 
				
			||||||
  file_ext: [ qcow2 ]
 | 
					  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.'
 | 
					    CAPABILITY_PREFIX = 'tosca.capabilities.'
 | 
				
			||||||
    INTERFACE_PREFIX = 'tosca.interfaces.'
 | 
					    INTERFACE_PREFIX = 'tosca.interfaces.'
 | 
				
			||||||
    ARTIFACT_PREFIX = 'tosca.artifacts.'
 | 
					    ARTIFACT_PREFIX = 'tosca.artifacts.'
 | 
				
			||||||
 | 
					    POLICY_PREFIX = 'tosca.policies.'
 | 
				
			||||||
    # currently the data types are defined only for network
 | 
					    # currently the data types are defined only for network
 | 
				
			||||||
    # but may have changes in the future.
 | 
					    # but may have changes in the future.
 | 
				
			||||||
    DATATYPE_PREFIX = 'tosca.datatypes.network.'
 | 
					    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
 | 
					from toscaparser.elements.artifacttype import ArtifactTypeDef
 | 
				
			||||||
import toscaparser.elements.interfaces as ifaces
 | 
					import toscaparser.elements.interfaces as ifaces
 | 
				
			||||||
from toscaparser.elements.nodetype import NodeType
 | 
					from toscaparser.elements.nodetype import NodeType
 | 
				
			||||||
 | 
					from toscaparser.elements.policytype import PolicyType
 | 
				
			||||||
from toscaparser.tests.base import TestCase
 | 
					from toscaparser.tests.base import TestCase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
compute_type = NodeType('tosca.nodes.Compute')
 | 
					compute_type = NodeType('tosca.nodes.Compute')
 | 
				
			||||||
@@ -33,6 +34,11 @@ artif_vm_iso_type = ArtifactTypeDef('tosca.artifacts.'
 | 
				
			|||||||
                                    'Deployment.Image.VM.ISO')
 | 
					                                    'Deployment.Image.VM.ISO')
 | 
				
			||||||
artif_vm_qcow2_type = ArtifactTypeDef('tosca.artifacts.'
 | 
					artif_vm_qcow2_type = ArtifactTypeDef('tosca.artifacts.'
 | 
				
			||||||
                                      'Deployment.Image.VM.QCOW2')
 | 
					                                      '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):
 | 
					class ToscaDefTest(TestCase):
 | 
				
			||||||
@@ -258,3 +264,52 @@ class ToscaDefTest(TestCase):
 | 
				
			|||||||
                                get_artifact(name) for name in
 | 
					                                get_artifact(name) for name in
 | 
				
			||||||
                                artif_vm_qcow2_type.defs],
 | 
					                                artif_vm_qcow2_type.defs],
 | 
				
			||||||
                                key=lambda x: str(x)))
 | 
					                                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