c80af8a4b76a3b32ba69b0444cf075f48e18e936
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 import authosm
.utils
as osmutils
31 logging
.basicConfig(level
=logging
.DEBUG
)
32 log
= logging
.getLogger('descriptorhandler/view.py')
36 def show_descriptors(request
, descriptor_type
=None):
37 user
= osmutils
.get_user(request
)
38 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"}
95 def clone_descriptor(request
, descriptor_type
=None, descriptor_id
=None):
96 user
= osmutils
.get_user(request
)
97 project_id
= user
.project_id
101 if descriptor_type
== 'nsd':
102 result
= client
.nsd_clone(user
.get_token(), descriptor_id
)
103 elif descriptor_type
== 'vnfd':
104 result
= client
.vnfd_clone(user
.get_token(), descriptor_id
)
106 log
.debug('Update descriptor: Unknown data type')
107 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
108 except Exception as e
:
110 result
= {'error': True, 'data': str(e
)}
111 if result
['error'] == True:
112 return __response_handler(request
, result
['data'], url
=None,
113 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
116 return __response_handler(request
, {}, url
=None, status
=200)
120 def new_descriptor(request
, descriptor_type
=None):
121 user
= osmutils
.get_user(request
)
122 project_id
= user
.project_id
123 page
= 'descriptor_new.html'
124 if request
.method
== 'GET':
125 request_id
= request
.GET
.get('id', '')
127 return __response_handler(request
, {
128 'project_id': project_id
,
129 'descriptor_type': descriptor_type
,
130 'descriptor_id': request_id
,
132 elif request
.method
== 'POST':
133 data_type
= request
.POST
.get('type')
134 if data_type
== "file":
135 file_uploaded
= request
.FILES
['file']
139 if descriptor_type
== 'nsd':
140 result
= client
.nsd_onboard(user
.get_token(), file_uploaded
)
141 elif descriptor_type
== 'vnfd':
142 result
= client
.vnfd_onboard(user
.get_token(), file_uploaded
)
144 log
.debug('Create descriptor: Unknown data type')
145 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
147 except Exception as e
:
149 result
= {'error': True, 'data': str(e
)}
151 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
154 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
156 return __response_handler(request
, {}, url
=None, status
=200)
160 def edit_descriptor(request
, descriptor_id
=None, descriptor_type
=None):
161 user
= osmutils
.get_user(request
)
162 project_id
= user
.project_id
163 if request
.method
== 'POST':
164 new_data
= request
.POST
.get('text'),
165 data_type
= request
.POST
.get('type')
169 if descriptor_type
== 'nsd':
170 if data_type
== 'yaml':
171 new_data
= yaml
.load(request
.POST
.get('text'))
172 elif data_type
== 'json':
173 new_data
= json
.loads(request
.POST
.get('text'))
174 result
= client
.nsd_update(user
.get_token(), descriptor_id
, new_data
)
175 elif descriptor_type
== 'vnfd':
176 if data_type
== 'yaml':
177 new_data
= yaml
.load(request
.POST
.get('text'))
178 elif data_type
== 'json':
179 new_data
= json
.loads(request
.POST
.get('text'))
180 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, new_data
)
183 log
.debug('Update descriptor: Unknown data type')
184 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
185 except Exception as e
:
187 result
= {'error': True, 'data': str(e
)}
188 if result
['error'] == True:
189 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
192 return __response_handler(request
, {}, url
=None, status
=200)
194 elif request
.method
== 'GET':
196 page
= 'descriptor_view.html'
199 if descriptor_type
== 'nsd':
200 result
= client
.nsd_get(user
.get_token(), descriptor_id
)
201 elif descriptor_type
== 'vnfd':
202 result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
204 except Exception as e
:
206 result
= {'error': True, 'data': str(e
)}
208 if isinstance(result
, dict) and 'error' in result
and result
['error']:
209 return render(request
, 'error.html')
211 descriptor_string_json
= json
.dumps(result
, indent
=2)
212 descriptor_string_yaml
= Util
.json2yaml(result
)
214 return render(request
, page
, {
215 'project_id': project_id
,
216 'descriptor_id': descriptor_id
,
217 'descriptor_type': descriptor_type
,
218 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml
,
219 'descriptor_string_json': descriptor_string_json
}})
223 def get_package_files_list(request
, descriptor_id
, descriptor_type
):
224 user
= osmutils
.get_user(request
)
227 if descriptor_type
== 'nsd':
228 artifacts_res
= client
.nsd_artifacts(user
.get_token(), descriptor_id
)
229 elif descriptor_type
== 'vnfd':
230 artifacts_res
= client
.vnf_packages_artifacts(user
.get_token(), descriptor_id
)
234 files_list
= yaml
.load(artifacts_res
['data'] if artifacts_res
and artifacts_res
['error'] is False else [])
235 result
= {'files': files_list
}
236 except Exception as e
:
239 result
= {'error_msg': 'Unknown error.'}
240 return __response_handler(request
, result
)
244 def download_pkg(request
, descriptor_id
, descriptor_type
):
245 user
= osmutils
.get_user(request
)
246 file_name
= "osm_export.tar.gz"
250 if descriptor_type
== 'nsd':
251 tar_pkg
= client
.get_nsd_pkg(user
.get_token(), descriptor_id
)
252 elif descriptor_type
== 'vnfd':
253 tar_pkg
= client
.get_vnfd_pkg(user
.get_token(), descriptor_id
)
255 except Exception as e
:
258 response
= HttpResponse(content_type
="application/tgz")
259 response
["Content-Disposition"] = "attachment; filename="+ file_name
260 response
.write(tar_pkg
.getvalue())
264 def open_composer(request
):
265 user
= osmutils
.get_user(request
)
266 project_id
= user
.project_id
267 descriptor_id
= request
.GET
.get('id')
268 descriptor_type
= request
.GET
.get('type')
272 if descriptor_type
== 'nsd':
273 descriptor_result
= client
.nsd_get(user
.get_token(), descriptor_id
)
274 elif descriptor_type
== 'vnfd':
275 descriptor_result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
277 except Exception as e
:
278 descriptor_result
= {'error': True, 'data': str(e
)}
280 if isinstance(descriptor_result
, dict) and 'error' in descriptor_result
and descriptor_result
['error']:
281 return render(request
, 'error.html')
285 if descriptor_type
== 'nsd':
286 result
= test
.nsd_to_graph(descriptor_result
)
287 elif descriptor_type
== 'vnfd':
288 result
= test
.vnfd_to_graph(descriptor_result
)
289 return __response_handler(request
, result
,'composer.html')
291 result
= {'project_id': project_id
,
293 {"info": {"type": "vnf", "property": {"custom_label": ""},
294 "group": []}, "id": "vm"},
295 {"info": {"type": "vnf", "property": {"custom_label": ""},
296 "group": []}, "id": "vlan"},
297 {"info": {"type": "vnf", "property": {"custom_label": ""},
298 "group": []}, "id": "firewall"},
299 {"info": {"type": "vnf", "property": {"custom_label": ""},
300 "group": []}, "id": "ping"},
302 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
303 "group": []}, "id": "vl1"},
304 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
305 "group": []}, "id": "vl2"},
306 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
307 "group": []}, "id": "vl3"},
310 {"source": "vm", "group": [], "target": "vl3", "view": "ns"},
311 {"source": "vlan", "group": [], "target": "vl3", "view": "ns"},
312 {"source": "vlan", "group": [], "target": "vl1", "view": "ns"},
313 {"source": "firewall", "group": [], "target": "vl1", "view": "ns"},
314 {"source": "firewall", "group": [], "target": "vl2", "view": "ns"},
315 {"source": "ping", "group": [], "target": "vl2", "view": "ns"},
324 "callback": "addNode"
327 "callback": "removeNode"
333 "callback": "addNode"
336 "callback": "removeNode"
345 "callback": "addLink",
346 "direct_edge": False,
348 "callback": "removeLink"
356 "callback": "addLink",
357 "direct_edge": False,
359 "callback": "removeLink"
372 "callback": "addNode"
375 "callback": "removeNode"
380 "callback": "addNode"
383 "callback": "removeNode"
392 "callback": "addLink",
393 "direct_edge": False,
395 "callback": "removeLink"
403 "callback": "addLink",
404 "direct_edge": False,
406 "callback": "removeLink"
429 "description": "osm",
432 "file": "osm_controller.js",
433 "class": "OsmController"
436 "file": "osm_controller.js",
437 "class": "OsmController"
440 "file": "osm_controller.js",
441 "class": "OsmController"
444 "file": "osm_controller.js",
445 "class": "OsmController"
451 return __response_handler(request
, result
, 'composer.html')
454 def get_available_nodes(request
):
456 params
= request
.GET
.dict()
458 'ns': [{"types": [{"name": "Generic", "id": "vnf"},
459 {"name": "ping", "id": "vnf"},
460 {"name": "pong", "id": "vnf"},
461 {"name": "hackfest1-vm", "id": "vnf"}], "category_name": "Vnf"},
462 {"types": [{"name": "VL", "id": "ns_vl"}], "category_name": "VirtualLink"}],
463 'vnf': [{"types": [{"name": "VDU", "id": "vdu"}], "category_name": "Vdu"},
464 {"types": [{"name": "CP", "id": "cp"}], "category_name": "CP"}]
467 return __response_handler(request
, nodes
[params
['layer']])
471 def custom_action(request
, descriptor_id
=None, descriptor_type
=None, action_name
=None):
472 if request
.method
== 'GET':
473 return globals()[action_name
](request
, descriptor_id
, descriptor_type
)
476 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
477 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
478 if 'application/json' in raw_content_types
or url
is None:
479 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
481 return redirect(url
, *args
, **kwargs
)
483 return render(request
, url
, data_res
)