Refactor vfc-lcm tosca parser logic
[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         self.local_storages = self._get_all_local_storage(nodeTemplates)
24         self.volume_storages = self._get_all_volume_storage(nodeTemplates)
25
26
27     def _get_all_services(self, nodeTemplates):
28         ret = []
29         for node in nodeTemplates:
30             if self.isService(node):
31                 service = {}
32                 service['serviceId'] = node['name']
33                 if 'description' in node:
34                     service['description'] = node['description']
35                 service['properties'] = node['properties']
36                 service['dependencies'] = map(lambda x: self.get_requirement_node_name(x),
37                                               self.getNodeDependencys(node))
38                 service['networks'] = map(lambda x: self.get_requirement_node_name(x), self.getVirtualLinks(node))
39
40                 ret.append(service)
41         return ret
42
43     def _get_all_vcloud(self, nodeTemplates):
44         rets = []
45         for node in nodeTemplates:
46             if self._isVcloud(node):
47                 ret = {}
48                 if 'vdc_name' in node['properties']:
49                     ret['vdc_name'] = node['properties']['vdc_name']
50                 else:
51                     ret['vdc_name'] = ""
52                 if 'storage_clusters' in node['properties']:
53                     ret['storage_clusters'] = node['properties']['storage_clusters']
54                 else:
55                     ret['storage_clusters'] = []
56
57                 rets.append(ret)
58         return rets
59
60     def _isVcloud(self, node):
61         return node['nodeType'].upper().find('.VCLOUD.') >= 0 or node['nodeType'].upper().endswith('.VCLOUD')
62
63     def _get_all_vcenter(self, nodeTemplates):
64         rets = []
65         for node in nodeTemplates:
66             if self._isVcenter(node):
67                 ret = {}
68                 if 'compute_clusters' in node['properties']:
69                     ret['compute_clusters'] = node['properties']['compute_clusters']
70                 else:
71                     ret['compute_clusters'] = []
72                 if 'storage_clusters' in node['properties']:
73                     ret['storage_clusters'] = node['properties']['storage_clusters']
74                 else:
75                     ret['storage_clusters'] = []
76                 if 'network_clusters' in node['properties']:
77                     ret['network_clusters'] = node['properties']['network_clusters']
78                 else:
79                     ret['network_clusters'] = []
80
81                 rets.append(ret)
82         return rets
83
84     def _isVcenter(self, node):
85         return node['nodeType'].upper().find('.VCENTER.') >= 0 or node['nodeType'].upper().endswith('.VCENTER')
86
87     def _get_all_image_file(self, nodeTemplates):
88         rets = []
89         for node in nodeTemplates:
90             if self._isImageFile(node):
91                 ret = {}
92                 ret['image_file_id'] = node['name']
93                 if 'description' in node:
94                     ret['description'] = node['description']
95                 ret['properties'] = node['properties']
96
97                 rets.append(ret)
98         return rets
99
100     def _isImageFile(self, node):
101         return node['nodeType'].upper().find('.IMAGEFILE.') >= 0 or node['nodeType'].upper().endswith('.IMAGEFILE')
102
103     def _get_all_local_storage(self, nodeTemplates):
104         rets = []
105         for node in nodeTemplates:
106             if self._isLocalStorage(node):
107                 ret = {}
108                 ret['local_storage_id'] = node['name']
109                 if 'description' in node:
110                     ret['description'] = node['description']
111                 ret['properties'] = node['properties']
112
113                 rets.append(ret)
114         return rets
115
116     def _isLocalStorage(self, node):
117         return node['nodeType'].upper().find('.LOCALSTORAGE.') >= 0 or node['nodeType'].upper().endswith(
118             '.LOCALSTORAGE')
119
120     def _get_all_volume_storage(self, nodeTemplates):
121         rets = []
122         for node in nodeTemplates:
123             if self._isVolumeStorage(node):
124                 ret = {}
125                 ret['volume_storage_id'] = node['name']
126                 if 'description' in node:
127                     ret['description'] = node['description']
128                 ret['properties'] = node['properties']
129                 ret['image_file'] = map(lambda x: self.get_requirement_node_name(x),
130                                         self.getRequirementByName(node, 'image_file'))
131
132                 rets.append(ret)
133         return rets
134
135     def _isVolumeStorage(self, node):
136         return node['nodeType'].upper().find('.VOLUMESTORAGE.') >= 0 or node['nodeType'].upper().endswith(
137             '.VOLUMESTORAGE')