blob: de9073780d348ec1aeab04a584e365181f1b4565 [file] [log] [blame]
lombardofre1ed7b22018-12-19 17:27:24 +01001# 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
15import json
16import logging
17
18import yaml
19from sf_t3d.decorators import login_required
20from django.http import HttpResponse
21from django.shortcuts import render, redirect
22
23
24from lib.util import Util
25from lib.osm.osmclient.clientv2 import Client
26from lib.osm.osm_rdcl_parser import OsmParser
27from lib.osm.osm_util import OsmUtil
28import authosm.utils as osmutils
29
30logging.basicConfig(level=logging.DEBUG)
31log = logging.getLogger('packagehandler/view.py')
32
33
34@login_required
35def 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
58def 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
83def 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
lombardofr76483c32019-03-12 15:39:06 +010096 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)
lombardofre1ed7b22018-12-19 17:27:24 +0100100
lombardofre1ed7b22018-12-19 17:27:24 +0100101
102@login_required
103def 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
124def 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
144def 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
173def 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
192def 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
196def __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)