1 # Copyright 2018 EveryUP Srl
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
7 # http://www.apache.org/licenses/LICENSE-2.0
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
19 from sf_t3d
.decorators
import login_required
20 from django
.http
import HttpResponse
21 from django
.shortcuts
import render
, redirect
24 from lib
.util
import Util
25 from lib
.osm
.osmclient
.clientv2
import Client
26 from lib
.osm
.osm_rdcl_parser
import OsmParser
27 from lib
.osm
.osm_util
import OsmUtil
28 import authosm
.utils
as osmutils
30 logging
.basicConfig(level
=logging
.DEBUG
)
31 log
= logging
.getLogger('packagehandler/view.py')
35 def list_packages(request
, package_type
=None):
36 user
= osmutils
.get_user(request
)
37 project_id
= user
.project_id
38 project_name
= user
.project_name
40 filter = request
.GET
.get('type')
42 if package_type
== 'ns':
43 descriptors
= client
.nsd_list(user
.get_token(),filter)
44 elif package_type
== 'vnf':
45 descriptors
= client
.vnfd_list(user
.get_token(),filter)
46 except Exception as e
:
50 url
= 'package_list.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_name': project_name
,
55 'project_type': 'osm',
56 'package_type': package_type
60 def create_package_empty(request
, package_type
=None):
61 user
= osmutils
.get_user(request
)
62 pkg_name
= request
.POST
.get('name', '')
65 if package_type
== 'ns':
66 result
= client
.nsd_create_pkg_base(user
.get_token(), pkg_name
)
67 elif package_type
== 'vnf':
68 result
= client
.vnfd_create_pkg_base(user
.get_token(), pkg_name
)
70 log
.debug('Update descriptor: Unknown data type')
71 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
72 except Exception as e
:
74 result
= {'error': True, 'data': str(e
)}
76 if result
['error'] == True:
77 return __response_handler(request
, result
['data'], url
=None,
78 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
80 result
['data']['type'] = package_type
81 return __response_handler(request
, result
, url
=None, status
=200)
85 def delete_package(request
, package_type
=None, package_id
=None):
86 user
= osmutils
.get_user(request
)
87 project_id
= user
.project_id
90 if package_type
== 'ns':
91 result
= client
.nsd_delete(user
.get_token(), package_id
)
92 elif package_type
== 'vnf':
93 result
= client
.vnfd_delete(user
.get_token(), package_id
)
94 except Exception as e
:
96 result
= {'error': True, 'data': str(e
)}
99 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
101 return __response_handler(request
, {}, url
=None, status
=200)
105 def clone_package(request
, package_type
=None, package_id
=None):
106 user
= osmutils
.get_user(request
)
109 if package_type
== 'ns':
110 result
= client
.nsd_clone(user
.get_token(), package_id
)
111 elif package_type
== 'vnf':
112 result
= client
.vnfd_clone(user
.get_token(), package_id
)
114 log
.debug('Update descriptor: Unknown data type')
115 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
116 except Exception as e
:
118 result
= {'error': True, 'data': str(e
)}
119 if result
['error'] == True:
120 return __response_handler(request
, result
['data'], url
=None,
121 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
123 return __response_handler(request
, {}, url
=None, status
=200)
126 def download_pkg(request
, package_id
, package_type
):
127 user
= osmutils
.get_user(request
)
128 file_name
= "osm_export.tar.gz"
132 if package_type
== 'ns':
133 tar_pkg
= client
.get_nsd_pkg(user
.get_token(), package_id
)
134 elif package_type
== 'vnf':
135 tar_pkg
= client
.get_vnfd_pkg(user
.get_token(), package_id
)
137 except Exception as e
:
140 response
= HttpResponse(content_type
="application/tgz")
141 response
["Content-Disposition"] = "attachment; filename="+ file_name
142 response
.write(tar_pkg
.getvalue())
146 def onboard_package(request
, package_type
=None):
147 user
= osmutils
.get_user(request
)
148 if request
.method
== 'POST':
149 data_type
= request
.POST
.get('type')
150 if data_type
== "file":
151 file_uploaded
= request
.FILES
['file']
155 if package_type
== 'ns':
156 result
= client
.nsd_onboard(user
.get_token(), file_uploaded
)
157 elif package_type
== 'vnf':
158 result
= client
.vnfd_onboard(user
.get_token(), file_uploaded
)
160 log
.debug('Create descriptor: Unknown data type')
161 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
163 except Exception as e
:
165 result
= {'error': True, 'data': str(e
)}
167 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
170 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
172 return __response_handler(request
, {}, url
=None, status
=200)
175 def get_package_files_list(request
, package_id
, package_type
):
176 user
= osmutils
.get_user(request
)
179 if package_type
== 'ns':
180 artifacts_res
= client
.nsd_artifacts(user
.get_token(), package_id
)
181 elif package_type
== 'vnf':
182 artifacts_res
= client
.vnf_packages_artifacts(user
.get_token(), package_id
)
186 files_list
= yaml
.load(artifacts_res
['data'] if artifacts_res
and artifacts_res
['error'] is False else [])
187 result
= {'files': files_list
}
188 except Exception as e
:
190 result
= {'error_msg': 'Unknown error.'}
191 return __response_handler(request
, result
)
194 def custom_action(request
, package_id
=None, package_type
=None, action_name
=None):
195 if request
.method
== 'GET':
196 return globals()[action_name
](request
, package_id
, package_type
)
198 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
199 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
200 if 'application/json' in raw_content_types
or url
is None:
201 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
203 return redirect(url
, *args
, **kwargs
)
205 return render(request
, url
, data_res
)