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