cf29ea68c3d041af3a3b50f5684f8264d768e603
[vfc/nfvo/lcm.git] / lcm / pub / utils / toscaparser / vnfdmodel.py
1 import functools
2
3 from lcm.pub.utils.toscaparser import EtsiNsdInfoModel
4
5
6 class EtsiVnfdInfoModel(EtsiNsdInfoModel):
7
8     def __init__(self, path, params):
9         super(EtsiVnfdInfoModel, self).__init__(path, params)
10
11     def parseModel(self, tosca):
12         self.buidMetadata(tosca)
13         if hasattr(tosca, 'topology_template') and hasattr(tosca.topology_template, 'inputs'):
14             self.inputs = self.buildInputs(tosca.topology_template.inputs)
15
16         nodeTemplates = map(functools.partial(self.buildNode, inputs=tosca.inputs, parsed_params=tosca.parsed_params),
17                             tosca.nodetemplates)
18
19         self.services = self._get_all_services(nodeTemplates)
20         self.vcloud = self._get_all_vcloud(nodeTemplates)
21
22
23     def _get_all_services(self, nodeTemplates):
24         ret = []
25         for node in nodeTemplates:
26             if self.isService(node):
27                 service = {}
28                 service['serviceId'] = node['name']
29                 if 'description' in node:
30                     service['description'] = node['description']
31                 service['properties'] = node['properties']
32                 service['dependencies'] = map(lambda x: self.get_requirement_node_name(x),
33                                               self.getNodeDependencys(node))
34                 service['networks'] = map(lambda x: self.get_requirement_node_name(x), self.getVirtualLinks(node))
35
36                 ret.append(service)
37         return ret
38
39     def _get_all_vcloud(self, nodeTemplates):
40         rets = []
41         for node in nodeTemplates:
42             if self._isVcloud(node):
43                 ret = {}
44                 if 'vdc_name' in node['properties']:
45                     ret['vdc_name'] = node['properties']['vdc_name']
46                 else:
47                     ret['vdc_name'] = ""
48                 if 'storage_clusters' in node['properties']:
49                     ret['storage_clusters'] = node['properties']['storage_clusters']
50                 else:
51                     ret['storage_clusters'] = []
52
53                 rets.append(ret)
54         return rets
55
56     def _isVcloud(self, node):
57         return node['nodeType'].upper().find('.VCLOUD.') >= 0 or node['nodeType'].upper().endswith('.VCLOUD')