de9073780d348ec1aeab04a584e365181f1b4565
[osm/LW-UI.git] / packagehandler / views.py
1 # Copyright 2018 EveryUP Srl
2 #
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
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
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.
14
15 import json
16 import logging
17
18 import yaml
19 from sf_t3d.decorators import login_required
20 from django.http import HttpResponse
21 from django.shortcuts import render, redirect
22
23
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
29
30 logging.basicConfig(level=logging.DEBUG)
31 log = logging.getLogger('packagehandler/view.py')
32
33
34 @login_required
35 def show_packages(request, package_type=None):
36 user = osmutils.get_user(request)
37 project_id = user.project_id
38 client = Client()
39 filter = request.GET.get('type')
40 try:
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:
46 log.exception(e)
47 descriptors = []
48
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
55 }, url)
56
57 @login_required
58 def create_package_empty(request, package_type=None):
59 user = osmutils.get_user(request)
60 pkg_name = request.POST.get('name', '')
61 try:
62 client = Client()
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)
67 else:
68 log.debug('Update descriptor: Unknown data type')
69 result = {'error': True, 'data': 'Update descriptor: Unknown data type'}
70 except Exception as e:
71 log.exception(e)
72 result = {'error': True, 'data': str(e)}
73
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)
77 else:
78 result['data']['type'] = package_type
79 return __response_handler(request, result, url=None, status=200)
80
81
82 @login_required
83 def delete_package(request, package_type=None, package_id=None):
84 user = osmutils.get_user(request)
85 project_id = user.project_id
86 try:
87 client = Client()
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:
93 log.exception(e)
94 result = {'error': True, 'data': str(e)}
95
96 if result['error']:
97 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
98 else:
99 return __response_handler(request, {}, url=None, status=200)
100
101
102 @login_required
103 def clone_package(request, package_type=None, package_id=None):
104 user = osmutils.get_user(request)
105 try:
106 client = Client()
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)
111 else:
112 log.debug('Update descriptor: Unknown data type')
113 result = {'error': True, 'data': 'Update descriptor: Unknown data type'}
114 except Exception as e:
115 log.exception(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)
120 else:
121 return __response_handler(request, {}, url=None, status=200)
122
123 @login_required
124 def download_pkg(request, package_id, package_type):
125 user = osmutils.get_user(request)
126 file_name = "osm_export.tar.gz"
127 tar_pkg = None
128 try:
129 client = Client()
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)
134
135 except Exception as e:
136 log.exception(e)
137
138 response = HttpResponse(content_type="application/tgz")
139 response["Content-Disposition"] = "attachment; filename="+ file_name
140 response.write(tar_pkg.getvalue())
141 return response
142
143 @login_required
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']
150
151 try:
152 client = Client()
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)
157 else:
158 log.debug('Create descriptor: Unknown data type')
159 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
160
161 except Exception as e:
162 log.exception(e)
163 result = {'error': True, 'data': str(e)}
164 else:
165 result = {'error': True, 'data': 'Create descriptor: Unknown data type'}
166
167 if result['error']:
168 return __response_handler(request, result['data'], url=None, status=result['data']['status'] if 'status' in result['data'] else 500)
169 else:
170 return __response_handler(request, {}, url=None, status=200)
171
172 @login_required
173 def get_package_files_list(request, package_id, package_type):
174 user = osmutils.get_user(request)
175 try:
176 client = Client()
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)
181 else:
182 return False
183
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:
187 log.exception(e)
188 result = {'error_msg': 'Unknown error.'}
189 return __response_handler(request, result)
190
191 @login_required
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)
195
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)
200 elif to_redirect:
201 return redirect(url, *args, **kwargs)
202 else:
203 return render(request, url, data_res)