blob: 9d4055d217400ee8d6ad169e12869d91a68cea01 [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
lombardofrf5776442018-06-26 10:37:40 +020018import logging
lombardoffb37bca2018-05-03 16:20:04 +020019
lombardofrf5776442018-06-26 10:37:40 +020020import yaml
lombardofr4908f382018-09-10 11:36:06 +020021from sf_t3d.decorators import login_required
lombardoffb37bca2018-05-03 16:20:04 +020022from django.http import HttpResponse, JsonResponse
lombardoffb37bca2018-05-03 16:20:04 +020023from django.shortcuts import render, redirect
lombardofr99f922f2018-07-17 17:27:36 +020024
25from authosm.exceptions import OSMAuthException
lombardoffb37bca2018-05-03 16:20:04 +020026from lib.util import Util
lombardofr07930222018-06-19 16:59:45 +020027from lib.osm.osmclient.clientv2 import Client
lombardofr99f922f2018-07-17 17:27:36 +020028import authosm.utils as osmutils
lombardoffb37bca2018-05-03 16:20:04 +020029
30
lombardofrf5776442018-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):
lombardofr480be482018-06-26 23:44:40 +020042 if request.method == 'POST':
lombardofr99f922f2018-07-17 17:27:36 +020043 user = osmutils.get_user(request)
lombardofr480be482018-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()))
lombardofr99f922f2018-07-17 17:27:36 +020048 result = client.project_create(user.get_token(), project_data)
lombardofr480be482018-06-26 23:44:40 +020049 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofr480be482018-06-26 23:44:40 +020050 return __response_handler(request, result['data'], url=None,
51 status=result['data']['status'] if 'status' in result['data'] else 500)
52 else:
53 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +020054
55
56@login_required
57def user_projects(request):
lombardofr99f922f2018-07-17 17:27:36 +020058 user = osmutils.get_user(request)
lombardofr480be482018-06-26 23:44:40 +020059 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +020060 result = client.project_list(user.get_token())
lombardofr10b52d12018-07-17 23:42:28 +020061 return __response_handler(request,{
lombardofr480be482018-06-26 23:44:40 +020062 'projects': result['data'] if result and result['error'] is False else [],
lombardofr10b52d12018-07-17 23:42:28 +020063 },'projectlist.html')
64
lombardoffb37bca2018-05-03 16:20:04 +020065
lombardofr99f922f2018-07-17 17:27:36 +020066def open_composer(request):
67 user = osmutils.get_user(request)
68 project_id = user.project_id
69 result = {'project_id': project_id,
70 'vertices': [
71 {"info": {"type": "vnf", "property": {"custom_label": ""},
72 "group": []}, "id": "vm"},
73 {"info": {"type": "vnf", "property": {"custom_label": ""},
74 "group": []}, "id": "vlan"},
75 {"info": {"type": "vnf", "property": {"custom_label": ""},
76 "group": []}, "id": "firewall"},
77 {"info": {"type": "vnf", "property": {"custom_label": ""},
78 "group": []}, "id": "ping"},
79
80 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
81 "group": []}, "id": "vl1"},
82 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
83 "group": []}, "id": "vl2"},
84 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
85 "group": []}, "id": "vl3"},
86 ],
87 'edges': [
88 {"source": "vm", "group": [], "target": "vl3", "view": "ns"},
89 {"source": "vlan", "group": [], "target": "vl3", "view": "ns"},
90 {"source": "vlan", "group": [], "target": "vl1", "view": "ns"},
91 {"source": "firewall", "group": [], "target": "vl1", "view": "ns"},
92 {"source": "firewall", "group": [], "target": "vl2", "view": "ns"},
93 {"source": "ping", "group": [], "target": "vl2", "view": "ns"},
94 ],
95 'model': {
96 "layer": {
97
98 "ns": {
99 "nodes": {
100 "vnf": {
101 "addable": {
102 "callback": "addNode"
103 },
104 "removable": {
105 "callback": "removeNode"
106 },
107 "expands": "vnf"
108 },
109 "ns_vl": {
110 "addable": {
111 "callback": "addNode"
112 },
113 "removable": {
114 "callback": "removeNode"
115 }
116 },
117
118 },
119 "allowed_edges": {
120 "ns_vl": {
121 "destination": {
122 "vnf": {
123 "callback": "addLink",
124 "direct_edge": False,
125 "removable": {
126 "callback": "removeLink"
127 }
128 }
129 }
130 },
131 "vnf": {
132 "destination": {
133 "ns_vl": {
134 "callback": "addLink",
135 "direct_edge": False,
136 "removable": {
137 "callback": "removeLink"
138 }
139 },
140
141 }
142 }
143
144 }
145 },
146 "vnf": {
147 "nodes": {
148 "vdu": {
149 "addable": {
150 "callback": "addNode"
151 },
152 "removable": {
153 "callback": "removeNode"
154 }
155 },
156 "cp": {
157 "addable": {
158 "callback": "addNode"
159 },
160 "removable": {
161 "callback": "removeNode"
162 }
163 },
164
165 },
166 "allowed_edges": {
167 "vdu": {
168 "destination": {
169 "cp": {
170 "callback": "addLink",
171 "direct_edge": False,
172 "removable": {
173 "callback": "removeLink"
174 }
175 }
176 }
177 },
178 "cp": {
179 "destination": {
180 "vdu": {
181 "callback": "addLink",
182 "direct_edge": False,
183 "removable": {
184 "callback": "removeLink"
185 }
186 }
187 }
188 }
189 }
190 },
191 "name": "OSM",
192 "version": 1,
193 "nodes": {
194 "vnf": {
195 "label": "vnf"
196 },
197 "ns_vl": {
198 "label": "vl"
199 },
200 "cp": {
201 "label": "cp"
202 },
203 "vdu": {
204 "label": "vdu"
205 }
206 },
207 "description": "osm",
208 "callback": {
209 "addNode": {
210 "file": "osm_controller.js",
211 "class": "OsmController"
212 },
213 "removeNode": {
214 "file": "osm_controller.js",
215 "class": "OsmController"
216 },
217 "addLink": {
218 "file": "osm_controller.js",
219 "class": "OsmController"
220 },
221 "removeLink": {
222 "file": "osm_controller.js",
223 "class": "OsmController"
224 }
225 }
226
227 }
228 }}
229 return __response_handler(request, result, 'project_graph_base.html')
230
231
232def get_available_nodes(request):
233
234 params = request.GET.dict()
235 nodes = {
236 'ns': [{"types": [{"name": "Generic", "id": "vnf"},
237 {"name": "ping", "id": "vnf"},
238 {"name": "pong", "id": "vnf"},
239 {"name": "hackfest1-vm", "id": "vnf"}], "category_name": "Vnf"},
240 {"types": [{"name": "VL", "id": "ns_vl"}], "category_name": "VirtualLink"}],
241 'vnf': [{"types": [{"name": "VDU", "id": "vdu"}], "category_name": "Vdu"},
242 {"types": [{"name": "CP", "id": "cp"}], "category_name": "CP"}]
243 }
244
245 return __response_handler(request, nodes[params['layer']])
246
247
lombardoffb37bca2018-05-03 16:20:04 +0200248@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200249def open_project(request):
250 user = osmutils.get_user(request)
251 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +0200252 try:
lombardofr99f922f2018-07-17 17:27:36 +0200253
lombardofr099364f2018-06-12 11:21:02 +0200254 client = Client()
lombardofrf5776442018-06-26 10:37:40 +0200255 ##TODO change with adhoc api call
lombardofr835a0b72018-07-18 15:26:16 +0200256 prj = client.project_get(user.get_token(), project_id)
lombardofr99f922f2018-07-17 17:27:36 +0200257 nsd = client.nsd_list(user.get_token())
258 vnfd = client.vnfd_list(user.get_token())
259 ns = client.ns_list(user.get_token())
260 vnf = client.vnf_list(user.get_token())
lombardofr099364f2018-06-12 11:21:02 +0200261 project_overview = {
262 'owner': user.username,
263 'name': project_id,
lombardofr835a0b72018-07-18 15:26:16 +0200264 'updated_date': prj['data']['_admin']['modified'] if prj and prj['error'] is False else '-',
265 'created_date': prj['data']['_admin']['created'] if prj and prj['error'] is False else '-',
266
lombardofr099364f2018-06-12 11:21:02 +0200267 'type': 'osm',
lombardofrf5776442018-06-26 10:37:40 +0200268 'nsd': len(nsd['data']) if nsd and nsd['error'] is False else 0,
269 'vnfd': len(vnfd['data']) if vnfd and vnfd['error'] is False else 0,
270 'ns': len(ns['data']) if ns and ns['error'] is False else 0,
271 'vnf': len(vnf['data']) if vnf and vnf['error'] is False else 0,
lombardofr099364f2018-06-12 11:21:02 +0200272 }
273 return render(request, 'osm/osm_project_details.html',
lombardoffb37bca2018-05-03 16:20:04 +0200274 {'project_overview': project_overview, 'project_id': project_id})
275
276 except Exception as e:
lombardoffb37bca2018-05-03 16:20:04 +0200277 return render(request, 'error.html', {'error_msg': 'Error open project! Please retry.'})
278
279
280@login_required
lombardofrbced6e62018-07-18 17:02:16 +0200281def delete_project(request, project_id):
lombardofr99f922f2018-07-17 17:27:36 +0200282 user = osmutils.get_user(request)
lombardofrbced6e62018-07-18 17:02:16 +0200283
lombardofr480be482018-06-26 23:44:40 +0200284 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +0200285 result = client.project_delete(user.get_token(), project_id)
lombardofr480be482018-06-26 23:44:40 +0200286 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofr480be482018-06-26 23:44:40 +0200287 return __response_handler(request, result['data'], url=None,
288 status=result['data']['status'] if 'status' in result['data'] else 500)
289 else:
290 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200291
292
lombardoffb37bca2018-05-03 16:20:04 +0200293@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200294def switch_project(request, project_id):
295 user = osmutils.get_user(request)
296 user.switch_project(project_id)
297 return redirect('projects:open_project')
298
299
300@login_required
lombardofrbced6e62018-07-18 17:02:16 +0200301def edit_project(request, project_id):
302 if request.method == 'POST':
303 user = osmutils.get_user(request)
304 client = Client()
305 project_dict = request.POST.dict()
306 keys = ["name"]
307 project_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, project_dict.items()))
308 result = client.project_edit(user.get_token(), project_id, project_data)
309 if isinstance(result, dict) and 'error' in result and result['error']:
lombardofrbced6e62018-07-18 17:02:16 +0200310 return __response_handler(request, result['data'], url=None,
311 status=result['data']['status'] if 'status' in result['data'] else 500)
312 else:
313 return __response_handler(request, {}, url=None, status=200)
314
315
316@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200317def show_descriptors(request, descriptor_type=None):
318 user = osmutils.get_user(request)
319 project_id = user.project_id
lombardofr099364f2018-06-12 11:21:02 +0200320 client = Client()
321 try:
322 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200323 descriptors = client.nsd_list(user.get_token())
lombardofr099364f2018-06-12 11:21:02 +0200324 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200325 descriptors = client.vnfd_list(user.get_token())
lombardofr099364f2018-06-12 11:21:02 +0200326 except Exception as e:
lombardofrf5776442018-06-26 10:37:40 +0200327 log.exception(e)
lombardofr099364f2018-06-12 11:21:02 +0200328 descriptors = []
329
330 url = 'osm/osm_project_descriptors.html'
lombardof07db64f2018-05-11 13:47:10 +0200331 return __response_handler(request, {
lombardofrf5776442018-06-26 10:37:40 +0200332 'descriptors': descriptors['data'] if descriptors and descriptors['error'] is False else [],
lombardoffb37bca2018-05-03 16:20:04 +0200333 'project_id': project_id,
lombardofr099364f2018-06-12 11:21:02 +0200334 'project_type': 'osm',
lombardoffb37bca2018-05-03 16:20:04 +0200335 'descriptor_type': descriptor_type
lombardof07db64f2018-05-11 13:47:10 +0200336 },url)
lombardoffb37bca2018-05-03 16:20:04 +0200337
338
339@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200340def delete_descriptor(request, descriptor_type=None, descriptor_id=None):
341 user = osmutils.get_user(request)
342 project_id = user.project_id
lombardofr099364f2018-06-12 11:21:02 +0200343 try:
344 client = Client()
345 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200346 result = client.nsd_delete(user.get_token(), descriptor_id)
lombardofr099364f2018-06-12 11:21:02 +0200347 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200348 result = client.vnfd_delete(user.get_token(), descriptor_id)
lombardofr099364f2018-06-12 11:21:02 +0200349 except Exception as e:
lombardofrf5776442018-06-26 10:37:40 +0200350 log.exception(e)
351 result = {'error': True, 'data': str(e)}
lombardoffb37bca2018-05-03 16:20:04 +0200352
lombardofrf5776442018-06-26 10:37:40 +0200353 url = 'osm/osm_project_descriptors.html'
354 descriptors = {}
355 try:
356 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200357 descriptors = client.nsd_list(user.get_token())
lombardofrf5776442018-06-26 10:37:40 +0200358 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200359 descriptors = client.vnfd_list(user.get_token())
lombardofrf5776442018-06-26 10:37:40 +0200360 except Exception as e:
361 log.exception(e)
362
363 return __response_handler(request, {
364 'descriptors': descriptors['data'] if descriptors and descriptors['error'] is False else [],
lombardoffb37bca2018-05-03 16:20:04 +0200365 'project_id': project_id,
lombardofrf5776442018-06-26 10:37:40 +0200366 'project_type': 'osm',
lombardoffb37bca2018-05-03 16:20:04 +0200367 'descriptor_type': descriptor_type,
lombardofrf5776442018-06-26 10:37:40 +0200368 'alert_message': {
369 'success': False if result['error'] is True else True,
370 'message': 'An error occurred while processing your request.' if result and result['error'] is True else "Record deleted successfully"}
371 }, url)
372
lombardoffb37bca2018-05-03 16:20:04 +0200373
lombardofr78e71882018-09-10 16:55:15 +0200374@login_required
375def clone_descriptor(request, descriptor_type=None, descriptor_id=None):
376 user = osmutils.get_user(request)
377 project_id = user.project_id
378
379 try:
380 client = Client()
381 if descriptor_type == 'nsd':
382 result = client.nsd_clone(user.get_token(), descriptor_id)
383 elif descriptor_type == 'vnfd':
384 result = client.vnfd_clone(user.get_token(), descriptor_id)
385 else:
386 log.debug('Update descriptor: Unknown data type')
387 result = {'error': True, 'data': 'Update descriptor: Unknown data type'}
388 except Exception as e:
389 log.exception(e)
390 result = {'error': True, 'data': str(e)}
lombardofr78e71882018-09-10 16:55:15 +0200391 if result['error'] == True:
392 return __response_handler(request, result['data'], url=None,
393 status=result['data']['status'] if 'status' in result['data'] else 500)
394
395 else:
396 return __response_handler(request, {}, url=None, status=200)
397
398
lombardoffb37bca2018-05-03 16:20:04 +0200399
400@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200401def new_descriptor(request, descriptor_type=None):
402 user = osmutils.get_user(request)
403 project_id = user.project_id
lombardofrf5776442018-06-26 10:37:40 +0200404 page = 'osm/descriptor/descriptor_new.html'
lombardoffb37bca2018-05-03 16:20:04 +0200405 if request.method == 'GET':
406 request_id = request.GET.get('id', '')
lombardofrf5776442018-06-26 10:37:40 +0200407
408 return __response_handler(request, {
lombardoffb37bca2018-05-03 16:20:04 +0200409 'project_id': project_id,
410 'descriptor_type': descriptor_type,
411 'descriptor_id': request_id,
lombardofrf5776442018-06-26 10:37:40 +0200412 }, page)
lombardoffb37bca2018-05-03 16:20:04 +0200413 elif request.method == 'POST':
lombardoffb37bca2018-05-03 16:20:04 +0200414 data_type = request.POST.get('type')
lombardoffb37bca2018-05-03 16:20:04 +0200415 if data_type == "file":
416 file_uploaded = request.FILES['file']
lombardofrf5776442018-06-26 10:37:40 +0200417
418 try:
419 client = Client()
420 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200421 result = client.nsd_onboard(user.get_token(), file_uploaded)
lombardofrf5776442018-06-26 10:37:40 +0200422 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200423 result = client.vnfd_onboard(user.get_token(), file_uploaded)
lombardofrf5776442018-06-26 10:37:40 +0200424 else:
425 log.debug('Create descriptor: Unknown data type')
426 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
427
428 except Exception as e:
429 log.exception(e)
430 result = {'error': True, 'data': str(e)}
lombardoffb37bca2018-05-03 16:20:04 +0200431 else:
lombardofrf5776442018-06-26 10:37:40 +0200432 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
lombardoffb37bca2018-05-03 16:20:04 +0200433
lombardofrf5776442018-06-26 10:37:40 +0200434 if result['error']:
lombardofrf5776442018-06-26 10:37:40 +0200435 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
lombardofrf5776442018-06-26 10:37:40 +0200436 else:
437 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200438
439
440@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200441def edit_descriptor(request, descriptor_id=None, descriptor_type=None):
442 user = osmutils.get_user(request)
443 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +0200444 if request.method == 'POST':
lombardofrf5776442018-06-26 10:37:40 +0200445 new_data = request.POST.get('text'),
446 data_type = request.POST.get('type')
447 #print new_data
448 try:
449 client = Client()
450 if descriptor_type == 'nsd':
451 if data_type == 'yaml':
452 new_data = yaml.load(request.POST.get('text'))
453 elif data_type == 'json':
454 new_data = json.loads(request.POST.get('text'))
lombardofr99f922f2018-07-17 17:27:36 +0200455 result = client.nsd_update(user.get_token(), descriptor_id, new_data)
lombardofrf5776442018-06-26 10:37:40 +0200456 elif descriptor_type == 'vnfd':
457 if data_type == 'yaml':
458 new_data = yaml.load(request.POST.get('text'))
459 elif data_type == 'json':
460 new_data = json.loads(request.POST.get('text'))
lombardofr99f922f2018-07-17 17:27:36 +0200461 result = client.vnfd_update(user.get_token(), descriptor_id, new_data)
lombardofrf5776442018-06-26 10:37:40 +0200462
463 else:
464 log.debug('Update descriptor: Unknown data type')
465 result = {'error': True, 'data': 'Update descriptor: Unknown data type'}
466 except Exception as e:
467 log.exception(e)
468 result = {'error': True, 'data': str(e)}
lombardofrf5776442018-06-26 10:37:40 +0200469 if result['error'] == True:
470 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
471
472 else:
473 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200474
475 elif request.method == 'GET':
lombardoffb37bca2018-05-03 16:20:04 +0200476
lombardofrf5776442018-06-26 10:37:40 +0200477 page = 'osm/descriptor/descriptor_view.html'
478 try:
479 client = Client()
480 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200481 result = client.nsd_get(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200482 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200483 result = client.vnfd_get(user.get_token(), descriptor_id)
lombardoffb37bca2018-05-03 16:20:04 +0200484
lombardofrf5776442018-06-26 10:37:40 +0200485 except Exception as e:
486 log.exception(e)
487 result = {'error': True, 'data': str(e)}
488
489 if isinstance(result, dict) and 'error' in result and result['error']:
490 return render(request, 'error.html')
491
492 descriptor_string_json = json.dumps(result, indent=2)
493 descriptor_string_yaml = Util.json2yaml(result)
lombardoffb37bca2018-05-03 16:20:04 +0200494 # print descriptor
495 return render(request, page, {
496 'project_id': project_id,
497 'descriptor_id': descriptor_id,
lombardoffb37bca2018-05-03 16:20:04 +0200498 'descriptor_type': descriptor_type,
499 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml,
500 'descriptor_string_json': descriptor_string_json}})
501
502
lombardofrf5776442018-06-26 10:37:40 +0200503@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200504def get_package_files_list(request, descriptor_id, descriptor_type):
505 user = osmutils.get_user(request)
lombardoffb37bca2018-05-03 16:20:04 +0200506 try:
lombardofrf5776442018-06-26 10:37:40 +0200507 client = Client()
508 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200509 artifacts_res = client.nsd_artifacts(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200510 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200511 artifacts_res = client.vnf_packages_artifacts(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200512 else:
513 return False
514
515 files_list = yaml.load(artifacts_res['data'] if artifacts_res and artifacts_res['error'] is False else [])
lombardoffb37bca2018-05-03 16:20:04 +0200516 result = {'files': files_list}
517 except Exception as e:
lombardofrf5776442018-06-26 10:37:40 +0200518 log.exception(e)
lombardoffb37bca2018-05-03 16:20:04 +0200519 url = 'error.html'
520 result = {'error_msg': 'Unknown error.'}
521 return __response_handler(request, result)
522
lombardofrf5776442018-06-26 10:37:40 +0200523@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200524def download_pkg(request, descriptor_id, descriptor_type):
525 user = osmutils.get_user(request)
lombardofrf5776442018-06-26 10:37:40 +0200526 file_name = "osm_export.tar.gz"
527 tar_pkg = None
528 try:
529 client = Client()
530 if descriptor_type == 'nsd':
lombardofr99f922f2018-07-17 17:27:36 +0200531 tar_pkg = client.get_nsd_pkg(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200532 elif descriptor_type == 'vnfd':
lombardofr99f922f2018-07-17 17:27:36 +0200533 tar_pkg = client.get_vnfd_pkg(user.get_token(), descriptor_id)
lombardofrf5776442018-06-26 10:37:40 +0200534
535 except Exception as e:
536 log.exception(e)
lombardoffb37bca2018-05-03 16:20:04 +0200537
538 response = HttpResponse(content_type="application/tgz")
lombardofrf5776442018-06-26 10:37:40 +0200539 response["Content-Disposition"] = "attachment; filename="+ file_name
lombardoffb37bca2018-05-03 16:20:04 +0200540 response.write(tar_pkg.getvalue())
541 return response
542
543
lombardoffb37bca2018-05-03 16:20:04 +0200544@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200545def custom_action(request, descriptor_id=None, descriptor_type=None, action_name=None):
lombardoffb37bca2018-05-03 16:20:04 +0200546 if request.method == 'GET':
lombardofr99f922f2018-07-17 17:27:36 +0200547 return globals()[action_name](request, descriptor_id, descriptor_type)
lombardoffb37bca2018-05-03 16:20:04 +0200548
549
550def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
551 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
lombardofrf5776442018-06-26 10:37:40 +0200552 if 'application/json' in raw_content_types or url is None:
553 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
lombardoffb37bca2018-05-03 16:20:04 +0200554 elif to_redirect:
555 return redirect(url, *args, **kwargs)
556 else:
557 return render(request, url, data_res)