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?.modelInstanceName
\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?.modelCustomizationUuid ?: ''
\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
209 public String createXmlNetworkRequestInfra(execution, def networkJsonIncoming) {
\r
211 def requestId = execution.getVariable("requestId")
\r
212 def serviceInstanceId = execution.getVariable("serviceInstanceId")
\r
213 def requestAction = execution.getVariable("requestAction")
\r
214 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : ""
\r
216 def jsonSlurper = new JsonSlurper()
\r
218 Map reqMap = jsonSlurper.parseText(networkJsonIncoming)
\r
219 def instanceName = reqMap.requestDetails.requestInfo.instanceName
\r
220 def modelCustomizationId = reqMap.requestDetails.modelInfo.modelCustomizationId
\r
221 if (modelCustomizationId == null) {
\r
222 modelCustomizationId = reqMap.requestDetails.modelInfo.modelCustomizationUuid !=null ?
\r
223 reqMap.requestDetails.modelInfo.modelCustomizationUuid : ""
\r
225 def modelName = reqMap.requestDetails.modelInfo.modelName
\r
226 def lcpCloudRegionId = reqMap.requestDetails.cloudConfiguration.lcpCloudRegionId
\r
227 def tenantId = reqMap.requestDetails.cloudConfiguration.tenantId
\r
228 def serviceId = reqMap.requestDetails.requestInfo.productFamilyId
\r
229 def suppressRollback = reqMap.requestDetails.requestInfo.suppressRollback.toString()
\r
230 def backoutOnFailure = "true"
\r
231 if(suppressRollback != null){
\r
232 if (suppressRollback == true || suppressRollback == "true") {
\r
233 backoutOnFailure = "false"
\r
234 } else if (suppressRollback == false || suppressRollback == "false") {
\r
235 backoutOnFailure = "true"
\r
239 //def userParams = reqMap.requestDetails.requestParameters.userParams
\r
240 //def userParamsNode = buildUserParams(userParams)
\r
241 def userParams = reqMap.requestDetails?.requestParameters?.userParams
\r
242 def userParamsNode = ''
\r
243 if(userParams != null) {
\r
244 userParamsNode = buildUserParams(userParams)
\r
247 //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)
\r
248 def sdncVersion = execution.getVariable("sdncVersion")
\r
251 <network-request xmlns="http://www.w3.org/2001/XMLSchema">
\r
253 <request-id>${requestId}</request-id>
\r
254 <action>${requestAction}</action>
\r
255 <source>VID</source>
\r
256 <service-instance-id>${serviceInstanceId}</service-instance-id>
\r
259 <network-id>${networkId}</network-id>
\r
260 <network-name>${instanceName}</network-name>
\r
261 <network-type>${modelName}</network-type>
\r
262 <modelCustomizationId>${modelCustomizationId}</modelCustomizationId>
\r
263 <aic-cloud-region>${lcpCloudRegionId}</aic-cloud-region>
\r
264 <tenant-id>${tenantId}</tenant-id>
\r
265 <service-id>${serviceId}</service-id>
\r
266 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
\r
267 <sdncVersion>${sdncVersion}</sdncVersion>
\r
274 // return a pretty-print of the volume-request xml without the preamble
\r
275 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
\r
277 } catch(Exception e) {
\r
283 * Create a network-request XML using a map,
\r
284 * @param execution
\r
287 public String createXmlNetworkRequestInstance(execution) {
\r
289 def networkModelUuid = ""
\r
290 def networkModelName = ""
\r
291 def networkModelVersion = ""
\r
292 def networkModelCustomizationUuid = ""
\r
293 def networkModelInvariantUuid = ""
\r
295 // verify the DB Catalog response JSON structure
\r
296 def networkModelInfo = execution.getVariable("networkModelInfo")
\r
297 def jsonSlurper = new JsonSlurper()
\r
298 if (networkModelInfo != null) {
\r
300 Map modelMap = jsonSlurper.parseText(networkModelInfo)
\r
301 if (modelMap != null) {
\r
302 if (networkModelInfo.contains("modelUuid")) {
\r
303 networkModelUuid = modelMap.modelUuid !=null ? modelMap.modelUuid : ""
\r
305 if (networkModelInfo.contains("modelName")) {
\r
306 networkModelName = modelMap.modelName !=null ? modelMap.modelName : ""
\r
308 if (networkModelInfo.contains("modelVersion")) {
\r
309 networkModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""
\r
311 if (networkModelInfo.contains("modelCustomizationUuid")) {
\r
312 networkModelCustomizationUuid = modelMap.modelCustomizationUuid !=null ? modelMap.modelCustomizationUuid : ""
\r
314 if (networkModelInfo.contains("modelInvariantUuid")) {
\r
315 networkModelInvariantUuid = modelMap.modelInvariantUuid !=null ? modelMap.modelInvariantUuid : ""
\r
318 } catch (Exception ex) {
\r
323 def serviceModelUuid = ""
\r
324 def serviceModelName = ""
\r
325 def serviceModelVersion = ""
\r
326 def serviceModelCustomizationUuid = ""
\r
327 def serviceModelInvariantUuid = ""
\r
329 // verify the DB Catalog response JSON structure
\r
330 def serviceModelInfo = execution.getVariable("serviceModelInfo")
\r
331 def jsonServiceSlurper = new JsonSlurper()
\r
332 if (serviceModelInfo != null) {
\r
334 Map modelMap = jsonServiceSlurper.parseText(serviceModelInfo)
\r
335 if (modelMap != null) {
\r
336 if (serviceModelInfo.contains("modelUuid")) {
\r
337 serviceModelUuid = modelMap.modelUuid !=null ? modelMap.modelUuid : ""
\r
339 if (serviceModelInfo.contains("modelName")) {
\r
340 serviceModelName = modelMap.modelName !=null ? modelMap.modelName : ""
\r
342 if (serviceModelInfo.contains("modelVersion")) {
\r
343 serviceModelVersion = modelMap.modelVersion !=null ? modelMap.modelVersion : ""
\r
345 if (serviceModelInfo.contains("modelCustomizationUuid")) {
\r
346 serviceModelCustomizationUuid = modelMap.modelCustomizationUuid !=null ? modelMap.modelCustomizationUuid : ""
\r
348 if (serviceModelInfo.contains("modelInvariantUuid")) {
\r
349 serviceModelInvariantUuid = modelMap.modelInvariantUuid !=null ? modelMap.modelInvariantUuid : ""
\r
352 } catch (Exception ex) {
\r
358 def subscriptionServiceType = execution.getVariable("subscriptionServiceType") != null ? execution.getVariable("subscriptionServiceType") : ""
\r
359 def globalSubscriberId = execution.getVariable("globalSubscriberId") != null ? execution.getVariable("globalSubscriberId") : ""
\r
360 def requestId = execution.getVariable("msoRequestId")
\r
361 def serviceInstanceId = execution.getVariable("serviceInstanceId") != null ? execution.getVariable("serviceInstanceId") : ""
\r
362 def networkId = (execution.getVariable("networkId")) != null ? execution.getVariable("networkId") : "" // optional
\r
363 def networkName = execution.getVariable("networkName") != null ? execution.getVariable("networkName") : "" // optional
\r
364 def aicCloudReqion = execution.getVariable("lcpCloudRegionId") != null ? execution.getVariable("lcpCloudRegionId") : ""
\r
365 def tenantId = execution.getVariable("tenantId") != null ? execution.getVariable("tenantId") : ""
\r
366 def serviceId = execution.getVariable("productFamilyId") != null ? execution.getVariable("productFamilyId") : ""
\r
367 def failIfExist = execution.getVariable("failIfExists") != null ? execution.getVariable("failIfExists") : ""
\r
368 def suppressRollback = execution.getVariable("disableRollback")
\r
369 def backoutOnFailure = "true"
\r
370 if(suppressRollback != null){
\r
371 if (suppressRollback == true || suppressRollback == "true") {
\r
372 backoutOnFailure = "false"
\r
373 } else if (suppressRollback == false || suppressRollback == "false") {
\r
374 backoutOnFailure = "true"
\r
378 //'sdncVersion' = current, '1610' (non-RPC SDNC) or '1702' (RPC SDNC)
\r
379 def sdncVersion = execution.getVariable("sdncVersion")
\r
382 def action = execution.getVariable("action")
\r
384 def userParamsNode = ""
\r
385 def userParams = execution.getVariable("networkInputParams")
\r
386 if(userParams != null) {
\r
387 userParamsNode = buildUserParams(userParams)
\r
391 <network-request xmlns="http://www.w3.org/2001/XMLSchema">
\r
393 <request-id>${requestId}</request-id>
\r
394 <action>${action}</action>
\r
395 <source>${source}</source>
\r
396 <service-instance-id>${serviceInstanceId}</service-instance-id>
\r
399 <network-id>${networkId}</network-id>
\r
400 <network-name>${networkName}</network-name>
\r
401 <network-type>${networkModelName}</network-type>
\r
402 <subscription-service-type>${subscriptionServiceType}</subscription-service-type>
\r
403 <global-customer-id>${globalSubscriberId}</global-customer-id>
\r
404 <aic-cloud-region>${aicCloudReqion}</aic-cloud-region>
\r
405 <tenant-id>${tenantId}</tenant-id>
\r
406 <service-id>${serviceId}</service-id>
\r
407 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
\r
408 <failIfExist>${failIfExist}</failIfExist>
\r
410 <modelName>${networkModelName}</modelName>
\r
411 <modelUuid>${networkModelUuid}</modelUuid>
\r
412 <modelInvariantUuid>${networkModelInvariantUuid}</modelInvariantUuid>
\r
413 <modelVersion>${networkModelVersion}</modelVersion>
\r
414 <modelCustomizationUuid>${networkModelCustomizationUuid}</modelCustomizationUuid>
\r
415 </networkModelInfo>
\r
417 <modelName>${serviceModelName}</modelName>
\r
418 <modelUuid>${serviceModelUuid}</modelUuid>
\r
419 <modelInvariantUuid>${serviceModelInvariantUuid}</modelInvariantUuid>
\r
420 <modelVersion>${serviceModelVersion}</modelVersion>
\r
421 <modelCustomizationUuid>${serviceModelCustomizationUuid}</modelCustomizationUuid>
\r
423 </serviceModelInfo>
\r
424 <sdncVersion>${sdncVersion}</sdncVersion>
\r
431 // return a pretty-print of the volume-request xml without the preamble
\r
432 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
\r
437 * Create a vnf-request XML using a map
\r
438 * @param requestMap - map created from VID JSON
\r
442 public String createXmlVfModuleRequest(execution, Map requestMap, String action, String serviceInstanceId) {
\r
444 //def relatedInstanceList = requestMap.requestDetails.relatedInstanceList
\r
446 //relatedInstanceList.each {
\r
447 // if (it.relatedInstance.modelInfo.modelType == 'vnf') {
\r
448 // vnfType = it.relatedInstance.modelInfo.modelName
\r
449 // vnfId = it.relatedInstance.modelInfo.modelInvariantId
\r
454 def asdcServiceModelInfo = ''
\r
456 def relatedInstanceList = requestMap.requestDetails?.relatedInstanceList
\r
459 if (relatedInstanceList != null) {
\r
460 relatedInstanceList.each {
\r
461 if (it.relatedInstance.modelInfo?.modelType == 'service') {
\r
462 asdcServiceModelInfo = it.relatedInstance.modelInfo?.modelVersion
\r
464 if (it.relatedInstance.modelInfo.modelType == 'vnf') {
\r
465 vnfName = it.relatedInstance.instanceName ?: ''
\r
470 def vnfType = execution.getVariable('vnfType')
\r
471 def vnfId = execution.getVariable('vnfId')
\r
473 def vfModuleId = execution.getVariable('vfModuleId')
\r
474 def volumeGroupId = execution.getVariable('volumeGroupId')
\r
475 def userParams = requestMap.requestDetails?.requestParameters?.userParams
\r
478 def userParamsNode = ''
\r
479 if(userParams != null) {
\r
480 userParamsNode = buildUserParams(userParams)
\r
483 def isBaseVfModule = "false"
\r
484 if (execution.getVariable('isBaseVfModule') == true) {
\r
485 isBaseVfModule = "true"
\r
488 def requestId = execution.getVariable("mso-request-id")
\r
489 def vfModuleName = requestMap.requestDetails?.requestInfo?.instanceName ?: ''
\r
490 def vfModuleModelName = requestMap.requestDetails?.modelInfo?.modelName ?: ''
\r
491 def suppressRollback = requestMap.requestDetails?.requestInfo?.suppressRollback
\r
493 def backoutOnFailure = ""
\r
494 if(suppressRollback != null){
\r
495 if ( suppressRollback == true) {
\r
496 backoutOnFailure = "false"
\r
497 } else if ( suppressRollback == false) {
\r
498 backoutOnFailure = "true"
\r
502 def serviceId = requestMap.requestDetails?.requestParameters?.serviceId ?: ''
\r
503 def aicCloudRegion = requestMap.requestDetails?.cloudConfiguration?.lcpCloudRegionId ?: ''
\r
504 def tenantId = requestMap.requestDetails?.cloudConfiguration?.tenantId ?: ''
\r
505 def personaModelId = requestMap.requestDetails?.modelInfo?.modelInvariantUuid ?: ''
\r
506 def personaModelVersion = requestMap.requestDetails?.modelInfo?.modelUuid ?: ''
\r
507 def modelCustomizationId = requestMap.requestDetails?.modelInfo?.modelCustomizationUuid ?: ''
\r
512 <request-id>${requestId}</request-id>
\r
513 <action>${action}</action>
\r
514 <source>VID</source>
\r
515 <!-- new 1610 field -->
\r
516 <service-instance-id>${serviceInstanceId}</service-instance-id>
\r
519 <!-- not in use in 1610 -->
\r
520 <vnf-name>${vnfName}</vnf-name>
\r
521 <vnf-type>${vnfType}</vnf-type>
\r
522 <vnf-id>${vnfId}</vnf-id>
\r
523 <volume-group-id>${volumeGroupId}</volume-group-id>
\r
524 <vf-module-id>${vfModuleId}</vf-module-id>
\r
525 <vf-module-name>${vfModuleName}</vf-module-name>
\r
526 <vf-module-model-name>${vfModuleModelName}</vf-module-model-name>
\r
527 <model-customization-id>${modelCustomizationId}</model-customization-id>
\r
528 <is-base-vf-module>${isBaseVfModule}</is-base-vf-module>
\r
529 <asdc-service-model-version>${asdcServiceModelInfo}</asdc-service-model-version>
\r
530 <aic-cloud-region>${aicCloudRegion}</aic-cloud-region>
\r
531 <tenant-id>${tenantId}</tenant-id>
\r
532 <service-id>${serviceId}</service-id>
\r
533 <backout-on-failure>${backoutOnFailure}</backout-on-failure>
\r
534 <persona-model-id>${personaModelId}</persona-model-id>
\r
535 <persona-model-version>${personaModelVersion}</persona-model-version>
\r
543 // return a pretty-print of the volume-request xml without the preamble
\r
544 return groovy.xml.XmlUtil.serialize(xmlReq.normalize().replaceAll("\t", "").replaceAll("\n", "")).replaceAll("(<\\?[^<]*\\?>\\s*[\\r\\n]*)?", "")
\r