blob: e96ee4341e7f1af68959d2df270f29694e9348b1 [file] [log] [blame]
from toscalib.templates.constant import *
from toscalib.templates.property_item import PropertyItem
import logging
class CapabilityItem(object):
def __init__(self, definition):
self.name = definition.name
self.type = definition.type
self.definition = definition
self.properties = {}
self.id = PropertyItem(definition.id)
self.sub_pointer = None
self.parent_node = None
for prop in definition.properties.keys():
self.properties[prop] = PropertyItem(definition.properties[prop])
def _parse_pre_defined_content(self, content):
if content is None:
return
# if content.has_key(CAP_PROPERTIES):
if CAP_PROPERTIES in content:
prop_sec = content[CAP_PROPERTIES]
for prop_name in prop_sec.keys():
prop_item = self._get_property_item(prop_name)
if prop_item is not None:
prop_item._assign(prop_sec[prop_name])
def _propagate_substitution_value(self):
converge = True
for prop_item in iter(self.properties.values()):
converge = converge and prop_item._propagate_substitution_value()
if self.sub_pointer is None:
return converge
if self.id.value is None:
old_val = None
else:
old_val = self.id.value._get_value()[0]
if isinstance(self.sub_pointer, PropertyItem):
if self.sub_pointer.value is None:
logging.warning( 'Something is wrong, the cap id mapping target'+ self.sub_pointer.name+ ' should have a value!')
return converge
self.id._direct_assign(self.sub_pointer.value)
from toscalib.templates.node import Node
if isinstance(self.sub_pointer, Node):
if self.sub_pointer.id is None or self.sub_pointer.id.value is None:
logging.warning( 'Something is wrong, the cap id mapping target'+ self.sub_pointer.name+ ' should have a value!')
return converge
self.id._direct_assign(self.sub_pointer.id.value)
if self.id.value is None:
new_val = None
else:
new_val = self.id.value._get_value()[0]
return converge and (old_val == new_val)
def _get_property_item(self, prop_name):
# if self.properties.has_key(prop_name):
if prop_name in self.properties:
return self.properties[prop_name]
else:
logging.warning('Capability: '+ self.name+ ' of type: '+ self.type+ ' has no property: '+ prop_name)
return None
def _validate_capability(self, cap_name):
return self.definition._validate_capability(cap_name)
def _update_parent_node(self, parent):
self.parent_node = parent
for prop in iter(self.properties.values()):
prop._update_parent_node(parent)