blob: edf0da1839c0e27368418cbdd1964e6cb6f075fe [file] [log] [blame]
lombardoffb37bca2018-05-03 16:20:04 +02001#
2# Copyright 2018 CNIT - Consorzio Nazionale Interuniversitario per le Telecomunicazioni
3#
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
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
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.
15#
16
17from django.shortcuts import render, redirect
lombardoffb37bca2018-05-03 16:20:04 +020018from django.http import HttpResponse, JsonResponse
lombardofdd73c0c2018-05-09 10:46:49 +020019import yaml
lombardofrf5776442018-06-26 10:37:40 +020020import json
lombardoffb37bca2018-05-03 16:20:04 +020021import logging
lombardofrf5776442018-06-26 10:37:40 +020022from lib.osm.osmclient.clientv2 import Client
lombardofre6eb7432018-10-28 19:43:46 +010023from lib.osm.osm_rdcl_parser import OsmParser
lombardofr99f922f2018-07-17 17:27:36 +020024import authosm.utils as osmutils
lombardofr4908f382018-09-10 11:36:06 +020025from sf_t3d.decorators import login_required
lombardofrf5776442018-06-26 10:37:40 +020026
27logging.basicConfig(level=logging.DEBUG)
28log = logging.getLogger('instancehandler/view.py')
lombardoffb37bca2018-05-03 16:20:04 +020029
lombardofr4908f382018-09-10 11:36:06 +020030
lombardoffb37bca2018-05-03 16:20:04 +020031@login_required
lombardofr99f922f2018-07-17 17:27:36 +020032def list(request, type=None):
33 user = osmutils.get_user(request)
34 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +020035 client = Client()
lombardofr4908f382018-09-10 11:36:06 +020036 result = {'type': type, 'project_id': project_id}
37 if "OSM_ERROR" in request.session:
38 result['alert_error'] = request.session["OSM_ERROR"]
39 del request.session["OSM_ERROR"]
40 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
41 if 'application/json' not in raw_content_types:
42 return __response_handler(request, result, 'instance_list.html')
43 instance_list = None
lombardoffb37bca2018-05-03 16:20:04 +020044 if type == 'ns':
lombardofr99f922f2018-07-17 17:27:36 +020045 instance_list = client.ns_list(user.get_token())
lombardof647aa2e2018-05-26 17:11:13 +020046 elif type == 'vnf':
lombardofr99f922f2018-07-17 17:27:36 +020047 instance_list = client.vnf_list(user.get_token())
lombardofrb58d5d82019-01-04 15:25:45 +010048 elif type == 'pdu':
49 instance_list = client.pdu_list(user.get_token())
lombardofrcf3a1f02019-01-21 15:43:52 +010050 elif type == 'nsi':
51 instance_list = client.nsi_list(user.get_token())
lombardoffb37bca2018-05-03 16:20:04 +020052
lombardofr4908f382018-09-10 11:36:06 +020053 result['instances'] = instance_list['data'] if instance_list and instance_list['error'] is False else []
lombardofr0b4fb872018-07-24 17:10:48 +020054
lombardofa03da5e2018-06-02 18:36:44 +020055 return __response_handler(request, result, 'instance_list.html')
lombardoffb37bca2018-05-03 16:20:04 +020056
lombardoffb37bca2018-05-03 16:20:04 +020057@login_required
lombardofrb58d5d82019-01-04 15:25:45 +010058def create(request, type=None):
lombardoffb37bca2018-05-03 16:20:04 +020059 result = {}
lombardofrcf3a1f02019-01-21 15:43:52 +010060 config_vim_account_id = {}
lombardofr8532b432019-04-30 17:28:22 +020061 config_wim_account_id = {}
lombardofr99f922f2018-07-17 17:27:36 +020062 user = osmutils.get_user(request)
lombardoffb37bca2018-05-03 16:20:04 +020063 client = Client()
lombardofrcf3a1f02019-01-21 15:43:52 +010064
lombardofr8532b432019-04-30 17:28:22 +020065 def get_vim_account_id(vim_account):
66 if config_vim_account_id.get(vim_account):
67 return config_vim_account_id[vim_account]
68 result_client = client.vim_list(user.get_token())
69 vim_list = result_client['data'] if result_client and result_client['error'] is False else []
70 if vim_list is None or len(vim_list) == 0:
71 raise ValueError("cannot find vim account '{}'".format(vim_account))
72 for vim in vim_list:
73 if vim_account == vim['name']:
74 config_vim_account_id[vim_account] = vim['uuid']
75 return vim['uuid']
76
77 def get_wim_account_id(wim_account):
78
79 if config_wim_account_id.get(wim_account):
80 return config_wim_account_id[wim_account]
81 result_client = client.wim_list(user.get_token())
82 wim_list = result_client['data'] if result_client and result_client['error'] is False else []
83 if wim_list is None or len(wim_list) == 0:
84 raise ValueError("cannot find wim account '{}'".format(wim_account))
85 for wim in wim_list:
86 if wim_account == wim['name']:
87 config_wim_account_id[wim_account] = wim['uuid']
88 return wim['uuid']
89
90
lombardofrb58d5d82019-01-04 15:25:45 +010091 if type == 'ns':
92 try:
lombardofrf5776442018-06-26 10:37:40 +020093
lombardofrb58d5d82019-01-04 15:25:45 +010094 ns_data = {
95 "nsName": request.POST.get('nsName', 'WithoutName'),
96 "nsDescription": request.POST.get('nsDescription', ''),
97 "nsdId": request.POST.get('nsdId', ''),
98 "vimAccountId": request.POST.get('vimAccountId', ''),
99 }
lombardofr8532b432019-04-30 17:28:22 +0200100 ns_data["ssh_keys"] = []
lombardofrb58d5d82019-01-04 15:25:45 +0100101 if 'ssh_key' in request.POST and request.POST.get('ssh_key') != '':
lombardofr8532b432019-04-30 17:28:22 +0200102 ns_data["ssh_keys"].append(request.POST.get('ssh_key'))
103 ssh_key_files = request.FILES.getlist('ssh_key_files')
104 for ssh_key_file in ssh_key_files:
105 ssh_key = ''
106 for line in ssh_key_file:
107 ssh_key = ssh_key + line.decode()
108 ns_data["ssh_keys"].append(ssh_key)
109
lombardofrb58d5d82019-01-04 15:25:45 +0100110
lombardofr8532b432019-04-30 17:28:22 +0200111 config_file = request.FILES.get('config_file')
112
113 if config_file is not None:
114 config = ''
115 for line in config_file:
116 config = config + line.decode()
117 ns_config = yaml.load(config)
118 elif 'config' in request.POST and request.POST.get('config') != '':
lombardofrb58d5d82019-01-04 15:25:45 +0100119 ns_config = yaml.load(request.POST.get('config'))
lombardofr8532b432019-04-30 17:28:22 +0200120 else:
121 ns_config = None
122
123
124 if ns_config is not None:
lombardofrb58d5d82019-01-04 15:25:45 +0100125 if isinstance(ns_config, dict):
126 if "vim-network-name" in ns_config:
127 ns_config["vld"] = ns_config.pop("vim-network-name")
128 if "vld" in ns_config:
lombardofrb58d5d82019-01-04 15:25:45 +0100129 for vld in ns_config["vld"]:
130 if vld.get("vim-network-name"):
131 if isinstance(vld["vim-network-name"], dict):
132 vim_network_name_dict = {}
lombardofr8532b432019-04-30 17:28:22 +0200133 for vim_account, vim_net in list(vld["vim-network-name"].items()):
134 vim_network_name_dict[get_vim_account_id(vim_account)] = vim_net
lombardofrb58d5d82019-01-04 15:25:45 +0100135 vld["vim-network-name"] = vim_network_name_dict
lombardofr8532b432019-04-30 17:28:22 +0200136 if "wim_account" in vld and vld["wim_account"] is not None:
137 vld["wimAccountId"] = get_wim_account_id(vld.pop("wim_account"))
lombardofrb58d5d82019-01-04 15:25:45 +0100138 ns_data["vld"] = ns_config["vld"]
139 if "vnf" in ns_config:
140 for vnf in ns_config["vnf"]:
141 if vnf.get("vim_account"):
lombardofr8532b432019-04-30 17:28:22 +0200142 vnf["vimAccountId"] = get_vim_account_id(vnf.pop("vim_account"))
lombardofrb58d5d82019-01-04 15:25:45 +0100143 ns_data["vnf"] = ns_config["vnf"]
lombardofr8532b432019-04-30 17:28:22 +0200144
tiernocbf1fc52019-03-22 14:34:39 +0000145 if "additionalParamsForNs" in ns_config:
lombardofr8532b432019-04-30 17:28:22 +0200146 ns_data["additionalParamsForNs"] = ns_config.pop("additionalParamsForNs")
147 if not isinstance(ns_data["additionalParamsForNs"], dict):
148 raise ValueError("Error 'additionalParamsForNs' must be a dictionary")
tiernocbf1fc52019-03-22 14:34:39 +0000149 if "additionalParamsForVnf" in ns_config:
lombardofr8532b432019-04-30 17:28:22 +0200150 ns_data["additionalParamsForVnf"] = ns_config.pop("additionalParamsForVnf")
151 if not isinstance(ns_data["additionalParamsForVnf"], list):
152 raise ValueError("Error 'additionalParamsForVnf' must be a list")
153 for additional_param_vnf in ns_data["additionalParamsForVnf"]:
154 if not isinstance(additional_param_vnf, dict):
155 raise ValueError("Error 'additionalParamsForVnf' items must be dictionaries")
156 if not additional_param_vnf.get("member-vnf-index"):
157 raise ValueError("Error 'additionalParamsForVnf' items must contain "
158 "'member-vnf-index'")
159 if not additional_param_vnf.get("additionalParams"):
160 raise ValueError("Error 'additionalParamsForVnf' items must contain "
161 "'additionalParams'")
162 if "wim_account" in ns_config:
163 wim_account = ns_config.pop("wim_account")
164 if wim_account is not None:
165 ns_data['wimAccountId'] = get_wim_account_id(wim_account)
tiernocbf1fc52019-03-22 14:34:39 +0000166
lombardofrb58d5d82019-01-04 15:25:45 +0100167 except Exception as e:
lombardofr6060dd62019-05-19 12:31:07 +0200168 return __response_handler(request, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e.message} , url=None, status=400)
lombardofrb58d5d82019-01-04 15:25:45 +0100169 result = client.ns_create(user.get_token(), ns_data)
lombardofr6060dd62019-05-19 12:31:07 +0200170 print result
171 if result['error']:
172 return __response_handler(request, result['data'], url=None,
173 status=result['data']['status'] if 'status' in result['data'] else 500)
174 else:
175 return __response_handler(request, {}, url=None, status=200)
lombardofrcf3a1f02019-01-21 15:43:52 +0100176
177 elif type == 'nsi':
178 try:
179 nsi_data = {
180 "nsiName": request.POST.get('nsiName', 'WithoutName'),
181 "nsiDescription": request.POST.get('nsiDescription', ''),
182 "nstId": request.POST.get('nstId', ''),
183 "vimAccountId": request.POST.get('vimAccountId', ''),
184 }
185
lombardofr8532b432019-04-30 17:28:22 +0200186 nsi_data["ssh_keys"] = []
lombardofrcf3a1f02019-01-21 15:43:52 +0100187 if 'ssh_key' in request.POST and request.POST.get('ssh_key') != '':
lombardofr8532b432019-04-30 17:28:22 +0200188 nsi_data["ssh_keys"].append(request.POST.get('ssh_key'))
189 ssh_key_files = request.FILES.getlist('ssh_key_files')
190 for ssh_key_file in ssh_key_files:
191 ssh_key = ''
192 for line in ssh_key_file:
193 ssh_key = ssh_key + line.decode()
194 nsi_data["ssh_keys"].append(ssh_key)
195 nsi_data["ssh_keys"] = ','.join(nsi_data["ssh_keys"])
196
197 config_file = request.FILES.get('config_file')
198
199 if config_file is not None:
200 config = ''
201 for line in config_file:
202 config = config + line.decode()
203 nsi_config = yaml.load(config)
204 elif 'config' in request.POST and request.POST.get('config') != '':
205 nsi_config = yaml.load(request.POST.get('config'))
206 else:
207 nsi_config = None
208
209 if nsi_config is not None:
210 if "netslice-vld" in nsi_config:
211 for vld in nsi_config["netslice-vld"]:
212 if vld.get("vim-network-name"):
213 if isinstance(vld["vim-network-name"], dict):
214 vim_network_name_dict = {}
215 for vim_account, vim_net in list(vld["vim-network-name"].items()):
216 vim_network_name_dict[get_vim_account_id(vim_account)] = vim_net
217 vld["vim-network-name"] = vim_network_name_dict
218 nsi_data["netslice-vld"] = nsi_config["netslice-vld"]
219 if "netslice-subnet" in nsi_config:
220 for nssubnet in nsi_config["netslice-subnet"]:
221 if "vld" in nssubnet:
222 for vld in nssubnet["vld"]:
223 if vld.get("vim-network-name"):
224 if isinstance(vld["vim-network-name"], dict):
225 vim_network_name_dict = {}
226 for vim_account, vim_net in list(vld["vim-network-name"].items()):
227 vim_network_name_dict[get_vim_account_id(vim_account)] = vim_net
228 vld["vim-network-name"] = vim_network_name_dict
229 if "vnf" in nssubnet:
230 for vnf in nsi_config["vnf"]:
231 if vnf.get("vim_account"):
232 vnf["vimAccountId"] = get_vim_account_id(vnf.pop("vim_account"))
233 nsi_data["netslice-subnet"] = nsi_config["netslice-subnet"]
234 if "additionalParamsForNsi" in nsi_config:
235 nsi_data["additionalParamsForNsi"] = nsi_config.pop("additionalParamsForNsi")
236 if not isinstance(nsi_data["additionalParamsForNsi"], dict):
237 raise ValueError("Error at 'additionalParamsForNsi' must be a dictionary")
238 if "additionalParamsForSubnet" in nsi_config:
239 nsi_data["additionalParamsForSubnet"] = nsi_config.pop("additionalParamsForSubnet")
240 if not isinstance(nsi_data["additionalParamsForSubnet"], list):
241 raise ValueError("Error 'additionalParamsForSubnet' must be a list")
242 for additional_param_subnet in nsi_data["additionalParamsForSubnet"]:
243 if not isinstance(additional_param_subnet, dict):
244 raise ValueError("Error 'additionalParamsForSubnet' items must be dictionaries")
245 if not additional_param_subnet.get("id"):
246 raise ValueError("Error 'additionalParamsForSubnet' items must contain subnet 'id'")
247 if not additional_param_subnet.get("additionalParamsForNs") and\
248 not additional_param_subnet.get("additionalParamsForVnf"):
249 raise ValueError("Error 'additionalParamsForSubnet' items must contain "
250 "'additionalParamsForNs' and/or 'additionalParamsForVnf'")
lombardofrcf3a1f02019-01-21 15:43:52 +0100251 except Exception as e:
lombardofr6060dd62019-05-19 12:31:07 +0200252 return __response_handler(request, {'status': 400, 'code': 'BAD_REQUEST', 'detail': e.message} , url=None, status=400)
lombardofr8532b432019-04-30 17:28:22 +0200253
lombardofrcf3a1f02019-01-21 15:43:52 +0100254 result = client.nsi_create(user.get_token(), nsi_data)
lombardofr6060dd62019-05-19 12:31:07 +0200255 if result['error']:
256 return __response_handler(request, result['data'], url=None,
257 status=result['data']['status'] if 'status' in result['data'] else 500)
258 else:
259 return __response_handler(request, {}, url=None, status=200)
lombardofrcf3a1f02019-01-21 15:43:52 +0100260
lombardofrb58d5d82019-01-04 15:25:45 +0100261 elif type == 'pdu':
262 interface_param_name = request.POST.getlist('interfaces_name')
263 interface_param_ip = request.POST.getlist('interfaces_ip')
264 interface_param_mgmt = request.POST.getlist('interfaces_mgmt')
265 interface_param_netname = request.POST.getlist('interfaces_vimnetname')
266
267 pdu_payload = {
268 "name": request.POST.get('name'),
269 "type": request.POST.get('pdu_type'),
270 "vim_accounts": request.POST.getlist('pdu_vim_accounts'),
271 "description": request.POST.get('description'),
272 "interfaces": []
273 }
274 for i in (0,len(interface_param_name)-1):
275 pdu_payload['interfaces'].append({
276 'name': interface_param_name[i],
277 'mgmt': True if interface_param_mgmt[i] == 'true' else False,
278 'ip-address': interface_param_ip[i],
279 'vim-network-name': interface_param_netname[i]
280 })
281 result = client.pdu_create(user.get_token(), pdu_payload)
282 if result['error']:
283 return __response_handler(request, result['data'], url=None,
284 status=result['data']['status'] if 'status' in result['data'] else 500)
285 else:
286 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200287
lombardof74ed51a2018-05-11 01:07:01 +0200288@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200289def ns_operations(request, instance_id=None, type=None):
290 user = osmutils.get_user(request)
291 project_id = user.project_id
lombardofr4908f382018-09-10 11:36:06 +0200292
lombardofrcf3a1f02019-01-21 15:43:52 +0100293 result = {'type': type, 'project_id': project_id, 'instance_id': instance_id}
lombardofr4908f382018-09-10 11:36:06 +0200294 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
295 if 'application/json' not in raw_content_types:
296 return __response_handler(request, result, 'instance_operations_list.html')
lombardof74ed51a2018-05-11 01:07:01 +0200297 client = Client()
lombardofrcf3a1f02019-01-21 15:43:52 +0100298 if type == 'ns':
299 op_list = client.ns_op_list(user.get_token(), instance_id)
300 elif type == 'nsi':
301 op_list = client.nsi_op_list(user.get_token(), instance_id)
lombardofr4908f382018-09-10 11:36:06 +0200302 result['operations'] = op_list['data'] if op_list and op_list['error'] is False else []
lombardofrf5776442018-06-26 10:37:40 +0200303
lombardofr4908f382018-09-10 11:36:06 +0200304 return __response_handler(request, result, 'instance_operations_list.html')
lombardof74ed51a2018-05-11 01:07:01 +0200305
306@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200307def ns_operation(request, op_id, instance_id=None, type=None):
308 user = osmutils.get_user(request)
lombardof74ed51a2018-05-11 01:07:01 +0200309 client = Client()
lombardofr99f922f2018-07-17 17:27:36 +0200310 result = client.ns_op(user.get_token(), op_id)
lombardofrf5776442018-06-26 10:37:40 +0200311 return __response_handler(request, result['data'])
312
lombardoffb37bca2018-05-03 16:20:04 +0200313
314@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200315def action(request, instance_id=None, type=None):
316 user = osmutils.get_user(request)
lombardoffb37bca2018-05-03 16:20:04 +0200317 client = Client()
lombardoffb37bca2018-05-03 16:20:04 +0200318 # result = client.ns_action(instance_id, action_payload)
319 primitive_param_keys = request.POST.getlist('primitive_params_name')
320 primitive_param_value = request.POST.getlist('primitive_params_value')
321 action_payload = {
322 "vnf_member_index": request.POST.get('vnf_member_index'),
323 "primitive": request.POST.get('primitive'),
324 "primitive_params": {k: v for k, v in zip(primitive_param_keys, primitive_param_value) if len(k) > 0}
325 }
326
lombardofr99f922f2018-07-17 17:27:36 +0200327 result = client.ns_action(user.get_token(), instance_id, action_payload)
lombardofrf5776442018-06-26 10:37:40 +0200328 if result['error']:
329 return __response_handler(request, result['data'], url=None,
330 status=result['data']['status'] if 'status' in result['data'] else 500)
lombardofrf5776442018-06-26 10:37:40 +0200331 else:
332 return __response_handler(request, {}, url=None, status=200)
lombardoffb37bca2018-05-03 16:20:04 +0200333
334
335@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200336def delete(request, instance_id=None, type=None):
lombardof7e33ad62018-06-03 16:13:38 +0200337 force = bool(request.GET.get('force', False))
lombardoffb37bca2018-05-03 16:20:04 +0200338 result = {}
lombardofr99f922f2018-07-17 17:27:36 +0200339 user = osmutils.get_user(request)
lombardoffb37bca2018-05-03 16:20:04 +0200340 client = Client()
lombardofrb58d5d82019-01-04 15:25:45 +0100341 if type == 'ns':
342 result = client.ns_delete(user.get_token(), instance_id, force)
343 elif type == 'pdu':
344 result = client.pdu_delete(user.get_token(), instance_id)
lombardofrcf3a1f02019-01-21 15:43:52 +0100345 elif type == 'nsi':
346 result = client.nsi_delete(user.get_token(), instance_id, force)
347
348 if result['error']:
349 return __response_handler(request, result['data'], url=None,
350 status=result['data']['status'] if 'status' in result['data'] else 500)
351 else:
352 return __response_handler(request, {}, url=None, status=200)
lombardofr99f922f2018-07-17 17:27:36 +0200353
lombardofre6eb7432018-10-28 19:43:46 +0100354@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200355def show_topology(request, instance_id=None, type=None):
356 user = osmutils.get_user(request)
357 project_id = user.project_id
358 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
359 if 'application/json' in raw_content_types:
lombardofre6eb7432018-10-28 19:43:46 +0100360 client = Client()
361 nsr_object = {'nsr': {}, 'vnfr': {}, 'vnfd': {}}
362 if type == 'ns':
lombardofr99f922f2018-07-17 17:27:36 +0200363
lombardofre6eb7432018-10-28 19:43:46 +0100364 nsr_resp = client.ns_get(user.get_token(), instance_id)
365 nsr_object['nsr'] = nsr_resp['data']
366 if 'constituent-vnfr-ref' in nsr_object['nsr'] :
367 for vnfr_id in nsr_object['nsr']['constituent-vnfr-ref']:
368 vnfr_resp = client.vnf_get(user.get_token(), vnfr_id)
369 vnfr = vnfr_resp['data']
370 nsr_object['vnfr'][vnfr['id']] = vnfr
371 if vnfr['vnfd-id'] not in nsr_object['vnfd']:
372 vnfd_resp = client.vnfd_get(user.get_token(), vnfr['vnfd-id'])
373 nsr_object['vnfd'][vnfr['vnfd-id']] = vnfd_resp['vnfd:vnfd-catalog']['vnfd'][0]
lombardofr99f922f2018-07-17 17:27:36 +0200374
lombardofre6eb7432018-10-28 19:43:46 +0100375 test = OsmParser()
lombardofr99f922f2018-07-17 17:27:36 +0200376
lombardofre6eb7432018-10-28 19:43:46 +0100377 result = test.nsr_to_graph(nsr_object)
lombardofr99f922f2018-07-17 17:27:36 +0200378 return __response_handler(request, result)
379 else:
380 result = {'type': type, 'project_id': project_id, 'instance_id': instance_id}
381 return __response_handler(request, result, 'instance_topology_view.html')
lombardoffb37bca2018-05-03 16:20:04 +0200382
383
384@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200385def show(request, instance_id=None, type=None):
lombardoffb37bca2018-05-03 16:20:04 +0200386 # result = {}
lombardofr99f922f2018-07-17 17:27:36 +0200387 user = osmutils.get_user(request)
388 project_id = user.project_id
lombardoffb37bca2018-05-03 16:20:04 +0200389 client = Client()
lombardof647aa2e2018-05-26 17:11:13 +0200390 if type == 'ns':
lombardofr99f922f2018-07-17 17:27:36 +0200391 result = client.ns_get(user.get_token(), instance_id)
lombardof647aa2e2018-05-26 17:11:13 +0200392 elif type == 'vnf':
lombardofr99f922f2018-07-17 17:27:36 +0200393 result = client.vnf_get(user.get_token(), instance_id)
lombardofrb58d5d82019-01-04 15:25:45 +0100394 elif type == 'pdu':
395 result = client.pdu_get(user.get_token(), instance_id)
lombardofrcf3a1f02019-01-21 15:43:52 +0100396 elif type == 'nsi':
397 result = client.nsi_get(user.get_token(), instance_id)
lombardofr8532b432019-04-30 17:28:22 +0200398
lombardoffb37bca2018-05-03 16:20:04 +0200399 return __response_handler(request, result)
400
lombardofrf5776442018-06-26 10:37:40 +0200401
lombardofr99624b52018-06-18 15:54:24 +0200402@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200403def export_metric(request, instance_id=None, type=None):
lombardofr99624b52018-06-18 15:54:24 +0200404 metric_data = request.POST.dict()
lombardofr99f922f2018-07-17 17:27:36 +0200405 user = osmutils.get_user(request)
406 project_id = user.project_id
lombardofr99624b52018-06-18 15:54:24 +0200407 client = Client()
408 keys = ["collection_period",
409 "vnf_member_index",
410 "metric_name",
411 "correlation_id",
412 "vdu_name",
413 "collection_unit"]
414 metric_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, metric_data.items()))
415
lombardofr99f922f2018-07-17 17:27:36 +0200416 result = client.ns_metric_export(user.get_token(), instance_id, metric_data)
lombardofr99624b52018-06-18 15:54:24 +0200417
lombardofrf5776442018-06-26 10:37:40 +0200418 if result['error']:
lombardofrf5776442018-06-26 10:37:40 +0200419 return __response_handler(request, result['data'], url=None,
420 status=result['data']['status'] if 'status' in result['data'] else 500)
421 else:
422 return __response_handler(request, {}, url=None, status=200)
423
lombardofr99624b52018-06-18 15:54:24 +0200424
425@login_required
lombardofr99f922f2018-07-17 17:27:36 +0200426def create_alarm(request, instance_id=None, type=None):
lombardofr99624b52018-06-18 15:54:24 +0200427 metric_data = request.POST.dict()
lombardofr99f922f2018-07-17 17:27:36 +0200428 user = osmutils.get_user(request)
429 project_id = user.project_id
lombardofr99624b52018-06-18 15:54:24 +0200430 client = Client()
431
lombardofr99624b52018-06-18 15:54:24 +0200432 keys = ["threshold_value",
433 "vnf_member_index",
434 "metric_name",
435 "vdu_name",
436 "alarm_name",
437 "correlation_id",
438 "statistic",
439 "operation",
440 "severity"]
441 metric_data = dict(filter(lambda i: i[0] in keys and len(i[1]) > 0, metric_data.items()))
442
lombardofr99f922f2018-07-17 17:27:36 +0200443 result = client.ns_alarm_create(user.get_token(), instance_id, metric_data)
lombardofrf5776442018-06-26 10:37:40 +0200444 if result['error']:
lombardofrf5776442018-06-26 10:37:40 +0200445 return __response_handler(request, result['data'], url=None,
446 status=result['data']['status'] if 'status' in result['data'] else 500)
447 else:
448 return __response_handler(request, {}, url=None, status=200)
lombardofr99624b52018-06-18 15:54:24 +0200449
lombardoffb37bca2018-05-03 16:20:04 +0200450
451def __response_handler(request, data_res, url=None, to_redirect=None, *args, **kwargs):
452 raw_content_types = request.META.get('HTTP_ACCEPT', '*/*').split(',')
lombardofrb58d5d82019-01-04 15:25:45 +0100453 if not to_redirect and ('application/json' in raw_content_types or url is None):
454 return HttpResponse(json.dumps(data_res), content_type="application/json", *args, **kwargs)
lombardoffb37bca2018-05-03 16:20:04 +0200455 elif to_redirect:
456 return redirect(url, *args, **kwargs)
457 else:
458 return render(request, url, data_res)