summaryrefslogtreecommitdiffstats
path: root/app/toscalib/utils/tosca_operate.py
diff options
context:
space:
mode:
Diffstat (limited to 'app/toscalib/utils/tosca_operate.py')
-rw-r--r--app/toscalib/utils/tosca_operate.py94
1 files changed, 94 insertions, 0 deletions
diff --git a/app/toscalib/utils/tosca_operate.py b/app/toscalib/utils/tosca_operate.py
new file mode 100644
index 0000000..bc67310
--- /dev/null
+++ b/app/toscalib/utils/tosca_operate.py
@@ -0,0 +1,94 @@
+#Author: Shu Shi
+#emaiL: shushi@research.att.com
+
+
+from toscalib.templates.node import Node
+import copy, logging
+#from __builtin__ import False
+
+def _create_new_node(template, type_name, node_name = None):
+ db = template.db
+# if db.NODE_TYPES.has_key(type_name) is False:
+ if type_name not in db.NODE_TYPES:
+ new_name = 'unknown_'+ str(template.node_index)
+ template.node_index = template.node_index + 1
+ new_node = Node(template, new_name, None)
+ logging.debug( 'New node: '+ new_name+ ' added')
+ return new_node
+
+ if node_name is None:
+ new_name = _get_basename(db.NODE_TYPES[type_name].name) + '_' + str(template.node_index)
+ template.node_index = template.node_index + 1
+ else:
+ new_name = node_name
+
+ new_node = Node(template, new_name, db.NODE_TYPES[type_name])
+
+ template._add_node(new_node)
+
+ logging.debug( 'New node: '+ new_name+ ' added')
+ return new_node
+
+
+def _create_new_template(template, type_name, prefix_name = None):
+ db = template.db
+ if prefix_name is None:
+ prefix = db.TEMPLATES[type_name].name + '_' + str(template.temp_index) + '_'
+ template.temp_index = template.temp_index + 1
+ elif prefix_name == 'NO_PREFIX':
+ prefix = ''
+ else:
+ prefix = prefix_name
+
+ new_temp = copy.deepcopy(db.TEMPLATES[type_name])
+ new_temp._update_prefix(prefix)
+ template.inputs.update(new_temp.inputs)
+ template.outputs.update(new_temp.outputs)
+ template.node_dict.update(new_temp.node_dict)
+ return template
+
+def _assign_property_value(node, property_name, value):
+# if node.properties.has_key(property_name) is False:
+ if property_name not in node.properties:
+ logging.warning( 'No property with name '+ property_name+ ' in the node '+ node.name)
+ return False
+ return node.properties[property_name]._assign(value)
+
+def _assign_capability_property_value(node, cap_name, prop_name, value):
+# if node.capabilities.has_key(cap_name) is False:
+ if cap_name not in node.capabilities:
+ logging.warning( 'No capability with name '+ cap_name+ ' in the node '+ node.name)
+ return False
+ cap_item = node.capabilities[cap_name]
+# if cap_item.properties.has_key(prop_name) is False:
+ if prop_name not in cap_item.properties:
+ logging.warning( 'No propoerty with name'+ prop_name+ ' in the node '+ node.name+ ' capability '+ cap_name)
+ return False
+ return cap_item.properties[prop_name]._assign(value)
+
+def _assign_requirement_value(node, requirement_name, value):
+
+ requirement_found = False
+ for req in node.requirements:
+ if req.name == requirement_name:
+ requirement_found = req
+ break
+ if requirement_found is False:
+ logging.warning( 'No requirement with name '+ requirement_name+ ' in the node '+ node.name)
+ return False
+ if isinstance(value, Node) is False:
+ logging.warning( 'Node value should be passed to requirement assignment')
+ return False
+ else:
+ if requirement_found._verify_node(value):
+ requirement_found._assign(value)
+ else:
+ logging.warning( 'Invalid requirement fulfillment for node '+ node.name+ '->'+ requirement_name)
+
+
+ return True
+
+def _get_basename(name):
+ names = name.split(".")
+ return names[len(names)-1]
+ \ No newline at end of file