From 5e9aa56b72d04df7389985976935f63318eb75d3 Mon Sep 17 00:00:00 2001 From: "ying.yunlong" Date: Fri, 25 Aug 2017 15:00:40 +0800 Subject: 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 --- lcm/pub/utils/toscaparser/basemodel.py | 3 +++ lcm/pub/utils/toscaparser/vnfdmodel.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) 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 -- cgit 1.2.3-korg