1 # Copyright 2017 ZTE Corporation.
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
17 from lcm.pub.utils.toscaparser import EtsiNsdInfoModel
20 class EtsiVnfdInfoModel(EtsiNsdInfoModel):
22 def __init__(self, path, params):
23 super(EtsiVnfdInfoModel, self).__init__(path, params)
25 def parseModel(self, tosca):
26 self.buidMetadata(tosca)
27 if hasattr(tosca, 'topology_template') and hasattr(tosca.topology_template, 'inputs'):
28 self.inputs = self.buildInputs(tosca.topology_template.inputs)
30 nodeTemplates = map(functools.partial(self.buildNode, inputs=tosca.inputs, parsed_params=tosca.parsed_params),
33 self.services = self._get_all_services(nodeTemplates)
34 self.vcloud = self._get_all_vcloud(nodeTemplates)
35 self.vcenter = self._get_all_vcenter(nodeTemplates)
36 self.image_files = self._get_all_image_file(nodeTemplates)
37 self.local_storages = self._get_all_local_storage(nodeTemplates)
38 self.volume_storages = self._get_all_volume_storage(nodeTemplates)
41 def _get_all_services(self, nodeTemplates):
43 for node in nodeTemplates:
44 if self.isService(node):
46 service['serviceId'] = node['name']
47 if 'description' in node:
48 service['description'] = node['description']
49 service['properties'] = node['properties']
50 service['dependencies'] = map(lambda x: self.get_requirement_node_name(x),
51 self.getNodeDependencys(node))
52 service['networks'] = map(lambda x: self.get_requirement_node_name(x), self.getVirtualLinks(node))
57 def _get_all_vcloud(self, nodeTemplates):
59 for node in nodeTemplates:
60 if self._isVcloud(node):
62 if 'vdc_name' in node['properties']:
63 ret['vdc_name'] = node['properties']['vdc_name']
66 if 'storage_clusters' in node['properties']:
67 ret['storage_clusters'] = node['properties']['storage_clusters']
69 ret['storage_clusters'] = []
74 def _isVcloud(self, node):
75 return node['nodeType'].upper().find('.VCLOUD.') >= 0 or node['nodeType'].upper().endswith('.VCLOUD')
77 def _get_all_vcenter(self, nodeTemplates):
79 for node in nodeTemplates:
80 if self._isVcenter(node):
82 if 'compute_clusters' in node['properties']:
83 ret['compute_clusters'] = node['properties']['compute_clusters']
85 ret['compute_clusters'] = []
86 if 'storage_clusters' in node['properties']:
87 ret['storage_clusters'] = node['properties']['storage_clusters']
89 ret['storage_clusters'] = []
90 if 'network_clusters' in node['properties']:
91 ret['network_clusters'] = node['properties']['network_clusters']
93 ret['network_clusters'] = []
98 def _isVcenter(self, node):
99 return node['nodeType'].upper().find('.VCENTER.') >= 0 or node['nodeType'].upper().endswith('.VCENTER')
101 def _get_all_image_file(self, nodeTemplates):
103 for node in nodeTemplates:
104 if self._isImageFile(node):
106 ret['image_file_id'] = node['name']
107 if 'description' in node:
108 ret['description'] = node['description']
109 ret['properties'] = node['properties']
114 def _isImageFile(self, node):
115 return node['nodeType'].upper().find('.IMAGEFILE.') >= 0 or node['nodeType'].upper().endswith('.IMAGEFILE')
117 def _get_all_local_storage(self, nodeTemplates):
119 for node in nodeTemplates:
120 if self._isLocalStorage(node):
122 ret['local_storage_id'] = node['name']
123 if 'description' in node:
124 ret['description'] = node['description']
125 ret['properties'] = node['properties']
130 def _isLocalStorage(self, node):
131 return node['nodeType'].upper().find('.LOCALSTORAGE.') >= 0 or node['nodeType'].upper().endswith(
134 def _get_all_volume_storage(self, nodeTemplates):
136 for node in nodeTemplates:
137 if self._isVolumeStorage(node):
139 ret['volume_storage_id'] = node['name']
140 if 'description' in node:
141 ret['description'] = node['description']
142 ret['properties'] = node['properties']
143 ret['image_file'] = map(lambda x: self.get_requirement_node_name(x),
144 self.getRequirementByName(node, 'image_file'))
149 def _isVolumeStorage(self, node):
150 return node['nodeType'].upper().find('.VOLUMESTORAGE.') >= 0 or node['nodeType'].upper().endswith(