/* * Copyright 2015 ZTE, Inc. and others. All rights reserved. (ZTE) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var templateParameters = { templateName: '', parameters: [] }; var service_instance_insert_index = 0; var lcmHandler = function(){ this._addOwnEvents(); }; lcmHandler.prototype = { _addOwnEvents : function () { $('a[data-toggle="tab"]').on('show.bs.tab', this.beforeParameterTabShow); $('#createNS').click(this.okAction); }, beforeParameterTabShow : function (event) { renderTemplateParametersTab(); }, okAction : function (event) { var serviceInstance = { serviceTemplateId: $('#svcTempl').val(), serviceName: $('#svcName').val(), serviceDescription: $('#svcDesc').val(), serviceParameters: collectServiceParameters(templateParameters), vimLocation: $('#vim_location').val() } var gatewayService = '/openoapi/servicegateway/v1/services'; var serviceTemplate = fetchServiceTemplateBy(serviceInstance.serviceTemplateId); if(serviceTemplate === undefined) { return; } if(serviceTemplate.csarType === 'GSAR') { serviceInstance.serviceInstanceId = createGsoServiceInstance(gatewayService, serviceInstance); }else if(serviceTemplate.csarType === 'NSAR' || serviceTemplate.csarType === 'NFAR') { serviceInstance.serviceInstanceId = createNfvoServiceInstance(gatewayService, serviceInstance); }else if(serviceTemplate.csarType === 'SSAR') { serviceInstance.serviceInstanceId = createSdnoServiceInstance(gatewayService, serviceInstance); } if(serviceInstance.serviceInstanceId === undefined) { return; } updateTable(serviceInstance); } }; function collectServiceParameters(parameters) { var serviceParameters = {}; var i; for( i = 0; i < parameters.length; i += 1) { serviceParameters[parameters.name] = $('#' + parameters[i].id).val(); } return serviceParameters; } function fetchServiceTemplateBy(templateId) { var serviceTemplateUri = '/openoapi/catalog/v1/servicetemplates/'+ templateId; var template; $.ajax({ type : "GET", async: false, url : serviceTemplateUri, contentType : "application/json", dataType : "json", success : function(jsonResp) { template = { name: jsonResp.templateName, gsarId: jsonResp.csarId } }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); if(template === undefined) { return template; } var queryCsarUri = '/openoapi/catalog/v1/csars/' + template.gsarId; $.ajax({ type : "GET", async: false, url : queryCsarUri, contentType : "application/json", dataType : "json", success : function(jsonResp) { template.csarType = jsonResp.type }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); return template; } function renderTemplateParametersTab() { templateParameters = fetchTemplateParameterDefinitions(templateParameters); var vims = fetchVimInfo(); var components = transfromToComponents(templateParameters.parameters, vims); document.getElementById("parameterTab").innerHTML = components; } function fetchTemplateParameterDefinitions(parameters) { var serviceTemplate = parameters.templateName; var currentServiceTemplate = $("#svcTempl").val(); // Do not need to fetch template parameters if template do not change in UI. if(serviceTemplate === currentServiceTemplate) { return; } var queryParametersUri = '/openoapi/catalog/v1/servicetemplates/' + currentServiceTemplate + '/parameters'; var inputParameters = []; $.ajax({ type : "GET", async: false, url : queryParametersUri, contentType : "application/json", dataType : "json", success : function(jsonResp) { var inputs = jsonResp.inputs; var i; for( i = 0; i < inputs.length; i += 1) { inputParameters[i] = { name: inputs[i].name, type: inputs[i].type, description: inputs[i].description, defaultValue: inputs[i].defaultValue, required: inputs[i].required, id: 'parameter_' + i, value: inputs[i].defaultValue }; } }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); return { name: currentServiceTemplate, parameters: inputParameters }; } function fetchVimInfo() { var result = []; var vimQueryUri = '/openoapi/extsys/v1/vims'; $.ajax({ type : "GET", async: false, url : vimQueryUri, contentType : "application/json", dataType : "json", success : function(jsonResp) { var vims = jsonResp; var i; for( i = 0; i < vims.length; i += 1) { var option = ''; result[i] = { vimId: vims[i].vimId, vimName: vims[i].name } } }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); return result; } function transfromToComponents(parameters, vims) { var components = ''; var i; for( i = 0; i < parameters.length; i += 1) { var component = '
' + '' + '
' + '' + '
'; components = components + component; } components = components + generateLocationComponent(vims); return components; } function generateRequiredLabel(parameter) { var requiredLabel = ''; if(parameter.required === 'true') { requiredLabel = '*'; } return requiredLabel; } function generateLocationComponent(vims) { var component = '
' + '' + '
' + '
'; return component; } function transformToOptions(vims) { var options = ''; var i; for( i = 0; i < vims.length; i += 1) { var option = ''; options = options + option; } return options; } function createGsoServiceInstance(gatewayService, serviceInstance) { serviceInstance.serviceParameters.location = serviceInstance.vimLocation; var gsoLcmUri = '/openoapi/lifecyclemgr/v1/services'; var parameter = { 'name': serviceInstance.serviceName, 'description': serviceInstance.serviceDescription, 'serviceDefId': serviceTemplate.gsarId, 'templatedId': serviceInstance.serviceTemplateId, 'templateName': serviceTemplate.templateName, 'getewayUri': gsoLcmUrl, 'parameters': serviceInstance.serviceParameters }; var serviceInstanceId; $.ajax({ type : "POST", async: false, url : gatewayService, contentType : "application/json", dataType : "json", data : JSON.stringify(parameter), success : function(jsonResp) { if(jsonResp.result.errorCode != '200') { alert("Create service instance Error!"); return; } serviceInstanceId = jsonResp.serviceId; }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); return serviceInstanceId; } function createNfvoServiceInstance(gatewayService, serviceInstance) { var nfvoLcmNsUrl = '/openoapi/nslcm/v1.0/ns'; serviceInstance.serviceParameters.location = serviceInstance.vimLocation; createServiceInstance(gatewayService, nfvoLcmNsUrl, serviceInstance); } function createServiceInstance(gatewayService, gatewayUri, serviceInstance) { var nsInstanceId = createNetworkService(gatewayService, gatewayUri, serviceInstance); if(nsInstanceId === undefined) { return; } instantiateNetworkService(gatewayUri, nsInstanceId, serviceInstance); } function createNetworkService(gatewayService, gatewayUri, serviceInstance) { var parameter = { 'nsdId': serviceInstance.serviceTemplateId, 'nsName': serviceInstance.serviceName, 'description': serviceInstance.serviceDescription, 'gatewayUri': gatewayUri, 'parameters': serviceInstance.serviceParameters }; var nsInstanceId; $.ajax({ type : "POST", async: false, url : gatewayService, contentType : "application/json", dataType : "json", data : JSON.stringify(parameter), success : function(jsonResp) { nsInstanceId = jsonResp.nsInstanceId; }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); return nsInstanceId; } function instantiateNetworkService(gatewayUri, nsInstanceId, serviceInstance) { var initNsUrl = gatewayUri + '/' + nsInstanceId + '/Instantiate' var parameter = { 'gatewayUri': initNsUrl, 'nsInstanceId': nsInstanceId, 'additionalParamForNs': serviceInstance.serviceParameters }; var result = false; $.ajax({ type : "POST", async: false, url : gatewayService, contentType : "application/json", dataType : "json", data : JSON.stringify(parameter), success : function(jsonResp) { result = true; }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); return result; } function createSdnoServiceInstance(gatewayService, serviceInstance) { var sdnoLcmNsUrl = '/openoapi/sdnonslcm/v1.0/ns'; createServiceInstance(gatewayService, sdnoLcmNsUrl, serviceInstance); } function updateTable(serviceInstance) { appendOenRow(); addDeleteEventRegistration(); } function appendOenRow() { var index = service_instance_insert_index; var creator = ''; $('#sai').append(''); $("#service_instance_" + index).html('
'+ serviceInstance.serviceName + '' + ''+ serviceInstance.templateName + '' + ''+ serviceInstance.serviceTemplateId + '' + ''+ formatDate(new Date()) + '' + ''+ creator + '' + ''); service_instance_insert_index += 1; } function formatDate(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hh = date.getHours(); var mm = date.getMinutes(); var ss = date.getSeconds(); return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + ss; } function addDeleteEventRegistration() { $(".data_delete_action").click(function(event) { var trElement = $(this).parents("tr")[0]; var tdElement = $(trElement).children("td.service_template_id")[0]; var spanElement = $(tdElement).children("span")[0]; var templateId = $(spanElement).text(); var inputElement = $(tdElement).children("input")[0]; var instanceId = $(inputElement).val(); var result = deleteServiceInstance(templateId, instanceId); if(result) { trElement.remove(); alert("Service instance deleted successfully!"); } }); } function deleteServiceInstance(templateId, instanceId) { var serviceTemplate = fetchServiceTemplateBy(templateId); if(serviceTemplate === undefined) { return; } var gatewayService = '/openoapi/servicegateway/v1/services'; var result = false; if(serviceTemplate.csarType === 'GSAR') { result = deleteGsoServiceInstance(gatewayService, instanceId); }else if(serviceTemplate.csarType === 'NSAR' || serviceTemplate.csarType === 'NFAR') { result = deleteNfvoServiceInstance(gatewayService, instanceId); }else if(serviceTemplate.csarType === 'SSAR') { result = deleteSdnoServiceInstance(gatewayService, instanceId); } return result; } function deleteGsoServiceInstance(gatewayService, instanceId) { var gsoLcmUrl = '/openoapi/lifecyclemgr/v1/services/'+ instanceId; return sendDeleteRequest(gatewayService, gsoLcmUrl); } function deleteNfvoServiceInstance(gatewayService, instanceId) { var nfvoNsUrl = '/openoapi/nslcm/v1.0/ns/' + instanceId; var nfvoNsTerminateUrl = nfvoNsUrl +'/terminate'; var result = sendDeleteRequest(gatewayService, nfvoNsTerminateUrl); if(result) { result = sendDeleteRequest(gatewayService, nfvoNsUrl); } return result; } function deleteSdnoServiceInstance(gatewayService, instanceId) { var sdnoNsUrl = '/openoapi/sdnonslcm/v1.0/ns/' + instanceId; var sdnoNsTerminateUrl = sdnoNsUrl + '/terminate'; var result = sendDeleteRequest(gatewayService, sdnoNsTerminateUrl); if(result) { result = sendDeleteRequest(gatewayService, sdnoNsUrl); } return result; } function sendDeleteRequest(gatewayService, url) { var parameter = { URL: url }; var result = false; $.ajax({ type : "DELETE", async: false, url : gatewayService, contentType : "application/json", dataType : "json", data : JSON.stringify(parameter), success : function(jsonResp) { result = true; }, error : function(xhr, ajaxOptions, thrownError) { alert("Error on page : " + xhr.responseText); } }); return result; }