Add parser convert vnfd vcenter
[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         self.vcenter = self._get_all_vcenter(nodeTemplates)
22
23
24     def _get_all_services(self, nodeTemplates):
25         ret = []
26         for node in nodeTemplates:
27             if self.isService(node):
28                 service = {}
29                 service['serviceId'] = node['name']
30                 if 'description' in node:
31                     service['description'] = node['description']
32                 service['properties'] = node['properties']
33                 service['dependencies'] = map(lambda x: self.get_requirement_node_name(x),
34                                               self.getNodeDependencys(node))
35                 service['networks'] = map(lambda x: self.get_requirement_node_name(x), self.getVirtualLinks(node))
36
37                 ret.append(service)
38         return ret
39
40     def _get_all_vcloud(self, nodeTemplates):
41         rets = []
42         for node in nodeTemplates:
43             if self._isVcloud(node):
44                 ret = {}
45                 if 'vdc_name' in node['properties']:
46                     ret['vdc_name'] = node['properties']['vdc_name']
47                 else:
48                     ret['vdc_name'] = ""
49                 if 'storage_clusters' in node['properties']:
50                     ret['storage_clusters'] = node['properties']['storage_clusters']
51                 else:
52                     ret['storage_clusters'] = []
53
54                 rets.append(ret)
55         return rets
56
57     def _isVcloud(self, node):
58         return node['nodeType'].upper().find('.VCLOUD.') >= 0 or node['nodeType'].upper().endswith('.VCLOUD')
59
60     def _get_all_vcenter(self, nodeTemplates):
61         rets = []
62         for node in nodeTemplates:
63             if self._isVcenter(node):
64                 ret = {}
65                 if 'compute_clusters' in node['properties']:
66                     ret['compute_clusters'] = node['properties']['compute_clusters']
67                 else:
68                     ret['compute_clusters'] = []
69                 if 'storage_clusters' in node['properties']:
70                     ret['storage_clusters'] = node['properties']['storage_clusters']
71                 else:
72                     ret['storage_clusters'] = []
73                 if 'network_clusters' in node['properties']:
74                     ret['network_clusters'] = node['properties']['network_clusters']
75                 else:
76                     ret['network_clusters'] = []
77
78                 rets.append(ret)
79         return rets
80
81     def _isVcenter(self, node):
82         return node['nodeType'].upper().find('.VCENTER.') >= 0 or node['nodeType'].upper().endswith('.VCENTER')
83