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