2 * Copyright 2016 ZTE Corporation.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" 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.
16 var templateParameters = {
21 var service_instance_insert_index = 0;
23 var lcmHandler = function () {
27 lcmHandler.prototype = {
28 _addOwnEvents: function () {
29 $('a[data-toggle="tab"]').on('show.bs.tab', this.beforeParameterTabShow);
30 $('#createNS').click(this.okAction);
32 beforeParameterTabShow: function (event) {
33 renderTemplateParametersTab();
35 okAction: function (event) {
36 var serviceInstance = {
37 serviceTemplateId: $('#svcTempl').val(),
38 serviceName: $('#svcName').val(),
39 serviceDescription: $('#svcDesc').val(),
40 serviceParameters: collectServiceParameters(templateParameters),
41 vimLocation: $('#vim_location').val()
43 var gatewayService = '/openoapi/servicegateway/v1/services';
44 var serviceTemplate = fetchServiceTemplateBy(serviceInstance.serviceTemplateId);
45 if (serviceTemplate === undefined) {
48 if (serviceTemplate.csarType === 'GSAR') {
49 serviceInstance.serviceInstanceId = createGsoServiceInstance(gatewayService, serviceInstance);
50 } else if (serviceTemplate.csarType === 'NSAR' || serviceTemplate.csarType === 'NFAR') {
51 serviceInstance.serviceInstanceId = createNfvoServiceInstance(gatewayService, serviceInstance);
52 } else if (serviceTemplate.csarType === 'SSAR') {
53 serviceInstance.serviceInstanceId = createSdnoServiceInstance(gatewayService, serviceInstance);
55 if (serviceInstance.serviceInstanceId === undefined) {
58 updateTable(serviceInstance);
62 function collectServiceParameters(parameters) {
63 var serviceParameters = {};
65 for (i = 0; i < parameters.length; i += 1) {
66 serviceParameters[parameters.name] = $('#' + parameters[i].id).val();
68 return serviceParameters;
71 function fetchServiceTemplateBy(templateId) {
72 var serviceTemplateUri = '/openoapi/catalog/v1/servicetemplates/' + templateId;
77 url: serviceTemplateUri,
78 contentType: "application/json",
80 success: function (jsonResp) {
82 name: jsonResp.templateName,
83 gsarId: jsonResp.csarId
86 error: function (xhr, ajaxOptions, thrownError) {
87 alert("Error on page : " + xhr.responseText);
90 if (template === undefined) {
93 var queryCsarUri = '/openoapi/catalog/v1/csars/' + template.gsarId;
98 contentType: "application/json",
100 success: function (jsonResp) {
101 template.csarType = jsonResp.type
103 error: function (xhr, ajaxOptions, thrownError) {
104 alert("Error on page : " + xhr.responseText);
110 function renderTemplateParametersTab() {
112 fetchTemplateParameterDefinitions(templateParameters),
114 ).then(function(templateParameterResponse, vimsInfoResponse) {
115 templateParameters = translateToTemplateParameters(templateParameterResponse[0].inputs);
116 var vims = translateToVimInfo(vimsInfoResponse[0]);
117 var components = transfromToComponents(templateParameters.parameters, vims);
118 document.getElementById("parameterTab").innerHTML = components;
122 function fetchTemplateParameterDefinitions(parameters) {
123 var currentServiceTemplate = $("#svcTempl").val();
124 var queryParametersUri = 'http://localhost:8080/openoapi/catalog/v1/servicetemplates/' + currentServiceTemplate + '/parameters';
127 url: queryParametersUri
131 function fetchVimInfo() {
132 var vimQueryUri = 'http://localhost:8080/openoapi/extsys/v1/vims';
139 function translateToTemplateParameters(inputs) {
140 var inputParameters = [];
142 for (i = 0; i < inputs.length; i += 1) {
143 inputParameters[i] = {
144 name: inputs[i].name,
145 type: inputs[i].type,
146 description: inputs[i].description,
147 defaultValue: inputs[i].defaultValue,
148 required: inputs[i].required,
149 id: 'parameter_' + i,
150 value: inputs[i].defaultValue
153 return {name: $("#svcTempl").val(), parameters: inputParameters};
156 function translateToVimInfo(vims) {
159 for (i = 0; i < vims.length; i += 1) {
160 var option = '<option value="' + vims[i].vimId + '">' + vims[i].name + '</option>';
162 vimId: vims[i].vimId,
163 vimName: vims[i].name
169 function transfromToComponents(parameters, vims) {
172 for (i = 0; i < parameters.length; i += 1) {
173 var component = '<div class="form-group">' +
174 '<label class="col-sm-3 control-label">' +
175 '<span>' + parameters[i].description + '</span>' + generateRequiredLabel(parameters[i]) +
177 '<div class="col-sm-7">' +
178 '<input type="text" id="' + parameters[i].id + '" name="parameter description" class="form-control" placeholder="' +
179 parameters[i].description + '" value="' + parameters[i].value + '" />' +
181 components = components + component;
183 components = components + generateLocationComponent(vims);
187 function generateRequiredLabel(parameter) {
188 var requiredLabel = '';
189 if (parameter.required === 'true') {
190 requiredLabel = '<span class="required">*</span>';
192 return requiredLabel;
195 function generateLocationComponent(vims) {
196 var component = '<div class="form-group">' +
197 '<label class="col-sm-3 control-label">' +
198 '<span>Location</span>' +
199 '<span class="required">*</span>' +
201 '<div class="col-sm-7">' +
202 '<select class="form-control" style ="padding-top: 0px;padding-bottom: 0px;"' +
203 ' id="vim_location" name="vim_location">' +
204 transformToOptions(vims) +
205 '</select></div></div>';
209 function transformToOptions(vims) {
212 for (i = 0; i < vims.length; i += 1) {
213 var option = '<option value="' + vims[i].vimId + '">' + vims[i].vimName + '</option>';
214 options = options + option;
219 function createGsoServiceInstance(gatewayService, serviceInstance) {
220 serviceInstance.serviceParameters.location = serviceInstance.vimLocation;
221 var gsoLcmUri = '/openoapi/lifecyclemgr/v1/services';
223 'name': serviceInstance.serviceName,
224 'description': serviceInstance.serviceDescription,
225 'serviceDefId': serviceTemplate.gsarId,
226 'templatedId': serviceInstance.serviceTemplateId,
227 'templateName': serviceTemplate.templateName,
228 'getewayUri': gsoLcmUri,
229 'parameters': serviceInstance.serviceParameters
231 var serviceInstanceId;
236 contentType: "application/json",
238 data: JSON.stringify(parameter),
239 success: function (jsonResp) {
240 if (jsonResp.result.errorCode != '200') {
241 alert("Create service instance Error!");
244 serviceInstanceId = jsonResp.serviceId;
246 error: function (xhr, ajaxOptions, thrownError) {
247 alert("Error on page : " + xhr.responseText);
250 return serviceInstanceId;
253 function createNfvoServiceInstance(gatewayService, serviceInstance) {
254 var nfvoLcmNsUrl = '/openoapi/nslcm/v1.0/ns';
255 serviceInstance.serviceParameters.location = serviceInstance.vimLocation;
256 createServiceInstance(gatewayService, nfvoLcmNsUrl, serviceInstance);
259 function createServiceInstance(gatewayService, gatewayUri, serviceInstance) {
260 var nsInstanceId = createNetworkService(gatewayService, gatewayUri, serviceInstance);
261 if (nsInstanceId === undefined) {
264 instantiateNetworkService(gatewayUri, nsInstanceId, serviceInstance);
267 function createNetworkService(gatewayService, gatewayUri, serviceInstance) {
269 'nsdId': serviceInstance.serviceTemplateId,
270 'nsName': serviceInstance.serviceName,
271 'description': serviceInstance.serviceDescription,
272 'gatewayUri': gatewayUri
279 contentType: "application/json",
281 data: JSON.stringify(parameter),
282 success: function (jsonResp) {
283 nsInstanceId = jsonResp.nsInstanceId;
285 error: function (xhr, ajaxOptions, thrownError) {
286 alert("Error on page : " + xhr.responseText);
292 function instantiateNetworkService(gatewayService, nsInstanceId, serviceInstance) {
293 var initNsUrl = gatewayUri + '/' + nsInstanceId + '/Instantiate'
295 'gatewayUri': initNsUrl,
296 'nsInstanceId': nsInstanceId,
297 'additionalParamForNs': serviceInstance.serviceParameters
304 contentType: "application/json",
306 data: JSON.stringify(parameter),
307 success: function (jsonResp) {
310 error: function (xhr, ajaxOptions, thrownError) {
311 alert("Error on page : " + xhr.responseText);
317 function createSdnoServiceInstance(gatewayService, serviceInstance) {
318 var sdnoLcmNsUrl = '/openoapi/sdnonslcm/v1.0/ns';
319 createServiceInstance(gatewayService, sdnoLcmNsUrl, serviceInstance);
322 function updateTable(serviceInstance) {
324 addDeleteEventRegistration();
327 function appendOenRow() {
328 var index = service_instance_insert_index;
330 $('#sai').append('<tr id="service_instance_' + index + '"></tr>');
331 $("#service_instance_" + index).html('<td><div class="DataTables_sort_wrapper openo-ellipsis "><span id="service_name" class="openo-table-th-sorticon overflow_elip leftHeaderAlign openo-table-disable-element ">' + serviceInstance.serviceName + '</span></td>' +
332 '<td><span class="openo-table-th-sorticon overflow_elip leftHeaderAlign openo-table-disable-element ">' + serviceInstance.templateName + '</span></td>' +
333 '<td class="service_template_id"><span class="openo-table-th-sorticon overflow_elip leftHeaderAlign openo-table-disable-element ">' + serviceInstance.serviceTemplateId + '</span><input type="hidden" value="' + serviceInstance.serviceInstanceId + '"/></td>' +
334 '<td><span class="openo-table-th-sorticon overflow_elip leftHeaderAlign openo-table-disable-element ">' + formatDate(new Date()) + '</span></td>' +
335 '<td><span class="openo-table-th-sorticon overflow_elip leftHeaderAlign openo-table-disable-element ">' + creator + '</span></td>' +
336 '<td><button class="data_delete_action"><img id="delete_action" class="openo-table-th-sorticon overflow_elip leftHeaderAlign openo-table-disable-element " src="images/delete.png"></img></button></td>');
337 service_instance_insert_index += 1;
340 function formatDate(date) {
341 var year = date.getFullYear();
342 var month = date.getMonth() + 1;
343 var day = date.getDate();
344 var hh = date.getHours();
345 var mm = date.getMinutes();
346 var ss = date.getSeconds();
347 return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + ss;
350 function addDeleteEventRegistration() {
351 $(".data_delete_action").click(function (event) {
352 var trElement = $(this).parents("tr")[0];
353 var tdElement = $(trElement).children("td.service_template_id")[0];
354 var spanElement = $(tdElement).children("span")[0];
355 var templateId = $(spanElement).text();
356 var inputElement = $(tdElement).children("input")[0];
357 var instanceId = $(inputElement).val();
358 var result = deleteServiceInstance(templateId, instanceId);
361 alert("Service instance deleted successfully!");
366 function deleteServiceInstance(templateId, instanceId) {
367 var serviceTemplate = fetchServiceTemplateBy(templateId);
368 if (serviceTemplate === undefined) {
371 var gatewayService = '/openoapi/servicegateway/v1/services';
373 if (serviceTemplate.csarType === 'GSAR') {
374 result = deleteGsoServiceInstance(gatewayService, instanceId);
375 } else if (serviceTemplate.csarType === 'NSAR' || serviceTemplate.csarType === 'NFAR') {
376 result = deleteNfvoServiceInstance(gatewayService, instanceId);
377 } else if (serviceTemplate.csarType === 'SSAR') {
378 result = deleteSdnoServiceInstance(gatewayService, instanceId);
383 function deleteGsoServiceInstance(gatewayService, instanceId) {
384 var gsoLcmUrl = '/openoapi/lifecyclemgr/v1/services/' + instanceId;
385 var operation = 'DELETE';
386 return sendDeleteRequest(operation, gatewayService, gsoLcmUrl);
389 function deleteNfvoServiceInstance(gatewayService, instanceId) {
390 var nfvoNsUrl = '/openoapi/nslcm/v1.0/ns/' + instanceId;
391 var nfvoNsTerminateUrl = nfvoNsUrl + '/terminate';
392 var terminateParameter = {
393 'nsInstanceId': instanceId,
394 'terminationType': "graceful",
395 'gracefulTerminationTimeout': "60",
397 'gatewayUri': nfvoNsTerminateUrl
399 var result = sendRequest(gatewayService, terminateParameter);
401 var serviceParameter = {
402 'operation': "DELETE",
403 'gatewayUri': nfvoNsUrl
405 result = sendRequest(gatewayService, serviceParameter);
410 function deleteSdnoServiceInstance(gatewayService, instanceId) {
411 var sdnoNsUrl = '/openoapi/sdnonslcm/v1.0/ns/' + instanceId;
412 var sdnoNsTerminateUrl = sdnoNsUrl + '/terminate';
413 var terminateParameter = {
414 'nsInstanceId': instanceId,
415 'terminationType': "graceful",
416 'gracefulTerminationTimeout': "60",
418 'gatewayUri': sdnoNsTerminateUrl
420 var result = sendDeleteRequest(gatewayService, terminateParameter);
422 var serviceParameter = {
423 'operation': "DELETE",
424 'gatewayUri': sdnoNsUrl
426 result = sendDeleteRequest(gatewayService, serviceParameter);
431 function sendDeleteRequest(gatewayService, parameter) {
437 contentType: "application/json",
439 data: JSON.stringify(parameter),
440 success: function (jsonResp) {
443 error: function (xhr, ajaxOptions, thrownError) {
444 alert("Error on page : " + xhr.responseText);