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