Implement parse vnfd parseModel function 67/8767/1
authorying.yunlong <ying.yunlong@zte.com.cn>
Fri, 25 Aug 2017 07:00:40 +0000 (15:00 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Fri, 25 Aug 2017 07:00:40 +0000 (15:00 +0800)
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>
lcm/pub/utils/toscaparser/basemodel.py
lcm/pub/utils/toscaparser/vnfdmodel.py

index e624bd0..452e6e3 100644 (file)
@@ -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')
 
index 39e9a18..eac1f0b 100644 (file)
@@ -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