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 lcmHandler = function () {
25 lcmHandler.prototype = {
26 _addOwnEvents: function () {
27 $('#createNS').click(this.okAction);
29 okAction: function () {
30 var vimLocation = $('#vim_location').val();
31 if(vimLocation == 'select') {
32 alert('Location must be selected in Template Parameters');
36 var serviceInstance = {
37 serviceTemplateId: $("#svcTempl").val(),
38 serviceName: $('#svcName').val(),
39 description: $('#svcDesc').val(),
40 inputParameters: collectServiceParameters(templateParameters.parameters),
41 vimLocation: vimLocation
43 var gatewayService = '/openoapi/servicegateway/v1/services';
45 fetchServiceTemplateBy(serviceInstance.serviceTemplateId)
48 serviceInstance.templateName = template.name;
49 serviceInstance.serviceType = template.serviceType;
50 return createNetworkServiceInstance(template, serviceInstance, gatewayService);
53 function(serviceInstance) {
54 updateTable(serviceInstance);
55 $('#vmAppDialog').removeClass('in').css('display', 'none');
61 function initParameterTab() {
62 // Service template was not changed. Do not re-initiate the parameter tab.
63 if (!templateParameters.changed) {
66 var templateId = $("#svcTempl").val();
67 if ('select' === templateId) {
68 document.getElementById("templateParameterTab").innerHTML = '';
72 generateTemplateParametersComponent(templateId),
73 generateLocationComponent(templateId)
75 function (templateParameters, location) {
76 document.getElementById("templateParameterTab").innerHTML = templateParameters + location;
81 function generateTemplateParametersComponent(templateId) {
82 var defer = $.Deferred();
84 fetchTemplateParameterDefinitions(templateId),
85 fetchGsoNestingTemplateParameters(templateId)
87 function (templateParameterResponse, nestingTempatesParas) {
88 var inputParas = concat(templateParameterResponse[0].inputs, nestingTempatesParas);
89 templateParameters = translateToTemplateParameters(inputParas);
90 defer.resolve(transformToComponents(templateParameters.parameters));
96 function fetchGsoNestingTemplateParameters(templateId) {
97 var defer = $.Deferred();
98 var nestingParams = [];
100 fetchServiceTemplateBy(templateId)
103 if(template.serviceType === 'GSO') {
104 return fetchNodeTemplates(templateId);
106 // There are no nesting template parameters for non GSO.
110 function(nodeTemplates) {
111 var count = nodeTemplates.length;
116 var params = $.Deferred();
117 params.progress(function(inputs) {
118 pushAll(nestingParams, inputs);
121 defer.resolve(nestingParams);
124 nodeTemplates.forEach(function(nodeTemplate) {
125 var nestingNodeUri = '/openoapi/catalog/v1/servicetemplates/nesting?nodeTypeIds=' + nodeTemplate.type;
132 function(serviceTemplates) {
133 var oneNodeParameters = []
134 serviceTemplates.forEach(function(serviceTemplate) {
135 pushAll(oneNodeParameters, serviceTemplate.inputs.map(function(input) {
136 input.name = nodeTemplate.type + '.' + input.name;
140 params.notify(oneNodeParameters);
149 function fetchNodeTemplates(templateId) {
150 var nodeTemplateUri = '/openoapi/catalog/v1/servicetemplates/'+ templateId +'/nodetemplates';
157 function concat(array1, array2) {
159 pushAll(result, array1);
160 pushAll(result, array2);
164 function pushAll(acc, array) {
166 array.forEach(function(element) {
172 function generateLocationComponent(templateId) {
173 var defer = $.Deferred();
175 fetchServiceTemplateBy(templateId)
177 function (template) {
178 if(template.serviceType === 'SDNO') {
179 // SDNO need not config location parameter.
186 function (vimsResponse) {
187 var vims = translateToVimInfo(vimsResponse);
188 defer.resolve(transformToLocationComponent(vims));
196 function fetchTemplateParameterDefinitions(templateId) {
197 var queryParametersUri = '/openoapi/catalog/v1/servicetemplates/' + templateId + '/parameters';
200 url: queryParametersUri
204 function fetchVimInfo() {
205 var vimQueryUri = '/openoapi/extsys/v1/vims';
212 function translateToTemplateParameters(inputs) {
213 var inputParameters = [];
215 for (i = 0; i < inputs.length; i += 1) {
216 inputParameters[i] = {
217 name: inputs[i].name,
218 type: inputs[i].type,
219 description: inputs[i].description,
220 defaultValue: inputs[i].defaultValue,
221 required: inputs[i].required,
222 id: 'parameter_' + i,
223 value: inputs[i].defaultValue || ''
226 return {changed: false, parameters: inputParameters};
229 function translateToVimInfo(vims) {
232 for (i = 0; i < vims.length; i += 1) {
233 var option = '<option value="' + vims[i].vimId + '">' + vims[i].name + '</option>';
235 vimId: vims[i].vimId,
236 vimName: vims[i].name
242 function transformToComponents(parameters) {
245 for (i = 0; i < parameters.length; i += 1) {
246 var component = '<div class="mT15 form-group" style="margin-left:25px;">' +
247 '<label class="col-sm-3 control-label">' +
248 '<span>' + parameters[i].description + '</span>' + generateRequiredLabel(parameters[i]) +
250 '<div class="col-sm-7">' +
251 '<input type="text" id="' + parameters[i].id + '" name="parameter description" class="form-control" placeholder="' +
252 parameters[i].description + '" value="' + parameters[i].value + '" />' +
254 components = components + component;
259 function generateRequiredLabel(parameter) {
260 var requiredLabel = '';
261 if (parameter.required === 'true') {
262 requiredLabel = '<span class="required">*</span>';
264 return requiredLabel;
267 function transformToLocationComponent(vims) {
268 var component = '<div class="form-group" style="margin-left:25px;margin-bottom:15px;">' +
269 '<label class="col-sm-3 control-label">' +
270 '<span>Location</span>' +
271 '<span class="required">*</span>' +
273 '<div class="col-sm-7">' +
274 '<select class="form-control" style ="padding-top: 0px;padding-bottom: 0px;"' +
275 ' id="vim_location" name="vim_location">' +
276 transformToOptions(vims) +
277 '</select></div></div>';
281 function transformToOptions(vims) {
282 var options = '<option value="select">--select--</option>';
284 for (i = 0; i < vims.length; i += 1) {
285 var option = '<option value="' + vims[i].vimId + '">' + vims[i].vimName + '</option>';
286 options = options + option;
291 function fetchServiceTemplateBy(templateId) {
292 var defer = $.Deferred();
293 var serviceTemplateUri = '/openoapi/catalog/v1/servicetemplates/' + templateId;
298 url: serviceTemplateUri,
299 contentType: "application/json"
303 template.name = response.templateName;
304 template.gsarId = response.csarId;
305 var queryCsarUri = '/openoapi/catalog/v1/csars/' + template.gsarId;
309 contentType: "application/json"
314 if(response.type === 'GSAR') {
315 template.serviceType = 'GSO';
316 } else if(response.type === 'NSAR' || response.type === 'NFAR') {
317 template.serviceType = 'NFVO';
318 } else if(response.type === 'SSAR') {
319 template.serviceType = "SDNO";
321 defer.resolve(template)
327 function createNetworkServiceInstance(template, serviceInstance, gatewayService) {
328 if (template.serviceType === 'GSO') {
329 return createGsoServiceInstance(gatewayService, serviceInstance, template);
330 } else if (template.serviceType === 'NFVO') {
331 return createNfvoServiceInstance(gatewayService, serviceInstance);
332 } else if (template.serviceType === 'SDNO') {
333 return createSdnoServiceInstance(gatewayService, serviceInstance);
337 function createGsoServiceInstance(gatewayService, serviceInstance, serviceTemplate) {
338 var defer = $.Deferred();
339 serviceInstance.inputParameters.location = serviceInstance.vimLocation;
340 var gsoLcmUri = '/openoapi/gso/v1/services';
343 'name': serviceInstance.serviceName,
344 'description': serviceInstance.description,
345 'serviceDefId': serviceTemplate.gsarId,
346 'templateId': serviceInstance.serviceTemplateId,
347 'templateName': serviceTemplate.templateName,
348 'gatewayUri': gsoLcmUri,
349 'parameters': serviceInstance.inputParameters
355 contentType: "application/json",
357 data: JSON.stringify(parameter)
358 })).then(function(response) {
359 serviceInstance.serviceId = response.serviceId;
360 defer.resolve(serviceInstance);
365 function createNfvoServiceInstance(gatewayService, serviceInstance) {
366 var nfvoLcmNsUri = '/openoapi/nslcm/v1.0/ns';
367 serviceInstance.inputParameters.location = serviceInstance.vimLocation;
368 return createServiceInstance(gatewayService, nfvoLcmNsUri, serviceInstance);
371 function createSdnoServiceInstance(gatewayService, serviceInstance) {
372 var sdnoLcmNsUri = '/openoapi/sdnonslcm/v1/ns';
373 return createServiceInstance(gatewayService, sdnoLcmNsUri, serviceInstance);
376 function createServiceInstance(gatewayService, nsUri, serviceInstance) {
377 var defer = $.Deferred();
379 'nsdId': serviceInstance.serviceTemplateId,
380 'nsName': serviceInstance.serviceName,
381 'description': serviceInstance.description,
387 contentType: "application/json",
389 data: JSON.stringify(sParameter)
390 })).then(function(response) {
391 var nsInstanceId = response.serviceId;
392 serviceInstance.serviceId = nsInstanceId;
393 var initNsUrl = nsUri + '/' + nsInstanceId + '/Instantiate';
395 'gatewayUri': initNsUrl,
396 'nsInstanceId': nsInstanceId,
397 'additionalParamForNs': serviceInstance.inputParameters
402 contentType: "application/json",
404 data: JSON.stringify(parameter)
407 defer.resolve(serviceInstance);
413 function collectServiceParameters(parameters) {
414 var serviceParameters = {};
416 for (i = 0; i < parameters.length; i += 1) {
417 serviceParameters[parameters[i].name] = $('#' + parameters[i].id).val();
419 return serviceParameters;
422 function updateTable(serviceInstance) {
423 serviceInstance.createTime = formatDate(new Date());
424 $('#sai').bootstrapTable("append", serviceInstance);
427 function formatDate(date) {
428 var year = date.getFullYear();
429 var month = date.getMonth() + 1;
430 var day = date.getDate();
431 var hh = date.getHours();
432 var mm = date.getMinutes();
433 var ss = date.getSeconds();
434 return year + "-" + month + "-" + day + " " + hh + ":" + mm + ":" + ss;
437 function deleteNe(rowId, row) {
438 var instanceId = row.serviceId;
439 var serviceType = row.serviceType;
440 var gatewayService = '/openoapi/servicegateway/v1/services/' + instanceId + '/terminate';
441 var remove = function () {
442 $('#sai').bootstrapTable('remove', {field: 'serviceId', values: [instanceId]});
444 if(serviceType === 'GSO') {
445 deleteGsoServiceInstance(gatewayService, instanceId, remove)
446 } else if (serviceType === 'NFVO') {
447 var nfvoNsUri = '/openoapi/nslcm/v1.0/ns';
448 deleteNonGsoServiceInstance(gatewayService, nfvoNsUri, instanceId, remove);
449 } else if (serviceType === 'SDNO') {
450 var sdnoNsUri = '/openoapi/sdnonslcm/v1/ns';
451 deleteNonGsoServiceInstance(gatewayService, sdnoNsUri, instanceId, remove);
455 function deleteGsoServiceInstance(gatewayService, instanceId, remove) {
456 var gsoLcmUri = '/openoapi/gso/v1/services';
458 deleteNetworkServiceInstance(gatewayService, gsoLcmUri, instanceId)
466 function deleteNonGsoServiceInstance(gatewayService, nsUri, instanceId, remove) {
468 terminateNetworkServiceInstance(gatewayService, nsUri, instanceId)
471 return deleteNetworkServiceInstance(gatewayService, nsUri, instanceId);
480 function deleteNetworkServiceInstance(gatewayService, nsUri, instanceId) {
481 var instanceUri = nsUri + '/' + instanceId;
483 'operation': "DELETE",
484 'gatewayUri': instanceUri
489 contentType: "application/json",
491 data: JSON.stringify(parameter)
495 function terminateNetworkServiceInstance(gatewayService, nsUri, instanceId) {
496 var instanceUri = nsUri + '/' + instanceId;
497 var nsTerminateUri = instanceUri + '/terminate';
498 var terminateParameter = {
499 'nsInstanceId': instanceId,
500 'terminationType': "graceful",
501 'gracefulTerminationTimeout': "60",
503 'gatewayUri': nsTerminateUri
508 contentType: "application/json",
510 data: JSON.stringify(terminateParameter)