2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
21 package org.openecomp.mso.bpmn.common.scripts
\r
23 import groovy.json.JsonBuilder
\r
24 import groovy.json.JsonSlurper
\r
26 import org.json.JSONObject
\r
28 import org.openecomp.mso.bpmn.core.xml.XmlTool
\r
32 public MsoUtils utils = new MsoUtils()
\r
33 private AbstractServiceTaskProcessor taskProcessor
\r
35 public VidUtils(AbstractServiceTaskProcessor taskProcessor) {
\r
36 this.taskProcessor = taskProcessor
\r
40 * Create a volume-request XML using a JSON string
\r
41 * @param jsonReq - JSON request from VID
\r
45 public String createXmlVolumeRequest(String jsonReq, String action, String serviceInstanceId) {
\r
46 def jsonSlurper = new JsonSlurper()
\r
48 Map reqMap = jsonSlurper.parseText(jsonReq)
\r
49 return createXmlVolumeRequest(reqMap, action, serviceInstanceId)
\r
51 catch(Exception e) {
\r
57 * Create a volume-request XML using a map
\r
58 * @param requestMap - map created from VID JSON
\r
60 * @param serviceInstanceId
\r
63 public String createXmlVolumeRequest(Map requestMap, String action, String serviceInstanceId) {
\r
64 createXmlVolumeRequest(requestMap, action, serviceInstanceId, '')
\r
69 * Create a volume-request XML using a map
\r
72 * @param serviceInstanceId
\r
73 * @param volumeGroupId
\r
76 public String createXmlVolumeRequest(Map requestMap, String action, String serviceInstanceId, String volumeGroupId) {
\r
78 def serviceName = ''
\r
79 def modelCustomizationName = ''
\r
80 def asdcServiceModelVersion = ''
\r
82 def suppressRollback = requestMap.requestDetails.requestInfo.suppressRollback
\r
84 def backoutOnFailure = ""
\r
85 if(suppressRollback != null){
\r
86 if ( suppressRollback == true) {
\r
87 backoutOnFailure = "false"
\r
88 } else if ( suppressRollback == false) {
\r
89 backoutOnFailure = "true"
\r
93 def volGrpName = requestMap.requestDetails.requestInfo?.instanceName ?: ''
\r
94 def serviceId = requestMap.requestDetails.requestParameters?.serviceId ?: ''
\r
95 def relatedInstanceList = requestMap.requestDetails.relatedInstanceList
\r
96 relatedInstanceList.each {
\r
97 if (it.relatedInstance.modelInfo?.modelType == 'service') {
\r
98 serviceName = it.relatedInstance.modelInfo?.modelName
\r
99 asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion
\r
101 if (it.relatedInstance.modelInfo?.modelType == 'vnf') {
\r
102 modelCustomizationName = it.relatedInstance.modelInfo?.modelCustomizationName
\r
106 vnfType = serviceName + '/' + modelCustomizationName
\r
108 def userParams = requestMap.requestDetails?.requestParameters?.userParams
\r
109 def userParamsNode = ''
\r
110 if(userParams != null) {
\r
111 userParamsNode = buildUserParams(userParams)
\r
113 def modelCustomizationId = requestMap.requestDetails?.modelInfo?.modelCustomizationId ?: ''
\r
116 <volume-request xmlns="http://www.w3.org/2001/XMLSchema">
\r
118 <action>${action}</action>
\r
119 <source>${requestMap.requestDetails.requestInfo.source}</source>
\r
120 <service-instance-id>${serviceInstanceId}</service-instance-id>
\r
123 <volume-group-id>${volumeGroupId}</volume-group-id>
\r
124 <volume-group-name>${volGrpName}</volume-group-name>
\r
125 <vnf-type>${vnfType}</vnf-type>
\r
126 <vf-module-model-name>${requestMap.requestDetails.modelInfo.modelName}</vf-module-model-name>
\r
127 <asdc-service-model-version>${asdcServiceModelVersion}</asdc-service-model-version>
\r
128 <aic-cloud-region>${requestMap.requestDetails.cloudConfiguration.lcpCloudRegionId}</aic-cloud-region>
\r
129 <tenant-id>${requestMap.requestDetails.cloudConfiguration.tenantId}</tenant-id>
\r
130 <service-id>${serviceId}</service-id>
\r
131 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
\r
132 <model-customization-id>${modelCustomizationId}</model-customization-id>
\r
139 // return a pretty-print of the volume-request xml without the preamble
\r
140 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
\r
144 * A common method that can be used to build volume-params node from a map.
\r
145 * @param Map userParams
\r
148 public String buildUserParams(userParams) {
\r
149 if (userParams == null) return ""
\r
153 userParams.each {it ->
\r
154 key = it.name.replaceAll(/\B[A-Z]/) { '_' + it }.toLowerCase()
\r
156 xml += "<param name=\"${key}\">${value}</param>"
\r
163 * A common method that can be used to extract 'requestDetails'
\r
164 * @param String json
\r
165 * @return String json requestDetails
\r
168 public getJsonRequestDetails(String jsonInput) {
\r
170 if (jsonInput.isEmpty() || jsonInput == null) {
\r
173 def jsonMapObject = new JsonSlurper().parseText(jsonInput)
\r
174 if (jsonMapObject instanceof Map) {
\r
175 String jsonString = new JsonBuilder(jsonMapObject.requestDetails)
\r
176 rtn = '{'+"requestDetails"+":"+jsonString+'}'
\r
185 * A common method that can be used to extract 'requestDetails' in Xml
\r
186 * @param String json
\r
187 * @return String xml requestDetails
\r
190 public getJsonRequestDetailstoXml(String jsonInput) {
\r
192 def jsonString = getJsonRequestDetails(jsonInput)
\r
193 if (jsonString == null) {
\r
196 JSONObject jsonObj = new JSONObject(jsonString)
\r
197 return XmlTool.normalize(XML.toString(jsonObj))
\r
202 * Create a network-request XML using a map
\r
203 * @param execution
\r
204 * @param xmlRequestDetails - requestDetails in xml
\r
206 * Note: See latest version: createXmlNetworkRequestInstance()
\r
208 public String createXmlNetworkRequestInfra(execution, def networkJsonIncoming) {
\r
210 def requestId = execution.getVariable("requestId")
\r
211 def serviceInstanceId = execution.getVariable("serviceInstanceId")
\r
212 def requestAction = execution.getVariable("requestAction")
\r
213 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : ""
\r
215 def jsonSlurper = new JsonSlurper()
\r
217 Map reqMap = jsonSlurper.parseText(networkJsonIncoming)
\r
218 def instanceName = reqMap.requestDetails.requestInfo.instanceName
\r
219 def modelName = reqMap.requestDetails.modelInfo.modelName
\r
220 def lcpCloudRegionId = reqMap.requestDetails.cloudConfiguration.lcpCloudRegionId
\r
221 def tenantId = reqMap.requestDetails.cloudConfiguration.tenantId
\r
222 def serviceId = reqMap.requestDetails.requestInfo.productFamilyId
\r
223 def suppressRollback = reqMap.requestDetails.requestInfo.suppressRollback.toString()
\r
224 def backoutOnFailure = "true"
\r
225 if(suppressRollback != null){
\r
226 if (suppressRollback == true || suppressRollback == "true") {
\r
227 backoutOnFailure = "false"
\r
228 } else if (suppressRollback == false || suppressRollback == "false") {
\r
229 backoutOnFailure = "true"
\r
233 //def userParams = reqMap.requestDetails.requestParameters.userParams
\r
234 //def userParamsNode = buildUserParams(userParams)
\r
235 def userParams = reqMap.requestDetails?.requestParameters?.userParams
\r
236 def userParamsNode = ''
\r
237 if(userParams != null) {
\r
238 userParamsNode = buildUserParams(userParams)
\r
241 //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)
\r
242 def sdncVersion = execution.getVariable("sdncVersion")
\r
245 <network-request xmlns="http://www.w3.org/2001/XMLSchema">
\r
247 <request-id>${requestId}</request-id>
\r
248 <action>${requestAction}</action>
\r
249 <source>VID</source>
\r
250 <service-instance-id>${serviceInstanceId}</service-instance-id>
\r
253 <network-id>${networkId}</network-id>
\r
254 <network-name>${instanceName}</network-name>
\r
255 <network-type>${modelName}</network-type>
\r
256 <aic-cloud-region>${lcpCloudRegionId}</aic-cloud-region>
\r
257 <tenant-id>${tenantId}</tenant-id>
\r
258 <service-id>${serviceId}</service-id>
\r
259 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
\r
260 <sdncVersion>${sdncVersion}</sdncVersion>
\r
267 // return a pretty-print of the volume-request xml without the preamble
\r
268 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
\r
270 } catch(Exception e) {
\r
276 * Create a network-request XML using a map,
\r
277 * @param execution
\r
280 public String createXmlNetworkRequestInstance(execution) {
\r
282 def networkModelVersionId = ""
\r
283 def networkModelName = ""
\r
284 def networkModelType = ""
\r
285 def networkModelVersion = ""
\r
286 def networkModelCustomizationId = ""
\r
287 def networkModelInvariantId = ""
\r
289 // verify the DB Catalog response JSON structure
\r
290 def networkModelInfo = execution.getVariable("networkModelInfo")
\r
291 def jsonSlurper = new JsonSlurper()
\r
292 if (networkModelInfo != null) {
\r
294 Map modelMap = jsonSlurper.parseText(networkModelInfo)
\r
295 if (modelMap != null) {
\r
296 if (networkModelInfo.contains("modelVersionId")) {
\r
297 networkModelVersionId = modelMap.modelVersionId !=null ? modelMap.modelVersionId : ""
\r
299 if (networkModelInfo.contains("modelName")) {
\r
300 networkModelName = modelMap.modelName !=null ? modelMap.modelName : ""
\r
302 if (networkModelInfo.contains("modelType")) {
\r
303 networkModelType = modelMap.modelType !=null ? modelMap.modelType : ""
\r
305 if (networkModelInfo.contains("modelVersion")) {
\r
306 networkModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""
\r
308 if (networkModelInfo.contains("modelCustomizationId")) {
\r
309 networkModelCustomizationId = modelMap.modelCustomizationId !=null ? modelMap.modelCustomizationId : ""
\r
311 if (networkModelInfo.contains("modelInvariantId")) {
\r
312 networkModelInvariantId = modelMap.modelInvariantId !=null ? modelMap.modelInvariantId : ""
\r
315 } catch (Exception ex) {
\r
320 def serviceModelVersionId = ""
\r
321 def serviceModelName = ""
\r
322 def serviceModelType = ""
\r
323 def serviceModelVersion = ""
\r
324 def serviceModelCustomizationId = ""
\r
325 def serviceModelInvariantId = ""
\r
327 // verify the DB Catalog response JSON structure
\r
328 def serviceModelInfo = execution.getVariable("serviceModelInfo")
\r
329 def jsonServiceSlurper = new JsonSlurper()
\r
330 if (serviceModelInfo != null) {
\r
332 Map modelMap = jsonServiceSlurper.parseText(serviceModelInfo)
\r
333 if (modelMap != null) {
\r
334 if (serviceModelInfo.contains("modelVersionId")) {
\r
335 serviceModelVersionId = modelMap.modelVersionId !=null ? modelMap.modelVersionId : ""
\r
337 if (serviceModelInfo.contains("modelName")) {
\r
338 serviceModelName = modelMap.modelName !=null ? modelMap.modelName : ""
\r
340 if (serviceModelInfo.contains("modelType")) {
\r
341 serviceModelType = modelMap.modelType !=null ? modelMap.modelType : ""
\r
343 if (serviceModelInfo.contains("modelVersion")) {
\r
344 serviceModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""
\r
346 if (serviceModelInfo.contains("modelCustomizationId")) {
\r
347 serviceModelCustomizationId = modelMap.modelCustomizationId !=null ? modelMap.modelCustomizationId : ""
\r
349 if (serviceModelInfo.contains("modelInvariantId")) {
\r
350 serviceModelInvariantId = modelMap.modelInvariantId !=null ? modelMap.modelInvariantId : ""
\r
353 } catch (Exception ex) {
\r
359 def subscriptionServiceType = execution.getVariable("subscriptionServiceType") != null ? execution.getVariable("subscriptionServiceType") : ""
\r
360 def globalSubscriberId = execution.getVariable("globalSubscriberId") != null ? execution.getVariable("globalSubscriberId") : ""
\r
361 def requestId = execution.getVariable("msoRequestId")
\r
362 def serviceInstanceId = execution.getVariable("serviceInstanceId") != null ? execution.getVariable("serviceInstanceId") : ""
\r
363 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : "" // optional
\r
364 def networkName = execution.getVariable("networkName") != null ? execution.getVariable("networkName") : "" // optional
\r
365 def aicCloudReqion = execution.getVariable("lcpCloudRegionId") != null ? execution.getVariable("lcpCloudRegionId") : ""
\r
366 def tenantId = execution.getVariable("tenantId") != null ? execution.getVariable("tenantId") : ""
\r
367 def serviceId = execution.getVariable("productFamilyId") != null ? execution.getVariable("productFamilyId") : ""
\r
368 def failIfExist = execution.getVariable("failIfExists") != null ? execution.getVariable("failIfExists") : ""
\r
369 def suppressRollback = execution.getVariable("disableRollback")
\r
370 def backoutOnFailure = "true"
\r
371 if(suppressRollback != null){
\r
372 if (suppressRollback == true || suppressRollback == "true") {
\r
373 backoutOnFailure = "false"
\r
374 } else if (suppressRollback == false || suppressRollback == "false") {
\r
375 backoutOnFailure = "true"
\r
379 //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)
\r
380 def sdncVersion = execution.getVariable("sdncVersion")
\r
383 def action = execution.getVariable("action")
\r
385 def userParamsNode = ""
\r
386 def userParams = execution.getVariable("networkInputParams")
\r
387 if(userParams != null) {
\r
388 userParamsNode = buildUserParams(userParams)
\r
392 <network-request xmlns="http://www.w3.org/2001/XMLSchema">
\r
394 <request-id>${requestId}</request-id>
\r
395 <action>${action}</action>
\r
396 <source>${source}</source>
\r
397 <service-instance-id>${serviceInstanceId}</service-instance-id>
\r
400 <network-id>${networkId}</network-id>
\r
401 <network-name>${networkName}</network-name>
\r
402 <network-type>${networkModelType}</network-type>
\r
403 <subscription-service-type>${subscriptionServiceType}</subscription-service-type>
\r
404 <global-customer-id>${globalSubscriberId}</global-customer-id>
\r
405 <aic-cloud-region>${aicCloudReqion}</aic-cloud-region>
\r
406 <tenant-id>${tenantId}</tenant-id>
\r
407 <service-id>${serviceId}</service-id>
\r
408 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
\r
409 <failIfExist>${failIfExist}</failIfExist>
\r
411 <modelName>${networkModelName}</modelName>
\r
412 <modelUuid>${networkModelVersionId}</modelUuid>
\r
413 <modelInvariantUuid>${networkModelInvariantId}</modelInvariantUuid>
\r
414 <modelVersion>${networkModelVersion}</modelVersion>
\r
415 <modelCustomizationUuid>${networkModelCustomizationId}</modelCustomizationUuid>
\r
416 <modelType>${networkModelType}</modelType>
\r
417 </networkModelInfo>
\r
419 <modelName>${serviceModelName}</modelName>
\r
420 <modelUuid>${serviceModelVersionId}</modelUuid>
\r
421 <modelInvariantUuid>${serviceModelInvariantId}</modelInvariantUuid>
\r
422 <modelVersion>${serviceModelVersion}</modelVersion>
\r
423 <modelCustomizationUuid>${serviceModelCustomizationId}</modelCustomizationUuid>
\r
424 <modelType>${serviceModelType}</modelType>
\r
425 </serviceModelInfo>
\r
426 <sdncVersion>${sdncVersion}</sdncVersion>
\r
433 // return a pretty-print of the volume-request xml without the preamble
\r
434 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
\r
439 * Create a vnf-request XML using a map
\r
440 * @param requestMap - map created from VID JSON
\r
444 public String createXmlVfModuleRequest(execution, Map requestMap, String action, String serviceInstanceId) {
\r
446 //def relatedInstanceList = requestMap.requestDetails.relatedInstanceList
\r
448 //relatedInstanceList.each {
\r
449 // if (it.relatedInstance.modelInfo.modelType == 'vnf') {
\r
450 // vnfType = it.relatedInstance.modelInfo.modelName
\r
451 // vnfId = it.relatedInstance.modelInfo.modelInvariantId
\r
456 def asdcServiceModelInfo = ''
\r
458 def relatedInstanceList = requestMap.requestDetails?.relatedInstanceList
\r
461 if (relatedInstanceList != null) {
\r
462 relatedInstanceList.each {
\r
463 if (it.relatedInstance.modelInfo?.modelType == 'service') {
\r
464 asdcServiceModelInfo = it.relatedInstance.modelInfo?.modelVersion
\r
466 if (it.relatedInstance.modelInfo.modelType == 'vnf') {
\r
467 vnfName = it.relatedInstance.instanceName ?: ''
\r
472 def vnfType = execution.getVariable('vnfType')
\r
473 def vnfId = execution.getVariable('vnfId')
\r
475 def vfModuleId = execution.getVariable('vfModuleId')
\r
476 def volumeGroupId = execution.getVariable('volumeGroupId')
\r
477 def userParams = requestMap.requestDetails?.requestParameters?.userParams
\r
480 def userParamsNode = ''
\r
481 if(userParams != null) {
\r
482 userParamsNode = buildUserParams(userParams)
\r
485 def isBaseVfModule = "false"
\r
486 if (execution.getVariable('isBaseVfModule') == true) {
\r
487 isBaseVfModule = "true"
\r
490 def requestId = execution.getVariable("mso-request-id")
\r
491 def vfModuleName = requestMap.requestDetails?.requestInfo?.instanceName ?: ''
\r
492 def vfModuleModelName = requestMap.requestDetails?.modelInfo?.modelName ?: ''
\r
493 def suppressRollback = requestMap.requestDetails?.requestInfo?.suppressRollback
\r
495 def backoutOnFailure = ""
\r
496 if(suppressRollback != null){
\r
497 if ( suppressRollback == true) {
\r
498 backoutOnFailure = "false"
\r
499 } else if ( suppressRollback == false) {
\r
500 backoutOnFailure = "true"
\r
504 def serviceId = requestMap.requestDetails?.requestParameters?.serviceId ?: ''
\r
505 def aicCloudRegion = requestMap.requestDetails?.cloudConfiguration?.lcpCloudRegionId ?: ''
\r
506 def tenantId = requestMap.requestDetails?.cloudConfiguration?.tenantId ?: ''
\r
507 def personaModelId = requestMap.requestDetails?.modelInfo?.modelInvariantId ?: ''
\r
508 def personaModelVersion = requestMap.requestDetails?.modelInfo?.modelVersion ?: ''
\r
509 def modelCustomizationId = requestMap.requestDetails?.modelInfo?.modelCustomizationId ?: ''
\r
514 <request-id>${requestId}</request-id>
\r
515 <action>${action}</action>
\r
516 <source>VID</source>
\r
517 <!-- new 1610 field -->
\r
518 <service-instance-id>${serviceInstanceId}</service-instance-id>
\r
521 <!-- not in use in 1610 -->
\r
522 <vnf-name>${vnfName}</vnf-name>
\r
523 <vnf-type>${vnfType}</vnf-type>
\r
524 <vnf-id>${vnfId}</vnf-id>
\r
525 <volume-group-id>${volumeGroupId}</volume-group-id>
\r
526 <vf-module-id>${vfModuleId}</vf-module-id>
\r
527 <vf-module-name>${vfModuleName}</vf-module-name>
\r
528 <vf-module-model-name>${vfModuleModelName}</vf-module-model-name>
\r
529 <model-customization-id>${modelCustomizationId}</model-customization-id>
\r
530 <is-base-vf-module>${isBaseVfModule}</is-base-vf-module>
\r
531 <asdc-service-model-version>${asdcServiceModelInfo}</asdc-service-model-version>
\r
532 <aic-cloud-region>${aicCloudRegion}</aic-cloud-region>
\r
533 <tenant-id>${tenantId}</tenant-id>
\r
534 <service-id>${serviceId}</service-id>
\r
535 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
\r
536 <persona-model-id>${personaModelId}</persona-model-id>
\r
537 <persona-model-version>${personaModelVersion}</persona-model-version>
\r
545 // return a pretty-print of the volume-request xml without the preamble
\r
546 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
\r