5824e573c1672b0e07ef289f49d8e18b14c6e931
2 # Copyright 2018 EveryUP Srl
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
21 from sf_t3d
.decorators
import login_required
22 from django
.http
import HttpResponse
23 from django
.shortcuts
import render
, redirect
26 from lib
.util
import Util
27 from lib
.osm
.osmclient
.clientv2
import Client
28 from lib
.osm
.osm_rdcl_parser
import OsmParser
29 from lib
.osm
.osm_util
import OsmUtil
30 import authosm
.utils
as osmutils
32 logging
.basicConfig(level
=logging
.DEBUG
)
33 log
= logging
.getLogger('descriptorhandler/view.py')
37 def show_descriptors(request
, descriptor_type
=None):
38 user
= osmutils
.get_user(request
)
39 project_id
= user
.project_id
42 if descriptor_type
== 'nsd':
43 descriptors
= client
.nsd_list(user
.get_token())
44 elif descriptor_type
== 'vnfd':
45 descriptors
= client
.vnfd_list(user
.get_token())
46 except Exception as e
:
50 url
= 'osm/osm_project_descriptors.html'
51 return __response_handler(request
, {
52 'descriptors': descriptors
['data'] if descriptors
and descriptors
['error'] is False else [],
53 'project_id': project_id
,
54 'project_type': 'osm',
55 'descriptor_type': descriptor_type
60 def delete_descriptor(request
, descriptor_type
=None, descriptor_id
=None):
61 user
= osmutils
.get_user(request
)
62 project_id
= user
.project_id
65 if descriptor_type
== 'nsd':
66 result
= client
.nsd_delete(user
.get_token(), descriptor_id
)
67 elif descriptor_type
== 'vnfd':
68 result
= client
.vnfd_delete(user
.get_token(), descriptor_id
)
69 except Exception as e
:
71 result
= {'error': True, 'data': str(e
)}
73 url
= 'osm/osm_project_descriptors.html'
76 if descriptor_type
== 'nsd':
77 descriptors
= client
.nsd_list(user
.get_token())
78 elif descriptor_type
== 'vnfd':
79 descriptors
= client
.vnfd_list(user
.get_token())
80 except Exception as e
:
83 return __response_handler(request
, {
84 'descriptors': descriptors
['data'] if descriptors
and descriptors
['error'] is False else [],
85 'project_id': project_id
,
86 'project_type': 'osm',
87 'descriptor_type': descriptor_type
,
89 'success': False if result
['error'] is True else True,
90 'message': 'An error occurred while processing your request.' if result
and result
['error'] is True else "Record deleted successfully"}
94 def create_package_empty(request
, descriptor_type
=None):
95 user
= osmutils
.get_user(request
)
96 pkg_name
= request
.POST
.get('name', '')
99 if descriptor_type
== 'nsd':
100 result
= client
.nsd_create_pkg_base(user
.get_token(), pkg_name
)
101 elif descriptor_type
== 'vnfd':
102 result
= client
.vnfd_create_pkg_base(user
.get_token(), pkg_name
)
104 log
.debug('Update descriptor: Unknown data type')
105 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
106 except Exception as e
:
108 result
= {'error': True, 'data': str(e
)}
110 if result
['error'] == True:
111 return __response_handler(request
, result
['data'], url
=None,
112 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
114 result
['data']['type'] = descriptor_type
115 return __response_handler(request
, result
, url
=None, status
=200)
119 def clone_descriptor(request
, descriptor_type
=None, descriptor_id
=None):
120 user
= osmutils
.get_user(request
)
121 project_id
= user
.project_id
124 if descriptor_type
== 'nsd':
125 result
= client
.nsd_clone(user
.get_token(), descriptor_id
)
126 elif descriptor_type
== 'vnfd':
127 result
= client
.vnfd_clone(user
.get_token(), descriptor_id
)
129 log
.debug('Update descriptor: Unknown data type')
130 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
131 except Exception as e
:
133 result
= {'error': True, 'data': str(e
)}
134 if result
['error'] == True:
135 return __response_handler(request
, result
['data'], url
=None,
136 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
138 return __response_handler(request
, {}, url
=None, status
=200)
141 def addElement(request
, descriptor_type
=None, descriptor_id
=None, element_type
=None):
142 user
= osmutils
.get_user(request
)
143 project_id
= user
.project_id
145 if descriptor_type
== 'nsd':
146 descriptor_result
= client
.nsd_get(user
.get_token(), descriptor_id
)
147 element_id
= request
.POST
.get('id', '')
149 descriptor_updated
= util
.add_base_node('nsd', descriptor_result
, element_type
, element_id
, request
.POST
.dict())
150 result
= client
.nsd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
151 if result
['error'] == True:
152 return __response_handler(request
, result
['data'], url
=None,
153 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
157 if descriptor_type
== 'nsd':
158 result_graph
= parser
.nsd_to_graph(descriptor_updated
)
160 return __response_handler(request
, result_graph
, url
=None, status
=200)
162 elif descriptor_type
== 'vnfd':
163 descriptor_result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
164 element_id
= request
.POST
.get('id', '')
166 descriptor_updated
= util
.add_base_node('vnfd', descriptor_result
, element_type
, element_id
, request
.POST
.dict())
167 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
168 if result
['error'] == True:
169 return __response_handler(request
, result
['data'], url
=None,
170 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
174 if descriptor_type
== 'vnfd':
175 result_graph
= parser
.vnfd_to_graph(descriptor_updated
)
177 return __response_handler(request
, result_graph
, url
=None, status
=200)
181 def removeElement(request
, descriptor_type
=None, descriptor_id
=None, element_type
=None):
182 user
= osmutils
.get_user(request
)
183 project_id
= user
.project_id
185 if descriptor_type
== 'nsd':
186 descriptor_result
= client
.nsd_get(user
.get_token(), descriptor_id
)
187 element_id
= request
.POST
.get('id', '')
189 descriptor_updated
= util
.remove_node('nsd', descriptor_result
, element_type
, element_id
, request
.POST
.dict())
190 result
= client
.nsd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
191 if result
['error'] == True:
192 return __response_handler(request
, result
['data'], url
=None,
193 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
197 if descriptor_type
== 'nsd':
198 result_graph
= parser
.nsd_to_graph(descriptor_updated
)
200 return __response_handler(request
, result_graph
, url
=None, status
=200)
202 elif descriptor_type
== 'vnfd':
203 descriptor_result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
204 element_id
= request
.POST
.get('id', '')
206 descriptor_updated
= util
.remove_node('vnfd', descriptor_result
, element_type
, element_id
, request
.POST
.dict())
207 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
208 if result
['error'] == True:
209 return __response_handler(request
, result
['data'], url
=None,
210 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
214 if descriptor_type
== 'vnfd':
215 result_graph
= parser
.vnfd_to_graph(descriptor_updated
)
217 return __response_handler(request
, result_graph
, url
=None, status
=200)
221 def updateElement(request
, descriptor_type
=None, descriptor_id
=None, element_type
=None):
222 user
= osmutils
.get_user(request
)
223 project_id
= user
.project_id
225 if descriptor_type
== 'nsd':
226 descriptor_result
= client
.nsd_get(user
.get_token(), descriptor_id
)
228 payload
= request
.POST
.dict()
229 if element_type
== 'graph_params':
230 descriptor_updated
= util
.update_graph_params('nsd', descriptor_result
, json
.loads(payload
['update']))
232 descriptor_updated
= util
.update_node('nsd', descriptor_result
, element_type
, json
.loads(payload
['old']), json
.loads(payload
['update']))
233 result
= client
.nsd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
234 if result
['error'] == True:
235 return __response_handler(request
, result
['data'], url
=None,
236 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
240 if descriptor_type
== 'nsd':
241 result_graph
= parser
.nsd_to_graph(descriptor_updated
)
242 if descriptor_type
== 'vnfd':
243 descriptor_result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
245 payload
= request
.POST
.dict()
246 if element_type
== 'graph_params':
247 descriptor_updated
= util
.update_graph_params('vnfd', descriptor_result
, json
.loads(payload
['update']))
249 descriptor_updated
= util
.update_node('vnfd', descriptor_result
, element_type
, json
.loads(payload
['old']), json
.loads(payload
['update']))
250 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
251 if result
['error'] == True:
252 return __response_handler(request
, result
['data'], url
=None,
253 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
256 if descriptor_type
== 'vnfd':
257 result_graph
= parser
.vnfd_to_graph(descriptor_updated
)
259 return __response_handler(request
, result_graph
, url
=None, status
=200)
262 def new_descriptor(request
, descriptor_type
=None):
263 user
= osmutils
.get_user(request
)
264 project_id
= user
.project_id
265 page
= 'descriptor_new.html'
266 if request
.method
== 'GET':
267 request_id
= request
.GET
.get('id', '')
269 return __response_handler(request
, {
270 'project_id': project_id
,
271 'descriptor_type': descriptor_type
,
272 'descriptor_id': request_id
,
274 elif request
.method
== 'POST':
275 data_type
= request
.POST
.get('type')
276 if data_type
== "file":
277 file_uploaded
= request
.FILES
['file']
281 if descriptor_type
== 'nsd':
282 result
= client
.nsd_onboard(user
.get_token(), file_uploaded
)
283 elif descriptor_type
== 'vnfd':
284 result
= client
.vnfd_onboard(user
.get_token(), file_uploaded
)
286 log
.debug('Create descriptor: Unknown data type')
287 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
289 except Exception as e
:
291 result
= {'error': True, 'data': str(e
)}
293 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
296 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
298 return __response_handler(request
, {}, url
=None, status
=200)
302 def edit_descriptor(request
, descriptor_id
=None, descriptor_type
=None):
303 user
= osmutils
.get_user(request
)
304 project_id
= user
.project_id
305 if request
.method
== 'POST':
306 new_data
= request
.POST
.get('text'),
307 data_type
= request
.POST
.get('type')
311 if descriptor_type
== 'nsd':
312 if data_type
== 'yaml':
313 new_data
= yaml
.load(request
.POST
.get('text'))
314 elif data_type
== 'json':
315 new_data
= json
.loads(request
.POST
.get('text'))
316 result
= client
.nsd_update(user
.get_token(), descriptor_id
, new_data
)
317 elif descriptor_type
== 'vnfd':
318 if data_type
== 'yaml':
319 new_data
= yaml
.load(request
.POST
.get('text'))
320 elif data_type
== 'json':
321 new_data
= json
.loads(request
.POST
.get('text'))
322 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, new_data
)
325 log
.debug('Update descriptor: Unknown data type')
326 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
327 except Exception as e
:
329 result
= {'error': True, 'data': str(e
)}
330 if result
['error'] == True:
331 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
334 return __response_handler(request
, {}, url
=None, status
=200)
336 elif request
.method
== 'GET':
338 page
= 'descriptor_view.html'
341 if descriptor_type
== 'nsd':
342 result
= client
.nsd_get(user
.get_token(), descriptor_id
)
343 elif descriptor_type
== 'vnfd':
344 result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
345 except Exception as e
:
347 result
= {'error': True, 'data': str(e
)}
349 if isinstance(result
, dict) and 'error' in result
and result
['error']:
350 return render(request
, 'error.html')
352 descriptor_string_json
= json
.dumps(result
, indent
=2)
353 descriptor_string_yaml
= Util
.json2yaml(result
)
355 return render(request
, page
, {
356 'project_id': project_id
,
357 'descriptor_id': descriptor_id
,
358 'descriptor_type': descriptor_type
,
359 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml
,
360 'descriptor_string_json': descriptor_string_json
}})
364 def get_package_files_list(request
, descriptor_id
, descriptor_type
):
365 user
= osmutils
.get_user(request
)
368 if descriptor_type
== 'nsd':
369 artifacts_res
= client
.nsd_artifacts(user
.get_token(), descriptor_id
)
370 elif descriptor_type
== 'vnfd':
371 artifacts_res
= client
.vnf_packages_artifacts(user
.get_token(), descriptor_id
)
375 files_list
= yaml
.load(artifacts_res
['data'] if artifacts_res
and artifacts_res
['error'] is False else [])
376 result
= {'files': files_list
}
377 except Exception as e
:
380 result
= {'error_msg': 'Unknown error.'}
381 return __response_handler(request
, result
)
385 def download_pkg(request
, descriptor_id
, descriptor_type
):
386 user
= osmutils
.get_user(request
)
387 file_name
= "osm_export.tar.gz"
391 if descriptor_type
== 'nsd':
392 tar_pkg
= client
.get_nsd_pkg(user
.get_token(), descriptor_id
)
393 elif descriptor_type
== 'vnfd':
394 tar_pkg
= client
.get_vnfd_pkg(user
.get_token(), descriptor_id
)
396 except Exception as e
:
399 response
= HttpResponse(content_type
="application/tgz")
400 response
["Content-Disposition"] = "attachment; filename="+ file_name
401 response
.write(tar_pkg
.getvalue())
405 def open_composer(request
):
406 user
= osmutils
.get_user(request
)
407 project_id
= user
.project_id
408 descriptor_id
= request
.GET
.get('id')
409 descriptor_type
= request
.GET
.get('type')
413 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
414 if 'application/json' not in raw_content_types
:
415 return __response_handler(request
, {'type': descriptor_type
}, 'composer.html')
417 if descriptor_type
== 'nsd':
418 descriptor_result
= client
.nsd_get(user
.get_token(), descriptor_id
)
419 elif descriptor_type
== 'vnfd':
420 descriptor_result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
422 except Exception as e
:
423 descriptor_result
= {'error': True, 'data': str(e
)}
425 if isinstance(descriptor_result
, dict) and 'error' in descriptor_result
and descriptor_result
['error']:
426 return render(request
, 'error.html')
430 if descriptor_type
== 'nsd':
431 result
= test
.nsd_to_graph(descriptor_result
)
432 elif descriptor_type
== 'vnfd':
433 result
= test
.vnfd_to_graph(descriptor_result
)
434 return __response_handler(request
, result
, 'composer.html')
436 return __response_handler(request
, result
, 'composer.html')
439 def get_available_nodes(request
):
440 user
= osmutils
.get_user(request
)
441 params
= request
.GET
.dict()
445 if params
['layer'] == 'nsd':
446 descriptors
= client
.vnfd_list(user
.get_token())
447 except Exception as e
:
450 if descriptors
and descriptors
['error'] is False:
451 for desc
in descriptors
['data']:
453 result
.append({'_id': desc
['_id'],'id': desc
['id'], 'name': desc
['short-name']})
455 return __response_handler(request
, {'descriptors': result
})
459 def custom_action(request
, descriptor_id
=None, descriptor_type
=None, action_name
=None):
460 if request
.method
== 'GET':
461 return globals()[action_name
](request
, descriptor_id
, descriptor_type
)
464 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
465 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
466 if 'application/json' in raw_content_types
or url
is None:
467 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
469 return redirect(url
, *args
, **kwargs
)
471 return render(request
, url
, data_res
)