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 import authosm
.utils
as osmutils
30 logging
.basicConfig(level
=logging
.DEBUG
)
31 log
= logging
.getLogger('descriptorhandler/view.py')
35 def show_descriptors(request
, descriptor_type
=None):
36 user
= osmutils
.get_user(request
)
37 project_id
= user
.project_id
41 if descriptor_type
== 'nsd':
42 descriptors
= client
.nsd_list(user
.get_token())
43 elif descriptor_type
== 'vnfd':
44 descriptors
= client
.vnfd_list(user
.get_token())
45 except Exception as e
:
49 url
= 'osm/osm_project_descriptors.html'
50 return __response_handler(request
, {
51 'descriptors': descriptors
['data'] if descriptors
and descriptors
['error'] is False else [],
52 'project_id': project_id
,
53 'project_type': 'osm',
54 'descriptor_type': descriptor_type
59 def delete_descriptor(request
, descriptor_type
=None, descriptor_id
=None):
60 user
= osmutils
.get_user(request
)
61 project_id
= user
.project_id
64 if descriptor_type
== 'nsd':
65 result
= client
.nsd_delete(user
.get_token(), descriptor_id
)
66 elif descriptor_type
== 'vnfd':
67 result
= client
.vnfd_delete(user
.get_token(), descriptor_id
)
68 except Exception as e
:
70 result
= {'error': True, 'data': str(e
)}
72 url
= 'osm/osm_project_descriptors.html'
75 if descriptor_type
== 'nsd':
76 descriptors
= client
.nsd_list(user
.get_token())
77 elif descriptor_type
== 'vnfd':
78 descriptors
= client
.vnfd_list(user
.get_token())
79 except Exception as e
:
82 return __response_handler(request
, {
83 'descriptors': descriptors
['data'] if descriptors
and descriptors
['error'] is False else [],
84 'project_id': project_id
,
85 'project_type': 'osm',
86 'descriptor_type': descriptor_type
,
88 'success': False if result
['error'] is True else True,
89 'message': 'An error occurred while processing your request.' if result
and result
['error'] is True else "Record deleted successfully"}
94 def clone_descriptor(request
, descriptor_type
=None, descriptor_id
=None):
95 user
= osmutils
.get_user(request
)
96 project_id
= user
.project_id
100 if descriptor_type
== 'nsd':
101 result
= client
.nsd_clone(user
.get_token(), descriptor_id
)
102 elif descriptor_type
== 'vnfd':
103 result
= client
.vnfd_clone(user
.get_token(), descriptor_id
)
105 log
.debug('Update descriptor: Unknown data type')
106 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
107 except Exception as e
:
109 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)
115 return __response_handler(request
, {}, url
=None, status
=200)
119 def new_descriptor(request
, descriptor_type
=None):
120 user
= osmutils
.get_user(request
)
121 project_id
= user
.project_id
122 page
= 'descriptor_new.html'
123 if request
.method
== 'GET':
124 request_id
= request
.GET
.get('id', '')
126 return __response_handler(request
, {
127 'project_id': project_id
,
128 'descriptor_type': descriptor_type
,
129 'descriptor_id': request_id
,
131 elif request
.method
== 'POST':
132 data_type
= request
.POST
.get('type')
133 if data_type
== "file":
134 file_uploaded
= request
.FILES
['file']
138 if descriptor_type
== 'nsd':
139 result
= client
.nsd_onboard(user
.get_token(), file_uploaded
)
140 elif descriptor_type
== 'vnfd':
141 result
= client
.vnfd_onboard(user
.get_token(), file_uploaded
)
143 log
.debug('Create descriptor: Unknown data type')
144 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
146 except Exception as e
:
148 result
= {'error': True, 'data': str(e
)}
150 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
153 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
155 return __response_handler(request
, {}, url
=None, status
=200)
159 def edit_descriptor(request
, descriptor_id
=None, descriptor_type
=None):
160 user
= osmutils
.get_user(request
)
161 project_id
= user
.project_id
162 if request
.method
== 'POST':
163 new_data
= request
.POST
.get('text'),
164 data_type
= request
.POST
.get('type')
168 if descriptor_type
== 'nsd':
169 if data_type
== 'yaml':
170 new_data
= yaml
.load(request
.POST
.get('text'))
171 elif data_type
== 'json':
172 new_data
= json
.loads(request
.POST
.get('text'))
173 result
= client
.nsd_update(user
.get_token(), descriptor_id
, new_data
)
174 elif descriptor_type
== 'vnfd':
175 if data_type
== 'yaml':
176 new_data
= yaml
.load(request
.POST
.get('text'))
177 elif data_type
== 'json':
178 new_data
= json
.loads(request
.POST
.get('text'))
179 result
= client
.vnfd_update(user
.get_token(), descriptor_id
, new_data
)
182 log
.debug('Update descriptor: Unknown data type')
183 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
184 except Exception as e
:
186 result
= {'error': True, 'data': str(e
)}
187 if result
['error'] == True:
188 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
191 return __response_handler(request
, {}, url
=None, status
=200)
193 elif request
.method
== 'GET':
195 page
= 'descriptor_view.html'
198 if descriptor_type
== 'nsd':
199 result
= client
.nsd_get(user
.get_token(), descriptor_id
)
200 elif descriptor_type
== 'vnfd':
201 result
= client
.vnfd_get(user
.get_token(), descriptor_id
)
203 except Exception as e
:
205 result
= {'error': True, 'data': str(e
)}
207 if isinstance(result
, dict) and 'error' in result
and result
['error']:
208 return render(request
, 'error.html')
210 descriptor_string_json
= json
.dumps(result
, indent
=2)
211 descriptor_string_yaml
= Util
.json2yaml(result
)
213 return render(request
, page
, {
214 'project_id': project_id
,
215 'descriptor_id': descriptor_id
,
216 'descriptor_type': descriptor_type
,
217 'descriptor_strings': {'descriptor_string_yaml': descriptor_string_yaml
,
218 'descriptor_string_json': descriptor_string_json
}})
222 def get_package_files_list(request
, descriptor_id
, descriptor_type
):
223 user
= osmutils
.get_user(request
)
226 if descriptor_type
== 'nsd':
227 artifacts_res
= client
.nsd_artifacts(user
.get_token(), descriptor_id
)
228 elif descriptor_type
== 'vnfd':
229 artifacts_res
= client
.vnf_packages_artifacts(user
.get_token(), descriptor_id
)
233 files_list
= yaml
.load(artifacts_res
['data'] if artifacts_res
and artifacts_res
['error'] is False else [])
234 result
= {'files': files_list
}
235 except Exception as e
:
238 result
= {'error_msg': 'Unknown error.'}
239 return __response_handler(request
, result
)
243 def download_pkg(request
, descriptor_id
, descriptor_type
):
244 user
= osmutils
.get_user(request
)
245 file_name
= "osm_export.tar.gz"
249 if descriptor_type
== 'nsd':
250 tar_pkg
= client
.get_nsd_pkg(user
.get_token(), descriptor_id
)
251 elif descriptor_type
== 'vnfd':
252 tar_pkg
= client
.get_vnfd_pkg(user
.get_token(), descriptor_id
)
254 except Exception as e
:
257 response
= HttpResponse(content_type
="application/tgz")
258 response
["Content-Disposition"] = "attachment; filename="+ file_name
259 response
.write(tar_pkg
.getvalue())
263 def open_composer(request
):
264 user
= osmutils
.get_user(request
)
265 project_id
= user
.project_id
266 result
= {'project_id': project_id
,
268 {"info": {"type": "vnf", "property": {"custom_label": ""},
269 "group": []}, "id": "vm"},
270 {"info": {"type": "vnf", "property": {"custom_label": ""},
271 "group": []}, "id": "vlan"},
272 {"info": {"type": "vnf", "property": {"custom_label": ""},
273 "group": []}, "id": "firewall"},
274 {"info": {"type": "vnf", "property": {"custom_label": ""},
275 "group": []}, "id": "ping"},
277 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
278 "group": []}, "id": "vl1"},
279 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
280 "group": []}, "id": "vl2"},
281 {"info": {"type": "ns_vl", "property": {"custom_label": ""},
282 "group": []}, "id": "vl3"},
285 {"source": "vm", "group": [], "target": "vl3", "view": "ns"},
286 {"source": "vlan", "group": [], "target": "vl3", "view": "ns"},
287 {"source": "vlan", "group": [], "target": "vl1", "view": "ns"},
288 {"source": "firewall", "group": [], "target": "vl1", "view": "ns"},
289 {"source": "firewall", "group": [], "target": "vl2", "view": "ns"},
290 {"source": "ping", "group": [], "target": "vl2", "view": "ns"},
299 "callback": "addNode"
302 "callback": "removeNode"
308 "callback": "addNode"
311 "callback": "removeNode"
320 "callback": "addLink",
321 "direct_edge": False,
323 "callback": "removeLink"
331 "callback": "addLink",
332 "direct_edge": False,
334 "callback": "removeLink"
347 "callback": "addNode"
350 "callback": "removeNode"
355 "callback": "addNode"
358 "callback": "removeNode"
367 "callback": "addLink",
368 "direct_edge": False,
370 "callback": "removeLink"
378 "callback": "addLink",
379 "direct_edge": False,
381 "callback": "removeLink"
404 "description": "osm",
407 "file": "osm_controller.js",
408 "class": "OsmController"
411 "file": "osm_controller.js",
412 "class": "OsmController"
415 "file": "osm_controller.js",
416 "class": "OsmController"
419 "file": "osm_controller.js",
420 "class": "OsmController"
426 return __response_handler(request
, result
, 'composer.html')
429 def get_available_nodes(request
):
431 params
= request
.GET
.dict()
433 'ns': [{"types": [{"name": "Generic", "id": "vnf"},
434 {"name": "ping", "id": "vnf"},
435 {"name": "pong", "id": "vnf"},
436 {"name": "hackfest1-vm", "id": "vnf"}], "category_name": "Vnf"},
437 {"types": [{"name": "VL", "id": "ns_vl"}], "category_name": "VirtualLink"}],
438 'vnf': [{"types": [{"name": "VDU", "id": "vdu"}], "category_name": "Vdu"},
439 {"types": [{"name": "CP", "id": "cp"}], "category_name": "CP"}]
442 return __response_handler(request
, nodes
[params
['layer']])
446 def custom_action(request
, descriptor_id
=None, descriptor_type
=None, action_name
=None):
447 if request
.method
== 'GET':
448 return globals()[action_name
](request
, descriptor_id
, descriptor_type
)
451 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
452 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
453 if 'application/json' in raw_content_types
or url
is None:
454 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
456 return redirect(url
, *args
, **kwargs
)
458 return render(request
, url
, data_res
)