blob: 0f4248a7be115c072b487f601428f9cdda3e2aab [file] [log] [blame]
lombardoffb37bca2018-05-03 16:20:04 +02001#
2# Copyright 2017 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
3#
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
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
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.
15#
16
17import json
lombardofr1cdb5942018-06-26 10:37:40 +020018import logging
lombardoffb37bca2018-05-03 16:20:04 +020019
lombardofr1cdb5942018-06-26 10:37:40 +020020import yaml
lombardoffb37bca2018-05-03 16:20:04 +020021from django.contrib.auth.decorators import login_required
22from django.http import HttpResponse, JsonResponse
lombardoffb37bca2018-05-03 16:20:04 +020023from django.shortcuts import render, redirect
lombardofr236e3e32018-07-17 17:27:36 +020024
25from authosm.exceptions import OSMAuthException
lombardoffb37bca2018-05-03 16:20:04 +020026from lib.util import Util
lombardofr672969e2018-06-19 16:59:45 +020027from lib.osm.osmclient.clientv2 import Client
lombardofr236e3e32018-07-17 17:27:36 +020028import authosm.utils as osmutils
lombardoffb37bca2018-05-03 16:20:04 +020029
30
lombardofr1cdb5942018-06-26 10:37:40 +020031logging.basicConfig(level=logging.DEBUG)
32log = logging.getLogger('projecthandler/view.py')
lombardoffb37bca2018-05-03 16:20:04 +020033
lombardoffb37bca2018-05-03 16:20:04 +020034
35@login_required
36def home(request):
37 return render(request, 'home.html', {})
38
39
40@login_required
41def create_new_project(request):
lombardofr137eeb12018-06-26 23:44:40 +020042 if request.method == 'POST':
lombardofr236e3e32018-07-17 17:27:36 +020043 user = osmutils.get_user(request)
lombardofr137eeb12018-06-26 23:44:40 +020044 client = Client()
45 new_project_dict = request.POST.dict()
46 keys = ["name"]
47 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, new_project_dict.items()))
lombardofr236e3e32018-07-17 17:27:36 +020048 result = client.project_create(user.get_token(), project_data)
lombardofr137eeb12018-06-26 23:44:40 +020049 if isinstance(result, dict) and 'error' in result and result['error']:
50 print result
51 return __response_handler(request, result['data'], url=None,
52 status=result['data']['status'] if 'status' in result['data'] else 500)
53 else:
54 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +020055
56
57@login_required
58def user_projects(request):
lombardofr236e3e32018-07-17 17:27:36 +020059 user = osmutils.get_user(request)
lombardofr137eeb12018-06-26 23:44:40 +020060 client = Client()
lombardofr236e3e32018-07-17 17:27:36 +020061 result = client.project_list(user.get_token())
lombardofr0c1447b2018-07-17 23:42:28 +020062 return __response_handler(request,{
lombardofr137eeb12018-06-26 23:44:40 +020063 'projects': result['data'] if result and result['error'] is False else [],
lombardofr0c1447b2018-07-17 23:42:28 +020064 },'projectlist.html')
65
lombardoffb37bca2018-05-03 16:20:04 +020066
67
lombardofr236e3e32018-07-17 17:27:36 +020068def open_composer(request):
69 user = osmutils.get_user(request)
70 project_id = user.project_id
71 result = {'project_id': project_id,
72 'vertices': [
73 {"info": {"type": "vnf", "property": {"custom_label": ""},
74 "group": []}, "id": "vm"},
75 {"info": {"type": "vnf", "property": {"custom_label": ""},
76 "group": []}, "id": "vlan"},
77 {"info": {"type": "vnf", "property": {"custom_label": ""},
78 "group": []}, "id": "firewall"},
79 {"info": {"type": "vnf", "property": {"custom_label": ""},
80 "group": []}, "id": "ping"},
81
82 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
83 "group": []}, "id": "vl1"},
84 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
85 "group": []}, "id": "vl2"},
86 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
87 "group": []}, "id": "vl3"},
88 ],
89 'edges': [
90 {"source": "vm", "group": [], "target": "vl3", "view": "ns"},
91 {"source": "vlan", "group": [], "target": "vl3", "view": "ns"},
92 {"source": "vlan", "group": [], "target": "vl1", "view": "ns"},
93 {"source": "firewall", "group": [], "target": "vl1", "view": "ns"},
94 {"source": "firewall", "group": [], "target": "vl2", "view": "ns"},
95 {"source": "ping", "group": [], "target": "vl2", "view": "ns"},
96 ],
97 'model': {
98 "layer": {
99
100 "ns": {
101 "nodes": {
102 "vnf": {
103 "addable": {
104 "callback": "addNode"
105 },
106 "removable": {
107 "callback": "removeNode"
108 },
109 "expands": "vnf"
110 },
111 "ns_vl": {
112 "addable": {
113 "callback": "addNode"
114 },
115 "removable": {
116 "callback": "removeNode"
117 }
118 },
119
120 },
121 "allowed_edges": {
122 "ns_vl": {
123 "destination": {
124 "vnf": {
125 "callback": "addLink",
126 "direct_edge": False,
127 "removable": {
128 "callback": "removeLink"
129 }
130 }
131 }
132 },
133 "vnf": {
134 "destination": {
135 "ns_vl": {
136 "callback": "addLink",
137 "direct_edge": False,
138 "removable": {
139 "callback": "removeLink"
140 }
141 },
142
143 }
144 }
145
146 }
147 },
148 "vnf": {
149 "nodes": {
150 "vdu": {
151 "addable": {
152 "callback": "addNode"
153 },
154 "removable": {
155 "callback": "removeNode"
156 }
157 },
158 "cp": {
159 "addable": {
160 "callback": "addNode"
161 },
162 "removable": {
163 "callback": "removeNode"
164 }
165 },
166
167 },
168 "allowed_edges": {
169 "vdu": {
170 "destination": {
171 "cp": {
172 "callback": "addLink",
173 "direct_edge": False,
174 "removable": {
175 "callback": "removeLink"
176 }
177 }
178 }
179 },
180 "cp": {
181 "destination": {
182 "vdu": {
183 "callback": "addLink",
184 "direct_edge": False,
185 "removable": {
186 "callback": "removeLink"
187 }
188 }
189 }
190 }
191 }
192 },
193 "name": "OSM",
194 "version": 1,
195 "nodes": {
196 "vnf": {
197 "label": "vnf"
198 },
199 "ns_vl": {
200 "label": "vl"
201 },
202 "cp": {
203 "label": "cp"
204 },
205 "vdu": {
206 "label": "vdu"
207 }
208 },
209 "description": "osm",
210 "callback": {
211 "addNode": {
212 "file": "osm_controller.js",
213 "class": "OsmController"
214 },
215 "removeNode": {
216 "file": "osm_controller.js",
217 "class": "OsmController"
218 },
219 "addLink": {
220 "file": "osm_controller.js",
221 "class": "OsmController"
222 },
223 "removeLink": {
224 "file": "osm_controller.js",
225 "class": "OsmController"
226 }
227 }
228
229 }
230 }}
231 return __response_handler(request, result, 'project_graph_base.html')
232
233
234def get_available_nodes(request):
235
236 params = request.GET.dict()
237 nodes = {
238 'ns': [{"types": [{"name": "Generic", "id": "vnf"},
239 {"name": "ping", "id": "vnf"},
240 {"name": "pong", "id": "vnf"},
241 {"name": "hackfest1-vm", "id": "vnf"}], "category_name": "Vnf"},
242 {"types": [{"name": "VL", "id": "ns_vl"}], "category_name": "VirtualLink"}],
243 'vnf': [{"types": [{"name": "VDU", "id": "vdu"}], "category_name": "Vdu"},
244 {"types": [{"name": "CP", "id": "cp"}], "category_name": "CP"}]
245 }
246
247 return __response_handler(request, nodes[params['layer']])
248
249
lombardoffb37bca2018-05-03 16:20:04 +0200250@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200251def open_project(request):
252 user = osmutils.get_user(request)
253 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +0200254 try:
lombardofr236e3e32018-07-17 17:27:36 +0200255
lombardofr84d0a012018-06-12 11:21:02 +0200256 client = Client()
lombardofr1cdb5942018-06-26 10:37:40 +0200257 ##TODO change with adhoc api call
lombardofrb4d6cec2018-07-18 15:26:16 +0200258 prj = client.project_get(user.get_token(), project_id)
lombardofr236e3e32018-07-17 17:27:36 +0200259 nsd = client.nsd_list(user.get_token())
260 vnfd = client.vnfd_list(user.get_token())
261 ns = client.ns_list(user.get_token())
262 vnf = client.vnf_list(user.get_token())
lombardofr84d0a012018-06-12 11:21:02 +0200263 project_overview = {
264 'owner': user.username,
265 'name': project_id,
lombardofrb4d6cec2018-07-18 15:26:16 +0200266 'updated_date': prj['data']['_admin']['modified'] if prj and prj['error'] is False else '-',
267 'created_date': prj['data']['_admin']['created'] if prj and prj['error'] is False else '-',
268
lombardofr84d0a012018-06-12 11:21:02 +0200269 'type': 'osm',
lombardofr1cdb5942018-06-26 10:37:40 +0200270 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
271 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
272 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
273 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
lombardofr84d0a012018-06-12 11:21:02 +0200274 }
275 return render(request, 'osm/osm_project_details.html',
lombardoffb37bca2018-05-03 16:20:04 +0200276 {'project_overview': project_overview, 'project_id': project_id})
277
278 except Exception as e:
279 print e
280 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
281
282
283@login_required
lombardofr2bf39212018-07-18 17:02:16 +0200284def delete_project(request, project_id):
lombardofr236e3e32018-07-17 17:27:36 +0200285 user = osmutils.get_user(request)
lombardofr2bf39212018-07-18 17:02:16 +0200286
lombardofr137eeb12018-06-26 23:44:40 +0200287 client = Client()
lombardofr236e3e32018-07-17 17:27:36 +0200288 result = client.project_delete(user.get_token(), project_id)
lombardofr137eeb12018-06-26 23:44:40 +0200289 if isinstance(result, dict) and 'error' in result and result['error']:
290 print result
291 return __response_handler(request, result['data'], url=None,
292 status=result['data']['status'] if 'status' in result['data'] else 500)
293 else:
294 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200295
296
lombardoffb37bca2018-05-03 16:20:04 +0200297@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200298def switch_project(request, project_id):
299 user = osmutils.get_user(request)
300 user.switch_project(project_id)
301 return redirect('projects:open_project')
302
303
304@login_required
lombardofr2bf39212018-07-18 17:02:16 +0200305def edit_project(request, project_id):
306 if request.method == 'POST':
307 user = osmutils.get_user(request)
308 client = Client()
309 project_dict = request.POST.dict()
310 keys = ["name"]
311 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
312 result = client.project_edit(user.get_token(), project_id, project_data)
313 if isinstance(result, dict) and 'error' in result and result['error']:
314 print result
315 return __response_handler(request, result['data'], url=None,
316 status=result['data']['status'] if 'status' in result['data'] else 500)
317 else:
318 return __response_handler(request, {}, url=None, status=200)
319
320
321@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200322def show_descriptors(request, descriptor_type=None):
323 user = osmutils.get_user(request)
324 project_id = user.project_id
lombardofr84d0a012018-06-12 11:21:02 +0200325 client = Client()
lombardofr1cdb5942018-06-26 10:37:40 +0200326 print request.GET.dict()
lombardofr84d0a012018-06-12 11:21:02 +0200327 try:
328 if descriptor_type == 'nsd':
lombardofr236e3e32018-07-17 17:27:36 +0200329 descriptors = client.nsd_list(user.get_token())
lombardofr84d0a012018-06-12 11:21:02 +0200330 elif descriptor_type == 'vnfd':
lombardofr236e3e32018-07-17 17:27:36 +0200331 descriptors = client.vnfd_list(user.get_token())
lombardofr84d0a012018-06-12 11:21:02 +0200332 except Exception as e:
lombardofr1cdb5942018-06-26 10:37:40 +0200333 log.exception(e)
lombardofr84d0a012018-06-12 11:21:02 +0200334 descriptors = []
335
336 url = 'osm/osm_project_descriptors.html'
lombardof07db64f2018-05-11 13:47:10 +0200337 return __response_handler(request, {
lombardofr1cdb5942018-06-26 10:37:40 +0200338 'descriptors': descriptors['data'] if descriptors and descriptors['error'] is False else [],
lombardoffb37bca2018-05-03 16:20:04 +0200339 'project_id': project_id,
lombardofr84d0a012018-06-12 11:21:02 +0200340 'project_type': 'osm',
lombardoffb37bca2018-05-03 16:20:04 +0200341 'descriptor_type': descriptor_type
lombardof07db64f2018-05-11 13:47:10 +0200342 },url)
lombardoffb37bca2018-05-03 16:20:04 +0200343
344
345@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200346def delete_descriptor(request, descriptor_type=None, descriptor_id=None):
347 user = osmutils.get_user(request)
348 project_id = user.project_id
lombardofr84d0a012018-06-12 11:21:02 +0200349 try:
350 client = Client()
351 if descriptor_type == 'nsd':
lombardofr236e3e32018-07-17 17:27:36 +0200352 result = client.nsd_delete(user.get_token(), descriptor_id)
lombardofr84d0a012018-06-12 11:21:02 +0200353 elif descriptor_type == 'vnfd':
lombardofr236e3e32018-07-17 17:27:36 +0200354 result = client.vnfd_delete(user.get_token(), descriptor_id)
lombardofr84d0a012018-06-12 11:21:02 +0200355 except Exception as e:
lombardofr1cdb5942018-06-26 10:37:40 +0200356 log.exception(e)
357 result = {'error': True, 'data': str(e)}
lombardoffb37bca2018-05-03 16:20:04 +0200358
lombardofr1cdb5942018-06-26 10:37:40 +0200359 url = 'osm/osm_project_descriptors.html'
360 descriptors = {}
361 try:
362 if descriptor_type == 'nsd':
lombardofr236e3e32018-07-17 17:27:36 +0200363 descriptors = client.nsd_list(user.get_token())
lombardofr1cdb5942018-06-26 10:37:40 +0200364 elif descriptor_type == 'vnfd':
lombardofr236e3e32018-07-17 17:27:36 +0200365 descriptors = client.vnfd_list(user.get_token())
lombardofr1cdb5942018-06-26 10:37:40 +0200366 except Exception as e:
367 log.exception(e)
368
369 return __response_handler(request, {
370 'descriptors': descriptors['data'] if descriptors and descriptors['error'] is False else [],
lombardoffb37bca2018-05-03 16:20:04 +0200371 'project_id': project_id,
lombardofr1cdb5942018-06-26 10:37:40 +0200372 'project_type': 'osm',
lombardoffb37bca2018-05-03 16:20:04 +0200373 'descriptor_type': descriptor_type,
lombardofr1cdb5942018-06-26 10:37:40 +0200374 'alert_message': {
375 'success': False if result['error'] is True else True,
376 'message': 'An error occurred while processing your request.' if result and result['error'] is True else "Record deleted successfully"}
377 }, url)
378
lombardoffb37bca2018-05-03 16:20:04 +0200379
380
381@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200382def new_descriptor(request, descriptor_type=None):
383 user = osmutils.get_user(request)
384 project_id = user.project_id
lombardofr1cdb5942018-06-26 10:37:40 +0200385 page = 'osm/descriptor/descriptor_new.html'
lombardoffb37bca2018-05-03 16:20:04 +0200386 if request.method == 'GET':
387 request_id = request.GET.get('id', '')
lombardofr1cdb5942018-06-26 10:37:40 +0200388
389 return __response_handler(request, {
lombardoffb37bca2018-05-03 16:20:04 +0200390 'project_id': project_id,
391 'descriptor_type': descriptor_type,
392 'descriptor_id': request_id,
lombardofr1cdb5942018-06-26 10:37:40 +0200393 }, page)
lombardoffb37bca2018-05-03 16:20:04 +0200394 elif request.method == 'POST':
lombardoffb37bca2018-05-03 16:20:04 +0200395 data_type = request.POST.get('type')
396 print "TYPE", data_type
397 if data_type == "file":
398 file_uploaded = request.FILES['file']
lombardofr1cdb5942018-06-26 10:37:40 +0200399
400 try:
401 client = Client()
402 if descriptor_type == 'nsd':
lombardofr236e3e32018-07-17 17:27:36 +0200403 result = client.nsd_onboard(user.get_token(), file_uploaded)
lombardofr1cdb5942018-06-26 10:37:40 +0200404 elif descriptor_type == 'vnfd':
lombardofr236e3e32018-07-17 17:27:36 +0200405 result = client.vnfd_onboard(user.get_token(), file_uploaded)
lombardofr1cdb5942018-06-26 10:37:40 +0200406 else:
407 log.debug('Create descriptor: Unknown data type')
408 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
409
410 except Exception as e:
411 log.exception(e)
412 result = {'error': True, 'data': str(e)}
lombardoffb37bca2018-05-03 16:20:04 +0200413 else:
lombardofr1cdb5942018-06-26 10:37:40 +0200414 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
lombardoffb37bca2018-05-03 16:20:04 +0200415
lombardofr1cdb5942018-06-26 10:37:40 +0200416 if result['error']:
417 print result
418 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
lombardofr1cdb5942018-06-26 10:37:40 +0200419 else:
420 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200421
422
423@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200424def edit_descriptor(request, descriptor_id=None, descriptor_type=None):
425 user = osmutils.get_user(request)
426 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +0200427 if request.method == 'POST':
428 print "edit_descriptor"
lombardofr1cdb5942018-06-26 10:37:40 +0200429 new_data = request.POST.get('text'),
430 data_type = request.POST.get('type')
431 #print new_data
432 try:
433 client = Client()
434 if descriptor_type == 'nsd':
435 if data_type == 'yaml':
436 new_data = yaml.load(request.POST.get('text'))
437 elif data_type == 'json':
438 new_data = json.loads(request.POST.get('text'))
439 print new_data
lombardofr236e3e32018-07-17 17:27:36 +0200440 result = client.nsd_update(user.get_token(), descriptor_id, new_data)
lombardofr1cdb5942018-06-26 10:37:40 +0200441 elif descriptor_type == 'vnfd':
442 if data_type == 'yaml':
443 new_data = yaml.load(request.POST.get('text'))
444 elif data_type == 'json':
445 new_data = json.loads(request.POST.get('text'))
446 print new_data
lombardofr236e3e32018-07-17 17:27:36 +0200447 result = client.vnfd_update(user.get_token(), descriptor_id, new_data)
lombardofr1cdb5942018-06-26 10:37:40 +0200448
449 else:
450 log.debug('Update descriptor: Unknown data type')
451 result = {'error': True, 'data': 'Update descriptor: Unknown data type'}
452 except Exception as e:
453 log.exception(e)
454 result = {'error': True, 'data': str(e)}
455 print result
456 if result['error'] == True:
457 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
458
459 else:
460 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200461
462 elif request.method == 'GET':
lombardoffb37bca2018-05-03 16:20:04 +0200463
lombardofr1cdb5942018-06-26 10:37:40 +0200464 page = 'osm/descriptor/descriptor_view.html'
465 try:
466 client = Client()
467 if descriptor_type == 'nsd':
lombardofr236e3e32018-07-17 17:27:36 +0200468 result = client.nsd_get(user.get_token(), descriptor_id)
lombardofr1cdb5942018-06-26 10:37:40 +0200469 print result
470 elif descriptor_type == 'vnfd':
lombardofr236e3e32018-07-17 17:27:36 +0200471 result = client.vnfd_get(user.get_token(), descriptor_id)
lombardoffb37bca2018-05-03 16:20:04 +0200472
lombardofr1cdb5942018-06-26 10:37:40 +0200473 print result
474 except Exception as e:
475 log.exception(e)
476 result = {'error': True, 'data': str(e)}
477
478 if isinstance(result, dict) and 'error' in result and result['error']:
479 return render(request, 'error.html')
480
481 descriptor_string_json = json.dumps(result, indent=2)
482 descriptor_string_yaml = Util.json2yaml(result)
lombardoffb37bca2018-05-03 16:20:04 +0200483 # print descriptor
484 return render(request, page, {
485 'project_id': project_id,
486 'descriptor_id': descriptor_id,
lombardoffb37bca2018-05-03 16:20:04 +0200487 'descriptor_type': descriptor_type,
488 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml,
489 'descriptor_string_json': descriptor_string_json}})
490
491
lombardofr1cdb5942018-06-26 10:37:40 +0200492@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200493def get_package_files_list(request, descriptor_id, descriptor_type):
494 user = osmutils.get_user(request)
lombardoffb37bca2018-05-03 16:20:04 +0200495 try:
lombardofr1cdb5942018-06-26 10:37:40 +0200496 client = Client()
497 if descriptor_type == 'nsd':
lombardofr236e3e32018-07-17 17:27:36 +0200498 artifacts_res = client.nsd_artifacts(user.get_token(), descriptor_id)
lombardofr1cdb5942018-06-26 10:37:40 +0200499 elif descriptor_type == 'vnfd':
lombardofr236e3e32018-07-17 17:27:36 +0200500 artifacts_res = client.vnf_packages_artifacts(user.get_token(), descriptor_id)
lombardofr1cdb5942018-06-26 10:37:40 +0200501 else:
502 return False
503
504 files_list = yaml.load(artifacts_res['data'] if artifacts_res and artifacts_res['error'] is False else [])
lombardoffb37bca2018-05-03 16:20:04 +0200505 result = {'files': files_list}
506 except Exception as e:
lombardofr1cdb5942018-06-26 10:37:40 +0200507 log.exception(e)
lombardoffb37bca2018-05-03 16:20:04 +0200508 url = 'error.html'
509 result = {'error_msg': 'Unknown error.'}
510 return __response_handler(request, result)
511
lombardofr1cdb5942018-06-26 10:37:40 +0200512@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200513def download_pkg(request, descriptor_id, descriptor_type):
514 user = osmutils.get_user(request)
lombardofr1cdb5942018-06-26 10:37:40 +0200515 file_name = "osm_export.tar.gz"
516 tar_pkg = None
517 try:
518 client = Client()
519 if descriptor_type == 'nsd':
lombardofr236e3e32018-07-17 17:27:36 +0200520 tar_pkg = client.get_nsd_pkg(user.get_token(), descriptor_id)
lombardofr1cdb5942018-06-26 10:37:40 +0200521 elif descriptor_type == 'vnfd':
lombardofr236e3e32018-07-17 17:27:36 +0200522 tar_pkg = client.get_vnfd_pkg(user.get_token(), descriptor_id)
lombardofr1cdb5942018-06-26 10:37:40 +0200523
524 except Exception as e:
525 log.exception(e)
lombardoffb37bca2018-05-03 16:20:04 +0200526
527 response = HttpResponse(content_type="application/tgz")
lombardofr1cdb5942018-06-26 10:37:40 +0200528 response["Content-Disposition"] = "attachment; filename="+ file_name
lombardoffb37bca2018-05-03 16:20:04 +0200529 response.write(tar_pkg.getvalue())
530 return response
531
532
lombardoffb37bca2018-05-03 16:20:04 +0200533@login_required
lombardofr236e3e32018-07-17 17:27:36 +0200534def custom_action(request, descriptor_id=None, descriptor_type=None, action_name=None):
lombardoffb37bca2018-05-03 16:20:04 +0200535 if request.method == 'GET':
lombardoffb37bca2018-05-03 16:20:04 +0200536 print "Custom action: " + action_name
lombardofr236e3e32018-07-17 17:27:36 +0200537 return globals()[action_name](request, descriptor_id, descriptor_type)
lombardoffb37bca2018-05-03 16:20:04 +0200538
539
540def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
541 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
lombardofr1cdb5942018-06-26 10:37:40 +0200542 if 'application/json' in raw_content_types or url is None:
543 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
lombardoffb37bca2018-05-03 16:20:04 +0200544 elif to_redirect:
545 return redirect(url, *args, **kwargs)
546 else:
547 return render(request, url, data_res)