fda9affae0de338823f2e17fd41b32fa35698cb9
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)
220 def updateElement(request
, descriptor_type
=None, descriptor_id
=None, element_type
=None):
221 user
= osmutils
.get_user(request
)
222 project_id
= user
.project_id
224 if descriptor_type
== 'nsd':
225 descriptor_result
= client
.nsd_get(user
.get_token(), descriptor_id
)
227 payload
= request
.POST
.dict()
228 if element_type
== 'graph_params':
229 descriptor_updated
= util
.update_graph_params('nsd', descriptor_result
, json
.loads(payload
['update']))
231 descriptor_updated
= util
.update_node('nsd', descriptor_result
, element_type
, json
.loads(payload
['old']), json
.loads(payload
['update']))
232 result
= client
.nsd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
233 if result
['error'] == True:
234 return __response_handler(request
, result
['data'], url
=None,
235 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
239 if descriptor_type
== 'nsd':
240 result_graph
= parser
.nsd_to_graph(descriptor_updated
)
241 if descriptor_type
== 'vnfd':
242 descriptor_result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
244 payload
= request
.POST
.dict()
245 if element_type
== 'graph_params':
246 descriptor_updated
= util
.update_graph_params('vnfd', descriptor_result
, json
.loads(payload
['update']))
248 descriptor_updated
= util
.update_node('vnfd', descriptor_result
, element_type
, json
.loads(payload
['old']), json
.loads(payload
['update']))
249 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, descriptor_updated
)
250 if result
['error'] == True:
251 return __response_handler(request
, result
['data'], url
=None,
252 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
255 if descriptor_type
== 'vnfd':
256 result_graph
= parser
.vnfd_to_graph(descriptor_updated
)
258 return __response_handler(request
, result_graph
, url
=None, status
=200)
261 def new_descriptor(request
, descriptor_type
=None):
262 user
= osmutils
.get_user(request
)
263 project_id
= user
.project_id
264 page
= 'descriptor_new.html'
265 if request
.method
== 'GET':
266 request_id
= request
.GET
.get('id', '')
268 return __response_handler(request
, {
269 'project_id': project_id
,
270 'descriptor_type': descriptor_type
,
271 'descriptor_id': request_id
,
273 elif request
.method
== 'POST':
274 data_type
= request
.POST
.get('type')
275 if data_type
== "file":
276 file_uploaded
= request
.FILES
['file']
280 if descriptor_type
== 'nsd':
281 result
= client
.nsd_onboard(user
.get_token(), file_uploaded
)
282 elif descriptor_type
== 'vnfd':
283 result
= client
.vnfd_onboard(user
.get_token(), file_uploaded
)
285 log
.debug('Create descriptor: Unknown data type')
286 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
288 except Exception as e
:
290 result
= {'error': True, 'data': str(e
)}
292 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
295 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
297 return __response_handler(request
, {}, url
=None, status
=200)
301 def edit_descriptor(request
, descriptor_id
=None, descriptor_type
=None):
302 user
= osmutils
.get_user(request
)
303 project_id
= user
.project_id
304 if request
.method
== 'POST':
305 new_data
= request
.POST
.get('text'),
306 data_type
= request
.POST
.get('type')
310 if descriptor_type
== 'nsd':
311 if data_type
== 'yaml':
312 new_data
= yaml
.load(request
.POST
.get('text'))
313 elif data_type
== 'json':
314 new_data
= json
.loads(request
.POST
.get('text'))
315 result
= client
.nsd_update(user
.get_token(), descriptor_id
, new_data
)
316 elif descriptor_type
== 'vnfd':
317 if data_type
== 'yaml':
318 new_data
= yaml
.load(request
.POST
.get('text'))
319 elif data_type
== 'json':
320 new_data
= json
.loads(request
.POST
.get('text'))
321 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, new_data
)
324 log
.debug('Update descriptor: Unknown data type')
325 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
326 except Exception as e
:
328 result
= {'error': True, 'data': str(e
)}
329 if result
['error'] == True:
330 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
333 return __response_handler(request
, {}, url
=None, status
=200)
335 elif request
.method
== 'GET':
337 page
= 'descriptor_view.html'
340 if descriptor_type
== 'nsd':
341 result
= client
.nsd_get(user
.get_token(), descriptor_id
)
342 elif descriptor_type
== 'vnfd':
343 result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
344 except Exception as e
:
346 result
= {'error': True, 'data': str(e
)}
348 if isinstance(result
, dict) and 'error' in result
and result
['error']:
349 return render(request
, 'error.html')
351 descriptor_string_json
= json
.dumps(result
, indent
=2)
352 descriptor_string_yaml
= Util
.json2yaml(result
)
354 return render(request
, page
, {
355 'project_id': project_id
,
356 'descriptor_id': descriptor_id
,
357 'descriptor_type': descriptor_type
,
358 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml
,
359 'descriptor_string_json': descriptor_string_json
}})
363 def get_package_files_list(request
, descriptor_id
, descriptor_type
):
364 user
= osmutils
.get_user(request
)
367 if descriptor_type
== 'nsd':
368 artifacts_res
= client
.nsd_artifacts(user
.get_token(), descriptor_id
)
369 elif descriptor_type
== 'vnfd':
370 artifacts_res
= client
.vnf_packages_artifacts(user
.get_token(), descriptor_id
)
374 files_list
= yaml
.load(artifacts_res
['data'] if artifacts_res
and artifacts_res
['error'] is False else [])
375 result
= {'files': files_list
}
376 except Exception as e
:
379 result
= {'error_msg': 'Unknown error.'}
380 return __response_handler(request
, result
)
384 def download_pkg(request
, descriptor_id
, descriptor_type
):
385 user
= osmutils
.get_user(request
)
386 file_name
= "osm_export.tar.gz"
390 if descriptor_type
== 'nsd':
391 tar_pkg
= client
.get_nsd_pkg(user
.get_token(), descriptor_id
)
392 elif descriptor_type
== 'vnfd':
393 tar_pkg
= client
.get_vnfd_pkg(user
.get_token(), descriptor_id
)
395 except Exception as e
:
398 response
= HttpResponse(content_type
="application/tgz")
399 response
["Content-Disposition"] = "attachment; filename="+ file_name
400 response
.write(tar_pkg
.getvalue())
404 def open_composer(request
):
405 user
= osmutils
.get_user(request
)
406 project_id
= user
.project_id
407 descriptor_id
= request
.GET
.get('id')
408 descriptor_type
= request
.GET
.get('type')
412 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
413 if 'application/json' not in raw_content_types
:
414 return __response_handler(request
, {'type': descriptor_type
}, 'composer.html')
416 if descriptor_type
== 'nsd':
417 descriptor_result
= client
.nsd_get(user
.get_token(), descriptor_id
)
418 elif descriptor_type
== 'vnfd':
419 descriptor_result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
421 except Exception as e
:
422 descriptor_result
= {'error': True, 'data': str(e
)}
424 if isinstance(descriptor_result
, dict) and 'error' in descriptor_result
and descriptor_result
['error']:
425 return render(request
, 'error.html')
429 if descriptor_type
== 'nsd':
430 result
= test
.nsd_to_graph(descriptor_result
)
431 elif descriptor_type
== 'vnfd':
432 result
= test
.vnfd_to_graph(descriptor_result
)
433 return __response_handler(request
, result
, 'composer.html')
435 return __response_handler(request
, result
, 'composer.html')
438 def get_available_nodes(request
):
439 user
= osmutils
.get_user(request
)
440 params
= request
.GET
.dict()
444 if params
['layer'] == 'nsd':
445 descriptors
= client
.vnfd_list(user
.get_token())
446 except Exception as e
:
449 if descriptors
and descriptors
['error'] is False:
450 for desc
in descriptors
['data']:
452 result
.append({'_id': desc
['_id'],'id': desc
['id'], 'name': desc
['short-name']})
454 return __response_handler(request
, {'descriptors': result
})
458 def custom_action(request
, descriptor_id
=None, descriptor_type
=None, action_name
=None):
459 if request
.method
== 'GET':
460 return globals()[action_name
](request
, descriptor_id
, descriptor_type
)
463 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
464 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
465 if 'application/json' in raw_content_types
or url
is None:
466 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
468 return redirect(url
, *args
, **kwargs
)
470 return render(request
, url
, data_res
)