summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorying.yunlong <ying.yunlong@zte.com.cn>2017-08-25 15:00:40 +0800
committerying.yunlong <ying.yunlong@zte.com.cn>2017-08-25 15:00:40 +0800
commit5e9aa56b72d04df7389985976935f63318eb75d3 (patch)
treed9f1d1ad4045a5f80b5ae60248ab398ef7fc6b25
parentea57a3706022852db462a1feaea93b813a4383fd (diff)
Implement parse vnfd parseModel function
In order to parse vnfd package, add parseModel function. Change-Id: I7217803e9a790d4dc50b282422a14dd81730b76f Issue-ID: VFC-168 Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
-rw-r--r--lcm/pub/utils/toscaparser/basemodel.py3
-rw-r--r--lcm/pub/utils/toscaparser/vnfdmodel.py29
2 files changed, 32 insertions, 0 deletions
diff --git a/lcm/pub/utils/toscaparser/basemodel.py b/lcm/pub/utils/toscaparser/basemodel.py
index e624bd08..452e6e36 100644
--- a/lcm/pub/utils/toscaparser/basemodel.py
+++ b/lcm/pub/utils/toscaparser/basemodel.py
@@ -188,6 +188,9 @@ class BaseInfoModel(object):
return node['nodeType'].upper().find('.VIRTUALLINK.') >= 0 or node['nodeType'].upper().find('.VL.') >= 0 or \
node['nodeType'].upper().endswith('.VIRTUALLINK') or node['nodeType'].upper().endswith('.VL')
+ def isService(self, node):
+ return node['nodeType'].upper().find('.SERVICE.') >= 0 or node['nodeType'].upper().endswith('.SERVICE')
+
def get_requirement_node_name(self, req_value):
return self.get_prop_from_obj(req_value, 'node')
diff --git a/lcm/pub/utils/toscaparser/vnfdmodel.py b/lcm/pub/utils/toscaparser/vnfdmodel.py
index 39e9a18b..eac1f0b7 100644
--- a/lcm/pub/utils/toscaparser/vnfdmodel.py
+++ b/lcm/pub/utils/toscaparser/vnfdmodel.py
@@ -1,3 +1,5 @@
+import functools
+
from lcm.pub.utils.toscaparser import EtsiNsdInfoModel
@@ -5,3 +7,30 @@ class EtsiVnfdInfoModel(EtsiNsdInfoModel):
def __init__(self, path, params):
super(EtsiVnfdInfoModel, self).__init__(path, params)
+
+ def parseModel(self, tosca):
+ self.buidMetadata(tosca)
+ if hasattr(tosca, 'topology_template') and hasattr(tosca.topology_template, 'inputs'):
+ self.inputs = self.buildInputs(tosca.topology_template.inputs)
+
+ nodeTemplates = map(functools.partial(self.buildNode, inputs=tosca.inputs, parsed_params=tosca.parsed_params),
+ tosca.nodetemplates)
+
+ self.services = self._get_all_services(nodeTemplates)
+
+
+ def _get_all_services(self, nodeTemplates):
+ ret = []
+ for node in nodeTemplates:
+ if self.isService(node):
+ service = {}
+ service['serviceId'] = node['name']
+ if 'description' in node:
+ service['description'] = node['description']
+ service['properties'] = node['properties']
+ service['dependencies'] = map(lambda x: self.get_requirement_node_name(x),
+ self.getNodeDependencys(node))
+ service['networks'] = map(lambda x: self.get_requirement_node_name(x), self.getVirtualLinks(node))
+
+ ret.append(service)
+ return ret \ No newline at end of file