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 show_packages(request
, package_type
=None):
36 user
= osmutils
.get_user(request
)
37 project_id
= user
.project_id
39 filter = request
.GET
.get('type')
41 if package_type
== 'ns':
42 descriptors
= client
.nsd_list(user
.get_token(),filter)
43 elif package_type
== 'vnf':
44 descriptors
= client
.vnfd_list(user
.get_token(),filter)
45 except Exception as e
:
49 url
= 'package_list.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 'package_type': package_type
58 def create_package_empty(request
, package_type
=None):
59 user
= osmutils
.get_user(request
)
60 pkg_name
= request
.POST
.get('name', '')
63 if package_type
== 'ns':
64 result
= client
.nsd_create_pkg_base(user
.get_token(), pkg_name
)
65 elif package_type
== 'vnf':
66 result
= client
.vnfd_create_pkg_base(user
.get_token(), pkg_name
)
68 log
.debug('Update descriptor: Unknown data type')
69 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
70 except Exception as e
:
72 result
= {'error': True, 'data': str(e
)}
74 if result
['error'] == True:
75 return __response_handler(request
, result
['data'], url
=None,
76 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
78 result
['data']['type'] = package_type
79 return __response_handler(request
, result
, url
=None, status
=200)
83 def delete_package(request
, package_type
=None, package_id
=None):
84 user
= osmutils
.get_user(request
)
85 project_id
= user
.project_id
88 if package_type
== 'ns':
89 result
= client
.nsd_delete(user
.get_token(), package_id
)
90 elif package_type
== 'vnf':
91 result
= client
.vnfd_delete(user
.get_token(), package_id
)
92 except Exception as e
:
94 result
= {'error': True, 'data': str(e
)}
97 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
99 return __response_handler(request
, {}, url
=None, status
=200)
103 def clone_package(request
, package_type
=None, package_id
=None):
104 user
= osmutils
.get_user(request
)
107 if package_type
== 'ns':
108 result
= client
.nsd_clone(user
.get_token(), package_id
)
109 elif package_type
== 'vnf':
110 result
= client
.vnfd_clone(user
.get_token(), package_id
)
112 log
.debug('Update descriptor: Unknown data type')
113 result
= {'error': True, 'data': 'Update descriptor: Unknown data type'}
114 except Exception as e
:
116 result
= {'error': True, 'data': str(e
)}
117 if result
['error'] == True:
118 return __response_handler(request
, result
['data'], url
=None,
119 status
=result
['data']['status'] if 'status' in result
['data'] else 500)
121 return __response_handler(request
, {}, url
=None, status
=200)
124 def download_pkg(request
, package_id
, package_type
):
125 user
= osmutils
.get_user(request
)
126 file_name
= "osm_export.tar.gz"
130 if package_type
== 'ns':
131 tar_pkg
= client
.get_nsd_pkg(user
.get_token(), package_id
)
132 elif package_type
== 'vnf':
133 tar_pkg
= client
.get_vnfd_pkg(user
.get_token(), package_id
)
135 except Exception as e
:
138 response
= HttpResponse(content_type
="application/tgz")
139 response
["Content-Disposition"] = "attachment; filename="+ file_name
140 response
.write(tar_pkg
.getvalue())
144 def onboard_package(request
, package_type
=None):
145 user
= osmutils
.get_user(request
)
146 if request
.method
== 'POST':
147 data_type
= request
.POST
.get('type')
148 if data_type
== "file":
149 file_uploaded
= request
.FILES
['file']
153 if package_type
== 'ns':
154 result
= client
.nsd_onboard(user
.get_token(), file_uploaded
)
155 elif package_type
== 'vnf':
156 result
= client
.vnfd_onboard(user
.get_token(), file_uploaded
)
158 log
.debug('Create descriptor: Unknown data type')
159 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
161 except Exception as e
:
163 result
= {'error': True, 'data': str(e
)}
165 result
= {'error': True, 'data': 'Create descriptor: Unknown data type'}
168 return __response_handler(request
, result
['data'], url
=None, status
=result
['data']['status'] if 'status' in result
['data'] else 500)
170 return __response_handler(request
, {}, url
=None, status
=200)
173 def get_package_files_list(request
, package_id
, package_type
):
174 user
= osmutils
.get_user(request
)
177 if package_type
== 'ns':
178 artifacts_res
= client
.nsd_artifacts(user
.get_token(), package_id
)
179 elif package_type
== 'vnf':
180 artifacts_res
= client
.vnf_packages_artifacts(user
.get_token(), package_id
)
184 files_list
= yaml
.load(artifacts_res
['data'] if artifacts_res
and artifacts_res
['error'] is False else [])
185 result
= {'files': files_list
}
186 except Exception as e
:
188 result
= {'error_msg': 'Unknown error.'}
189 return __response_handler(request
, result
)
192 def custom_action(request
, package_id
=None, package_type
=None, action_name
=None):
193 if request
.method
== 'GET':
194 return globals()[action_name
](request
, package_id
, package_type
)
196 def __response_handler(request
, data_res
, url
=None, to_redirect
=None, *args
, **kwargs
):
197 raw_content_types
= request
.META
.get('HTTP_ACCEPT', '*/*').split(',')
198 if 'application/json' in raw_content_types
or url
is None:
199 return HttpResponse(json
.dumps(data_res
), content_type
="application/json", *args
, **kwargs
)
201 return redirect(url
, *args
, **kwargs
)
203 return render(request
, url
, data_res
)