diff options
author | Arthur Martella <amartell@research.att.com> | 2017-09-08 13:27:46 -0400 |
---|---|---|
committer | Arthur Martella <amartell@research.att.com> | 2017-09-08 13:32:24 -0400 |
commit | 62cd6aaaf74aa91ee0037c0e155c8e7284f07567 (patch) | |
tree | 68c0c53c9156f5aa3c6b3599ac940770f986633d /bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp | |
parent | fa1a211d28a912892fcd888569df033900eb01ee (diff) |
1710 Rebase - Second Attempt
This commit rebases changes from openecomp-mso/internal-staging-1710 up to and including this codecloud commit:
54483fc6606ddb1591a2e9da61bff8712325f924
Wed Sep 6 18:12:56 2017 -0400
Rebasing was done on a branch on top of this commit in so/master in ONAP:
93fbdfbe46104f8859d4754040f979cb7997c157
Thu Sep 7 16:42:59 2017 +0000
Change-Id: I4ad9abf40da32bf5bdca43e868b8fa2dbcd9dc59
Issue-id: SO-107
Signed-off-by: Arthur Martella <amartell@research.att.com>
Diffstat (limited to 'bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp')
35 files changed, 5665 insertions, 2555 deletions
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy index ec414a4ee2..e7190291da 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateGenericALaCarteServiceInstance.groovy @@ -39,7 +39,7 @@ import org.apache.commons.codec.binary.Base64; import org.springframework.web.util.UriUtils /** - * This groovy class supports the <class>CreateServiceInstance.bpmn</class> process. + * This groovy class supports the <class>CreateGenericALaCarteServiceInstance.bpmn</class> process. * AlaCarte flow for 1702 ServiceInstance Create * */ @@ -118,8 +118,29 @@ public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskPro execution.setVariable("subscriptionServiceType", subscriptionServiceType) } + + /* + * Extracting User Parameters from incoming Request and converting into a Map + */ + def jsonSlurper = new JsonSlurper() + def jsonOutput = new JsonOutput() + + Map reqMap = jsonSlurper.parseText(siRequest) + + //InputParams + def userParams = reqMap.requestDetails?.requestParameters?.userParams + + Map<String, String> inputMap = [:] + if (userParams) { + userParams.each { + userParam -> inputMap.put(userParam.name, userParam.value) + } + } + + utils.log("DEBUG", "User Input Parameters map: " + userParams.toString(), isDebugEnabled) + execution.setVariable("serviceInputParams", inputMap) + //TODO - //execution.setVariable("serviceInputParams", jsonUtil.getJsonValue(siRequest, "requestDetails.requestParameters.userParams")) //execution.setVariable("failExists", true) } catch (BpmnError e) { @@ -168,7 +189,7 @@ public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskPro } String buildworkflowException = - """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+ """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"> <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage> <aetgt:ErrorCode>7000</aetgt:ErrorCode> </aetgt:WorkflowException>""" @@ -192,9 +213,9 @@ public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskPro String source = execution.getVariable("source") String msoCompletionRequest = - """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" + xmlns:ns="http://org.openecomp/mso/request/types/v1"> + <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>CREATE</action> <source>${source}</source> @@ -228,7 +249,7 @@ public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskPro String requestId = execution.getVariable("msoRequestId") String source = execution.getVariable("source") String requestInfo = - """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>CREATE</action> <source>${source}</source> @@ -241,15 +262,15 @@ public class CreateGenericALaCarteServiceInstance extends AbstractServiceTaskPro String errorException = " Bpmn error encountered in CreateGenericALaCarteServiceInstance flow. FalloutHandlerRequest, buildErrorResponse() - " + ex.getMessage() String requestId = execution.getVariable("msoRequestId") String falloutRequest = - """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1"
- xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" + xmlns:ns="http://org.openecomp/mso/request/types/v1" + xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1"> + <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>CREATE</action> <source>VID</source> </request-info> - <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+ <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"> <aetgt:ErrorMessage>${errorException}</aetgt:ErrorMessage> <aetgt:ErrorCode>7000</aetgt:ErrorCode> </aetgt:WorkflowException> diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateGenericMacroServiceNetworkVnf.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateGenericMacroServiceNetworkVnf.groovy deleted file mode 100644 index 79508cb8cb..0000000000 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateGenericMacroServiceNetworkVnf.groovy +++ /dev/null @@ -1,804 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * OPENECOMP - MSO - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.mso.bpmn.infrastructure.scripts; - -import groovy.xml.XmlUtil -import groovy.json.* - -import org.openecomp.mso.bpmn.core.json.JsonUtils -import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor -import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils -import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil -import org.openecomp.mso.bpmn.common.scripts.VidUtils -import org.openecomp.mso.bpmn.core.WorkflowException -import org.openecomp.mso.bpmn.core.decomposition.ModelInfo -import org.openecomp.mso.bpmn.core.decomposition.NetworkResource -import org.openecomp.mso.bpmn.core.decomposition.ServiceDecomposition -import org.openecomp.mso.bpmn.core.decomposition.VnfResource -import org.openecomp.mso.rest.APIResponse; -import org.openecomp.mso.rest.RESTClient -import org.openecomp.mso.rest.RESTConfig - -import java.util.UUID; - -import org.camunda.bpm.engine.delegate.BpmnError -import org.camunda.bpm.engine.runtime.Execution -import org.json.JSONObject; -import org.json.JSONArray; -import org.apache.commons.lang3.* -import org.apache.commons.codec.binary.Base64; -import org.springframework.web.util.UriUtils; - -/** - * This groovy class supports the <class>CreateGenericMacroServiceNetworkVnf.bpmn</class> process. - * - */ -public class CreateGenericMacroServiceNetworkVnf extends AbstractServiceTaskProcessor { - - String Prefix="CGMSNV_" - ExceptionUtil exceptionUtil = new ExceptionUtil() - JsonUtils jsonUtil = new JsonUtils() - VidUtils vidUtils = new VidUtils() - CatalogDbUtils catalogDbUtils = new CatalogDbUtils() - - /** - * This method is executed during the preProcessRequest task of the <class>CreateServiceInstance.bpmn</class> process. - * @param execution - */ - public InitializeProcessVariables(Execution execution){ - /* Initialize all the process variables in this block */ - - execution.setVariable("createViprServiceRequest", "") - execution.setVariable("globalSubscriberId", "") - execution.setVariable("serviceInstanceName", "") - execution.setVariable("msoRequestId", "") - execution.setVariable("CGMSNV_NetworksCreatedCount", 0) - execution.setVariable("CGMSNV_VnfsCreatedCount", 0) - execution.setVariable("productFamilyId", "") - - //TODO - execution.setVariable("sdncVersion", "1707") - } - - // ************************************************** - // Pre or Prepare Request Section - // ************************************************** - /** - * This method is executed during the preProcessRequest task of the <class>CreateServiceInstance.bpmn</class> process. - * @param execution - */ - public void preProcessRequest (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - execution.setVariable("prefix",Prefix) - - utils.log("DEBUG", " ***** Inside preProcessRequest CreateGenericMacroServiceNetworkVnf Request ***** ", isDebugEnabled) - - try { - // initialize flow variables - InitializeProcessVariables(execution) - - // check for incoming json message/input - String createViprServiceRequest = execution.getVariable("bpmnRequest") - utils.logAudit(createViprServiceRequest) - execution.setVariable("createViprServiceRequest", createViprServiceRequest); - println 'createViprServiceRequest - ' + createViprServiceRequest - - // extract requestId - String requestId = execution.getVariable("mso-request-id") - execution.setVariable("msoRequestId", requestId) - - String serviceInstanceId = execution.getVariable("serviceInstanceId") - - if ((serviceInstanceId == null) || (serviceInstanceId.isEmpty())) { - serviceInstanceId = UUID.randomUUID().toString() - utils.log("DEBUG", " Generated new Service Instance: " + serviceInstanceId , isDebugEnabled) - } else { - utils.log("DEBUG", "Using provided Service Instance ID: " + serviceInstanceId , isDebugEnabled) - } - - serviceInstanceId = UriUtils.encode(serviceInstanceId,"UTF-8") - execution.setVariable("serviceInstanceId", serviceInstanceId) - - String requestAction = execution.getVariable("requestAction") - execution.setVariable("requestAction", requestAction) - - String source = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.requestInfo.source") - if ((source == null) || (source.isEmpty())) { - execution.setVariable("source", "VID") - } else { - execution.setVariable("source", source) - } - - // extract globalSubscriberId - String globalSubscriberId = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.subscriberInfo.globalSubscriberId") - - // verify element global-customer-id is sent from JSON input, throw exception if missing - if ((globalSubscriberId == null) || (globalSubscriberId.isEmpty())) { - String dataErrorMessage = " Element 'globalSubscriberId' is missing. " - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) - - } else { - execution.setVariable("globalSubscriberId", globalSubscriberId) - execution.setVariable("globalCustomerId", globalSubscriberId) - } - - // extract subscriptionServiceType - String subscriptionServiceType = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.requestParameters.subscriptionServiceType") - execution.setVariable("subscriptionServiceType", subscriptionServiceType) - utils.log("DEBUG", "Incoming subscriptionServiceType is: " + subscriptionServiceType, isDebugEnabled) - - String suppressRollback = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.requestInfo.suppressRollback") - execution.setVariable("disableRollback", suppressRollback) - utils.log("DEBUG", "Incoming Suppress/Disable Rollback is: " + suppressRollback, isDebugEnabled) - - String productFamilyId = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.requestInfo.productFamilyId") - execution.setVariable("productFamilyId", productFamilyId) - utils.log("DEBUG", "Incoming productFamilyId is: " + productFamilyId, isDebugEnabled) - - //For Completion Handler & Fallout Handler - String requestInfo = - """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
- <request-id>${requestId}</request-id> - <action>CREATE</action> - <source>${source}</source> - </request-info>""" - - execution.setVariable("CGMSNV_requestInfo", requestInfo) - - utils.log("DEBUG", " ***** Completed preProcessRequest CreateGenericMacroServiceNetworkVnf Request ***** ", isDebugEnabled) - - } catch (BpmnError e) { - throw e; - - } catch (Exception ex){ - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected from method preProcessRequest() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - public void sendSyncResponse (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - utils.log("DEBUG", " ***** Inside sendSyncResponse of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - try { - String serviceInstanceId = execution.getVariable("serviceInstanceId") - String requestId = execution.getVariable("mso-request-id") - - // RESTResponse (for API Handler (APIH) Reply Task) - String syncResponse ="""{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim() - - utils.log("DEBUG", " sendSynchResponse: xmlSyncResponse - " + "\n" + syncResponse, isDebugEnabled) - sendWorkflowResponse(execution, 202, syncResponse) - - } catch (Exception ex) { - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected from method sendSyncResponse() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // - // ******************************* - public void prepareDecomposeService(Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside prepareDecomposeService of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - String createViprServiceRequest = execution.getVariable("createViprServiceRequest") - String serviceModelInfo = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.modelInfo") - execution.setVariable("serviceModelInfo", serviceModelInfo) - - utils.log("DEBUG", " ***** Completed prepareDecomposeService of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method prepareDecomposeService() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // - // ******************************* - public void prepareCreateServiceInstance(Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside prepareCreateServiceInstance of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - /* - * Service modelInfo is created in earlier step. This flow can use it as-is ... or, extract from DecompositionObject - * ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") - * ModelInfo modelInfo = serviceDecomposition.getModelInfo() - * - */ - String createViprServiceRequest = execution.getVariable("createViprServiceRequest") - String serviceInputParams = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.requestParameters") - execution.setVariable("serviceInputParams", serviceInputParams) - - String serviceInstanceName = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.requestInfo.instanceName") - execution.setVariable("serviceInstanceName", serviceInstanceName) - - ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") - execution.setVariable("serviceDecompositionString", serviceDecomposition.toJsonString()) - - utils.log("DEBUG", " ***** Completed prepareCreateServiceInstance of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - public void postProcessServiceInstanceCreate (Execution execution){ - def method = getClass().getSimpleName() + '.postProcessServiceInstanceCreate(' +'execution=' + execution.getId() +')' - def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') - logDebug('Entered ' + method, isDebugLogEnabled) - - String source = execution.getVariable("source") - String requestId = execution.getVariable("mso-request-id") - String serviceInstanceId = execution.getVariable("serviceInstanceId") - String serviceInstanceName = execution.getVariable("serviceInstanceName") - - try { - - String payload = """ - <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">
- <soapenv:Header/> - <soapenv:Body> - <req:updateInfraRequest> - <requestId>${requestId}</requestId> - <lastModifiedBy>BPEL</lastModifiedBy> - <serviceInstanceId>${serviceInstanceId}</serviceInstanceId> - <serviceInstanceName>${serviceInstanceName}</serviceInstanceName> - </req:updateInfraRequest> - </soapenv:Body> - </soapenv:Envelope> - """ - execution.setVariable("CGMSNV_setUpdateDbInstancePayload", payload) - utils.logAudit("CGMSNV_setUpdateDbInstancePayload: " + payload) - logDebug('Exited ' + method, isDebugLogEnabled) - //println("CMSO_updateDBStatusToSuccessPayload --> " + execution.getVariable("CMSO_updateDBStatusToSuccessPayload")) - - } catch (BpmnError e) { - throw e; - } catch (Exception e) { - logError('Caught exception in ' + method, e) - exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Internal Error - Occured in" + method) - } - } - - - public void getDataFromDecomposition (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - utils.log("DEBUG", " ***** Inside getDataFromDecomposition() of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - try { - - ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") - - List<NetworkResource> networkList = serviceDecomposition.getServiceNetworks() - - //utils.log("DEBUG", "got network list: "+ networkList.toString(), isDebugEnabled) - execution.setVariable("networkList", networkList) - execution.setVariable("networkListString", networkList.toString()) - - networkList = execution.getVariable("networkList"); - utils.log("DEBUG", "networkList: "+ networkList, isDebugEnabled) - - if (networkList != null && networkList.size() > 0) { - - execution.setVariable("CGMSNV_NetworksCount", networkList.size()) - utils.log("DEBUG", "networks to create: "+ networkList.size(), isDebugEnabled) - } else { - execution.setVariable("CGMSNV_NetworksCount", 0) - utils.log("DEBUG", "no networks to create based upon serviceDecomposition content", isDebugEnabled) - } - - // VNFs - List<VnfResource> vnfList = serviceDecomposition.getServiceVnfs() - execution.setVariable("vnfList", vnfList) - - String vnfModelInfoString = "" - if (vnfList != null && vnfList.size() > 0) { - execution.setVariable("CGMSNV_VNFsCount", vnfList.size()) - utils.log("DEBUG", "vnfs to create: "+ vnfList.size(), isDebugEnabled) - ModelInfo vnfModelInfo = vnfList[0].getModelInfo() - String vnfModelInfoWithRoot = vnfModelInfo.toString() - vnfModelInfoString = jsonUtil.getJsonValue(vnfModelInfoWithRoot, "modelInfo") - } else { - execution.setVariable("CGMSNV_VNFsCount", 0) - utils.log("DEBUG", "no vnfs to create based upon Catalog DB response", isDebugEnabled) - } - - execution.setVariable("vnfModelInfo", vnfModelInfoString) - //utils.log("DEBUG", " vnfModelInfoString :" + vnfModelInfoString, isDebugEnabled) - - utils.log("DEBUG", " ***** Completed getDataFromDecomposition() of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - sendSyncError(execution) - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. getDataFromDecomposition() - " + ex.getMessage() - utils.log("DEBUG", exceptionMessage, isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Generate Network request Section - // ******************************* - public void prepareNetworkCreate (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside preparenNetworkCreate of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - -// String disableRollback = execution.getVariable("disableRollback") -// def backoutOnFailure = "" -// if(disableRollback != null){ -// if ( disableRollback == true) { -// backoutOnFailure = "false" -// } else if ( disableRollback == false) { -// backoutOnFailure = "true" -// } -// } - //failIfExists - optional - - String createViprServiceRequest = execution.getVariable("createViprServiceRequest") - - JSONArray networkList = execution.getVariable("networkList") - utils.log("DEBUG", "array networkList: "+ networkList, isDebugEnabled) - - if (networkList == null || networkList.size() < 1){ - networkList = new JSONArray(execution.getVariable("networkListString")) - utils.log("DEBUG", "array from string networkList: "+ networkList, isDebugEnabled) - } - - Integer networksCreatedCount = execution.getVariable("CGMSNV_NetworksCreatedCount") - String networkModelInfoString = "" - - if (networkList != null) { - utils.log("DEBUG", " getting model info for network # :" + networksCreatedCount, isDebugEnabled) - ModelInfo networkModelInfo = networkList[networksCreatedCount.intValue()].getModelInfo() - networkModelInfoString = networkModelInfo.toString() - } else { - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected number of networks to create - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - - execution.setVariable("networkModelInfo", networkModelInfoString) - utils.log("DEBUG", " networkModelInfoString :" + networkModelInfoString, isDebugEnabled) - -// String networkModelInfo = execution.getVariable("networkModelInfo") - // extract cloud configuration - String lcpCloudRegionId = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.cloudConfiguration.lcpCloudRegionId") - execution.setVariable("lcpCloudRegionId", lcpCloudRegionId) - utils.log("DEBUG","lcpCloudRegionId: "+ lcpCloudRegionId, isDebugEnabled) - String tenantId = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.cloudConfiguration.tenantId") - execution.setVariable("tenantId", tenantId) - utils.log("DEBUG","tenantId: "+ tenantId, isDebugEnabled) - - String sdncVersion = execution.getVariable("sdncVersion") - utils.log("DEBUG","sdncVersion: "+ sdncVersion, isDebugEnabled) - - List<VnfResource> vnfList = execution.getVariable("vnfList") - utils.log("DEBUG", "vnfList: "+ vnfList.toString(), isDebugEnabled) - - String vnfModelInfo = execution.getVariable("vnfModelInfo") - utils.log("DEBUG", "vnfModelInfo: "+ vnfModelInfo, isDebugEnabled) - - networkList = execution.getVariable("networkList") - utils.log("DEBUG", "networkList: "+ networkList, isDebugEnabled) - - utils.log("DEBUG", " ***** Completed preparenNetworkCreate of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method prepareNetworkCreate() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Validate Network request Section -> increment count - // ******************************* - public void validateNetworkCreate (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside validateNetworkCreate of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - Integer networksCreatedCount = execution.getVariable("CGMSNV_NetworksCreatedCount") - networksCreatedCount++ - - execution.setVariable("CGMSNV_NetworksCreatedCount", networksCreatedCount) - - execution.setVariable("DCRENI_rollbackData"+networksCreatedCount, execution.getVariable("DCRENI_rollbackData")) - - utils.log("DEBUG", "networksCreatedCount: "+ networksCreatedCount, isDebugEnabled) - utils.log("DEBUG", "DCRENI_rollbackData N : "+ execution.getVariable("DCRENI_rollbackData"+networksCreatedCount), isDebugEnabled) - - JSONArray vnfList = execution.getVariable("vnfList") - utils.log("DEBUG", "vnfList: "+ vnfList, isDebugEnabled) - - String vnfModelInfo = execution.getVariable("vnfModelInfo") - utils.log("DEBUG", "vnfModelInfo: "+ vnfModelInfo, isDebugEnabled) - - JSONArray networkList = execution.getVariable("networkList") - utils.log("DEBUG", "networkList: "+ networkList, isDebugEnabled) - - utils.log("DEBUG", " ***** Completed validateNetworkCreate of CreateGenericMacroServiceNetworkVnf ***** "+" network # "+networksCreatedCount, isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method validateNetworkCreate() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Generate Network request Section - // ******************************* - public void prepareVnfAndModulesCreate (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside prepareVnfAndModulesCreate of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - // String disableRollback = execution.getVariable("disableRollback") - // def backoutOnFailure = "" - // if(disableRollback != null){ - // if ( disableRollback == true) { - // backoutOnFailure = "false" - // } else if ( disableRollback == false) { - // backoutOnFailure = "true" - // } - // } - //failIfExists - optional - - String createViprServiceRequest = execution.getVariable("createViprServiceRequest") - String productFamilyId = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.requestInfo.productFamilyId") - execution.setVariable("productFamilyId", productFamilyId) - utils.log("DEBUG","productFamilyId: "+ productFamilyId, isDebugEnabled) - - List<VnfResource> vnfList = execution.getVariable("vnfList") - - Integer vnfsCreatedCount = execution.getVariable("CGMSNV_VnfsCreatedCount") - String vnfModelInfoString = null; - - if (vnfList != null && vnfList.size() > 0 ) { - utils.log("DEBUG", "getting model info for vnf # " + vnfsCreatedCount, isDebugEnabled) - ModelInfo vnfModelInfo1 = vnfList[0].getModelInfo() - utils.log("DEBUG", "got 0 ", isDebugEnabled) - ModelInfo vnfModelInfo = vnfList[vnfsCreatedCount.intValue()].getModelInfo() - vnfModelInfoString = vnfModelInfo.toString() - } else { - //TODO: vnfList does not contain data. Need to investigate why ... . Fro VIPR use model stored - vnfModelInfoString = execution.getVariable("vnfModelInfo") - } - - utils.log("DEBUG", " vnfModelInfoString :" + vnfModelInfoString, isDebugEnabled) - - // extract cloud configuration - String lcpCloudRegionId = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.cloudConfiguration.lcpCloudRegionId") - execution.setVariable("lcpCloudRegionId", lcpCloudRegionId) - utils.log("DEBUG","lcpCloudRegionId: "+ lcpCloudRegionId, isDebugEnabled) - String tenantId = jsonUtil.getJsonValue(createViprServiceRequest, "requestDetails.cloudConfiguration.tenantId") - execution.setVariable("tenantId", tenantId) - utils.log("DEBUG","tenantId: "+ tenantId, isDebugEnabled) - - String sdncVersion = execution.getVariable("sdncVersion") - utils.log("DEBUG","sdncVersion: "+ sdncVersion, isDebugEnabled) - - utils.log("DEBUG", " ***** Completed prepareVnfAndModulesCreate of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method prepareVnfAndModulesCreate() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Validate Vnf request Section -> increment count - // ******************************* - public void validateVnfCreate (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside validateVnfCreate of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - Integer vnfsCreatedCount = execution.getVariable("CGMSNV_VnfsCreatedCount") - vnfsCreatedCount++ - - execution.setVariable("CGMSNV_VnfsCreatedCount", vnfsCreatedCount) - - utils.log("DEBUG", " ***** Completed validateVnfCreate of CreateGenericMacroServiceNetworkVnf ***** "+" vnf # "+vnfsCreatedCount, isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method validateVnfCreate() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Validate Network request Section -> decrement count - // ******************************* - public void validateNetworkRollback (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside validateNetworkRollback of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - Integer networksCreatedCount = execution.getVariable("CGMSNV_NetworksCreatedCount") - networksCreatedCount-- - - execution.setVariable("CGMSNV_NetworksCreatedCount", networksCreatedCount) - - execution.setVariable("DCRENI_rollbackData", execution.getVariable("DCRENI_rollbackData"+networksCreatedCount)) - - utils.log("DEBUG", " ***** Completed validateNetworkRollback of CreateGenericMacroServiceNetworkVnf ***** "+" network # "+networksCreatedCount, isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method validateNetworkRollback() - " + ex.getMessage() - //exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - utils.log("DEBUG", exceptionMessage, isDebugEnabled) - execution.setVariable("CGMSNV_NetworksCreatedCount", 0) - utils.log("ERROR", exceptionMessage, true) - } - } - -// public void extractServiceModelInfo (Execution execution) { -// def isDebugEnabled = execution.getVariable("isDebugLogEnabled") -// String msg = "" -// utils.log("DEBUG"," ***** extractServiceModelInfo of CreateGenericMacroServiceNetworkVnf *****", isDebugEnabled) -// -// try { -// -// // check for input -// String requestId = execution.getVariable("msoRequestId") -// -// ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") -// ModelInfo modelInfo = serviceDecomposition.getModelInfo() -// -// utils.log("DEBUG", "modelInfo: "+ modelInfo.toJsonString(), isDebugEnabled) -// utils.log("DEBUG", "modelInfo: "+ modelInfo, isDebugEnabled) -// execution.setVariable("serviceDecomposition", modelInfo) -// -// utils.log("DEBUG"," ***** Exit extractServiceModelInfo of CreateGenericMacroServiceNetworkVnf *****", isDebugEnabled) -// -// } catch (BpmnError e) { -// throw e; -// } catch (Exception ex){ -// msg = "Exception in extractServiceModelInfo " + ex.getMessage() -// utils.log("DEBUG", msg, isDebugEnabled) -// exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) -// } -// utils.log("DEBUG"," ***** Exit extractServiceModelInfo of DecomposeService *****", isDebugEnabled) -// } - - // ******************************* - // Build DB request Section - // ******************************* -// public void prepareDBRequest (Execution execution) { -// def isDebugEnabled=execution.getVariable("isDebugLogEnabled") -// -// try { -// utils.log("DEBUG", " ***** Inside prepareDBRequest of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) -// -// String requestId = execution.getVariable("CGMSNV_requestId") -// String statusMessage = "vIPR ATM Service Instance successfully created." -// String serviceInstanceId = execution.getVariable("CGMSNV_serviceInstanceId") -// -// //TODO - verify the format for Service Instance Create, -// String dbRequest = -// """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> -// <soapenv:Header/> -// <soapenv:Body> -// <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb">
-// <requestId>${requestId}</requestId> -// <lastModifiedBy>BPMN</lastModifiedBy> -// <statusMessage>${statusMessage}</statusMessage> -// <responseBody></responseBody> -// <requestStatus>COMPLETED</requestStatus> -// <progress>100</progress> -// <vnfOutputs/> -// <serviceInstanceId>${serviceInstanceId}</serviceInstanceId> -// </ns:updateInfraRequest> -// </soapenv:Body> -// </soapenv:Envelope>""" -// -// String buildDeleteDBRequestAsString = utils.formatXml(dbRequest) -// execution.setVariable("CGMSNV_createDBRequest", buildDeleteDBRequestAsString) -// utils.logAudit(buildDeleteDBRequestAsString) -// -// utils.log("DEBUG", " ***** Completed prepareDBRequest of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) -// } catch (Exception ex) { -// // try error in method block -// String exceptionMessage = "Bpmn error encountered in CreateGenericMacroServiceNetworkVnf flow. Unexpected Error from method prepareDBRequest() - " + ex.getMessage() -// exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) -// -// } -// -// } - - - // ***************************************** - // Prepare Completion request Section - // ***************************************** - public void postProcessResponse (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - utils.log("DEBUG", " ***** Inside postProcessResponse of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - try { - String source = execution.getVariable("source") - String requestId = execution.getVariable("mso-request-id") - String serviceInstanceId = execution.getVariable("serviceInstanceId") - - String msoCompletionRequest = - """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
- <request-id>${requestId}</request-id> - <action>CREATE</action> - <source>${source}</source> - </request-info> - <status-message>Service Instance has been created successfully via macro orchestration</status-message> - <serviceInstanceId>${serviceInstanceId}</serviceInstanceId> - <mso-bpel-name>BPMN macro create</mso-bpel-name> - </aetgt:MsoCompletionRequest>""" - - // Format Response - String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest) - - utils.logAudit(xmlMsoCompletionRequest) - execution.setVariable("CGMSNV_Success", true) - execution.setVariable("CGMSNV_CompleteMsoProcessRequest", xmlMsoCompletionRequest) - utils.log("DEBUG", " SUCCESS flow, going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled) - } catch (BpmnError e) { - throw e; - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in CreateServiceInstance flow. Unexpected Error from method postProcessResponse() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - public void preProcessRollback (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - utils.log("DEBUG"," ***** preProcessRollback of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - try { - - Object workflowException = execution.getVariable("WorkflowException"); - - if (workflowException instanceof WorkflowException) { - utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled) - execution.setVariable("prevWorkflowException", workflowException); - //execution.setVariable("WorkflowException", null); - } - } catch (BpmnError e) { - utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugEnabled) - } catch(Exception ex) { - String msg = "Exception in preProcessRollback. " + ex.getMessage() - utils.log("DEBUG", msg, isDebugEnabled) - } - utils.log("DEBUG"," *** Exit preProcessRollback of CreateGenericMacroServiceNetworkVnf *** ", isDebugEnabled) - } - - public void postProcessRollback (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - utils.log("DEBUG"," ***** postProcessRollback of CreateGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - String msg = "" - try { - Object workflowException = execution.getVariable("prevWorkflowException"); - if (workflowException instanceof WorkflowException) { - utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugEnabled) - execution.setVariable("WorkflowException", workflowException); - } - } catch (BpmnError b) { - utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugEnabled) - throw b; - } catch(Exception ex) { - msg = "Exception in postProcessRollback. " + ex.getMessage() - utils.log("DEBUG", msg, isDebugEnabled) - } - utils.log("DEBUG"," *** Exit postProcessRollback of CreateGenericMacroServiceNetworkVnf *** ", isDebugEnabled) - } - - public void prepareFalloutRequest(Execution execution){ - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - utils.log("DEBUG", " *** STARTED CreateGenericMacroServiceNetworkVnf prepareFalloutRequest Process *** ", isDebugEnabled) - - try { - WorkflowException wfex = execution.getVariable("WorkflowException") - utils.log("DEBUG", " Incoming Workflow Exception: " + wfex.toString(), isDebugEnabled) - String requestInfo = execution.getVariable("CGMSNV_requestInfo") - utils.log("DEBUG", " Incoming Request Info: " + requestInfo, isDebugEnabled) - - //TODO. hmmm. there is no way to UPDATE error message. -// String errorMessage = wfex.getErrorMessage() -// boolean successIndicator = execution.getVariable("DCRESI_rollbackSuccessful") -// if (successIndicator){ -// errorMessage = errorMessage + ". Rollback successful." -// } else { -// errorMessage = errorMessage + ". Rollback not completed." -// } - - String falloutRequest = exceptionUtil.processMainflowsBPMNException(execution, requestInfo) - - execution.setVariable("CGMSNV_falloutRequest", falloutRequest) - - } catch (Exception ex) { - utils.log("DEBUG", "Error Occured in CreateGenericMacroServiceNetworkVnf prepareFalloutRequest Process " + ex.getMessage(), isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in CreateGenericMacroServiceNetworkVnf prepareFalloutRequest Process") - } - utils.log("DEBUG", "*** COMPLETED CreateGenericMacroServiceNetworkVnf prepareFalloutRequest Process ***", isDebugEnabled) - } - - - public void sendSyncError (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - execution.setVariable("prefix", Prefix) - - utils.log("DEBUG", " ***** Inside sendSyncError() of CreateServiceInstanceInfra ***** ", isDebugEnabled) - - try { - String errorMessage = "" - if (execution.getVariable("WorkflowException") instanceof WorkflowException) { - WorkflowException wfe = execution.getVariable("WorkflowException") - errorMessage = wfe.getErrorMessage() - } else { - errorMessage = "Sending Sync Error." - } - - String buildworkflowException = - """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
- <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage> - <aetgt:ErrorCode>7000</aetgt:ErrorCode> - </aetgt:WorkflowException>""" - - utils.logAudit(buildworkflowException) - sendWorkflowResponse(execution, 500, buildworkflowException) - } catch (Exception ex) { - utils.log("DEBUG", " Sending Sync Error Activity Failed. " + "\n" + ex.getMessage(), isDebugEnabled) - } - } - - public void processJavaException(Execution execution){ - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - execution.setVariable("prefix",Prefix) - try{ - utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled) - utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled) - utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled) - execution.setVariable("CRESI_unexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated - exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Caught a Java Lang Exception") - }catch(BpmnError b){ - utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugEnabled) - throw b - }catch(Exception e){ - utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled) - execution.setVariable("CRESI_unexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated - exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception in processJavaException method") - } - utils.log("DEBUG", "Completed processJavaException Method", isDebugEnabled) - } -}
\ No newline at end of file diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateNetworkInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateNetworkInstance.groovy index 11de8d9819..54f676f731 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateNetworkInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateNetworkInstance.groovy @@ -1,32 +1,32 @@ -/*-
- * ============LICENSE_START=======================================================
- * OPENECOMP - MSO
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
+/*- + * ============LICENSE_START======================================================= + * OPENECOMP - MSO + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= */ -
-package org.openecomp.mso.bpmn.infrastructure.scripts;
+ +package org.openecomp.mso.bpmn.infrastructure.scripts; import groovy.xml.XmlUtil import groovy.json.* -import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
-import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
-import org.openecomp.mso.bpmn.core.WorkflowException
-import org.openecomp.mso.bpmn.core.json.JsonUtils
-import org.openecomp.mso.rest.APIResponse
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor +import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil +import org.openecomp.mso.bpmn.core.WorkflowException +import org.openecomp.mso.bpmn.core.json.JsonUtils +import org.openecomp.mso.rest.APIResponse import java.util.UUID; @@ -105,12 +105,12 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { utils.log("DEBUG", " 'disableRollback' : " + execution.getVariable("disableRollback") , isDebugEnabled) } - // get/set 'msoRequestId' and 'mso-request-id'
+ // get/set 'msoRequestId' and 'mso-request-id' String requestId = execution.getVariable("msoRequestId") if (requestId != null) { - execution.setVariable("mso-request-id", requestId)
+ execution.setVariable("mso-request-id", requestId) } else { - requestId = execution.getVariable("mso-request-id")
+ requestId = execution.getVariable("mso-request-id") } execution.setVariable(Prefix + "requestId", requestId) @@ -161,7 +161,7 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { utils.log("DEBUG", " ***** Inside sendSyncResponse() of CreateNetworkInstance ***** ", isDebugEnabled) try { - String requestId = execution.getVariable("mso-request-id")
+ String requestId = execution.getVariable("mso-request-id") // RESTResponse (for API Handler (APIH) Reply Task) String createNetworkRestRequest = """{"requestReferences":{"instanceId":"","requestId":"${requestId}"}}""".trim() @@ -186,14 +186,11 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { try { - // "networkModelInfo" is expected to be sent - String networkModelInfo = execution.getVariable("networkModelInfo") - utils.log("DEBUG", " networkModelInfo - " + networkModelInfo, isDebugEnabled) - - // "serviceModelInfo" is expected to be sent - String serviceModelInfo = execution.getVariable("serviceModelInfo") - utils.log("DEBUG", " serviceModelInfo - " + serviceModelInfo, isDebugEnabled) - + // For Ala-Carte (sdnc = 1610): + // 1. the Network ModelInfo is expected to be sent + // via requestDetails.modelInfo (modelType = network). + // 2. the Service ModelInfo is expected to be sent but will be IGNORE + // via requestDetails.relatedInstanceList.relatedInstance.modelInfo (modelType = service) } catch (Exception ex) { sendSyncError(execution) @@ -214,7 +211,7 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { try { - String requestId = execution.getVariable("mso-request-id")
+ String requestId = execution.getVariable("mso-request-id") // REST Error (for API Handler (APIH) Reply Task) String syncError = """{"requestReferences":{"instanceId":"","requestId":"${requestId}"}}""".trim() @@ -234,6 +231,9 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { try { utils.log("DEBUG", " ***** Inside prepareDBRequestError() of CreateNetworkInstance ***** ", isDebugEnabled) + // set DB Header Authorization + setBasicDBAuthHeader(execution, isDebugEnabled) + String statusMessage = "" WorkflowException wfe = null if (execution.getVariable("WorkflowException") instanceof WorkflowException) { @@ -248,7 +248,7 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> - <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb">
+ <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb"> <requestId>${requestId}</requestId> <lastModifiedBy>BPMN</lastModifiedBy> <statusMessage>${statusMessage}</statusMessage> @@ -280,13 +280,13 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { try { - String requestId = execution.getVariable("mso-request-id")
+ String requestId = execution.getVariable("mso-request-id") String source = execution.getVariable(Prefix + "source") String msoCompletionRequest = - """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" + xmlns:ns="http://org.openecomp/mso/request/types/v1"> + <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>CREATE</action> <source>VID</source> @@ -379,25 +379,29 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) + utils.log("DEBUG", "DB updateInfraRequest ResponseCode: " + execution.getVariable(Prefix + "dbReturnCode"), isDebugEnabled) + utils.log("DEBUG", "DB updateInfraRequest Response: " + execution.getVariable(Prefix + "createDBResponse"), isDebugEnabled) + utils.log("DEBUG", " ***** Prepare for FalloutHandler. FAILURE - prepare request for sub-process FalloutHandler. *****", isDebugEnabled) String falloutHandlerRequest = "" - String requestId = execution.getVariable("mso-request-id")
+ String requestId = execution.getVariable("mso-request-id") try { + WorkflowException wfe = execution.getVariable("WorkflowException") String errorCode = String.valueOf(wfe.getErrorCode()) String errorMessage = wfe.getErrorMessage() falloutHandlerRequest = - """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1"
- xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" + xmlns:ns="http://org.openecomp/mso/request/types/v1" + xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1"> + <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>CREATE</action> <source>VID</source> </request-info> - <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+ <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"> <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage> <aetgt:ErrorCode>${errorCode}</aetgt:ErrorCode> </aetgt:WorkflowException> @@ -408,18 +412,18 @@ public class CreateNetworkInstance extends AbstractServiceTaskProcessor { utils.log("DEBUG", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled) } catch (Exception ex) { - String errorException = " Bpmn error encountered in CreateNetworkInstance flow. FalloutHandlerRequest, buildErrorResponse() - " + ex.getMessage() - utils.log("DEBUG", errorException, isDebugEnabled) + String errorException = " Bpmn error encountered in CreateNetworkInstance flow. FalloutHandlerRequest, buildErrorResponse()" + utils.log("DEBUG", "Exception error in CreateNetworkInstance flow, buildErrorResponse(): " + ex.getMessage(), isDebugEnabled) falloutHandlerRequest = - """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1"
- xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" + xmlns:ns="http://org.openecomp/mso/request/types/v1" + xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1"> + <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>CREATE</action> <source>VID</source> </request-info> - <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+ <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"> <aetgt:ErrorMessage>${errorException}</aetgt:ErrorMessage> <aetgt:ErrorCode>7000</aetgt:ErrorCode> </aetgt:WorkflowException> diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleInfra.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleInfra.groovy index b468a5116c..74234f8d6e 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleInfra.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleInfra.groovy @@ -51,6 +51,8 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) + execution.setVariable("CVFMI_sentSyncResponse", false) + def prefix = 'CVFMI_' logDebug('Entered 1' + method, isDebugLogEnabled) execution.setVariable('prefix', prefix) @@ -71,6 +73,8 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { utils.log("DEBUG", "Incoming Infra Request: " + incomingRequest, isDebugLogEnabled) utils.logAudit("CreateVfModule Infra incoming Request: " + incomingRequest) + setBasicDBAuthHeader(execution, isDebugLogEnabled) + // check if request is xml or json try { def jsonSlurper = new JsonSlurper() @@ -156,7 +160,7 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { } } - execution.setVariable(prefix + 'disableRollback', suppressRollback) + execution.setVariable('disableRollback', suppressRollback) def vfModuleName = reqMap.requestDetails?.requestInfo?.instanceName ?: null execution.setVariable(prefix + 'vfModuleName', vfModuleName) @@ -198,9 +202,7 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { execution.setVariable("CVFMI_requestInfo", requestInfo) //backoutOnFailure - - //NetworkUtils networkUtils = new NetworkUtils() - //execution.setVariable("CVFMI_rollbackEnabled", networkUtils.isRollbackEnabled(execution,request)) + execution.setVariable("CVFMI_originalWorkflowException", null) @@ -266,6 +268,7 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { sendWorkflowResponse(execution, 200, synchResponse) + execution.setVariable("CVFMI_sentSyncResponse", true) utils.logAudit("CreateVfModule Infra Response: " + synchResponse) logDebug('Exited ' + method, isDebugLogEnabled) } catch (BpmnError e) { @@ -291,18 +294,6 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { utils.log("DEBUG", "requestInfo is: " + requestInfo, isDebugEnabled) utils.log("DEBUG", "action is: " + action, isDebugEnabled) - try {
- String basicAuthValueDB = execution.getVariable("URN_mso_adapters_db_auth")
- utils.log("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB, isDebugEnabled)
-
- def encodedString = utils.getBasicAuth(basicAuthValueDB, execution.getVariable("URN_mso_msoKey"))
- execution.setVariable("BasicAuthHeaderValueDB",encodedString)
- } catch (IOException ex) {
- String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage()
- utils.log("DEBUG", dataErrorMessage, isDebugEnabled)
- exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
- }
-
String payload = """ <aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" xmlns:ns="http://org.openecomp/mso/request/types/v1" @@ -417,22 +408,10 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { // vfModuleName may be generated by DoCreateVfModule subprocess if it is not specified on the input def vfModuleName = execution.getVariable("CVFMI_vfModuleName") - def dbAdapterEndpoint = execution.getVariable("URN_mso_adapters_db_endpoint") + def dbAdapterEndpoint = execution.getVariable("URN_mso_openecomp_adapters_db_endpoint") execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint) utils.log("DEBUG", "DB Adapter Endpoint is: " + dbAdapterEndpoint, isDebugEnabled) - try {
- String basicAuthValueDB = execution.getVariable("URN_mso_adapters_db_auth")
- utils.log("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB, isDebugEnabled)
-
- def encodedString = utils.getBasicAuth(basicAuthValueDB, execution.getVariable("URN_mso_msoKey"))
- execution.setVariable("BasicAuthHeaderValueDB",encodedString)
- } catch (IOException ex) {
- String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage()
- utils.log("DEBUG", dataErrorMessage, isDebugEnabled)
- exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
- }
-
String payload = """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://org.openecomp.mso/requestsdb"> @@ -542,7 +521,29 @@ public class CreateVfModuleInfra extends AbstractServiceTaskProcessor { } - + public void sendErrorResponse(Execution execution){ + def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + + utils.log("DEBUG", " *** STARTED CreateVfModulenfra sendErrorResponse Process *** ", isDebugEnabled) + try { + def sentSyncResponse = execution.getVariable("CVFMI_sentSyncResponse") + if(sentSyncResponse == false){ + WorkflowException wfex = execution.getVariable("WorkflowException") + String response = exceptionUtil.buildErrorResponseXml(wfex) + + utils.logAudit(response) + sendWorkflowResponse(execution, 500, response) + }else{ + utils.log("DEBUG", "Not Sending Error Response. Sync Response Already Sent", isDebugEnabled) + } + + } catch (Exception ex) { + utils.log("DEBUG", "Error Occured in CreateVfModuleInfra sendErrorResponse Process " + ex.getMessage(), isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in CreateVfModuleInfra sendErrorResponse Process") + + } + utils.log("DEBUG", "*** COMPLETED CreateVfModuleInfra sendErrorResponse Process ***", isDebugEnabled) + } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleVolumeInfraV1.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleVolumeInfraV1.groovy index 48ca2905c1..4d40938d86 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleVolumeInfraV1.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVfModuleVolumeInfraV1.groovy @@ -26,7 +26,9 @@ import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil; import org.openecomp.mso.bpmn.common.scripts.VidUtils; import org.openecomp.mso.bpmn.core.WorkflowException import org.openecomp.mso.rest.APIResponse +import java.util.Map; +import groovy.json.JsonOutput import groovy.json.JsonSlurper import org.camunda.bpm.engine.delegate.BpmnError @@ -43,6 +45,7 @@ class CreateVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { */ public void preProcessRequest (Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + setBasicDBAuthHeader(execution, isDebugEnabled) preProcessRequest(execution, isDebugEnabled) } @@ -64,47 +67,96 @@ class CreateVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { try { def jsonSlurper = new JsonSlurper() Map reqMap = jsonSlurper.parseText(createVolumeIncoming) - - def serviceInstanceId = execution.getVariable('serviceInstanceId') - def vnfId = execution.getVariable('vnfId') - - def vidUtils = new VidUtils(this) - createVolumeIncoming = vidUtils.createXmlVolumeRequest(reqMap, 'CREATE_VF_MODULE_VOL', serviceInstanceId) - - execution.setVariable(prefix+'Request', createVolumeIncoming) - execution.setVariable(prefix+'vnfId', vnfId) - execution.setVariable(prefix+'isVidRequest', true) - + setupVariables(execution, reqMap, isDebugEnabled) utils.log("DEBUG", "XML request:\n" + createVolumeIncoming, isDebugEnabled) - } catch(groovy.json.JsonException je) { (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, 'Request is not a valid JSON document') } - execution.setVariable(prefix+'source', utils.getNodeText1(createVolumeIncoming, "source")) - execution.setVariable(prefix+'volumeGroupName', utils.getNodeText1(createVolumeIncoming, 'volume-group-name')) - execution.setVariable(prefix+'volumeOutputs', utils.getNodeXml(createVolumeIncoming, 'volume-outputs', false)) - - execution.setVariable(prefix+'serviceType', 'service-instance') - execution.setVariable(prefix+'serviceInstanceId', utils.getNodeText1(createVolumeIncoming, "service-instance-id")) + // For rollback in this flow + setBasicDBAuthHeader(execution, isDebugEnabled) + setRollbackEnabled(execution, isDebugEnabled) + } - // Generate volume group id + + /** + * Set up variables that will be passed to the BB DoCreatevfModuleVolume flow + * @param execution + * @param requestMap + * @param serviceInstanceId + * @param isDebugLogEnabled + */ + public void setupVariables(Execution execution, Map requestMap, isDebugLogEnabled) { + + def jsonOutput = new JsonOutput() + + // volumeGroupId - is generated String volumeGroupId = UUID.randomUUID() - utils.log("DEBUG", "Generated volume group id: " + volumeGroupId, isDebugEnabled) + execution.setVariable('volumeGroupId', volumeGroupId) + utils.log("DEBUG", "Generated volumeGroupId: " + volumeGroupId, isDebugLogEnabled) + + // volumeGroupName + def volGrpName = requestMap.requestDetails.requestInfo?.instanceName ?: '' + execution.setVariable('volumeGroupName', volGrpName) - def testGroupId = execution.getVariable('test-volume-group-id') - if (testGroupId != null && testGroupId.trim() != '') { - volumeGroupId = testGroupId + // vfModuleModelInfo + def vfModuleModelInfo = jsonOutput.toJson(requestMap.requestDetails?.modelInfo) + execution.setVariable('vfModuleModelInfo', vfModuleModelInfo) + + // lcpCloudRegonId + def lcpCloudRegionId = requestMap.requestDetails.cloudConfiguration.lcpCloudRegionId + execution.setVariable('lcpCloudRegionId', lcpCloudRegionId) + + // tenant + def tenantId = requestMap.requestDetails.cloudConfiguration.tenantId + execution.setVariable('tenantId', tenantId) + + // source + def source = requestMap.requestDetails.requestInfo.source + execution.setVariable(prefix+'source', source) + + // vnfType and asdcServiceModelVersion + + def serviceName = '' + def asdcServiceModelVersion = '' + def modelCustomizationName = '' + + def relatedInstanceList = requestMap.requestDetails.relatedInstanceList + relatedInstanceList.each { + if (it.relatedInstance.modelInfo?.modelType == 'service') { + serviceName = it.relatedInstance.modelInfo?.modelName + asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion + } + if (it.relatedInstance.modelInfo?.modelType == 'vnf') { + modelCustomizationName = it.relatedInstance.modelInfo?.modelCustomizationName + } } + + def vnfType = serviceName + '/' + modelCustomizationName + execution.setVariable('vnfType', vnfType) + execution.setVariable('asdcServiceModelVersion', asdcServiceModelVersion) + + // vfModuleInputParams + def userParams = requestMap.requestDetails?.requestParameters?.userParams + Map<String, String> vfModuleInputMap = [:] + + userParams.each { userParam -> + vfModuleInputMap.put(userParam.name, userParam.value) + } + execution.setVariable('vfModuleInputParams', vfModuleInputMap) - execution.setVariable(prefix+'volumeGroupId', volumeGroupId) - + // disableRollback (true or false) + def disableRollback = requestMap.requestDetails.requestInfo.suppressRollback + execution.setVariable('disableRollback', disableRollback) + utils.log("DEBUG", 'disableRollback (suppressRollback) from request: ' + disableRollback, isDebugLogEnabled) + } - + + public void sendSyncResponse (Execution execution, isDebugEnabled) { - def volumeGroupId = execution.getVariable(prefix+'volumeGroupId') + def volumeGroupId = execution.getVariable('volumeGroupId') def requestId = execution.getVariable("mso-request-id") def serviceInstanceId = execution.getVariable("serviceInstanceId") @@ -137,24 +189,17 @@ class CreateVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { } + /** + * Build Infra DB Request + * @param execution + * @param isDebugEnabled + */ public void prepareDbInfraSuccessRequest(Execution execution, isDebugEnabled) { def dbVnfOutputs = execution.getVariable(prefix+'volumeOutputs') def requestId = execution.getVariable('mso-request-id') def statusMessage = "VolumeGroup successfully created." def requestStatus = "COMPLETED" def progress = "100" - - try { - String basicAuthValueDB = execution.getVariable("URN_mso_adapters_db_auth") - utils.log("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB, isDebugEnabled) - - def encodedString = utils.getBasicAuth(basicAuthValueDB, execution.getVariable("URN_mso_msoKey")) - execution.setVariable("BasicAuthHeaderValueDB",encodedString) - } catch (IOException ex) { - String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage() - utils.log("DEBUG", dataErrorMessage, isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) - } /* from: $gVolumeGroup/aai:volume-group-id/text() @@ -180,16 +225,18 @@ class CreateVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { </soapenv:Body> </soapenv:Envelope>""" - String buildDeleteDBRequestAsString = utils.formatXml(dbRequest) - execution.setVariable(prefix+"createDBRequest", buildDeleteDBRequestAsString) - - utils.logAudit(buildDeleteDBRequestAsString) + String buildDBRequestAsString = utils.formatXml(dbRequest) + execution.setVariable(prefix+"createDBRequest", buildDBRequestAsString) + utils.log("DEBUG", "DB Infra Request: " + buildDBRequestAsString, isDebugEnabled) + utils.logAudit(buildDBRequestAsString) } - - - + /** + * Build CommpleteMsoProcess request + * @param execution + * @param isDebugEnabled + */ public void postProcessResponse (Execution execution, isDebugEnabled) { def dbReturnCode = execution.getVariable(prefix+'dbReturnCode') @@ -300,4 +347,17 @@ class CreateVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { } } } + + public void logAndSaveOriginalException(Execution execution, isDebugLogEnabled) { + logWorkflowException(execution, 'CreateVfModuleVolumeInfraV1 caught an event') + saveWorkflowException(execution, 'CVMVINFRAV1_originalWorkflowException') + } + + public void validateRollbackResponse(Execution execution, isDebugLogEnabled) { + + def originalException = execution.getVariable("CVMVINFRAV1_originalWorkflowException") + execution.setVariable("WorkflowException", originalException) + execution.setVariable("RollbackCompleted", true) + + } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVnfInfra.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVnfInfra.groovy index 9b7fd6835c..311c1c727a 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVnfInfra.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVnfInfra.groovy @@ -26,6 +26,9 @@ import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.runtime.Execution; import static org.apache.commons.lang3.StringUtils.*; +import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils; +import org.json.JSONObject; +import org.json.JSONArray; import org.openecomp.mso.bpmn.common.scripts.AaiUtil; import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor; @@ -33,6 +36,7 @@ import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil; import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils; import org.openecomp.mso.bpmn.common.scripts.VidUtils; import org.openecomp.mso.bpmn.core.WorkflowException +import org.openecomp.mso.bpmn.core.domain.VnfResource import org.openecomp.mso.bpmn.core.json.JsonUtils; @@ -47,6 +51,7 @@ class CreateVnfInfra extends AbstractServiceTaskProcessor { ExceptionUtil exceptionUtil = new ExceptionUtil() JsonUtils jsonUtil = new JsonUtils() VidUtils vidUtils = new VidUtils(this) + CatalogDbUtils cutils = new CatalogDbUtils() /** * This method gets and validates the incoming @@ -59,7 +64,8 @@ class CreateVnfInfra extends AbstractServiceTaskProcessor { def isDebugEnabled = execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " *** STARTED CreateVnfInfra PreProcessRequest Process*** ", isDebugEnabled) - + + setBasicDBAuthHeader(execution, isDebugEnabled) execution.setVariable("CREVI_sentSyncResponse", false) try{ @@ -101,7 +107,7 @@ class CreateVnfInfra extends AbstractServiceTaskProcessor { def vnfModelInfo = jsonUtil.getJsonValue(createVnfRequest, "requestDetails.modelInfo") execution.setVariable("CREVI_vnfModelInfo", vnfModelInfo) - String modelInvariantId = jsonUtil.getJsonValue(createVnfRequest, "requestDetails.modelInfo.modelInvariantId") + String modelInvariantId = jsonUtil.getJsonValue(createVnfRequest, "requestDetails.modelInfo.modelInvariantUuid") execution.setVariable("CREVI_modelInvariantId", modelInvariantId) utils.log("DEBUG", "Incoming Invariant Id is: " + modelInvariantId, isDebugEnabled) @@ -157,7 +163,13 @@ class CreateVnfInfra extends AbstractServiceTaskProcessor { } execution.setVariable("CREVI_sdncCallbackUrl", sdncCallbackUrl) - def vnfInputParameters = jsonUtil.getJsonValue(createVnfRequest, "requestParameters.userParams") + def vnfInputParameters = null + try { + vnfInputParameters = jsonUtil.getJsonValue(createVnfRequest, "requestDetails.requestParameters.userParams") + } + catch (Exception e) { + utils.log("DEBUG", "userParams are not present in the request", isDebugEnabled) + } execution.setVariable("CREVI_vnfInputParameters", vnfInputParameters) @@ -429,4 +441,56 @@ class CreateVnfInfra extends AbstractServiceTaskProcessor { utils.log("DEBUG", "*** COMPLETED CreateVnfInfra prepareFalloutRequest Process ***", isDebugEnabled) } + + public void queryCatalogDB (Execution execution) { + def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + execution.setVariable("prefix",Prefix) + + utils.log("DEBUG", " *** STARTED CreateVnfInfra QueryCatalogDB Process *** ", isDebugEnabled) + try { + //Get Vnf Info + String vnfModelInfo = execution.getVariable("CREVI_vnfModelInfo") + String vnfModelCustomizationUuid = jsonUtil.getJsonValueForKey(vnfModelInfo, "modelCustomizationUuid") + utils.log("DEBUG", "querying Catalog DB by vnfModelCustomizationUuid: " + vnfModelCustomizationUuid, isDebugEnabled) + + JSONArray vnfs = cutils.getAllVnfsByVnfModelCustomizationUuid(execution, + vnfModelCustomizationUuid, "v2") + utils.log("DEBUG", "obtained VNF list: " + vnfs, isDebugEnabled) + execution.setVariable("CREVI_vnfs", vnfs) + + if (vnfs == null) { + utils.log("ERROR", "No matching VNFs in Catalog DB for vnfModelCustomizationUuid=" + vnfModelCustomizationUuid, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "No matching VNFs in Catalog DB for vnfModelCustomizationUuid=" + vnfModelCustomizationUuid) + } + + // Only one match here + JSONObject vnf = vnfs.get(0) + + if (vnf == null) { + utils.log("ERROR", "No matching VNF in Catalog DB for vnfModelCustomizationUuid=" + vnfModelCustomizationUuid, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "No matching VNF in Catalog DB for vnfModelCustomizationUuid=" + vnfModelCustomizationUuid) + } + + VnfResource vnfResource = new VnfResource() + String nfType = jsonUtil.getJsonValueForKey(vnf, "nfType") + vnfResource.setNfType(nfType) + String nfRole = jsonUtil.getJsonValueForKey(vnf, "nfRole") + vnfResource.setNfRole(nfRole) + String nfFunction = jsonUtil.getJsonValueForKey(vnf, "nfFunction") + vnfResource.setNfFunction(nfFunction) + String nfNamingCode = jsonUtil.getJsonValueForKey(vnf, "nfNamingCode") + vnfResource.setNfNamingCode(nfNamingCode) + + execution.setVariable("CREVI_vnfResourceDecomposition", vnfResource) + + }catch(BpmnError e) { + throw e; + }catch(Exception ex) { + utils.log("DEBUG", "Error Occurred in CreateVnfInfra QueryCatalogDB Process " + ex.getMessage(), isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occurred in CreateVnfInfra QueryCatalogDB Process") + } + + + utils.log("DEBUG", "*** COMPLETED CreateVnfInfra QueryCatalogDb Process ***", isDebugEnabled) + } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteGenericALaCarteServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteGenericALaCarteServiceInstance.groovy index 7555885bcb..c3aadaf61e 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteGenericALaCarteServiceInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteGenericALaCarteServiceInstance.groovy @@ -126,6 +126,27 @@ public class DeleteGenericALaCarteServiceInstance extends AbstractServiceTaskPro } else { execution.setVariable("subscriptionServiceType", subscriptionServiceType) } + + /* + * Extracting User Parameters from incoming Request and converting into a Map + */ + def jsonSlurper = new JsonSlurper() + def jsonOutput = new JsonOutput() + + Map reqMap = jsonSlurper.parseText(siRequest) + + //InputParams + def userParams = reqMap.requestDetails?.requestParameters?.userParams + + Map<String, String> inputMap = [:] + if (userParams) { + userParams.each { + userParam -> inputMap.put(userParam.name, userParam.value) + } + } + + utils.log("DEBUG", "User Input Parameters map: " + userParams.toString(), isDebugEnabled) + execution.setVariable("serviceInputParams", inputMap) } catch (BpmnError e) { throw e; @@ -171,7 +192,7 @@ public class DeleteGenericALaCarteServiceInstance extends AbstractServiceTaskPro } String buildworkflowException = - """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+ """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"> <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage> <aetgt:ErrorCode>7000</aetgt:ErrorCode> </aetgt:WorkflowException>""" @@ -193,9 +214,9 @@ public class DeleteGenericALaCarteServiceInstance extends AbstractServiceTaskPro String requestId = execution.getVariable("msoRequestId") String source = execution.getVariable("source") String msoCompletionRequest = - """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" + xmlns:ns="http://org.openecomp/mso/request/types/v1"> + <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>DELETE</action> <source>${source}</source> @@ -228,7 +249,7 @@ public class DeleteGenericALaCarteServiceInstance extends AbstractServiceTaskPro String requestId = execution.getVariable("msoRequestId") String source = execution.getVariable("source") String requestInfo = - """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>DELETE</action> <source>${source}</source> @@ -241,15 +262,15 @@ public class DeleteGenericALaCarteServiceInstance extends AbstractServiceTaskPro String errorException = " Bpmn error encountered in CreateServiceInstance flow. FalloutHandlerRequest, buildErrorResponse() - " + ex.getMessage() String requestId = execution.getVariable("msoRequestId") String falloutRequest = - """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
- xmlns:ns="http://org.openecomp/mso/request/types/v1"
- xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1">
- <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" + xmlns:ns="http://org.openecomp/mso/request/types/v1" + xmlns:wfsch="http://org.openecomp/mso/workflow/schema/v1"> + <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> <request-id>${requestId}</request-id> <action>DELETE</action> <source>VID</source> </request-info> - <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+ <aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"> <aetgt:ErrorMessage>${errorException}</aetgt:ErrorMessage> <aetgt:ErrorCode>7000</aetgt:ErrorCode> </aetgt:WorkflowException> @@ -279,7 +300,7 @@ public class DeleteGenericALaCarteServiceInstance extends AbstractServiceTaskPro """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> - <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb">
+ <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb"> <requestId>${requestId}</requestId> <lastModifiedBy>BPMN</lastModifiedBy> <statusMessage>${statusMessage}</statusMessage> @@ -328,7 +349,7 @@ public class DeleteGenericALaCarteServiceInstance extends AbstractServiceTaskPro """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Header/> <soapenv:Body> - <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb">
+ <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb"> <requestId>${requestId}</requestId> <lastModifiedBy>BPMN</lastModifiedBy> <statusMessage>${statusMessage}</statusMessage> diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteGenericMacroServiceNetworkVnf.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteGenericMacroServiceNetworkVnf.groovy deleted file mode 100644 index 108f8d3751..0000000000 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteGenericMacroServiceNetworkVnf.groovy +++ /dev/null @@ -1,468 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * OPENECOMP - MSO - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ -package org.openecomp.mso.bpmn.infrastructure.scripts; - -import groovy.xml.XmlUtil -import groovy.json.* - -import org.openecomp.mso.bpmn.core.json.JsonUtils -import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor -import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils -import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil -import org.openecomp.mso.bpmn.common.scripts.NetworkUtils -import org.openecomp.mso.bpmn.common.scripts.VidUtils -import org.openecomp.mso.bpmn.core.WorkflowException -import org.openecomp.mso.rest.APIResponse; - - -import java.util.UUID; - -import org.camunda.bpm.engine.delegate.BpmnError -import org.camunda.bpm.engine.runtime.Execution -import org.json.JSONObject; -import org.json.JSONArray; -import org.apache.commons.lang3.* -import org.apache.commons.codec.binary.Base64; -import org.springframework.web.util.UriUtils; - -/** - * This groovy class supports the <class>DeleteViprAtmService.bpmn</class> process. - * - */ -public class DeleteGenericMacroServiceNetworkVnf extends AbstractServiceTaskProcessor { - - String Prefix="DELVAS_" - ExceptionUtil exceptionUtil = new ExceptionUtil() - JsonUtils jsonUtil = new JsonUtils() - VidUtils vidUtils = new VidUtils() - CatalogDbUtils catalogDbUtils = new CatalogDbUtils() - NetworkUtils networkUtils = new NetworkUtils() - - /** - * This method is executed during the preProcessRequest task of the <class>DeleteGenericMacroServiceNetworkVnf.bpmn</class> process. - * @param execution - */ - public InitializeProcessVariables(Execution execution){ - /* Initialize all the process variables in this block */ - - execution.setVariable("DeleteGenericMacroServiceNetworkVnfRequest", "") - execution.setVariable("msoRequestId", "") - execution.setVariable("DELVAS_vnfsDeletedCount", 0) - execution.setVariable("DELVAS_vnfsCount", 0) - execution.setVariable("DELVAS_networksCount", 0) - execution.setVariable("DELVAS_networksDeletedCount", 0) - } - - // ************************************************** - // Pre or Prepare Request Section - // ************************************************** - /** - * This method is executed during the preProcessRequest task of the <class>CreateServiceInstance.bpmn</class> process. - * @param execution - */ - public void preProcessRequest (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - execution.setVariable("prefix",Prefix) - - utils.log("DEBUG", " ***** Inside preProcessRequest DeleteGenericMacroServiceNetworkVnf Request ***** ", isDebugEnabled) - - try { - // initialize flow variables - InitializeProcessVariables(execution) - - // check for incoming json message/input - String DeleteGenericMacroServiceNetworkVnfRequest = execution.getVariable("bpmnRequest") - utils.logAudit(DeleteGenericMacroServiceNetworkVnfRequest) - execution.setVariable("DeleteGenericMacroServiceNetworkVnfRequest", DeleteGenericMacroServiceNetworkVnfRequest); - println 'DeleteGenericMacroServiceNetworkVnfRequest - ' + DeleteGenericMacroServiceNetworkVnfRequest - - // extract requestId - String requestId = execution.getVariable("mso-request-id") - execution.setVariable("msoRequestId", requestId) - - String serviceInstanceId = execution.getVariable("serviceInstanceId") - if ((serviceInstanceId == null) || (serviceInstanceId.isEmpty())) { - String dataErrorMessage = " Element 'serviceInstanceId' is missing. " - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) - } - - String requestAction = execution.getVariable("requestAction") - execution.setVariable("requestAction", requestAction) - - String source = jsonUtil.getJsonValue(DeleteGenericMacroServiceNetworkVnfRequest, "requestDetails.requestInfo.source") - if ((source == null) || (source.isEmpty())) { - execution.setVariable("source", "VID") - } else { - execution.setVariable("source", source) - } - - // extract globalSubscriberId - String globalSubscriberId = jsonUtil.getJsonValue(DeleteGenericMacroServiceNetworkVnfRequest, "requestDetails.subscriberInfo.globalSubscriberId") - - // global-customer-id is optional on Delete - - execution.setVariable("globalSubscriberId", globalSubscriberId) - execution.setVariable("globalCustomerId", globalSubscriberId) - - String suppressRollback = jsonUtil.getJsonValue(DeleteGenericMacroServiceNetworkVnfRequest, "requestDetails.requestInfo.suppressRollback") - execution.setVariable("disableRollback", suppressRollback) - utils.log("DEBUG", "Incoming Suppress/Disable Rollback is: " + suppressRollback, isDebugEnabled) - - String productFamilyId = jsonUtil.getJsonValue(DeleteGenericMacroServiceNetworkVnfRequest, "requestDetails.requestInfo.productFamilyId") - execution.setVariable("productFamilyId", productFamilyId) - utils.log("DEBUG", "Incoming productFamilyId is: " + productFamilyId, isDebugEnabled) - - // extract subscriptionServiceType - String subscriptionServiceType = jsonUtil.getJsonValue(DeleteGenericMacroServiceNetworkVnfRequest, "requestDetails.requestParameters.subscriptionServiceType") - execution.setVariable("subscriptionServiceType", subscriptionServiceType) - utils.log("DEBUG", "Incoming subscriptionServiceType is: " + subscriptionServiceType, isDebugEnabled) - - // extract cloud configuration - String lcpCloudRegionId = jsonUtil.getJsonValue(DeleteGenericMacroServiceNetworkVnfRequest, "requestDetails.cloudConfiguration.lcpCloudRegionId") - execution.setVariable("lcpCloudRegionId", lcpCloudRegionId) - utils.log("DEBUG","lcpCloudRegionId: "+ lcpCloudRegionId, isDebugEnabled) - String tenantId = jsonUtil.getJsonValue(DeleteGenericMacroServiceNetworkVnfRequest, "requestDetails.cloudConfiguration.tenantId") - execution.setVariable("tenantId", tenantId) - utils.log("DEBUG","tenantId: "+ tenantId, isDebugEnabled) - - String sdncVersion = "1707" - execution.setVariable("sdncVersion", sdncVersion) - utils.log("DEBUG","sdncVersion: "+ sdncVersion, isDebugEnabled) - - //For Completion Handler & Fallout Handler - String requestInfo = - """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> - <request-id>${requestId}</request-id> - <action>DELETE</action> - <source>${source}</source> - </request-info>""" - - execution.setVariable("DELVAS_requestInfo", requestInfo) - - //Setting for Generic Sub Flows - execution.setVariable("GENGS_type", "service-instance") - - utils.log("DEBUG", " ***** Completed preProcessRequest DeleteGenericMacroServiceNetworkVnf Request ***** ", isDebugEnabled) - - } catch (BpmnError e) { - throw e; - } catch (Exception ex){ - String exceptionMessage = "Bpmn error encountered in DeleteGenericMacroServiceNetworkVnf flow. Unexpected from method preProcessRequest() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - public void sendSyncResponse (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - utils.log("DEBUG", " ***** Inside sendSyncResponse of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - try { - String serviceInstanceId = execution.getVariable("serviceInstanceId") - String requestId = execution.getVariable("mso-request-id") - - // RESTResponse (for API Handler (APIH) Reply Task) - String syncResponse ="""{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim() - - utils.log("DEBUG", " sendSynchResponse: xmlSyncResponse - " + "\n" + syncResponse, isDebugEnabled) - sendWorkflowResponse(execution, 202, syncResponse) - } catch (Exception ex) { - String exceptionMessage = "Bpmn error encountered in DeleteGenericMacroServiceNetworkVnf flow. Unexpected from method sendSyncResponse() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - public void prepareServiceInstanceDelete (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - utils.log("DEBUG", " ***** Inside prepareServiceInstanceDelete() of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - try { - - String serviceInstanceId = execution.getVariable("serviceInstanceId") - - // confirm if ServiceInstance was found - if ( !execution.getVariable("GENGS_FoundIndicator") ) - { - String exceptionMessage = "Bpmn error encountered in DeleteGenericMacroServiceNetworkVnf flow. Service Instance was not found in AAI by id: " + serviceInstanceId - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - - // get variable within incoming json - String DeleteGenericMacroServiceNetworkVnfRequest = execution.getVariable("DeleteGenericMacroServiceNetworkVnfRequest"); - - // get SI extracted by GenericGetService - String serviceInstanceAaiRecord = execution.getVariable("GENGS_service"); - - utils.log("DEBUG", "serviceInstanceAaiRecord: "+serviceInstanceAaiRecord, isDebugEnabled) - - String relationship = "" - try { - relationship = networkUtils.getFirstNodeXml(serviceInstanceAaiRecord, "relationship-list") - } catch (Exception ex) { - //no relationships found - } - utils.log("DEBUG", " relationship string - " + relationship, isDebugEnabled) - - int vnfsCount = 0 - int networksCount = 0 - - if (relationship != null && relationship.length() > 0){ - relationship = relationship.trim().replace("tag0:","").replace(":tag0","") - - // Check if Network TableREf is present, then build a List of network policy - List relatedVnfIdList = networkUtils.getRelatedVnfIdList(relationship) - vnfsCount = relatedVnfIdList.size() - execution.setVariable("DELVAS_vnfsCount", vnfsCount) - utils.log("DEBUG", " DELVAS_vnfsCount : " + vnfsCount, isDebugEnabled) - execution.setVariable("DELVAS_relatedVnfIdList", relatedVnfIdList) - - // Check if Network TableREf is present, then build a List of network policy - List relatedNetworkIdList = networkUtils.getRelatedNetworkIdList(relationship) - networksCount = relatedNetworkIdList.size() - execution.setVariable("DELVAS_networksCount", networksCount) - utils.log("DEBUG", " DELVAS_networksCount : " + networksCount, isDebugEnabled) - execution.setVariable("DELVAS_relatedNetworkIdList", relatedNetworkIdList) - } else { - execution.setVariable("DELVAS_vnfsCount", 0) - utils.log("DEBUG", " DELVAS_vnfsCount : " + vnfsCount, isDebugEnabled) - execution.setVariable("DELVAS_networksCount", 0) - utils.log("DEBUG", " DELVAS_networksCount : " + networksCount, isDebugEnabled) - } - - utils.log("DEBUG", " ***** Completed prepareServiceInstanceDelete() of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - sendSyncError(execution) - String exceptionMessage = "Bpmn error encountered in DeleteGenericMacroServiceNetworkVnf flow. prepareServiceInstanceDelete() - " + ex.getMessage() - utils.log("DEBUG", exceptionMessage, isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - - // ******************************* - // - // ******************************* - public void prepareVnfAndModulesDelete (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside prepareVnfAndModulesDelete of DeleteServiceInstanceMacro ***** ", isDebugEnabled) - - List vnfList = execution.getVariable("DELVAS_relatedVnfIdList") - Integer vnfsDeletedCount = execution.getVariable("DELVAS_vnfsDeletedCount") - String vnfModelInfoString = "" - String vnfId = "" - if (vnfList.size() > 0 ) { - vnfId = vnfList.get(vnfsDeletedCount.intValue()) - } - - execution.setVariable("vnfId", vnfId) - utils.log("DEBUG", "need to delete vnfId:" + vnfId, isDebugEnabled) - - utils.log("DEBUG", " ***** Completed prepareVnfAndModulesDelete of DeleteServiceInstanceMacro ***** ", isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in DeleteServiceInstanceMacro flow. Unexpected Error from method prepareVnfAndModulesDelete() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Validate Vnf request Section -> increment count - // ******************************* - public void validateVnfDelete (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside validateVnfDelete of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - String vnfsDeletedCount = execution.getVariable("DELVAS_vnfsDeletedCount") - vnfsDeletedCount++ - - execution.setVariable("DELVAS_vnfsDeletedCount", vnfsDeletedCount) - - utils.log("DEBUG", " ***** Completed validateVnfDelete of DeleteGenericMacroServiceNetworkVnf ***** "+" vnf # "+vnfsDeletedCount, isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in DeleteGenericMacroServiceNetworkVnf flow. Unexpected Error from method validateVnfDelete() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Generate Network request Section - // ******************************* - public void prepareNetworkDelete (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside prepareNetworkDelete of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - List networkList = execution.getVariable("DELVAS_relatedNetworkIdList") - Integer networksDeletedCount = execution.getVariable("DELVAS_networksDeletedCount") - - String networkId = "" - if (networkList.size() > 0) { - networkId = networkList.get(networksDeletedCount.intValue()) - } - - execution.setVariable("networkId", networkId) - utils.log("DEBUG", "need to delete networkId:" + networkId, isDebugEnabled) - - utils.log("DEBUG", " ***** Completed prepareNetworkDelete of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = q"Bpmn error encountered in DeleteGenericMacroServiceNetworkVnf flow. Unexpected Error from method prepareNetworkDelete() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - // ******************************* - // Validate Network request Section - // ******************************* - public void validateNetworkDelete (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - - try { - utils.log("DEBUG", " ***** Inside validateNetworkDelete of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - Integer networksDeletedCount = execution.getVariable("DELVAS_networksDeletedCount") - networksDeletedCount++ - - execution.setVariable("DELVAS_networksDeletedCount", networksDeletedCount) - - utils.log("DEBUG", " ***** Completed validateNetworkDelete of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in DeleteGenericMacroServiceNetworkVnf flow. Unexpected Error from method validateNetworkDelete() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - - // ***************************************** - // Prepare Completion request Section - // ***************************************** - public void postProcessResponse (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - utils.log("DEBUG", " ***** Inside postProcessResponse of DeleteGenericMacroServiceNetworkVnf ***** ", isDebugEnabled) - - try { - String source = execution.getVariable("source") - String requestId = execution.getVariable("msoRequestId") - - String msoCompletionRequest = - """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" - xmlns:ns="http://org.openecomp/mso/request/types/v1"> - <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> - <request-id>${requestId}</request-id> - <action>DELETE</action> - <source>${source}</source> - </request-info> - <aetgt:status-message>vIPR ATM Service Instance has been deleted successfully.</aetgt:status-message> - <aetgt:mso-bpel-name>BPMN Service Instance macro action: DELETE</aetgt:mso-bpel-name> - </aetgt:MsoCompletionRequest>""" - - // Format Response - String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest) - - utils.logAudit(xmlMsoCompletionRequest) - execution.setVariable("DELVAS_Success", true) - execution.setVariable("DELVAS_CompleteMsoProcessRequest", xmlMsoCompletionRequest) - utils.log("DEBUG", " SUCCESS flow, going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled) - } catch (BpmnError e) { - throw e; - - } catch (Exception ex) { - // try error in method block - String exceptionMessage = "Bpmn error encountered in DeleteServiceInstance flow. Unexpected Error from method postProcessResponse() - " + ex.getMessage() - exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage) - } - } - - public void prepareFalloutRequest(Execution execution){ - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - utils.log("DEBUG", " *** STARTED DeleteGenericMacroServiceNetworkVnf prepareFalloutRequest Process *** ", isDebugEnabled) - - try { - WorkflowException wfex = execution.getVariable("WorkflowException") - utils.log("DEBUG", " Incoming Workflow Exception: " + wfex.toString(), isDebugEnabled) - String requestInfo = execution.getVariable("DELVAS_requestInfo") - utils.log("DEBUG", " Incoming Request Info: " + requestInfo, isDebugEnabled) - - String falloutRequest = exceptionUtil.processMainflowsBPMNException(execution, requestInfo) - - execution.setVariable("DELVAS_falloutRequest", falloutRequest) - } catch (Exception ex) { - utils.log("DEBUG", "Error Occured in DeleteGenericMacroServiceNetworkVnf prepareFalloutRequest Process " + ex.getMessage(), isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DeleteGenericMacroServiceNetworkVnf prepareFalloutRequest Process") - } - utils.log("DEBUG", "*** COMPLETED DeleteGenericMacroServiceNetworkVnf prepareFalloutRequest Process ***", isDebugEnabled) - } - - - public void sendSyncError (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - utils.log("DEBUG", " ***** Inside sendSyncError() of DeleteServiceInstanceInfra ***** ", isDebugEnabled) - - try { - String errorMessage = "" - if (execution.getVariable("WorkflowException") instanceof WorkflowException) { - WorkflowException wfe = execution.getVariable("WorkflowException") - errorMessage = wfe.getErrorMessage() - } else { - errorMessage = "Sending Sync Error." - } - - String buildworkflowException = - """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"> - <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage> - <aetgt:ErrorCode>7000</aetgt:ErrorCode> - </aetgt:WorkflowException>""" - - utils.logAudit(buildworkflowException) - sendWorkflowResponse(execution, 500, buildworkflowException) - } catch (Exception ex) { - utils.log("DEBUG", " Sending Sync Error Activity Failed. " + "\n" + ex.getMessage(), isDebugEnabled) - } - } - - public void processJavaException(Execution execution){ - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - execution.setVariable("prefix",Prefix) - try{ - utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled) - utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled) - utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled) - execution.setVariable("DELVAS_unexpectedError", "Caught a Java Lang Exception") // Adding this line temporarily until this flows error handling gets updated - exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Caught a Java Lang Exception") - }catch(BpmnError b){ - utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugEnabled) - throw b - }catch(Exception e){ - utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled) - execution.setVariable("DELVAS_unexpectedError", "Exception in processJavaException method") // Adding this line temporarily until this flows error handling gets updated - exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception in processJavaException method") - } - utils.log("DEBUG", "Completed processJavaException Method", isDebugEnabled) - } - - -}
\ No newline at end of file diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteNetworkInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteNetworkInstance.groovy index e18af172de..b8629c39f8 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteNetworkInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteNetworkInstance.groovy @@ -153,10 +153,11 @@ public class DeleteNetworkInstance extends AbstractServiceTaskProcessor { try { - // "networkModelInfo" is expected to be sent - String networkModelInfo = execution.getVariable("networkModelInfo") - utils.log("DEBUG", " networkModelInfo - " + networkModelInfo, isDebugEnabled) - + // For Ala-Carte (sdnc = 1610): + // 1. the Network ModelInfo is expected to be sent + // via requestDetails.modelInfo (modelType = network), ex: modelCustomizationId. + // 2. the Service ModelInfo is expected to be sent but will be IGNORE + // via requestDetails.relatedInstanceList.relatedInstance.modelInfo (modelType = service) } catch (Exception ex) { sendSyncError(execution) @@ -241,7 +242,10 @@ public class DeleteNetworkInstance extends AbstractServiceTaskProcessor { try { utils.log("DEBUG", " ***** Inside prepareDBRequestError of DeleteNetworkInstance ***** ", isDebugEnabled) - + + // set DB Header Authorization + setBasicDBAuthHeader(execution, isDebugEnabled) + WorkflowException wfe = execution.getVariable("WorkflowException") String statusMessage = wfe.getErrorMessage() String requestId = execution.getVariable(Prefix +"requestId") diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleInfra.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleInfra.groovy index f8b3b4739f..021cdbb4c5 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleInfra.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleInfra.groovy @@ -110,18 +110,7 @@ public class DeleteVfModuleInfra extends AbstractServiceTaskProcessor { utils.log("DEBUG", " Request in XML format: " + requestInXmlFormat, isDebugLogEnabled) - try { - // Catalog DB headers Authorization - String basicAuthValueDB = execution.getVariable("URN_mso_adapters_db_auth") - utils.log("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB, isDebugLogEnabled) - - def encodedString = utils.getBasicAuth(basicAuthValueDB, execution.getVariable("URN_mso_msoKey")) - execution.setVariable("BasicAuthHeaderValueDB",encodedString) - } catch (IOException ex) { - String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage() - utils.log("DEBUG", dataErrorMessage, isDebugLogEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage) - } + setBasicDBAuthHeader(execution, isDebugLogEnabled) execution.setVariable(prefix + 'Request', requestInXmlFormat) execution.setVariable(prefix+'vnfId', vnfId) diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1.groovy index 7bda7b4fe3..547b5f3bb6 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DeleteVfModuleVolumeInfraV1.groovy @@ -132,18 +132,7 @@ public class DeleteVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { execution.setVariable('DELVfModVol_volumeParams', utils.getNodeXml(request, 'volume-params'))
execution.setVariable('DELVfModVol_cloudRegion', utils.getNodeText1(request, 'aic-cloud-region'))
- try {
- // Catalog DB headers Authorization
- String basicAuthValueDB = execution.getVariable("URN_mso_adapters_db_auth")
- utils.log("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB, isDebugLogEnabled)
-
- def encodedString = utils.getBasicAuth(basicAuthValueDB, execution.getVariable("URN_mso_msoKey"))
- execution.setVariable("BasicAuthHeaderValueDB",encodedString)
- } catch (IOException ex) {
- String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage()
- utils.log("DEBUG", dataErrorMessage, isDebugLogEnabled)
- exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
- }
+ setBasicDBAuthHeader(execution, isDebugLogEnabled)
logDebug('Request: ' + createVolumeIncoming, isDebugLogEnabled)
}
@@ -436,7 +425,7 @@ public class DeleteVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { public void prepareDBRequest (Execution execution, isDebugLogEnabled) {
WorkflowException workflowExceptionObj = execution.getVariable("WorkflowException")
-
+ ExceptionUtil exceptionUtil = new ExceptionUtil();
def requestId = execution.getVariable('DELVfModVol_requestId')
def volOutputs = execution.getVariable('DELVfModVol_volumeOutputs')
def statusMessage = "VolumeGroup successfully deleted"
@@ -450,7 +439,7 @@ public class DeleteVfModuleVolumeInfraV1 extends AbstractServiceTaskProcessor { requestStatus = "FAILURE"
progress = ""
}
-
+
String updateInfraRequest = """
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:req="http://org.openecomp.mso/requestsdb">
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy index d221d0622b..53c878dc22 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateNetworkInstance.groovy @@ -448,7 +448,7 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { // get variables String networkId = "" String assignSDNCResponse = execution.getVariable(Prefix + "assignSDNCResponse") - if (execution.getVariable("sdncVersion") == "1702") { + if (execution.getVariable("sdncVersion") != "1610") { String networkResponseInformation = "" try { networkResponseInformation = utils.getNodeXml(assignSDNCResponse, "network-response-information", false).replace("tag0:","").replace(":tag0","") @@ -655,9 +655,9 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { if (aai_uri == null || aai_uri == "") { // using value of 'related-link' from response if (vpnBindingUri[i].charAt(vpnBindingUri[i].length()-1) == '/') { - queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i].substring(0, vpnBindingUri[i].length()-1) + queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i].substring(0, vpnBindingUri[i].length()-1) + "?depth=all" } else { - queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i] + queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i] + "?depth=all" } } else { @@ -666,7 +666,7 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { if (vpnBindingId.charAt(vpnBindingId.length()-1) == '/') { vpnBindingId = vpnBindingId.substring(0, vpnBindingId.length()-1) } - queryVpnBindingAAIRequest = "${aai_endpoint}${aai_uri}/" + vpnBindingId + queryVpnBindingAAIRequest = "${aai_endpoint}${aai_uri}/" + vpnBindingId + "?depth=all" } utils.logAudit(queryVpnBindingAAIRequest) @@ -789,9 +789,9 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { if (aai_uri == null || aai_uri == "") { // using value of 'related-link' from response if (networkPolicyUriList[i].charAt(networkPolicyUriList[i].length()-1) == '/') { - queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i].substring(0, networkPolicyUriList[i].length()-1) + queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i].substring(0, networkPolicyUriList[i].length()-1) + "?depth=all" } else { - queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i] + queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i] + "?depth=all" } } else { // using uri value in URN mapping @@ -800,7 +800,7 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { if (networkPolicyId.charAt(networkPolicyId.length()-1) == '/') { networkPolicyId = networkPolicyId.substring(0, networkPolicyId.length()-1) } - queryNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + networkPolicyId + queryNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + networkPolicyId + "?depth=all" } @@ -925,9 +925,9 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { if (aai_uri == null || aai_uri == "") { // using value of 'related-link' from response if (networkTableRefUriList[i].charAt(networkTableRefUriList[i].length()-1) == '/') { - queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i].substring(0, networkTableRefUriList[i].length()-1) + queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i].substring(0, networkTableRefUriList[i].length()-1) + "?depth=all" } else { - queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i] + queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i] + "?depth=all" } } else { // using uri value in URN mapping @@ -936,7 +936,7 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { if (networkTableRefId.charAt(networkTableRefId.length()-1) == '/') { networkTableRefId = networkTableRefId.substring(0, networkTableRefId.length()-1) } - queryNetworkTableRefAAIRequest = "${aai_endpoint}${aai_uri}/" + networkTableRefId + queryNetworkTableRefAAIRequest = "${aai_endpoint}${aai_uri}/" + networkTableRefId + "?depth=all" } @@ -1236,7 +1236,7 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { String serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId") // 1. prepare assign topology via SDNC Adapter SUBFLOW call - String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "ActivateNetworkInstance", cloudRegionId, networkId, null) + String sndcTopologyCreateRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, createNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null) String sndcTopologyCreateRequesAsString = utils.formatXml(sndcTopologyCreateRequest) utils.logAudit(sndcTopologyCreateRequesAsString) @@ -1598,7 +1598,7 @@ public class DoCreateNetworkInstance extends AbstractServiceTaskProcessor { try { - if (execution.getVariable("sdncVersion") == '1702') { + if (execution.getVariable("sdncVersion") != '1610') { prepareRpcSDNCRollbackRequest(execution) prepareRpcSDNCActivateRollback(execution) } else { diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy index 9f28db727d..49aa948c44 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateServiceInstance.groovy @@ -23,12 +23,14 @@ import static org.apache.commons.lang3.StringUtils.*; import groovy.xml.XmlUtil import groovy.json.* +import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition +import org.openecomp.mso.bpmn.core.domain.ServiceInstance +import org.openecomp.mso.bpmn.core.domain.ModelInfo import org.openecomp.mso.bpmn.core.json.JsonUtils import org.openecomp.mso.bpmn.common.scripts.AaiUtil import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils -import org.openecomp.mso.bpmn.common.scripts.VidUtils import org.openecomp.mso.bpmn.core.RollbackData import org.openecomp.mso.bpmn.core.WorkflowException import org.openecomp.mso.rest.APIResponse; @@ -57,8 +59,10 @@ import org.springframework.web.util.UriUtils; * @param - productFamilyId * @param - disableRollback * @param - failExists - TODO - * @param - serviceInputParams - Deferred/TODO + * @param - serviceInputParams (should contain aic_zone for serviceTypes TRANSPORT,ATM) * @param - sdncVersion ("1610") + * @param - serviceDecomposition - Decomposition for R1710 + * (if macro provides serviceDecompsition then serviceModelInfo, serviceInstanceId & serviceInstanceName will be ignored) * * Outputs: * @param - rollbackData (localRB->null) @@ -72,7 +76,6 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { String Prefix="DCRESI_" ExceptionUtil exceptionUtil = new ExceptionUtil() JsonUtils jsonUtil = new JsonUtils() - VidUtils vidUtils = new VidUtils() public void preProcessRequest (Execution execution) { def isDebugEnabled = execution.getVariable("isDebugLogEnabled") @@ -82,19 +85,11 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { try { String requestId = execution.getVariable("msoRequestId") execution.setVariable("prefix", Prefix) - + //Inputs //requestDetails.subscriberInfo. for AAI GET & PUT & SDNC assignToplology String globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId - //requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData & SDNC assignToplology - String serviceInstanceName = execution.getVariable("serviceInstanceName") - //Generated in parent for AAI PUT - String serviceInstanceId = execution.getVariable("serviceInstanceId") - - //requestDetails.modelInfo. for AAI PUT servieInstanceData & SDNC assignTopology - String serviceModelInfo = execution.getVariable("serviceModelInfo") - //requestDetails.requestParameters. for AAI PUT & SDNC assignTopology String subscriptionServiceType = execution.getVariable("subscriptionServiceType") @@ -106,21 +101,13 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { utils.log("DEBUG", msg, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) } - if (isBlank(serviceInstanceId)){ - msg = "Input serviceInstanceId is null" - utils.log("DEBUG", msg, isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) - } - if (isBlank(serviceModelInfo)) { - msg = "Input serviceModelInfo is null" - utils.log("DEBUG", msg, isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) - } + if (isBlank(subscriptionServiceType)) { msg = "Input subscriptionServiceType is null" utils.log("DEBUG", msg, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) } + if (productFamilyId == null) { execution.setVariable("productFamilyId", "") } @@ -134,30 +121,152 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { execution.setVariable("sdncCallbackUrl", sdncCallbackUrl) utils.log("DEBUG","SDNC Callback URL: " + sdncCallbackUrl, isDebugEnabled) - String modelInvariantId = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantId") - String modelVersionId = jsonUtil.getJsonValue(serviceModelInfo, "modelVersionId") + //requestDetails.modelInfo.for AAI PUT servieInstanceData & SDNC assignTopology + String modelInvariantUuid = "" + String modelVersion = "" + String modelUuid = "" + String modelName = "" + String serviceInstanceName = "" + //Generated in parent.for AAI PUT + String serviceInstanceId = "" + String serviceType = "" + String serviceRole = "" - if (modelInvariantId == null) { - modelInvariantId = "" + ServiceDecomposition serviceDecomp = (ServiceDecomposition) execution.getVariable("serviceDecomposition") + if (serviceDecomp != null) + { + serviceType = serviceDecomp.getServiceType() + if (serviceType == null) + { + utils.log("DEBUG", "null serviceType", isDebugEnabled) + serviceType = "" + } + else + { + utils.log("DEBUG", "serviceType:" + serviceType, isDebugEnabled) + } + serviceRole = serviceDecomp.getServiceRole() + if (serviceRole == null) + { + serviceRole = "" + } + + ServiceInstance serviceInstance = serviceDecomp.getServiceInstance() + if (serviceInstance != null) + { + serviceInstanceId = serviceInstance.getInstanceId() + serviceInstanceName = serviceInstance.getInstanceName() + execution.setVariable("serviceInstanceId", serviceInstanceId) + execution.setVariable("serviceInstanceName", serviceInstanceName) + } + + ModelInfo modelInfo = serviceDecomp.getModelInfo() + if (modelInfo != null) + { + modelInvariantUuid = modelInfo.getModelInvariantUuid() + modelVersion = modelInfo.getModelVersion() + modelUuid = modelInfo.getModelUuid() + modelName = modelInfo.getModelName() + } + else + { + msg = "Input serviceModelInfo is null" + utils.log("DEBUG", msg, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) + } } - if (modelVersionId == null) { - modelVersionId = "" + else + { + //requestDetails.requestInfo. for AAI GET/PUT serviceInstanceData & SDNC assignToplology + serviceInstanceName = execution.getVariable("serviceInstanceName") + serviceInstanceId = execution.getVariable("serviceInstanceId") + + String serviceModelInfo = execution.getVariable("serviceModelInfo") + if (isBlank(serviceModelInfo)) { + msg = "Input serviceModelInfo is null" + utils.log("DEBUG", msg, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) + } + modelInvariantUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantUuid") + modelVersion = jsonUtil.getJsonValue(serviceModelInfo, "modelVersion") + modelUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelUuid") + modelName = jsonUtil.getJsonValue(serviceModelInfo, "modelName") + //modelCustomizationUuid NA for SI + } + execution.setVariable("serviceType", serviceType) + execution.setVariable("serviceRole", serviceRole) + if (serviceInstanceName == null) { execution.setVariable("serviceInstanceName", "") serviceInstanceName = "" } + if (isBlank(serviceInstanceId)){ + msg = "Input serviceInstanceId is null" + utils.log("DEBUG", msg, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) + } + + if (modelInvariantUuid == null) { + modelInvariantUuid = "" + } + if (modelUuid == null) { + modelUuid = "" + } + if (modelVersion == null) { + modelVersion = "" + } + if (modelName == null) { + modelName = "" + } + + execution.setVariable("modelInvariantUuid", modelInvariantUuid) + execution.setVariable("modelVersion", modelVersion) + execution.setVariable("modelUuid", modelUuid) + execution.setVariable("modelName", modelName) + StringBuilder sbParams = new StringBuilder() + Map<String, String> paramsMap = execution.getVariable("serviceInputParams") + if (paramsMap != null) + { + sbParams.append("<service-input-parameters>") + for (Map.Entry<String, String> entry : paramsMap.entrySet()) { + String paramsXml + String paramName = entry.getKey() + String paramValue = entry.getValue() + paramsXml = + """ <param> + <name>${paramName}</name> + <value>${paramValue}</value> + </param> + """ + sbParams.append(paramsXml) + } + sbParams.append("</service-input-parameters>") + } + String siParamsXml = sbParams.toString() + if (siParamsXml == null) + siParamsXml = "" + execution.setVariable("siParamsXml", siParamsXml) + //AAI PUT + String oStatus= "Active" + if ("TRANSPORT".equalsIgnoreCase(serviceType)) + { + oStatus = "Created" + } + AaiUtil aaiUriUtil = new AaiUtil(this) String aai_uri = aaiUriUtil.getBusinessCustomerUri(execution) String namespace = aaiUriUtil.getNamespaceFromUri(aai_uri) String serviceInstanceData = """<service-instance xmlns=\"${namespace}\"> <service-instance-name>${serviceInstanceName}</service-instance-name> - <orchestration-status>Active</orchestration-status> - <model-invariant-id>${modelInvariantId}</model-invariant-id> - <model-version-id>${modelVersionId}</model-version-id> + <service-type>${serviceType}</service-type> + <service-role>${serviceRole}</service-role> + <orchestration-status>${oStatus}</orchestration-status> + <model-invariant-id>${modelInvariantUuid}</model-invariant-id> + <model-version-id>${modelUuid}</model-version-id> </service-instance>""".trim() execution.setVariable("serviceInstanceData", serviceInstanceData) @@ -340,27 +449,17 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { def serviceId = execution.getVariable("productFamilyId") def subscriptionServiceType = execution.getVariable("subscriptionServiceType") def globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId + def serviceType = execution.getVariable("serviceType") - String serviceModelInfo = execution.getVariable("serviceModelInfo") - def modelInvariantId = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantId") - def modelVersion = jsonUtil.getJsonValue(serviceModelInfo, "modelVersion") - def modelUUId = jsonUtil.getJsonValue(serviceModelInfo, "modelVersionId") - def modelName = jsonUtil.getJsonValue(serviceModelInfo, "modelName") + def modelInvariantUuid = execution.getVariable("modelInvariantUuid") + def modelVersion = execution.getVariable("modelVersion") + def modelUuid = execution.getVariable("modelUuid") + def modelName = execution.getVariable("modelName") + def sdncRequestId = UUID.randomUUID().toString() - if (modelInvariantId == null) { - modelInvariantId = "" - } - if (modelVersion == null) { - modelVersion = "" - } - if (modelUUId == null) { - modelUUId = "" - } - if (modelName == null) { - modelName = "" - } - + def siParamsXml = execution.getVariable("siParamsXml") + String sdncAssignRequest = """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1" xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" @@ -371,6 +470,7 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { <sdncadapter:SvcAction>assign</sdncadapter:SvcAction> <sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation> <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl> + <sdncadapter:MsoAction>${serviceType}</sdncadapter:MsoAction> </sdncadapter:RequestHeader> <sdncadapterworkflow:SDNCRequestData> <request-information> @@ -385,8 +485,8 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { <service-id>${serviceId}</service-id> <subscription-service-type>${subscriptionServiceType}</subscription-service-type> <ecomp-model-information> - <model-invariant-uuid>${modelInvariantId}</model-invariant-uuid> - <model-uuid>${modelUUId}</model-uuid> + <model-invariant-uuid>${modelInvariantUuid}</model-invariant-uuid> + <model-uuid>${modelUuid}</model-uuid> <model-version>${modelVersion}</model-version> <model-name>${modelName}</model-name> </ecomp-model-information> @@ -396,6 +496,7 @@ public class DoCreateServiceInstance extends AbstractServiceTaskProcessor { </service-information> <service-request-input> <service-instance-name>${serviceInstanceName}</service-instance-name> + ${siParamsXml} </service-request-input> </sdncadapterworkflow:SDNCRequestData> </sdncadapterworkflow:SDNCAdapterWorkflowRequest>""" diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy index 1fd5ab0abc..8bd3c5a4c3 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModule.groovy @@ -67,7 +67,7 @@ public class DoCreateVfModule extends VfModuleBase { execution.setVariable('prefix', Prefix) try{ - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") if (rollbackData == null) { rollbackData = new RollbackData() } @@ -140,6 +140,7 @@ public class DoCreateVfModule extends VfModuleBase { def requestId = execution.getVariable("msoRequestId") execution.setVariable("DCVFM_requestId", requestId) logDebug("requestId: " + requestId, isDebugLogEnabled) + rollbackData.put("VFMODULE", "msorequestid", requestId) // Set mso-request-id to request-id for VNF Adapter interface execution.setVariable("mso-request-id", requestId) //serviceId @@ -159,7 +160,7 @@ public class DoCreateVfModule extends VfModuleBase { //backoutOnFailure def disableRollback = execution.getVariable("disableRollback") def backoutOnFailure = true - if (disableRollback != null && disableRollback.equals("true")) { + if (disableRollback != null && disableRollback == true) { backoutOnFailure = false } execution.setVariable("DCVFM_backoutOnFailure", backoutOnFailure) @@ -173,9 +174,9 @@ public class DoCreateVfModule extends VfModuleBase { execution.setVariable("DCVFM_asdcServiceModelVersion", asdcServiceModelVersion) logDebug("asdcServiceModelVersion: " + asdcServiceModelVersion, isDebugLogEnabled) //personaModelId - execution.setVariable("DCVFM_personaModelId", jsonUtil.getJsonValue(vfModuleModelInfo, "modelInvariantId")) + execution.setVariable("DCVFM_personaModelId", jsonUtil.getJsonValue(vfModuleModelInfo, "modelInvariantUuid")) //personaModelVersion - execution.setVariable("DCVFM_personaModelVersion", jsonUtil.getJsonValue(vfModuleModelInfo, "modelVersionId")) + execution.setVariable("DCVFM_personaModelVersion", jsonUtil.getJsonValue(vfModuleModelInfo, "modelUuid")) //vfModuleLabel def vfModuleLabel = execution.getVariable("vfModuleLabel") if (vfModuleLabel != null) { @@ -437,7 +438,7 @@ public class DoCreateVfModule extends VfModuleBase { logDebug("SDNC Callback URL is: " + sdncCallbackUrl, isDebugLogEnabled) - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) }catch(BpmnError b){ throw b }catch(Exception e){ @@ -501,7 +502,7 @@ public class DoCreateVfModule extends VfModuleBase { def createResponse = execution.getVariable('DCVFM_createVfModuleResponse') utils.logAudit("createVfModule Response: " + createResponse) - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") String vnfName = utils.getNodeText1(createResponse, 'vnf-name') if (vnfName != null) { execution.setVariable('DCVFM_vnfName', vnfName) @@ -521,7 +522,7 @@ public class DoCreateVfModule extends VfModuleBase { rollbackData.put("VFMODULE", "vfmoduleid", vfModuleId) rollbackData.put("VFMODULE", "rollbackCreateAAIVfModule", "true") rollbackData.put("VFMODULE", "rollbackPrepareUpdateVfModule", "true") - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) } catch (Exception ex) { ex.printStackTrace() logDebug('Exception occurred while postProcessing CreateAAIVfModule request:' + ex.getMessage(),isDebugLogEnabled) @@ -812,13 +813,25 @@ public class DoCreateVfModule extends VfModuleBase { } Map<String, String> vnfParamsMap = execution.getVariable("DCVFM_vnfParamsMap") + String vfModuleParams = "" + //Get SDNC Response Data for VF Module Topology + String vfModuleSdncGetResponse = execution.getVariable('DCVFM_getSDNCAdapterResponse') + utils.logAudit("sdncGetResponse: " + vfModuleSdncGetResponse) + def sdncVersion = execution.getVariable("sdncVersion") - //Get SDNC Response Data for VnfSubCreate Request - String sdncGetResponse = execution.getVariable('DCVFM_getSDNCAdapterResponse') - utils.logAudit("sdncGetResponse: " + sdncGetResponse) - - String vfModuleParams = buildVfModuleParams(vnfParamsMap, sdncGetResponse, vnfId, vnfName, + if (!sdncVersion.equals("1707")) { + + vfModuleParams = buildVfModuleParams(vnfParamsMap, vfModuleSdncGetResponse, vnfId, vnfName, vfModuleId, vfModuleName, vfModuleIndex) + } + else { + //Get SDNC Response Data for Vnf Topology + String vnfSdncGetResponse = execution.getVariable('DCVFM_getVnfSDNCAdapterResponse') + utils.logAudit("vnfSdncGetResponse: " + vnfSdncGetResponse) + + vfModuleParams = buildVfModuleParamsFromCombinedTopologies(vnfParamsMap, vnfSdncGetResponse, vfModuleSdncGetResponse, vnfId, vnfName, + vfModuleId, vfModuleName, vfModuleIndex) + } def svcInstId = "" if (serviceInstanceId == null || serviceInstanceId.isEmpty()) { @@ -1006,7 +1019,7 @@ public class DoCreateVfModule extends VfModuleBase { def modelCustomizationUuid = execution.getVariable("DCVFM_modelCustomizationUuid") def modelCustomizationUuidString = "" if (!usePreload) { - modelCustomizationUuidString = "<modelCustomizationUuid>" + modelCustomizationUuid + "</modelCustomizationUuid>" + modelCustomizationUuidString = "<model-customization-uuid>" + modelCustomizationUuid + "</model-customization-uuid>" } String sdncVNFParamsXml = "" @@ -1026,7 +1039,7 @@ public class DoCreateVfModule extends VfModuleBase { xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation> @@ -1069,7 +1082,7 @@ public class DoCreateVfModule extends VfModuleBase { xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation> @@ -1210,7 +1223,7 @@ public class DoCreateVfModule extends VfModuleBase { logDebug("VNF Adapter Response is: " + vnfResponse, isDebugLogEnabled) utils.logAudit("createVnfAResponse is: \n" + vnfResponse) - RollbackData rollbackData = execution.getVariable("RollbackData") + RollbackData rollbackData = execution.getVariable("rollbackData") if(vnfResponse != null){ if(vnfResponse.contains("createVfModuleResponse")){ @@ -1273,7 +1286,7 @@ public class DoCreateVfModule extends VfModuleBase { } rollbackData.put("VFMODULE", "rollbackVnfAdapterCreate", "true") - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) }catch(BpmnError b){ throw b @@ -1364,7 +1377,7 @@ public class DoCreateVfModule extends VfModuleBase { String sdncResponse = response if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){ logDebug("Received a Good Response from SDNC Adapter for " + method + " SDNC Call. Response is: \n" + sdncResponse, isDebugLogEnabled) - RollbackData rollbackData = execution.getVariable("RollbackData") + RollbackData rollbackData = execution.getVariable("rollbackData") if(method.equals("assign")){ rollbackData.put("VFMODULE", "rollbackSDNCRequestAssign", "true") @@ -1373,7 +1386,7 @@ public class DoCreateVfModule extends VfModuleBase { else if (method.equals("activate")) { rollbackData.put("VFMODULE", "rollbackSDNCRequestActivate", "true") } - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) }else{ logDebug("Received a BAD Response from SDNC Adapter for " + method + " SDNC Call.", isDebugLogEnabled) throw new BpmnError("MSOWorkflowException") @@ -1613,7 +1626,7 @@ public class DoCreateVfModule extends VfModuleBase { // get variables List fqdnList = execution.getVariable("DCVFM_contrailNetworkPolicyFqdnList") int fqdnCount = fqdnList.size() - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") execution.setVariable("DCVFM_networkPolicyFqdnCount", fqdnCount) logDebug("DCVFM_networkPolicyFqdnCount - " + fqdnCount, isDebugLogEnabled) @@ -1701,7 +1714,7 @@ public class DoCreateVfModule extends VfModuleBase { logDebug(" AddAAINetworkPolicy Success REST Response, , NetworkPolicy #" + counting + " : " + "\n" + aaiResponseAsStringPut, isDebugLogEnabled) rollbackData.put("VFMODULE", "rollbackCreateNetworkPoliciesAAI", "true") rollbackData.put("VFMODULE", "contrailNetworkPolicyFqdn" + i, fqdn) - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) } else { // aai all errors @@ -1758,7 +1771,7 @@ public class DoCreateVfModule extends VfModuleBase { logDebug('Entered ' + method, isDebugLogEnabled) try { - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") def vnfId = execution.getVariable('DCVFM_vnfId') def oamManagementV4Address = execution.getVariable("DCVFM_oamManagementV4Address") def oamManagementV6Address = execution.getVariable("DCVFM_oamManagementV6Address") @@ -1839,6 +1852,47 @@ public class DoCreateVfModule extends VfModuleBase { exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in postProcessUpdateAAIGenericVnf(): ' + e.getMessage()) } } + + public void preProcessRollback (Execution execution) { + def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + utils.log("DEBUG"," ***** preProcessRollback ***** ", isDebugEnabled) + try { + + Object workflowException = execution.getVariable("WorkflowException"); + + if (workflowException instanceof WorkflowException) { + utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled) + execution.setVariable("prevWorkflowException", workflowException); + //execution.setVariable("WorkflowException", null); + } + } catch (BpmnError e) { + utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugEnabled) + } catch(Exception ex) { + String msg = "Exception in preProcessRollback. " + ex.getMessage() + utils.log("DEBUG", msg, isDebugEnabled) + } + utils.log("DEBUG"," *** Exit preProcessRollback *** ", isDebugEnabled) + } + public void postProcessRollback (Execution execution) { + def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + utils.log("DEBUG"," ***** postProcessRollback ***** ", isDebugEnabled) + String msg = "" + try { + Object workflowException = execution.getVariable("prevWorkflowException"); + if (workflowException instanceof WorkflowException) { + utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugEnabled) + execution.setVariable("WorkflowException", workflowException); + } + execution.setVariable("rollbackData", null) + } catch (BpmnError b) { + utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugEnabled) + throw b; + } catch(Exception ex) { + msg = "Exception in postProcessRollback. " + ex.getMessage() + utils.log("DEBUG", msg, isDebugEnabled) + } + utils.log("DEBUG"," *** Exit postProcessRollback *** ", isDebugEnabled) + } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleRollback.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleRollback.groovy index af1161b656..08f1f50c37 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleRollback.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleRollback.groovy @@ -47,71 +47,96 @@ public class DoCreateVfModuleRollback extends AbstractServiceTaskProcessor{ initProcessVariables(execution) - def rollbackData = execution.getVariable("RollbackData") - String vnfId = rollbackData.get("VFMODULE", "vnfid") - execution.setVariable("DCVFMR_vnfId", vnfId) - String vfModuleId = rollbackData.get("VFMODULE", "vfmoduleid") - execution.setVariable("DCVFMR_vfModuleId", vfModuleId) - String source = rollbackData.get("VFMODULE", "source") - execution.setVariable("DCVFMR_source", source) - String serviceInstanceId = rollbackData.get("VFMODULE", "serviceInstanceId") - execution.setVariable("DCVFMR_serviceInstanceId", serviceInstanceId) - String serviceId = rollbackData.get("VFMODULE", "service-id") - execution.setVariable("DCVFMR_serviceId", serviceId) - String vnfType = rollbackData.get("VFMODULE", "vnftype") - execution.setVariable("DCVFMR_vnfType", vnfType) - String vnfName = rollbackData.get("VFMODULE", "vnfname") - execution.setVariable("DCVFMR_vnfName", vnfName) - String tenantId = rollbackData.get("VFMODULE", "tenantid") - execution.setVariable("DCVFMR_tenantId", tenantId) - String vfModuleName = rollbackData.get("VFMODULE", "vfmodulename") - execution.setVariable("DCVFMR_vfModuleName", vfModuleName) - String vfModuleModelName = rollbackData.get("VFMODULE", "vfmodulemodelname") - execution.setVariable("DCVFMR_vfModuleModelName", vfModuleModelName) - String cloudSiteId = rollbackData.get("VFMODULE", "aiccloudregion") - execution.setVariable("DCVFMR_cloudSiteId", cloudSiteId) - String heatStackId = rollbackData.get("VFMODULE", "heatstackid") - execution.setVariable("DCVFMR_heatStackId", heatStackId) - String requestId = rollbackData.get("VFMODULE", "attmsorequestid") - execution.setVariable("DCVFMR_requestId", requestId) - List createdNetworkPolicyFqdnList = [] - int i = 0 - while (i < 100) { - String fqdn = rollbackData.get("VFMODULE", "contrailNetworkPolicyFqdn" + i) - if (fqdn == null) { - break - } - createdNetworkPolicyFqdnList.add(fqdn) - logDebug("got fqdn # " + i + ": " + fqdn, isDebugEnabled) - i = i + 1 + try { + execution.setVariable("rolledBack", null) + execution.setVariable("rollbackError", null) + + def rollbackData = execution.getVariable("rollbackData") + utils.log("DEBUG", "RollbackData:" + rollbackData, isDebugEnabled) + + if (rollbackData != null) { + String vnfId = rollbackData.get("VFMODULE", "vnfid") + execution.setVariable("DCVFMR_vnfId", vnfId) + String vfModuleId = rollbackData.get("VFMODULE", "vfmoduleid") + execution.setVariable("DCVFMR_vfModuleId", vfModuleId) + String source = rollbackData.get("VFMODULE", "source") + execution.setVariable("DCVFMR_source", source) + String serviceInstanceId = rollbackData.get("VFMODULE", "serviceInstanceId") + execution.setVariable("DCVFMR_serviceInstanceId", serviceInstanceId) + String serviceId = rollbackData.get("VFMODULE", "service-id") + execution.setVariable("DCVFMR_serviceId", serviceId) + String vnfType = rollbackData.get("VFMODULE", "vnftype") + execution.setVariable("DCVFMR_vnfType", vnfType) + String vnfName = rollbackData.get("VFMODULE", "vnfname") + execution.setVariable("DCVFMR_vnfName", vnfName) + String tenantId = rollbackData.get("VFMODULE", "tenantid") + execution.setVariable("DCVFMR_tenantId", tenantId) + String vfModuleName = rollbackData.get("VFMODULE", "vfmodulename") + execution.setVariable("DCVFMR_vfModuleName", vfModuleName) + String vfModuleModelName = rollbackData.get("VFMODULE", "vfmodulemodelname") + execution.setVariable("DCVFMR_vfModuleModelName", vfModuleModelName) + String cloudSiteId = rollbackData.get("VFMODULE", "aiccloudregion") + execution.setVariable("DCVFMR_cloudSiteId", cloudSiteId) + String heatStackId = rollbackData.get("VFMODULE", "heatstackid") + execution.setVariable("DCVFMR_heatStackId", heatStackId) + String requestId = rollbackData.get("VFMODULE", "msorequestid") + execution.setVariable("DCVFMR_requestId", requestId) + // Set mso-request-id to request-id for VNF Adapter interface + execution.setVariable("mso-request-id", requestId) + List createdNetworkPolicyFqdnList = [] + int i = 0 + while (i < 100) { + String fqdn = rollbackData.get("VFMODULE", "contrailNetworkPolicyFqdn" + i) + if (fqdn == null) { + break + } + createdNetworkPolicyFqdnList.add(fqdn) + logDebug("got fqdn # " + i + ": " + fqdn, isDebugEnabled) + i = i + 1 + + } + + execution.setVariable("DCVFMR_createdNetworkPolicyFqdnList", createdNetworkPolicyFqdnList) + String oamManagementV4Address = rollbackData.get("VFMODULE", "oamManagementV4Address") + execution.setVariable("DCVFMR_oamManagementV4Address", oamManagementV4Address) + String oamManagementV6Address = rollbackData.get("VFMODULE", "oamManagementV6Address") + execution.setVariable("DCVFMR_oamManagementV6Address", oamManagementV6Address) + //String serviceInstanceId = rollbackData.get("VFMODULE", "msoserviceinstanceid") + //execution.setVariable("DCVFMR_serviceInstanceId", serviceInstanceId) + execution.setVariable("DCVFMR_rollbackPrepareUpdateVfModule", rollbackData.get("VFMODULE", "rollbackPrepareUpdateVfModule")) + execution.setVariable("DCVFMR_rollbackUpdateAAIVfModule", rollbackData.get("VFMODULE", "rollbackUpdateAAIVfModule")) + execution.setVariable("DCVFMR_rollbackVnfAdapterCreate", rollbackData.get("VFMODULE", "rollbackVnfAdapterCreate")) + execution.setVariable("DCVFMR_rollbackSDNCRequestAssign", rollbackData.get("VFMODULE", "rollbackSDNCRequestAssign")) + execution.setVariable("DCVFMR_rollbackSDNCRequestActivate", rollbackData.get("VFMODULE", "rollbackSDNCRequestActivate")) + execution.setVariable("DCVFMR_rollbackCreateAAIVfModule", rollbackData.get("VFMODULE", "rollbackCreateAAIVfModule")) + execution.setVariable("DCVFMR_rollbackCreateNetworkPoliciesAAI", rollbackData.get("VFMODULE", "rollbackCreateNetworkPoliciesAAI")) + execution.setVariable("DCVFMR_rollbackUpdateVnfAAI", rollbackData.get("VFMODULE", "rollbackUpdateVnfAAI")) + + // formulate the request for PrepareUpdateAAIVfModule + String request = """<PrepareUpdateAAIVfModuleRequest> + <vnf-id>${vnfId}</vnf-id> + <vf-module-id>${vfModuleId}</vf-module-id> + <orchestration-status>pending-delete</orchestration-status> + </PrepareUpdateAAIVfModuleRequest>""" as String + utils.log("DEBUG", "PrepareUpdateAAIVfModuleRequest :" + request, isDebugEnabled) + utils.logAudit("DoCreateVfModuleRollback PrepareUpdateAAIVfModule Request: " + request) + execution.setVariable("PrepareUpdateAAIVfModuleRequest", request) + } else { + execution.setVariable("skipRollback", true) + } + + if (execution.getVariable("disableRollback").equals("true" )) { + execution.setVariable("skipRollback", true) + } + + } catch (BpmnError e) { + throw e; + } catch (Exception ex){ + def msg = "Exception in DoCreateVfModuleRollback preProcessRequest " + ex.getMessage() + utils.log("DEBUG", msg, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg) } - - execution.setVariable("DCVFMR_createdNetworkPolicyFqdnList", createdNetworkPolicyFqdnList) - String oamManagementV4Address = rollbackData.get("VFMODULE", "oamManagementV4Address") - execution.setVariable("DCVFMR_oamManagementV4Address", oamManagementV4Address) - String oamManagementV6Address = rollbackData.get("VFMODULE", "oamManagementV6Address") - execution.setVariable("DCVFMR_oamManagementV6Address", oamManagementV6Address) - //String serviceInstanceId = rollbackData.get("VFMODULE", "attmsoserviceinstanceid") - //execution.setVariable("DCVFMR_serviceInstanceId", serviceInstanceId) - execution.setVariable("DCVFMR_rollbackPrepareUpdateVfModule", rollbackData.get("VFMODULE", "rollbackPrepareUpdateVfModule")) - execution.setVariable("DCVFMR_rollbackUpdateAAIVfModule", rollbackData.get("VFMODULE", "rollbackUpdateAAIVfModule")) - execution.setVariable("DCVFMR_rollbackVnfAdapterCreate", rollbackData.get("VFMODULE", "rollbackVnfAdapterCreate")) - execution.setVariable("DCVFMR_rollbackSDNCRequestAssign", rollbackData.get("VFMODULE", "rollbackSDNCRequestAssign")) - execution.setVariable("DCVFMR_rollbackSDNCRequestActivate", rollbackData.get("VFMODULE", "rollbackSDNCRequestActivate")) - execution.setVariable("DCVFMR_rollbackCreateAAIVfModule", rollbackData.get("VFMODULE", "rollbackCreateAAIVfModule")) - execution.setVariable("DCVFMR_rollbackCreateNetworkPoliciesAAI", rollbackData.get("VFMODULE", "rollbackCreateNetworkPoliciesAAI")) - execution.setVariable("DCVFMR_rollbackUpdateVnfAAI", rollbackData.get("VFMODULE", "rollbackUpdateVnfAAI")) - - // formulate the request for PrepareUpdateAAIVfModule - String request = """<PrepareUpdateAAIVfModuleRequest> - <vnf-id>${vnfId}</vnf-id> - <vf-module-id>${vfModuleId}</vf-module-id> - <orchestration-status>pending-delete</orchestration-status> - </PrepareUpdateAAIVfModuleRequest>""" as String - utils.log("DEBUG", "PrepareUpdateAAIVfModuleRequest :" + request, isDebugEnabled) - utils.logAudit("DoCreateVfModuleRollback PrepareUpdateAAIVfModule Request: " + request) - execution.setVariable("PrepareUpdateAAIVfModuleRequest", request) } // build a SDNC vnf-topology-operation request for the specified action @@ -120,6 +145,11 @@ public class DoCreateVfModuleRollback extends AbstractServiceTaskProcessor{ def isDebugEnabled=execution.getVariable("isDebugLogEnabled") String srvInstId = execution.getVariable("DCVFMR_serviceInstanceId") + String uuid = execution.getVariable('testReqId') // for junits + if(uuid==null){ + uuid = execution.getVariable("DCVFMR_requestId") + "-" + System.currentTimeMillis() + } + def callbackUrl = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String source = execution.getVariable("DCVFMR_source") @@ -163,7 +193,7 @@ public class DoCreateVfModuleRollback extends AbstractServiceTaskProcessor{ xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${vfModuleId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation> @@ -202,6 +232,112 @@ public class DoCreateVfModuleRollback extends AbstractServiceTaskProcessor{ execution.setVariable("sdncAdapterWorkflowRequest", request) } + public void preProcessSDNCDeactivateRequest(Execution execution){ + def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") + execution.setVariable("prefix", Prefix) + logDebug(" ======== STARTED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled) + + def serviceInstanceId = execution.getVariable("DCVFMR_serviceInstanceId") + + try{ + //Build SDNC Request + + String deactivateSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "deactivate") + + deactivateSDNCRequest = utils.formatXml(deactivateSDNCRequest) + execution.setVariable("DCVFMR_deactivateSDNCRequest", deactivateSDNCRequest) + logDebug("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest, isDebugLogEnabled) + utils.logAudit("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest) + + }catch(Exception e){ + utils.log("ERROR", "Exception Occured Processing preProcessSDNCDeactivateRequest. Exception is:\n" + e, isDebugLogEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessSDNCDeactivateRequest Method:\n" + e.getMessage()) + } + logDebug("======== COMPLETED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled) + } + + public void preProcessSDNCUnassignRequest(Execution execution) { + def method = getClass().getSimpleName() + '.preProcessSDNCUnassignRequest(' + + 'execution=' + execution.getId() + + ')' + def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') + logDebug('Entered ' + method, isDebugLogEnabled) + execution.setVariable("prefix", Prefix) + logDebug(" ======== STARTED preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled) + try{ + String serviceInstanceId = execution.getVariable("DCVFMR_serviceInstanceId") + + String unassignSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "unassign") + + execution.setVariable("DCVFMR_unassignSDNCRequest", unassignSDNCRequest) + logDebug("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest, isDebugLogEnabled) + utils.logAudit("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest) + + }catch(Exception e){ + log.debug("Exception Occured Processing preProcessSDNCUnassignRequest. Exception is:\n" + e, isDebugLogEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during preProcessSDNCUnassignRequest Method:\n" + e.getMessage()) + } + logDebug("======== COMPLETED preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled) + } + + public String buildSDNCRequest(Execution execution, String svcInstId, String action){ + + String uuid = execution.getVariable('testReqId') // for junits + if(uuid==null){ + uuid = execution.getVariable("DCVFMR_requestId") + "-" + System.currentTimeMillis() + } + def callbackURL = execution.getVariable("URN_mso_workflow_sdncadapter_callback") + def requestId = execution.getVariable("DCVFMR_requestId") + def serviceId = execution.getVariable("DCVFMR_serviceId") + def serviceInstanceId = execution.getVariable("DCVFMR_serviceInstanceId") + def vfModuleId = execution.getVariable("DCVFMR_vfModuleId") + def source = execution.getVariable("DCVFMR_source") + def vnfId = execution.getVariable("DCVFMR_vnfId") + + def sdncVersion = execution.getVariable("sdncVersion") + + String sdncRequest = + """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1" + xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" + xmlns:sdncadapter="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1"> + <sdncadapter:RequestHeader> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> + <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId> + <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction> + <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation> + <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl> + <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction> + </sdncadapter:RequestHeader> + <sdncadapterworkflow:SDNCRequestData> + <request-information> + <request-id>${requestId}</request-id> + <request-action>DeleteVfModuleInstance</request-action> + <source>${source}</source> + <notification-url/> + <order-number/> + <order-version/> + </request-information> + <service-information> + <service-id/> + <subscription-service-type/> + <service-instance-id>${serviceInstanceId}</service-instance-id> + <global-customer-id/> + </service-information> + <vnf-information> + <vnf-id>${vnfId}</vnf-id> + <vnf-type/> + </vnf-information> + <vf-module-information> + <vf-module-id>${vfModuleId}</vf-module-id> + </vf-module-information> + <vf-module-request-input/> + </sdncadapterworkflow:SDNCRequestData> + </sdncadapterworkflow:SDNCAdapterWorkflowRequest>""" + + utils.logAudit("sdncRequest: " + sdncRequest) + return sdncRequest + } + // parse the incoming DELETE_VF_MODULE request // and formulate the outgoing VnfAdapterDeleteV1 request public void prepVNFAdapterRequest(Execution execution) { @@ -484,4 +620,39 @@ public class DoCreateVfModuleRollback extends AbstractServiceTaskProcessor{ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in preProcessUpdateAAIGenericVnf((): ' + e.getMessage()) } } + + public void setSuccessfulRollbackStatus (Execution execution){ + def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") + execution.setVariable("prefix", Prefix) + logDebug(" ======== STARTED setSuccessfulRollbackStatus ======== ", isDebugLogEnabled) + + try{ + // Set rolledBack to true, rollbackError to null + execution.setVariable("rolledBack", true) + execution.setVariable("rollbackError", null) + + }catch(Exception e){ + utils.log("ERROR", "Exception Occured Processing setSuccessfulRollbackStatus. Exception is:\n" + e, isDebugLogEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during setSuccessfulRollbackStatus Method:\n" + e.getMessage()) + } + logDebug("======== COMPLETED setSuccessfulRollbackStatus ======== ", isDebugLogEnabled) + } + + public void setFailedRollbackStatus (Execution execution){ + def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") + execution.setVariable("prefix", Prefix) + logDebug(" ======== STARTED setFailedRollbackStatus ======== ", isDebugLogEnabled) + + try{ + // Set rolledBack to false, rollbackError to actual value, rollbackData to null + execution.setVariable("rolledBack", false) + execution.setVariable("rollbackError", 'Caught exception in DoCreateVfModuleRollback') + execution.setVariable("rollbackData", null) + + }catch(Exception e){ + utils.log("ERROR", "Exception Occured Processing setFailedRollbackStatus. Exception is:\n" + e, isDebugLogEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during setFailedRollbackStatus Method:\n" + e.getMessage()) + } + logDebug("======== COMPLETED setFailedRollbackStatus ======== ", isDebugLogEnabled) + } } diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeRollback.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeRollback.groovy new file mode 100644 index 0000000000..46b6dd8366 --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeRollback.groovy @@ -0,0 +1,222 @@ +/*
+ * © 2016 AT&T Intellectual Property. All rights reserved. Used under license from AT&T Intellectual Property.
+ */
+package org.openecomp.mso.bpmn.infrastructure.scripts;
+
+import groovy.xml.XmlUtil
+import groovy.json.*
+
+
+import java.util.UUID;
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.runtime.Execution
+import org.apache.commons.lang3.*
+import org.apache.commons.codec.binary.Base64;
+import org.openecomp.mso.bpmn.common.scripts.AaiUtil
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.VidUtils
+import org.openecomp.mso.bpmn.core.RollbackData
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.rest.APIResponse
+import org.springframework.web.util.UriUtils
+
+
+public class DoCreateVfModuleVolumeRollback extends AbstractServiceTaskProcessor {
+ String Prefix="DCVFMODVOLRBK_"
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ JsonUtils jsonUtil = new JsonUtils()
+ VidUtils vidUtils = new VidUtils(this)
+
+ def className = getClass().getSimpleName()
+
+ /**
+ * This method is executed during the preProcessRequest task of the <class>DoCreateVfModuleVolumeRollback.bpmn</class> process.
+ * @param execution
+ */
+ public InitializeProcessVariables(Execution execution){
+ /* Initialize all the process variables in this block */
+
+ execution.setVariable(Prefix + "volumeGroupName", null)
+ execution.setVariable(Prefix + "lcpCloudRegionId", null)
+ execution.setVariable(Prefix + "rollbackVnfARequest", null)
+
+ }
+
+ // **************************************************
+ // Pre or Prepare Request Section
+ // **************************************************
+ /**
+ * This method is executed during the preProcessRequest task of the <class>DoCreateVfModuleVolumeRollback.bpmn</class> process.
+ * @param execution
+ */
+ public void preProcessRequest (Execution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+
+ InitializeProcessVariables(execution)
+// rollbackData.put("DCVFMODULEVOL", "aiccloudregion", cloudSiteId)
+ RollbackData rollbackData = execution.getVariable("rollbackData")
+
+// String vnfId = rollbackData.get("DCVFMODULEVOL", "vnfid")
+// execution.setVariable("DCVFMODVOLRBK_vnfId", vnfId)
+// String vfModuleId = rollbackData.get("DCVFMODULEVOL", "vfmoduleid")
+// execution.setVariable("DCVFMODVOLRBK_vfModuleId", vfModuleId)
+// String source = rollbackData.get("DCVFMODULEVOL", "source")
+// execution.setVariable("DCVFMODVOLRBK_source", source)
+// String serviceInstanceId = rollbackData.get("DCVFMODULEVOL", "serviceInstanceId")
+// execution.setVariable("DCVFMODVOLRBK_serviceInstanceId", serviceInstanceId)
+// String serviceId = rollbackData.get("DCVFMODULEVOL", "service-id")
+// execution.setVariable("DCVFMODVOLRBK_serviceId", serviceId)
+// String vnfType = rollbackData.get("DCVFMODULEVOL", "vnftype")
+// execution.setVariable("DCVFMODVOLRBK_vnfType", vnfType)
+// String vnfName = rollbackData.get("DCVFMODULEVOL", "vnfname")
+// execution.setVariable("DCVFMODVOLRBK_vnfName", vnfName)
+// String tenantId = rollbackData.get("DCVFMODULEVOL", "tenantid")
+// execution.setVariable("DCVFMODVOLRBK_tenantId", tenantId)
+// String vfModuleName = rollbackData.get("DCVFMODULEVOL", "vfmodulename")
+// execution.setVariable("DCVFMODVOLRBK_vfModuleName", vfModuleName)
+// String vfModuleModelName = rollbackData.get("DCVFMODULEVOL", "vfmodulemodelname")
+// execution.setVariable("DCVFMODVOLRBK_vfModuleModelName", vfModuleModelName)
+// String cloudSiteId = rollbackData.get("DCVFMODULEVOL", "aiccloudregion")
+// execution.setVariable("DCVFMODVOLRBK_cloudSiteId", cloudSiteId)
+// String heatStackId = rollbackData.get("DCVFMODULEVOL", "heatstackid")
+// execution.setVariable("DCVFMODVOLRBK_heatStackId", heatStackId)
+// String requestId = rollbackData.get("DCVFMODULEVOL", "msorequestid")
+// execution.setVariable("DCVFMODVOLRBK_requestId", requestId)
+
+ String volumeGroupName = rollbackData.get("DCVFMODULEVOL", "volumeGroupName")
+ execution.setVariable("DCVFMODVOLRBK_volumeGroupName", volumeGroupName)
+
+ String lcpCloudRegionId = rollbackData.get("DCVFMODULEVOL", "aiccloudregion")
+ execution.setVariable("DCVFMODVOLRBK_lcpCloudRegionId", lcpCloudRegionId)
+
+ execution.setVariable("DCVFMODVOLRBK_rollbackVnfARequest", rollbackData.get("DCVFMODULEVOL", "rollbackVnfARequest"))
+ execution.setVariable("DCVFMODVOLRBK_backoutOnFailure", rollbackData.get("DCVFMODULEVOL", "backoutOnFailure"))
+ execution.setVariable("DCVFMODVOLRBK_isCreateVnfRollbackNeeded", rollbackData.get("DCVFMODULEVOL", "isCreateVnfRollbackNeeded"))
+ execution.setVariable("DCVFMODVOLRBK_isAAIRollbackNeeded", rollbackData.get("DCVFMODULEVOL", "isAAIRollbackNeeded"))
+
+ }
+
+ /**
+ * Query AAI volume group by name
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTQueryAAIVolGrpName(Execution execution, isDebugEnabled) {
+
+ def volumeGroupName = execution.getVariable('DCVFMODVOLRBK_volumeGroupName')
+ def cloudRegion = execution.getVariable('DCVFMODVOLRBK_lcpCloudRegionId')
+
+ // This is for stub testing
+ def testVolumeGroupName = execution.getVariable('test-volume-group-name')
+ if (testVolumeGroupName != null && testVolumeGroupName.length() > 0) {
+ volumeGroupName = testVolumeGroupName
+ }
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String queryAAIVolumeNameRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups" + "?volume-group-name=" + UriUtils.encode(volumeGroupName, 'UTF-8')
+
+ utils.logAudit('Query AAI volume group by name: ' + queryAAIVolumeNameRequest)
+
+ APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIVolumeNameRequest)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ //aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI query volume group by name return code: " + returnCode)
+ utils.logAudit("AAI query volume group by name response: " + aaiResponseAsString)
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+ execution.setVariable(prefix+"queryAAIVolGrpNameResponse", aaiResponseAsString)
+ execution.setVariable(prefix+'AaiReturnCode', returnCode)
+
+ if (returnCode=='200') {
+ // @TODO: verify error code
+ // @TODO: create class of literals representing error codes
+ execution.setVariable(prefix+'queryAAIVolGrpNameResponse', aaiResponseAsString)
+ utils.log("DEBUG", "Volume Group Name $volumeGroupName exists in AAI.", isDebugEnabled)
+ } else {
+ if (returnCode=='404') {
+ utils.log("DEBUG", "Volume Group Name $volumeGroupName does not exist in AAI.", isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $volumeGroupName not found in AAI. Response code: 404")
+ } else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+
+
+ public void callRESTDeleteAAIVolumeGroup(Execution execution, isDebugEnabled) {
+
+ callRESTQueryAAIVolGrpName(execution, isDebugEnabled)
+
+ def queryAaiVolumeGroupResponse = execution.getVariable(prefix+'queryAAIVolGrpNameResponse')
+
+ def volumeGroupId = utils.getNodeText(queryAaiVolumeGroupResponse, "volume-group-id")
+ def resourceVersion = utils.getNodeText(queryAaiVolumeGroupResponse, "resource-version")
+
+ def cloudRegion = execution.getVariable("DCVFMODVOLRBK_lcpCloudRegionId")
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String deleteAAIVolumeGrpIdRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group" + '/' + volumeGroupId + "?resource-version=" + UriUtils.encode(resourceVersion, "UTF-8")
+
+ utils.logAudit('Delete AAI volume group : ' + deleteAAIVolumeGrpIdRequest)
+
+ APIResponse response = aaiUtil.executeAAIDeleteCall(execution, deleteAAIVolumeGrpIdRequest)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ //aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI delete volume group return code: " + returnCode)
+ utils.logAudit("AAI delete volume group response: " + aaiResponseAsString)
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+ def volumeGroupNameFound = prefix+'volumeGroupNameFound'
+ if (returnCode=='200' || returnCode=='204' ) {
+ utils.log("DEBUG", "Volume group $volumeGroupId deleted.", isDebugEnabled)
+ } else {
+ if (returnCode=='404') {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $volumeGroupId not found for delete in AAI Response code: 404")
+ } else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+ // *******************************
+ // Build Error Section
+ // *******************************
+
+
+
+ public void processJavaException(Execution execution){
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix",Prefix)
+
+ try{
+ utils.log("DEBUG", "Caught a Java Exception in " + Prefix, isDebugEnabled)
+ utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)
+ utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)
+ execution.setVariable("UnexpectedError", "Caught a Java Lang Exception - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
+ exceptionUtil.buildWorkflowException(execution, 500, "Caught a Java Lang Exception")
+
+ }catch(Exception e){
+ utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)
+ execution.setVariable("UnexpectedError", "Exception in processJavaException method - " + Prefix) // Adding this line temporarily until this flows error handling gets updated
+ exceptionUtil.buildWorkflowException(execution, 500, "Exception in processJavaException method" + Prefix)
+ }
+ utils.log("DEBUG", "Completed processJavaException Method in " + Prefix, isDebugEnabled)
+ }
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV1.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2.groovy index 8e54024c6f..2d004b88ac 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV1.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVfModuleVolumeV2.groovy @@ -1,657 +1,593 @@ -/*- - * ============LICENSE_START======================================================= - * OPENECOMP - MSO - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * 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. - * ============LICENSE_END========================================================= - */ - -package org.openecomp.mso.bpmn.infrastructure.scripts - -import static org.camunda.spin.Spin.XML - -import org.apache.commons.lang3.* -import org.camunda.bpm.engine.delegate.BpmnError -import org.camunda.bpm.engine.runtime.Execution -import org.openecomp.mso.bpmn.common.scripts.AaiUtil -import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil -import org.openecomp.mso.bpmn.common.scripts.NetworkUtils -import org.openecomp.mso.bpmn.common.scripts.VfModuleBase -import org.openecomp.mso.bpmn.core.WorkflowException -import org.openecomp.mso.rest.APIResponse -import org.springframework.web.util.UriUtils - -class DoCreateVfModuleVolumeV1 extends VfModuleBase { - - String prefix='DCVFMODVOLV1_' - - - /** - * Perform initial processing, such as request validation, initialization of variables, etc. - * * @param execution - */ - public void preProcessRequest (Execution execution) { - def isDebugEnabled=execution.getVariable("isDebugLogEnabled") - preProcessRequest(execution, isDebugEnabled) - } - - /** - * Perform initial processing, such as request validation, initialization of variables, etc. - * @param execution - * @param isDebugEnabled - */ - public void preProcessRequest (Execution execution, isDebugEnabled) { - - execution.setVariable("prefix",prefix) - execution.setVariable(prefix+'SuccessIndicator', false) - - - // INPUT: DoCreateVfModuleVolumeV1Request, mso-request-id, volume-group-id, vnf-id, is-vid-request - // OUTPUT: DCVFMODVOLV1_SuccessIndicator. WorkflowException - - def volumeRequest = getVariable(execution, 'DoCreateVfModuleVolumeV1Request') - if (volumeRequest != null) { - execution.setVariable(prefix+'Request', volumeRequest) - } else { - volumeRequest = getVariable(execution, prefix+'Request') - if (volumeRequest == null) { - (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, 'DoCreateVfModuleVolumeV1 received null request.') - } - } - - def vnfId = execution.getVariable('vnf-id') - if (vnfId == null) { - (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, 'DoCreateVfModuleVolumeV1 received null vnf-id.') - } - - def volumeGroupId = execution.getVariable('volume-group-id') - if (volumeGroupId == null) { - (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, 'DoCreateVfModuleVolumeV1 received null volume-group-id.') - } - - def requestId = execution.getVariable("mso-request-id") - if (requestId == null || requestId == "") { - requestId = utils.getNodeText1(volumeRequest, "request-id") - } - - //def serviceId = execution.getVariable("mso-service-instance-id") - //if (serviceId == null || serviceId == "") { - def serviceId = utils.getNodeText1(volumeRequest, "service-id") - //} - - def source = utils.getNodeText1(volumeRequest, "source") - - execution.setVariable(prefix+'requestId', requestId) - execution.setVariable(prefix+'serviceId', serviceId) - execution.setVariable(prefix+'source', source) - - // @TODO: for better tracking of logs, should we strip all new lines in the log message? - utils.logAudit('Incoming request: ' + volumeRequest) - - // Rollback settings - NetworkUtils networkUtils = new NetworkUtils() - def rollbackEnabled = networkUtils.isRollbackEnabled(execution,volumeRequest) - execution.setVariable(prefix+"rollbackEnabled", rollbackEnabled) - utils.log("DEBUG", 'rollbackEnabled: ' + rollbackEnabled, isDebugEnabled) - - } - - - /** - * Get cloud region - * @param execution - * @param isDebugEnabled - */ - public void callRESTQueryAAICloudRegion (Execution execution, isDebugEnabled) { - - def request = execution.getVariable(prefix+'Request') - def cloudRegion = utils.getNodeText1(request, "aic-cloud-region") - utils.log("DEBUG", 'Request cloud region is: ' + cloudRegion, isDebugEnabled) - - AaiUtil aaiUtil = new AaiUtil(this) - String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) - String queryCloudRegionRequest = aaiEndpoint + '/' + cloudRegion - - utils.logAudit(queryCloudRegionRequest) - - cloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion) - - if ((cloudRegion != "ERROR")) { - if(execution.getVariable(prefix+"queryCloudRegionReturnCode") == "404"){ - cloudRegion = "AAIAIC25" - } - execution.setVariable(prefix+"aicCloudRegion", cloudRegion) - utils.log("DEBUG", "AIC Cloud Region: " + cloudRegion, isDebugEnabled) - } else { - String errorMessage = "AAI Query Cloud Region Unsuccessful. Return Code: " + execution.getVariable(prefix+"queryCloudRegionReturnCode") - utils.log("DEBUG", errorMessage, isDebugEnabled) - (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage) - } - } - - - /** - * Query AAI volume group by name - * @param execution - * @param isDebugEnabled - */ - public void callRESTQueryAAIVolGrpName(Execution execution, isDebugEnabled) { - - def volumeRequest = execution.getVariable(prefix+'Request') - def volumeGroupName = utils.getNodeText(volumeRequest, "volume-group-name") - def cloudRegion = execution.getVariable(prefix+"aicCloudRegion") - - // Save volume group name - execution.setVariable(prefix+'volumeGroupName', volumeGroupName) - - // This is for stub testing - def testVolumeGroupName = execution.getVariable('test-volume-group-name') - if (testVolumeGroupName != null && testVolumeGroupName.length() > 0) { - volumeGroupName = testVolumeGroupName - //reset to null - execution.setVariable('test-volume-group-name', null) - } - - AaiUtil aaiUtil = new AaiUtil(this) - String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) - String queryAAIVolumeNameRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups" + "?volume-group-name=" + UriUtils.encode(volumeGroupName, 'UTF-8') - - utils.logAudit('Query AAI volume group by name: ' + queryAAIVolumeNameRequest) - - APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIVolumeNameRequest) - - String returnCode = response.getStatusCode() - String aaiResponseAsString = response.getResponseBodyAsString() - aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) - - utils.logAudit("AAI query volume group by name return code: " + returnCode) - utils.logAudit("AAI query volume group by name response: " + aaiResponseAsString) - - ExceptionUtil exceptionUtil = new ExceptionUtil() - - execution.setVariable(prefix+"queryAAIVolGrpNameResponse", aaiResponseAsString) - execution.setVariable(prefix+'AaiReturnCode', returnCode) - - if (returnCode=='200') { - // @TODO: verify error code - // @TODO: create class of literals representing error codes - execution.setVariable(prefix+'queryAAIVolGrpNameResponse', aaiResponseAsString) - utils.log("DEBUG", "Volume Group Name $volumeGroupName exists in AAI.", isDebugEnabled) - } else { - if (returnCode=='404') { - utils.log("DEBUG", "Volume Group Name $volumeGroupName does not exist in AAI.", isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $volumeGroupName not found in AAI. Response code: 404") - } else { - WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) - throw new BpmnError("MSOWorkflowException") - } - } - } - - - /** - * Create a WorkflowException - * @param execution - * @param isDebugEnabled - */ - public void buildWorkflowException(Execution execution, int errorCode, errorMessage, isDebugEnabled) { - utils.log("DEBUG", errorMessage, isDebugEnabled) - (new ExceptionUtil()).buildWorkflowException(execution, 2500, errorMessage) - } - - - /** - * Create a WorkflowException - * @param execution - * @param isDebugEnabled - */ - public void handleError(Execution execution, isDebugEnabled) { - WorkflowException we = execution.getVariable('WorkflowException') - if (we == null) { - (new ExceptionUtil()).buildWorkflowException(execution, 2500, "Enexpected error encountered!") - } - throw new BpmnError("MSOWorkflowException") - } - - /** - * Create volume group in AAI - * @param execution - * @param isDebugEnabled - */ - public void callRESTCreateAAIVolGrpName(Execution execution, isDebugEnabled) { - - def volumeRequest = execution.getVariable(prefix+'Request') - def vnfId = execution.getVariable('vnf-id') - def volumeName = utils.getNodeText(volumeRequest, "volume-group-name") - def modelCustomizationId = getNodeTextForce(volumeRequest, "model-customization-id") - - def cloudRegion = execution.getVariable(prefix+"aicCloudRegion") - def groupId = execution.getVariable('volume-group-id') - utils.log("DEBUG", "volume group id: " + groupId, isDebugEnabled) - - AaiUtil aaiUtil = new AaiUtil(this) - String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) - String createAAIVolumeGrpNameUrlRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group/" + UriUtils.encode(groupId, "UTF-8") - - String namespace = aaiUtil.getNamespaceFromUri(aaiUtil.getCloudInfrastructureCloudRegionUri(execution)) - utils.log("DEBUG", "AAI namespace is: " + namespace, isDebugEnabled) - - utils.logAudit(createAAIVolumeGrpNameUrlRequest) - - //Prepare payload (PUT) - def vnfType = utils.getNodeText(volumeRequest, "vnf-type") - def tenantId = utils.getNodeText(volumeRequest, "tenant-id") - - NetworkUtils networkUtils = new NetworkUtils() - String payload = networkUtils.createCloudRegionVolumeRequest(groupId, volumeName, vnfType, vnfId, tenantId, cloudRegion, namespace, modelCustomizationId) - String payloadXml = utils.formatXml(payload) - utils.logAudit(payloadXml) - - APIResponse response = aaiUtil.executeAAIPutCall(execution, createAAIVolumeGrpNameUrlRequest, payloadXml) - - String returnCode = response.getStatusCode() - String aaiResponseAsString = response.getResponseBodyAsString() - aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) - - utils.logAudit("AAI create volume group return code: " + returnCode) - utils.logAudit("AAI create volume group response: " + aaiResponseAsString) - - execution.setVariable(prefix+"createAAIVolumeGrpNameReturnCode", returnCode) - execution.setVariable(prefix+"createAAIVolumeGrpNameResponse", aaiResponseAsString) - - ExceptionUtil exceptionUtil = new ExceptionUtil() - - if (returnCode =='201') { - execution.setVariable(prefix+"isAAIRollbackNeeded", true) - } else { - execution.setVariable(prefix+"isErrorMessageException", true) - if (returnCode=='404') { - // @TODO: verify return code and make static LITERAL - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Unable to create volume group in AAI. Response code: 404") - } else { - WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) - utils.log("DEBUG", " AAI Adapter Query Failed. WorkflowException - " + "\n" + aWorkflowException, isDebugEnabled) - throw new BpmnError("MSOWorkflowException") - } - } - } - - /** - * Prepare VNF adapter create request XML - * @param execution - */ - public void prepareVnfAdapterCreateRequest(Execution execution, isDebugEnabled) { - - - def volumeRequest = execution.getVariable(prefix+'Request') - def requestId = execution.getVariable(prefix+'requestId') - def serviceId = execution.getVariable(prefix+'serviceId') - - def aaiGenericVnfResponse = execution.getVariable(prefix+'AAIQueryGenericVfnResponse') - def vnfId = utils.getNodeText1(aaiGenericVnfResponse, 'vnf-id') - def vnfName = utils.getNodeText1(aaiGenericVnfResponse, 'vnf-name') - def modelCustomizationId = getNodeTextForce(volumeRequest, "model-customization-id") - - String messageId = UUID.randomUUID() - utils.log("DEBUG", "messageId to be used is generated: " + messageId, isDebugEnabled) - - // prepare vnf request for vnfAdapterCreateV1 - def cloudSiteId = utils.getNodeText1(volumeRequest, 'aic-cloud-region') - def tenantId = utils.getNodeText1(volumeRequest, "tenant-id") - def vnfType = utils.getNodeText1(volumeRequest, "vnf-type") - def vnfVersion = utils.getNodeText1(volumeRequest, "asdc-service-model-version") - def vnfModuleType = utils.getNodeText1(volumeRequest, "vf-module-model-name") - def volumeGroupnName = utils.getNodeText1(volumeRequest, "volume-group-name") - - def volumeParamsXml = utils.getNodeXml(volumeRequest, 'volume-params') - def volumeGroupParams = transformVolumeParamsToEntries(volumeParamsXml) - - utils.log("DEBUG", "volumeGroupParams: "+ volumeGroupParams, isDebugEnabled) - - String volumeGroupId = execution.getVariable('volume-group-id') - def notificationUrl = createCallbackURL(execution, "VNFAResponse", messageId) - def useQualifiedHostName = execution.getVariable("URN_mso_use_qualified_host") - if ('true'.equals(useQualifiedHostName)) { - notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl) - } - utils.log("DEBUG", "CreateVfModuleVolume - notificationUrl: "+ notificationUrl, isDebugEnabled) - - def backoutOnFailure = execution.getVariable("DCVFMODVOLV1_rollbackEnabled") - utils.log("DEBUG", "backoutOnFailure: "+ backoutOnFailure, isDebugEnabled) - - // build request - String vnfSubCreateWorkflowRequest = - """ - <createVolumeGroupRequest> - <cloudSiteId>${cloudSiteId}</cloudSiteId> - <tenantId>${tenantId}</tenantId> - <vnfId>${vnfId}</vnfId> - <vnfName>${vnfName}</vnfName> - <volumeGroupId>${volumeGroupId}</volumeGroupId> - <volumeGroupName>${volumeGroupnName}</volumeGroupName> - <vnfType>${vnfType}</vnfType> - <vnfVersion>${vnfVersion}</vnfVersion> - <vfModuleType>${vnfModuleType}</vfModuleType> - <modelCustomizationUuid>${modelCustomizationId}</modelCustomizationUuid> - <volumeGroupParams> - <entry> - <key>vnf_id</key> - <value>${vnfId}</value> - </entry> - <entry> - <key>vnf_name</key> - <value>${vnfName}</value> - </entry> - <entry> - <key>vf_module_id</key> - <value>${volumeGroupId}</value> - </entry> - <entry> - <key>vf_module_name</key> - <value>${volumeGroupnName}</value> - </entry> - ${volumeGroupParams} - </volumeGroupParams> - <skipAAI>true</skipAAI> - <backout>${backoutOnFailure}</backout> - <failIfExists>true</failIfExists> - <msoRequest> - <requestId>${requestId}</requestId> - <serviceInstanceId>${serviceId}</serviceInstanceId> - </msoRequest> - <messageId>${messageId}</messageId> - <notificationUrl>${notificationUrl}</notificationUrl> - </createVolumeGroupRequest> - """ - - String vnfSubCreateWorkflowRequestAsString = utils.formatXml(vnfSubCreateWorkflowRequest) - utils.logAudit(vnfSubCreateWorkflowRequestAsString) - utils.log('DEBUG', vnfSubCreateWorkflowRequestAsString, isDebugEnabled) - execution.setVariable(prefix+"createVnfARequest", vnfSubCreateWorkflowRequestAsString) - - // build rollback request for use later if needed - - String vnfSubRollbackWorkflowRequest = - """<rollbackVolumeGroupRequest> - <cloudSiteId>${cloudSiteId}</cloudSiteId> - <tenantId>${tenantId}</tenantId> - <volumeGroupId>${volumeGroupId}</volumeGroupId> - <skipAAI>true</skipAAI> - <volumeGroupCreated>true</volumeGroupCreated> - <msoRequest> - <requestId>${requestId}</requestId> - <serviceInstanceId>${serviceId}</serviceInstanceId> - </msoRequest> - <messageId>${messageId}</messageId> - <notificationUrl>${notificationUrl}</notificationUrl> - </rollbackVolumeGroupRequest>""" - - utils.log("DEBUG", "Sub Vnf flow rollback request: vnfSubRollbackWorkflowRequest " + "\n" + vnfSubRollbackWorkflowRequest, isDebugEnabled) - - String vnfSubRollbackWorkflowRequestAsString = utils.formatXml(vnfSubRollbackWorkflowRequest) - execution.setVariable(prefix+"rollbackVnfARequest", vnfSubRollbackWorkflowRequestAsString) - } - - - - /** - * Update voulume group in AAI - * @TODO: Can we re-use the create method?? - * @param execution - * @param isDebugEnabled - */ - public void callRESTUpdateCreatedVolGrpName(Execution execution, isDebugEnabled) { - - // get variables - String requeryAAIVolGrpNameResponse = execution.getVariable(prefix+"queryAAIVolGrpNameResponse") - String volumeGroupId = utils.getNodeText(requeryAAIVolGrpNameResponse, "volume-group-id") - String modelCustomizationId = getNodeTextForce(requeryAAIVolGrpNameResponse, "vf-module-persona-model-customization-id") - String cloudRegion = execution.getVariable(prefix+"aicCloudRegion") - - AaiUtil aaiUtil = new AaiUtil(this) - String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) - String updateAAIVolumeGroupUrlRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group/" + UriUtils.encode(volumeGroupId, 'UTF-8') - - String namespace = aaiUtil.getNamespaceFromUri(aaiUtil.getCloudInfrastructureCloudRegionUri(execution)) - - utils.logAudit(updateAAIVolumeGroupUrlRequest) - - //Prepare payload (PUT) - String createVnfAResponse = execution.getVariable(prefix+"createVnfAResponse") - - // @TODO: revisit - // if VID request createVnfresponse will be null, use vnf from JSON request - def vnfId = "" - if(createVnfAResponse == null || createVnfAResponse == "") { - vnfId = execution.getVariable(prefix+'vnfId') - } - else { - vnfId = utils.getNodeText(createVnfAResponse, "volumeGroupStackId") - } - - NetworkUtils networkUtils = new NetworkUtils() - String payload = networkUtils.updateCloudRegionVolumeRequest(requeryAAIVolGrpNameResponse, vnfId, namespace, modelCustomizationId) - String payloadXml = utils.formatXml(payload) - - //execution.setVariable(prefix+"updateCreatedAAIVolumeGrpNamePayloadRequest", payloadXml) - utils.logAudit(payload) - //utils.log("DEBUG", " 'payload' to Update Created VolumeGroupName - " + "\n" + payloadXml, isDebugEnabled) - - APIResponse response = aaiUtil.executeAAIPutCall(execution, updateAAIVolumeGroupUrlRequest, payloadXml) - - String returnCode = response.getStatusCode() - String aaiResponseAsString = response.getResponseBodyAsString() - aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) - - utils.logAudit("AAI create volume group return code: " + returnCode) - utils.logAudit("AAI create volume group response: " + aaiResponseAsString) - - ExceptionUtil exceptionUtil = new ExceptionUtil() - - if (returnCode =='200') { - execution.setVariable(prefix+"updateCreatedAAIVolumeGrpNameResponse", aaiResponseAsString) - execution.setVariable(prefix+"isPONR", true) - } else { - execution.setVariable(prefix+"isErrorMessageException", true) - if (returnCode=='404') { - // @TODO: verify return code and make static LITERAL - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Unable to update volume group in AAI. Response code: 404") - } else { - WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) - utils.log("DEBUG", " AAI Adapter Query Failed. WorkflowException - " + "\n" + aWorkflowException, isDebugEnabled) - throw new BpmnError("MSOWorkflowException") - } - } - } - - - /** - * Query AAI service instance - * @param execution - * @param isDebugEnabled - */ - public void callRESTQueryAAIGenericVnf(Execution execution, isDebugEnabled) { - - def request = execution.getVariable(prefix+"Request") - def vnfId = execution.getVariable('vnf-id') - - AaiUtil aaiUtil = new AaiUtil(this) - String aaiEndpoint = aaiUtil.getNetworkGenericVnfEndpoint(execution) - def String queryAAIRequest = aaiEndpoint + "/" + UriUtils.encode(vnfId, "UTF-8") - - utils.logAudit("AAI query generic vnf request: " + queryAAIRequest) - - APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIRequest) - - String returnCode = response.getStatusCode() - String aaiResponseAsString = response.getResponseBodyAsString() - aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) - - utils.logAudit("AAI query generic vnf return code: " + returnCode) - utils.logAudit("AAI query generic vnf response: " + aaiResponseAsString) - - //utils.log("DEBUG", "AAI query generic vnf return code: " + returnCode, isDebugEnabled) - //utils.log("DEBUG", "AAI query generic vnf response: " + aaiResponseAsString, isDebugEnabled) - - ExceptionUtil exceptionUtil = new ExceptionUtil() - - if (returnCode=='200') { - utils.log("DEBUG", 'Generic vnf ' + vnfId + ' found in AAI.', isDebugEnabled) - execution.setVariable(prefix+'AAIQueryGenericVfnResponse', aaiResponseAsString) - } else { - if (returnCode=='404') { - def message = 'Generic vnf ' + vnfId + ' was not found in AAI. Return code: 404.' - utils.log("DEBUG", message, isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, message) - } else { - WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) - throw new BpmnError("MSOWorkflowException") - } - } - } - - public void callRESTDeleteAAIVolumeGroup(Execution execution, isDebugEnabled) { - - callRESTQueryAAIVolGrpName(execution, isDebugEnabled) - - def queryAaiVolumeGroupResponse = execution.getVariable(prefix+'queryAAIVolGrpNameResponse') - - def volumeGroupId = utils.getNodeText(queryAaiVolumeGroupResponse, "volume-group-id") - def resourceVersion = utils.getNodeText(queryAaiVolumeGroupResponse, "resource-version") - - def cloudRegion = execution.getVariable(prefix+"aicCloudRegion") - - AaiUtil aaiUtil = new AaiUtil(this) - String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution) - String deleteAAIVolumeGrpIdRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group" + '/' + volumeGroupId + "?resource-version=" + UriUtils.encode(resourceVersion, "UTF-8") - - utils.logAudit('Delete AAI volume group : ' + deleteAAIVolumeGrpIdRequest) - - APIResponse response = aaiUtil.executeAAIDeleteCall(execution, deleteAAIVolumeGrpIdRequest) - - String returnCode = response.getStatusCode() - String aaiResponseAsString = response.getResponseBodyAsString() - aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString) - - utils.logAudit("AAI delete volume group return code: " + returnCode) - utils.logAudit("AAI delete volume group response: " + aaiResponseAsString) - - ExceptionUtil exceptionUtil = new ExceptionUtil() - - def volumeGroupNameFound = prefix+'volumeGroupNameFound' - if (returnCode=='200' || returnCode=='204' ) { - utils.log("DEBUG", "Volume group $volumeGroupId deleted.", isDebugEnabled) - } else { - if (returnCode=='404') { - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $volumeGroupId not found for delete in AAI Response code: 404") - } else { - WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution) - throw new BpmnError("MSOWorkflowException") - } - } - } - - - - - - public void prepareSuccessDBRequest(Execution execution, isDebugEnabled) { - String requestId = execution.getVariable(prefix+'requestId') - String dbVnfOutputs = execution.getVariable(prefix+'volumeOutputs') - prepareDBRequest(execution, requestId, "VolumeGroup successfully created.", "COMPLETED", "100", dbVnfOutputs, isDebugEnabled) - } - - public void prepareFailDbRequest(Execution execution, isDebugEnabled) { - - WorkflowException we = execution.getVariable("WorkflowException") - - String requestId = execution.getVariable(prefix+'requestId') - String dbVnfOutputs = execution.getVariable(prefix+'volumeOutputs') - prepareDBRequest(execution, requestId, we.getErrorMessage(), "FAILURE", "", dbVnfOutputs, isDebugEnabled) - - } - - - /** - * Prepare Infra DB XML Request - * @param execution - */ - public void prepareDBRequest (Execution execution, String requestId, String statusMessage, String requestStatus, String progress, String dbVnfOutputs, isDebugEnabled) { - - String dbRequest = - """<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> - <soapenv:Header/> - <soapenv:Body> - <ns:updateInfraRequest xmlns:ns="http://org.openecomp.mso/requestsdb"> - <requestId>${requestId}</requestId> - <lastModifiedBy>BPMN</lastModifiedBy> - <statusMessage>${statusMessage}</statusMessage> - <responseBody></responseBody> - <requestStatus>${requestStatus}</requestStatus> - <progress>${progress}</progress> - <vnfOutputs>${dbVnfOutputs}</vnfOutputs> - </ns:updateInfraRequest> - </soapenv:Body> - </soapenv:Envelope>""" - - utils.log("DEBUG", " DB Adapter Request - " + "\n" + dbRequest, isDebugEnabled) - String buildDeleteDBRequestAsString = utils.formatXml(dbRequest) - - execution.setVariable(prefix+"createDBRequest", buildDeleteDBRequestAsString) - - utils.logAudit(buildDeleteDBRequestAsString) - } - - - - - public void postProcessResponse (Execution execution, isDebugEnabled) { - - String dbReturnCode = execution.getVariable(prefix+"dbReturnCode") - utils.log("DEBUG", "DB Update Response Code : " + dbReturnCode, isDebugEnabled) - - String createDBResponse = execution.getVariable(prefix+"createDBResponse") - utils.logAudit(createDBResponse) - - String source = execution.getVariable(prefix+"source") - String requestId = execution.getVariable(prefix+'requestId') - - String msoCompletionRequest = - """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" - xmlns:ns="http://org.openecomp/mso/request/types/v1"> - <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> - <request-id>${requestId}</request-id> - <action>CREATE</action> - <source>${source}</source> - </request-info> - <aetgt:mso-bpel-name>BPEL Volume Group action: CREATE</aetgt:mso-bpel-name> - </aetgt:MsoCompletionRequest>""" - - // Format Response - String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest) - utils.logAudit(xmlMsoCompletionRequest) - - // normal path - if (dbReturnCode == "200") { - execution.setVariable(prefix+"Success", true) - execution.setVariable(prefix+"CompleteMsoProcessRequest", xmlMsoCompletionRequest) - utils.log("DEBUG", " Overall SUCCESS Response going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled) - } else { - execution.setVariable(prefix+"isErrorMessageException", true) - utils.log("DEBUG", " DB Update failed, code: " + dbReturnCode + ", going to Unexpected Error.", isDebugEnabled) - } - } - -} +package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import static org.camunda.spin.Spin.XML;
+import groovy.json.JsonSlurper
+import groovy.lang.GroovyInterceptable;
+import groovy.xml.XmlUtil
+
+import org.openecomp.mso.bpmn.common.scripts.AaiUtil
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.NetworkUtils
+import org.openecomp.mso.bpmn.common.scripts.VfModuleBase;
+import org.openecomp.mso.bpmn.core.RollbackData
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.bpmn.core.json.JsonUtils;
+import org.openecomp.mso.rest.APIResponse
+import org.springframework.web.util.UriUtils
+
+
+
+
+import java.util.UUID;
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.runtime.Execution
+import org.apache.commons.lang3.*
+import org.apache.commons.codec.binary.Base64;
+
+class DoCreateVfModuleVolumeV2 extends VfModuleBase {
+
+ String prefix='DCVFMODVOLV2_'
+ JsonUtils jsonUtil = new JsonUtils()
+
+
+ /**
+ * Perform initial processing, such as request validation, initialization of variables, etc.
+ * * @param execution
+ */
+ public void preProcessRequest(Execution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ preProcessRequest(execution, isDebugEnabled)
+ }
+
+ public void preProcessRequest(Execution execution, isDebugLogEnabled) {
+
+ execution.setVariable("prefix",prefix)
+ execution.setVariable(prefix+'SuccessIndicator', false)
+ execution.setVariable(prefix+'isPONR', false)
+
+ displayInput(execution, isDebugLogEnabled)
+ setRollbackData(execution, isDebugLogEnabled)
+ setRollbackEnabled(execution, isDebugLogEnabled)
+
+
+ def tenantId = execution.getVariable("tenantId")
+ if (tenantId == null) {
+ String cloudConfiguration = execution.getVariable("cloudConfiguration")
+ tenantId = jsonUtil.getJsonValue(cloudConfiguration, "cloudConfiguration.tenantId")
+ execution.setVariable("tenantId", tenantId)
+ }
+
+ def cloudSiteId = execution.getVariable("lcpCloudRegionId")
+ if (cloudSiteId == null) {
+ String cloudConfiguration = execution.getVariable("cloudConfiguration")
+ cloudSiteId = jsonUtil.getJsonValue(cloudConfiguration, "cloudConfiguration.lcpCloudRegionId")
+ execution.setVariable("lcpCloudRegionId", cloudSiteId)
+ }
+
+ // Extract attributes from modelInfo
+ String vfModuleModelInfo = execution.getVariable("vfModuleModelInfo")
+
+ //modelCustomizationUuid
+ def modelCustomizationUuid = jsonUtil.getJsonValue(vfModuleModelInfo, "modelCustomizationUuid")
+ execution.setVariable("modelCustomizationId", modelCustomizationUuid)
+ logDebug("modelCustomizationId: " + modelCustomizationUuid, isDebugLogEnabled)
+
+ //modelName
+ def modelName = jsonUtil.getJsonValue(vfModuleModelInfo, "modelName")
+ execution.setVariable("modelName", modelName)
+ logDebug("modelName: " + modelName, isDebugLogEnabled)
+
+ // The following is used on the get Generic Service Instance call
+ execution.setVariable('GENGS_type', 'service-instance')
+ }
+
+
+ /**
+ * Display input variables
+ * @param execution
+ * @param isDebugLogEnabled
+ */
+ public void displayInput(Execution execution, isDebugLogEnabled) {
+ def input = ['mso-request-id', 'msoRequestId', 'isDebugLogEnabled', 'disableRollback', 'failIfExists', 'serviceInstanceId',
+ 'vnfId', 'vnfName', 'tenantId', 'volumeGroupId', 'volumeGroupName', 'lcpCloudRegionId', 'vnfType', 'vfModuleModelInfo', 'asdcServiceModelVersion',
+ 'test-volume-group-name', 'test-volume-group-id', 'vfModuleInputParams']
+
+ logDebug('Begin input: ', isDebugLogEnabled)
+ input.each {
+ logDebug(it + ': ' + execution.getVariable(it), isDebugLogEnabled)
+ }
+ logDebug('End input.', isDebugLogEnabled)
+ }
+
+
+ /**
+ * Define and set rollbackdata object
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void setRollbackData(Execution execution, isDebugEnabled) {
+ def rollbackData = execution.getVariable("rollbackData")
+ if (rollbackData == null) {
+ rollbackData = new RollbackData()
+ }
+ def volumeGroupName = execution.getVariable('volumeGroupName')
+ rollbackData.put("DCVFMODULEVOL", "volumeGroupName", volumeGroupName)
+ execution.setVariable("rollbackData", rollbackData)
+ }
+
+
+ /**
+ * validate getServiceInstance response
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void validateGetServiceInstanceCall(Execution execution, isDebugEnabled) {
+ def found = execution.getVariable('GENGS_FoundIndicator')
+ def success = execution.getVariable('GENGS_SuccessIndicator')
+ def serviceInstanceId = execution.getVariable('serviceInstanceId')
+ utils.log("DEBUG", "getServiceInstance success: " + success, isDebugEnabled)
+ utils.log("DEBUG", "getServiceInstance found: " + found, isDebugEnabled)
+ if(!found || !success) {
+ String errorMessage = "Service instance id not found in AAI: ${serviceInstanceId}."
+ utils.log("DEBUG", errorMessage, isDebugEnabled)
+ (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage)
+ }
+
+ }
+
+ /**
+ * Get cloud region
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTQueryAAICloudRegion (Execution execution, isDebugEnabled) {
+
+ def cloudRegion = execution.getVariable("lcpCloudRegionId")
+ utils.log("DEBUG", 'Request cloud region is: ' + cloudRegion, isDebugEnabled)
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String queryCloudRegionRequest = aaiEndpoint + '/' + cloudRegion
+
+ utils.logAudit(queryCloudRegionRequest)
+
+ cloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
+
+ def aaiCloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "AAI", cloudRegion)
+ if ((aaiCloudRegion != "ERROR")) {
+ execution.setVariable("lcpCloudRegionId", aaiCloudRegion)
+ utils.log("DEBUG", "AIC Cloud Region for AAI: " + aaiCloudRegion, isDebugEnabled)
+ } else {
+ String errorMessage = "AAI Query Cloud Region Unsuccessful. Return Code: " + execution.getVariable(prefix+"queryCloudRegionReturnCode")
+ utils.log("DEBUG", errorMessage, isDebugEnabled)
+ (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage)
+ }
+
+ def poCloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
+ if ((poCloudRegion != "ERROR")) {
+ execution.setVariable("poLcpCloudRegionId", poCloudRegion)
+ utils.log("DEBUG", "AIC Cloud Region for PO: " + poCloudRegion, isDebugEnabled)
+ } else {
+ String errorMessage = "AAI Query Cloud Region Unsuccessful. Return Code: " + execution.getVariable(prefix+"queryCloudRegionReturnCode")
+ utils.log("DEBUG", errorMessage, isDebugEnabled)
+ (new ExceptionUtil()).buildAndThrowWorkflowException(execution, 2500, errorMessage)
+ }
+
+ def rollbackData = execution.getVariable("rollbackData")
+ rollbackData.put("DCVFMODULEVOL", "aiccloudregion", cloudRegion)
+ }
+
+
+ /**
+ * Query AAI volume group by name
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTQueryAAIVolGrpName(Execution execution, isDebugEnabled) {
+
+ def volumeGroupName = execution.getVariable('volumeGroupName')
+ def cloudRegion = execution.getVariable('lcpCloudRegionId')
+
+ // This is for stub testing
+ def testVolumeGroupName = execution.getVariable('test-volume-group-name')
+ if (testVolumeGroupName != null && testVolumeGroupName.length() > 0) {
+ volumeGroupName = testVolumeGroupName
+ }
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String queryAAIVolumeNameRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups" + "?volume-group-name=" + UriUtils.encode(volumeGroupName, 'UTF-8')
+
+ utils.logAudit('Query AAI volume group by name: ' + queryAAIVolumeNameRequest)
+
+ APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIVolumeNameRequest)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI query volume group by name return code: " + returnCode)
+ utils.logAudit("AAI query volume group by name response: " + aaiResponseAsString)
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+ execution.setVariable(prefix+"queryAAIVolGrpNameResponse", aaiResponseAsString)
+ execution.setVariable(prefix+'AaiReturnCode', returnCode)
+
+ if (returnCode=='200') {
+ execution.setVariable(prefix+'queryAAIVolGrpNameResponse', aaiResponseAsString)
+ utils.log("DEBUG", "Volume Group Name $volumeGroupName exists in AAI.", isDebugEnabled)
+ } else {
+ if (returnCode=='404') {
+ utils.log("DEBUG", "Volume Group Name $volumeGroupName does not exist in AAI.", isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $volumeGroupName not found in AAI. Response code: 404")
+ } else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+
+ /**
+ * Create a WorkflowException
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void buildWorkflowException(Execution execution, int errorCode, errorMessage, isDebugEnabled) {
+ utils.log("DEBUG", errorMessage, isDebugEnabled)
+ (new ExceptionUtil()).buildWorkflowException(execution, 2500, errorMessage)
+ }
+
+
+ /**
+ * Create a WorkflowException
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void handleError(Execution execution, isDebugEnabled) {
+ WorkflowException we = execution.getVariable('WorkflowException')
+ if (we == null) {
+ (new ExceptionUtil()).buildWorkflowException(execution, 2500, "Enexpected error encountered!")
+ }
+ throw new BpmnError("MSOWorkflowException")
+ }
+
+
+ /**
+ * Create volume group in AAI
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTCreateAAIVolGrpName(Execution execution, isDebugEnabled) {
+
+ def vnfId = execution.getVariable('vnfId')
+ def volumeGroupId = execution.getVariable('volumeGroupId')
+ def volumeName = execution.getVariable("volumeGroupName")
+ def modelCustomizationId = execution.getVariable("modelCustomizationId")
+ def vnfType = execution.getVariable("vnfType")
+ def tenantId = execution.getVariable("tenantId")
+ def cloudRegion = execution.getVariable('lcpCloudRegionId')
+
+ utils.log("DEBUG", "volumeGroupId: " + volumeGroupId, isDebugEnabled)
+
+ def testGroupId = execution.getVariable('test-volume-group-id')
+ if (testGroupId != null && testGroupId.trim() != '') {
+ utils.log("DEBUG", "test volumeGroupId is present: " + testGroupId, isDebugEnabled)
+ volumeGroupId = testGroupId
+ execution.setVariable("test-volume-group-name", "MSOTESTVOL101a-vSAMP12_base_vol_module-0")
+ }
+
+ utils.log("DEBUG", "volumeGroupId to be used: " + volumeGroupId, isDebugEnabled)
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String createAAIVolumeGrpNameUrlRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group/" + UriUtils.encode(volumeGroupId, "UTF-8")
+
+ String namespace = aaiUtil.getNamespaceFromUri(aaiUtil.getCloudInfrastructureCloudRegionUri(execution))
+ utils.log("DEBUG", "AAI namespace is: " + namespace, isDebugEnabled)
+
+ utils.logAudit("Request URL for PUT: " + createAAIVolumeGrpNameUrlRequest)
+
+ NetworkUtils networkUtils = new NetworkUtils()
+ String payload = networkUtils.createCloudRegionVolumeRequest(volumeGroupId, volumeName, vnfType, vnfId, tenantId, cloudRegion, namespace, modelCustomizationId)
+ String payloadXml = utils.formatXml(payload)
+ utils.logAudit("Request payload for PUT: " + payloadXml)
+
+ APIResponse response = aaiUtil.executeAAIPutCall(execution, createAAIVolumeGrpNameUrlRequest, payloadXml)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI create volume group return code: " + returnCode)
+ utils.logAudit("AAI create volume group response: " + aaiResponseAsString)
+
+ execution.setVariable(prefix+"createAAIVolumeGrpNameReturnCode", returnCode)
+ execution.setVariable(prefix+"createAAIVolumeGrpNameResponse", aaiResponseAsString)
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+ if (returnCode =='201') {
+ RollbackData rollbackData = execution.getVariable("rollbackData")
+ rollbackData.put("DCVFMODULEVOL", "isAAIRollbackNeeded", "true")
+ } else {
+ execution.setVariable(prefix+"isErrorMessageException", true)
+ if (returnCode=='404') {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Unable to create volume group in AAI. Response code: 404")
+ } else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ utils.log("DEBUG", " AAI Adapter Query Failed. WorkflowException - " + "\n" + aWorkflowException, isDebugEnabled)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+
+ /**
+ * Prepare VNF adapter create request XML
+ * @param execution
+ */
+ public void prepareVnfAdapterCreateRequest(Execution execution, isDebugEnabled) {
+
+ def aaiGenericVnfResponse = execution.getVariable(prefix+'AAIQueryGenericVfnResponse')
+ def vnfId = utils.getNodeText1(aaiGenericVnfResponse, 'vnf-id')
+ def vnfName = utils.getNodeText1(aaiGenericVnfResponse, 'vnf-name')
+ def vnfType = utils.getNodeText1(aaiGenericVnfResponse, "vnf-type")
+
+ def requestId = execution.getVariable('msoRequestId')
+ def serviceId = execution.getVariable('serviceInstanceId')
+ def cloudSiteId = execution.getVariable('poLcpCloudRegionId')
+ def tenantId = execution.getVariable('tenantId')
+ def volumeGroupId = execution.getVariable('volumeGroupId')
+ def volumeGroupnName = execution.getVariable('volumeGroupName')
+
+ def vnfVersion = execution.getVariable("asdcServiceModelVersion")
+ def vnfModuleType = execution.getVariable("modelName")
+
+ def modelCustomizationId = execution.getVariable("modelCustomizationId")
+
+ // for testing
+ utils.log("DEBUG", "volumeGroupId: " + volumeGroupId, isDebugEnabled)
+ def testGroupId = execution.getVariable('test-volume-group-id')
+ if (testGroupId != null && testGroupId.trim() != '') {
+ utils.log("DEBUG", "test volumeGroupId is present: " + testGroupId, isDebugEnabled)
+ volumeGroupId = testGroupId
+ execution.setVariable("test-volume-group-name", "MSOTESTVOL101a-vSAMP12_base_vol_module-0")
+ }
+ utils.log("DEBUG", "volumeGroupId to be used: " + volumeGroupId, isDebugEnabled)
+
+ // volume group parameters
+
+ String volumeGroupParams = ''
+ StringBuilder sbParams = new StringBuilder()
+ Map<String, String> paramsMap = execution.getVariable("vfModuleInputParams")
+ for (Map.Entry<String, String> entry : paramsMap.entrySet()) {
+ String paramsXml
+ String paramName = entry.getKey();
+ String paramValue = entry.getValue()
+ paramsXml =
+ """ <entry>
+ <key>${paramName}</key>
+ <value>${paramValue}</value>
+ </entry>
+ """
+ sbParams.append(paramsXml)
+ }
+
+ volumeGroupParams = sbParams.toString()
+ utils.log("DEBUG", "volumeGroupParams: "+ volumeGroupParams, isDebugEnabled)
+
+ def backoutOnFailure = execution.getVariable(prefix+"backoutOnFailure")
+ utils.log("DEBUG", "backoutOnFailure: "+ backoutOnFailure, isDebugEnabled)
+
+ def failIfExists = execution.getVariable("failIfExists")
+ if(failIfExists == null) {
+ failIfExists = 'true'
+ }
+
+ String messageId = UUID.randomUUID()
+ utils.log("DEBUG", "messageId to be used is generated: " + messageId, isDebugEnabled)
+
+ def notificationUrl = createCallbackURL(execution, "VNFAResponse", messageId)
+ def useQualifiedHostName = execution.getVariable("URN_mso_use_qualified_host")
+ if ('true'.equals(useQualifiedHostName)) {
+ notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl)
+ }
+ utils.log("DEBUG", "CreateVfModuleVolume - notificationUrl: "+ notificationUrl, isDebugEnabled)
+
+ // build request
+ String vnfSubCreateWorkflowRequest =
+ """
+ <createVolumeGroupRequest>
+ <cloudSiteId>${cloudSiteId}</cloudSiteId>
+ <tenantId>${tenantId}</tenantId>
+ <vnfId>${vnfId}</vnfId>
+ <vnfName>${vnfName}</vnfName>
+ <volumeGroupId>${volumeGroupId}</volumeGroupId>
+ <volumeGroupName>${volumeGroupnName}</volumeGroupName>
+ <vnfType>${vnfType}</vnfType>
+ <vnfVersion>${vnfVersion}</vnfVersion>
+ <vfModuleType>${vnfModuleType}</vfModuleType>
+ <modelCustomizationUuid>${modelCustomizationId}</modelCustomizationUuid>
+ <volumeGroupParams>
+ <entry>
+ <key>vnf_id</key>
+ <value>${vnfId}</value>
+ </entry>
+ <entry>
+ <key>vnf_name</key>
+ <value>${vnfName}</value>
+ </entry>
+ <entry>
+ <key>vf_module_id</key>
+ <value>${volumeGroupId}</value>
+ </entry>
+ <entry>
+ <key>vf_module_name</key>
+ <value>${volumeGroupnName}</value>
+ </entry>
+ ${volumeGroupParams}
+ </volumeGroupParams>
+ <skipAAI>true</skipAAI>
+ <backout>${backoutOnFailure}</backout>
+ <failIfExists>${failIfExists}</failIfExists>
+ <msoRequest>
+ <requestId>${requestId}</requestId>
+ <serviceInstanceId>${serviceId}</serviceInstanceId>
+ </msoRequest>
+ <messageId>${messageId}</messageId>
+ <notificationUrl>${notificationUrl}</notificationUrl>
+ </createVolumeGroupRequest>
+ """
+
+ String vnfSubCreateWorkflowRequestAsString = utils.formatXml(vnfSubCreateWorkflowRequest)
+ utils.logAudit(vnfSubCreateWorkflowRequestAsString)
+ utils.log('DEBUG', vnfSubCreateWorkflowRequestAsString, isDebugEnabled)
+ execution.setVariable(prefix+"createVnfARequest", vnfSubCreateWorkflowRequestAsString)
+
+ // build rollback request for use later if needed
+
+ String vnfSubRollbackWorkflowRequest =
+ """<rollbackVolumeGroupRequest>
+ <cloudSiteId>${cloudSiteId}</cloudSiteId>
+ <tenantId>${tenantId}</tenantId>
+ <volumeGroupId>${volumeGroupId}</volumeGroupId>
+ <skipAAI>true</skipAAI>
+ <volumeGroupCreated>true</volumeGroupCreated>
+ <msoRequest>
+ <requestId>${requestId}</requestId>
+ <serviceInstanceId>${serviceId}</serviceInstanceId>
+ </msoRequest>
+ <messageId>${messageId}</messageId>
+ <notificationUrl>${notificationUrl}</notificationUrl>
+ </rollbackVolumeGroupRequest>"""
+
+ utils.log("DEBUG", "Sub Vnf flow rollback request: vnfSubRollbackWorkflowRequest " + "\n" + vnfSubRollbackWorkflowRequest, isDebugEnabled)
+
+ String vnfSubRollbackWorkflowRequestAsString = utils.formatXml(vnfSubRollbackWorkflowRequest)
+ execution.setVariable(prefix+"rollbackVnfARequest", vnfSubRollbackWorkflowRequestAsString)
+ }
+
+
+ /**
+ * Validate VNF adapter response
+ * @param execution
+ */
+ public void validateVnfResponse(Execution execution, isDebugEnabled) {
+ def vnfSuccess = execution.getVariable('VNFREST_SuccessIndicator')
+ utils.log("DEBUG", "vnfAdapterSuccessIndicator: "+ vnfSuccess, isDebugEnabled)
+ if(vnfSuccess==true) {
+ def vnfRollbackRequest = execution.getVariable(prefix+"rollbackVnfARequest")
+ utils.log("DEBUG", "vnfAdapter rollback request: "+ vnfRollbackRequest, isDebugEnabled)
+ RollbackData rollbackData = execution.getVariable("rollbackData")
+ rollbackData.put("DCVFMODULEVOL", "rollbackVnfARequest", vnfRollbackRequest)
+ rollbackData.put("DCVFMODULEVOL", "isCreateVnfRollbackNeeded", "true")
+ }
+
+ }
+
+
+ /**
+ * Update voulume group in AAI
+ * @TODO: Can we re-use the create method??
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTUpdateCreatedVolGrpName(Execution execution, isDebugEnabled) {
+
+ String requeryAAIVolGrpNameResponse = execution.getVariable(prefix+"queryAAIVolGrpNameResponse")
+ String volumeGroupId = utils.getNodeText1(requeryAAIVolGrpNameResponse, "volume-group-id")
+ String modelCustomizationId = execution.getVariable("modelCustomizationId")
+ String cloudRegion = execution.getVariable("lcpCloudRegionId")
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String updateAAIVolumeGroupUrlRequest = aaiEndpoint + '/' + cloudRegion + "/volume-groups/volume-group/" + UriUtils.encode(volumeGroupId, 'UTF-8')
+
+ String namespace = aaiUtil.getNamespaceFromUri(aaiUtil.getCloudInfrastructureCloudRegionUri(execution))
+
+ utils.logAudit(updateAAIVolumeGroupUrlRequest)
+ utils.log("DEBUG", "updateAAIVolumeGroupUrlRequest - " + updateAAIVolumeGroupUrlRequest, isDebugEnabled)
+
+ String createVnfAResponse = execution.getVariable(prefix+"createVnfAResponse")
+ def heatStackID = utils.getNodeText1(createVnfAResponse, "volumeGroupStackId")
+
+ execution.setVariable(prefix+"heatStackId", heatStackID)
+
+ NetworkUtils networkUtils = new NetworkUtils()
+ String payload = networkUtils.updateCloudRegionVolumeRequest(requeryAAIVolGrpNameResponse, heatStackID, namespace, modelCustomizationId)
+ String payloadXml = utils.formatXml(payload)
+
+ utils.logAudit("Payload to Update Created VolumeGroupName - " + "\n" + payloadXml)
+
+ APIResponse response = aaiUtil.executeAAIPutCall(execution, updateAAIVolumeGroupUrlRequest, payloadXml)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI create volume group return code: " + returnCode)
+ utils.logAudit("AAI create volume group response: " + aaiResponseAsString)
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+ if (returnCode =='200') {
+ execution.setVariable(prefix+"updateCreatedAAIVolumeGrpNameResponse", aaiResponseAsString)
+ execution.setVariable(prefix+"isPONR", true)
+ } else {
+ execution.setVariable(prefix+"isErrorMessageException", true)
+ if (returnCode=='404') {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Unable to update volume group in AAI. Response code: 404")
+ } else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ utils.log("DEBUG", " AAI Adapter Query Failed. WorkflowException - " + "\n" + aWorkflowException, isDebugEnabled)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+
+ /**
+ * Query AAI Generic VNF
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTQueryAAIGenericVnf(Execution execution, isDebugEnabled) {
+
+ def vnfId = execution.getVariable('vnfId')
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getNetworkGenericVnfEndpoint(execution)
+ def String queryAAIRequest = aaiEndpoint + "/" + UriUtils.encode(vnfId, "UTF-8")
+
+ utils.logAudit("AAI query generic vnf request: " + queryAAIRequest)
+
+ APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIRequest)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI query generic vnf return code: " + returnCode)
+ utils.logAudit("AAI query generic vnf response: " + aaiResponseAsString)
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+ if (returnCode=='200') {
+ utils.log("DEBUG", 'Generic vnf ' + vnfId + ' found in AAI.', isDebugEnabled)
+ execution.setVariable(prefix+'AAIQueryGenericVfnResponse', aaiResponseAsString)
+ } else {
+ if (returnCode=='404') {
+ def message = 'Generic vnf ' + vnfId + ' was not found in AAI. Return code: 404.'
+ utils.log("DEBUG", message, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, message)
+ } else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnf.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnf.groovy index 8a6cac4a91..0fa08fdc4e 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnf.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnf.groovy @@ -23,12 +23,14 @@ import static org.apache.commons.lang3.StringUtils.* import org.openecomp.mso.bpmn.core.RollbackData import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.runtime.Execution +import org.springframework.web.util.UriUtils import org.openecomp.mso.bpmn.common.scripts.AaiUtil import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils import org.openecomp.mso.bpmn.common.scripts.VidUtils import org.openecomp.mso.bpmn.core.WorkflowException +import org.openecomp.mso.bpmn.core.domain.VnfResource import org.openecomp.mso.bpmn.core.json.JsonUtils @@ -64,7 +66,12 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { /*******************/ try{ - // Get Variables + // Get Variables + + def rollbackData = execution.getVariable("rollbackData") + if (rollbackData == null) { + rollbackData = new RollbackData() + } String vnfModelInfo = execution.getVariable("vnfModelInfo") String serviceModelInfo = execution.getVariable("serviceModelInfo") @@ -76,6 +83,7 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { String serviceInstanceId = execution.getVariable("serviceInstanceId") execution.setVariable("DoCVNF_serviceInstanceId", serviceInstanceId) + rollbackData.put("VNF", "serviceInstanceId", serviceInstanceId) utils.log("DEBUG", "Incoming Service Instance Id is: " + serviceInstanceId, isDebugEnabled) String vnfType = execution.getVariable("vnfType") @@ -95,17 +103,18 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { String source = "VID" execution.setVariable("DoCVNF_source", source) + rollbackData.put("VNF", "source", source) utils.log("DEBUG", "Incoming Source is: " + source, isDebugEnabled) String suppressRollback = execution.getVariable("disableRollback") execution.setVariable("DoCVNF_suppressRollback", suppressRollback) utils.log("DEBUG", "Incoming Suppress Rollback is: " + suppressRollback, isDebugEnabled) - String modelInvariantId = jsonUtil.getJsonValue(vnfModelInfo, "modelInvariantId") + String modelInvariantId = jsonUtil.getJsonValue(vnfModelInfo, "modelInvariantUuid") execution.setVariable("DoCVNF_modelInvariantId", modelInvariantId) utils.log("DEBUG", "Incoming Invariant Id is: " + modelInvariantId, isDebugEnabled) - String modelVersionId = jsonUtil.getJsonValue(vnfModelInfo, "modelVersionId") + String modelVersionId = jsonUtil.getJsonValue(vnfModelInfo, "modelUuid") if (modelVersionId == null) { modelVersionId = "" } @@ -120,19 +129,21 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { execution.setVariable("DoCVNF_modelName", modelName) utils.log("DEBUG", "Incoming Model Name is: " + modelName, isDebugEnabled) - String modelCustomizationId = jsonUtil.getJsonValue(vnfModelInfo, "modelCustomizationId") - if (modelCustomizationId == null) { - modelCustomizationId = "" + String modelCustomizationId = jsonUtil.getJsonValue(vnfModelInfo, "modelCustomizationUuid") + if (modelCustomizationId == null) { + modelCustomizationId = "" } execution.setVariable("DoCVNF_modelCustomizationId", modelCustomizationId) utils.log("DEBUG", "Incoming Model Customization Id is: " + modelCustomizationId, isDebugEnabled) String cloudSiteId = execution.getVariable("lcpCloudRegionId") execution.setVariable("DoCVNF_cloudSiteId", cloudSiteId) + rollbackData.put("VNF", "cloudSiteId", cloudSiteId) utils.log("DEBUG", "Incoming Cloud Site Id is: " + cloudSiteId, isDebugEnabled) String tenantId = execution.getVariable("tenantId") execution.setVariable("DoCVNF_tenantId", tenantId) + rollbackData.put("VNF", "tenantId", tenantId) utils.log("DEBUG", "Incoming Tenant Id is: " + tenantId, isDebugEnabled) String globalSubscriberId = execution.getVariable("globalSubscriberId") @@ -186,15 +197,33 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg) } execution.setVariable("DoCVNF_sdncCallbackUrl", sdncCallbackUrl) + rollbackData.put("VNF", "sdncCallbackUrl", sdncCallbackUrl) utils.logAudit("SDNC Callback URL: " + sdncCallbackUrl) logDebug("SDNC Callback URL is: " + sdncCallbackUrl, isDebugEnabled) - def rollbackData = execution.getVariable("RollbackData") - if (rollbackData == null) { - rollbackData = new RollbackData() - } + VnfResource vnfResource = (VnfResource) execution.getVariable("vnfResourceDecomposition") + + String nfRole = vnfResource.getNfRole() + execution.setVariable("DoCVNF_nfRole", nfRole) + logDebug("NF Role is: " + nfRole, isDebugEnabled) - execution.setVariable("RollbackData", rollbackData) + String nfNamingCode = vnfResource.getNfNamingCode() + execution.setVariable("DoCVNF_nfNamingCode", nfNamingCode) + logDebug("NF Naming Code is: " + nfNamingCode, isDebugEnabled) + + String nfType = vnfResource.getNfType() + execution.setVariable("DoCVNF_nfType", nfType) + logDebug("NF Type is: " + nfType, isDebugEnabled) + + String nfFunction = vnfResource.getNfFunction() + execution.setVariable("DoCVNF_nfFunction", nfFunction) + logDebug("NF Function is: " + nfFunction, isDebugEnabled) + + rollbackData.put("VNF", "rollbackSDNCAssign", "false") + rollbackData.put("VNF", "rollbackSDNCActivate", "false") + rollbackData.put("VNF", "rollbackVnfCreate", "false") + + execution.setVariable("rollbackData", rollbackData) }catch(BpmnError b){ utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugEnabled) @@ -229,6 +258,10 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { def modelCustomizationId = execution.getVariable("DoCVNF_modelCustomizationId") // TODO: 1702 Variable def equipmentRole = execution.getVariable("DoCVNF_equipmentRole") + def nfType = execution.getVariable("DoCVNF_nfType") + def nfRole = execution.getVariable("DoCVNF_nfRole") + def nfFunction = execution.getVariable("DoCVNF_nfFunction") + def nfNamingCode = execution.getVariable("DoCVNF_nfNamingCode") //Get Service Instance Info def serviceInstanceId = execution.getVariable("DoCVNF_serviceInstanceId") @@ -240,6 +273,7 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { int serviceStart = siRelatedLink.indexOf("service-subscription/") int serviceEnd = siRelatedLink.indexOf("/service-instances/") String serviceType = siRelatedLink.substring(serviceStart + 21, serviceEnd) + serviceType = UriUtils.decode(serviceType,"UTF-8") //Get Namespace AaiUtil aaiUtil = new AaiUtil(this) @@ -257,6 +291,10 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { <model-invariant-id>${modelInvariantId}</model-invariant-id> <model-version-id>${modelVersionId}</model-version-id> <model-customization-id>${modelCustomizationId}</model-customization-id> + <nf-type>${nfType}</nf-type> + <nf-role>${nfRole}</nf-role> + <nf-function>${nfFunction}</nf-function> + <nf-naming-code>${nfNamingCode}</nf-naming-code> <relationship-list> <relationship> <related-to>service-instance</related-to> @@ -294,9 +332,10 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { try { //Get Vnf Info String vnfId = execution.getVariable("DoCVNF_vnfId") - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") rollbackData.put("VNF", "vnfId", vnfId) - execution.setVariable("RollbackData", rollbackData) + rollbackData.put("VNF", "rollbackVnfCreate", "true") + execution.setVariable("rollbackData", rollbackData) }catch(Exception ex) { utils.log("DEBUG", "Error Occured in DoCreateVnf PostProcessCreateGenericVnf Process " + ex.getMessage(), isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf PostProcessCreateGenericVnf Process") @@ -360,7 +399,7 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { String uuid = execution.getVariable('testReqId') // for junits if(uuid==null){ - uuid = execution.getVariable("mso-request-id") + "-" + System.currentTimeMillis() + uuid = execution.getVariable("DoCVNF_requestId") + "-" + System.currentTimeMillis() } def callbackURL = execution.getVariable("DoCVNF_sdncCallbackUrl") def requestId = execution.getVariable("DoCVNF_requestId") @@ -397,7 +436,7 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation> @@ -467,6 +506,15 @@ class DoCreateVnf extends AbstractServiceTaskProcessor { execution.setVariable("vnfName", vnfName) execution.setVariable("DoCVNF_vnfName", vnfName) } + def rollbackData = execution.getVariable("rollbackData") + if (method.equals("assign")) { + rollbackData.put("VNF", "rollbackSDNCAssign", "true") + } + else if (method.equals("activate")) { + rollbackData.put("VNF", "rollbackSDNCActivate", "true") + } + execution.setVariable("rollbackData", rollbackData) + }else{ logDebug("Received a BAD Response from SDNC Adapter for " + method + " SDNC Call.", isDebugLogEnabled) diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy index daae3d7dac..6ede7e932d 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModules.groovy @@ -20,26 +20,26 @@ package org.openecomp.mso.bpmn.infrastructure.scripts import java.util.UUID; +import java.util.List import org.json.JSONObject; import org.json.JSONArray; - -import org.camunda.bpm.engine.delegate.BpmnError -import org.camunda.bpm.engine.runtime.Execution; - -import static org.apache.commons.lang3.StringUtils.*; - -import org.openecomp.mso.bpmn.core.json.JsonUtils import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil import org.openecomp.mso.bpmn.common.scripts.VidUtils import org.openecomp.mso.bpmn.core.RollbackData import org.openecomp.mso.bpmn.core.WorkflowException -import org.openecomp.mso.bpmn.core.decomposition.ModelInfo -import org.openecomp.mso.bpmn.core.decomposition.ModuleResource -import org.openecomp.mso.bpmn.core.decomposition.ServiceDecomposition -import org.openecomp.mso.bpmn.core.decomposition.VnfResource +import org.openecomp.mso.bpmn.core.domain.ModelInfo +import org.openecomp.mso.bpmn.core.domain.ModuleResource +import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition +import org.openecomp.mso.bpmn.core.domain.VnfResource +import org.openecomp.mso.bpmn.core.json.DecomposeJsonUtil +import org.openecomp.mso.bpmn.core.json.JsonUtils +import org.camunda.bpm.engine.delegate.BpmnError +import org.camunda.bpm.engine.runtime.Execution; + +import static org.apache.commons.lang3.StringUtils.*; @@ -54,6 +54,7 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { JsonUtils jsonUtil = new JsonUtils() VidUtils vidUtils = new VidUtils(this) CatalogDbUtils cutils = new CatalogDbUtils() + DecomposeJsonUtil decomposeJsonUtil = new DecomposeJsonUtil() /** * This method gets and validates the incoming @@ -65,7 +66,8 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { def isDebugEnabled = execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix",Prefix) utils.log("DEBUG", " *** STARTED DoCreateVnfAndModules PreProcessRequest Process*** ", isDebugEnabled) - + + setBasicDBAuthHeader(execution, isDebugLogEnabled) try{ // Get Variables @@ -81,9 +83,6 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { String serviceInstanceId = execution.getVariable("serviceInstanceId") utils.log("DEBUG", "Incoming Service Instance Id is: " + serviceInstanceId, isDebugEnabled) - String vnfType = execution.getVariable("vnfType") - utils.log("DEBUG", "Incoming Vnf Type is: " + vnfType, isDebugEnabled) - String vnfName = execution.getVariable("vnfName") execution.setVariable("CREVI_vnfName", vnfName) utils.log("DEBUG", "Incoming Vnf Name is: " + vnfName, isDebugEnabled) @@ -117,15 +116,20 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { } execution.setVariable("vnfId", vnfId) - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") if (rollbackData == null) { rollbackData = new RollbackData() } - + + def isTest = execution.getVariable("isTest") + + if (isTest == null || isTest == false) { + execution.setVariable("isBaseVfModule", "true") + } execution.setVariable("numOfCreatedAddOnModules", 0) rollbackData.put("VNFANDMODULES", "numOfCreatedAddOnModules", "0") - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) sleep (20000) @@ -148,6 +152,7 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { utils.log("DEBUG", " *** STARTED DoCreateVnfAndModules QueryCatalogDB Process *** ", isDebugEnabled) try { + VnfResource vnf = null ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition") // if serviceDecomposition is specified, get info from serviceDecomposition if (serviceDecomposition != null) { @@ -158,87 +163,77 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { utils.log("DEBUG", "Error - vnfs are empty in serviceDecomposition object", isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vnfs are empty") } - VnfResource vnf = vnfs[0] - utils.log("DEBUG", "Read vnfResource", isDebugEnabled) - if (vnf == null) { - utils.log("DEBUG", "Error - vnf is empty in serviceDecomposition object", isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vnf is null") - } - - List<ModuleResource> vfModules = vnf.getAllVfModuleObjects() - utils.log("DEBUG", "Read vfModules", isDebugEnabled) - if (vfModules == null) { - utils.log("DEBUG", "Error - vfModules are empty in serviceDecomposition object", isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vf modules are empty") - } - JSONArray addOnModules = new JSONArray() - - for (int i = 0; i < vfModules.size; i++) { - utils.log("DEBUG", "handling VF Module ", isDebugEnabled) - ModuleResource vfModule = vfModules[i] - boolean isBase = vfModule.getIsBase() - if (isBase) { - ModelInfo baseVfModuleModelInfoObject = vfModule.getModelInfo() - String baseVfModuleModelInfoWithRoot = baseVfModuleModelInfoObject.toString() - String baseVfModuleModelInfo = jsonUtil.getJsonValue(baseVfModuleModelInfoWithRoot, "modelInfo") - execution.setVariable("baseVfModuleModelInfo", baseVfModuleModelInfo) - String baseVfModuleLabel = vfModule.getVfModuleLabel() - execution.setVariable("baseVfModuleLabel", baseVfModuleLabel) - String basePersonaModelId = baseVfModuleModelInfoObject.getModelInvariantId() - execution.setVariable("basePersonaModelId", basePersonaModelId) - } - else { - addOnModules.put(vfModules[i]) - } - } - - execution.setVariable("addOnModules", addOnModules) - execution.setVariable("addOnModulesToDeploy", addOnModules.length()) - execution.setVariable("addOnModulesDeployed", 0) - + vnf = vnfs[0] + String serviceModelName = serviceDecomposition.getModelInfo().getModelName() + vnf.constructVnfType(serviceModelName) + String vnfType = vnf.getVnfType() + utils.log("DEBUG", "Incoming Vnf Type is: " + vnfType, isDebugEnabled) + execution.setVariable("vnfType", vnfType) } else { //Get Vnf Info String vnfModelInfo = execution.getVariable("vnfModelInfo") utils.log("DEBUG", "vnfModelInfo: " + vnfModelInfo, isDebugEnabled) - String vnfModelCustomizationUuid = jsonUtil.getJsonValueForKey(vnfModelInfo, "modelCustomizationId") + String vnfModelCustomizationUuid = jsonUtil.getJsonValueForKey(vnfModelInfo, "modelCustomizationUuid") if (vnfModelCustomizationUuid == null) { - vnfModelCustomizationUuid = jsonUtil.getJsonValueForKey(vnfModelInfo, "modelCustomizationUuid") + vnfModelCustomizationUuid = "" } utils.log("DEBUG", "querying Catalog DB by vnfModelCustomizationUuid: " + vnfModelCustomizationUuid, isDebugEnabled) - String catalogDbEndpoint = execution.getVariable("URN_mso_catalog_db_endpoint") - - JSONArray vnfs = cutils.getAllVnfsByVnfModelCustomizationUuid(catalogDbEndpoint, + + JSONArray vnfs = cutils.getAllVnfsByVnfModelCustomizationUuid(execution, vnfModelCustomizationUuid) utils.log("DEBUG", "obtained VNF list") // Only one match here - JSONObject vnf = vnfs[0] - JSONArray vfModules = vnf.getJSONArray("vfModules") - JSONArray addOnModules = new JSONArray() - - // Set up base Vf Module info - for (int i = 0; i < vfModules.length(); i++) { - utils.log("DEBUG", "handling VF Module ") - JSONObject vfModule = vfModules[i] - String isBase = jsonUtil.getJsonValueForKey(vfModule, "isBase") - if (isBase.equals("true")) { - JSONObject baseVfModuleModelInfoObject = vfModule.getJSONObject("modelInfo") - String baseVfModuleModelInfo = baseVfModuleModelInfoObject.toString() + JSONObject vnfObject = vnfs[0] + vnf = decomposeJsonUtil.JsonToVnfResource(vnfObject.toString()) + } + utils.log("DEBUG", "Read vnfResource", isDebugEnabled) + if (vnf == null) { + utils.log("DEBUG", "Error - vnf is empty in serviceDecomposition object", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vnf is null") + } + execution.setVariable("vnfResourceDecomposition", vnf) + + List<ModuleResource> vfModules = vnf.getAllVfModuleObjects() + utils.log("DEBUG", "Read vfModules", isDebugEnabled) + if (vfModules == null) { + utils.log("DEBUG", "Error - vfModules are empty in serviceDecomposition object", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf queryCatalogDB, vf modules are empty") + } + + ModuleResource baseVfModule = null + + for (int i = 0; i < vfModules.size; i++) { + utils.log("DEBUG", "handling VF Module ", isDebugEnabled) + ModuleResource vfModule = vfModules[i] + boolean isBase = vfModule.getIsBase() + if (isBase) { + ModelInfo baseVfModuleModelInfoObject = vfModule.getModelInfo() + String baseVfModuleModelInfoWithRoot = baseVfModuleModelInfoObject.toString() + String baseVfModuleModelInfo = jsonUtil.getJsonValue(baseVfModuleModelInfoWithRoot, "modelInfo") execution.setVariable("baseVfModuleModelInfo", baseVfModuleModelInfo) - String baseVfModuleLabel = jsonUtil.getJsonValueForKey(vfModule, "vfModuleLabel") + String baseVfModuleLabel = vfModule.getVfModuleLabel() execution.setVariable("baseVfModuleLabel", baseVfModuleLabel) - String basePersonaModelId = jsonUtil.getJsonValueForKey(baseVfModuleModelInfoObject, "modelInvariantId") + String basePersonaModelId = baseVfModuleModelInfoObject.getModelInvariantUuid() execution.setVariable("basePersonaModelId", basePersonaModelId) - } - else { - addOnModules.put(vfModules[i]) - } - } - - execution.setVariable("addOnModules", addOnModules) - execution.setVariable("addOnModulesToDeploy", addOnModules.length()) - execution.setVariable("addOnModulesDeployed", 0) - } + baseVfModule = vfModule + break + } + + } + + List<ModuleResource>addOnModules = vfModules - baseVfModule + + int addOnModulesToDeploy = 0 + if (addOnModules != null) { + addOnModulesToDeploy = addOnModules.size + } + + utils.log("DEBUG", "AddOnModulesToDeploy: " + addOnModulesToDeploy) + + execution.setVariable("addOnModules", addOnModules) + execution.setVariable("addOnModulesToDeploy", addOnModulesToDeploy) + execution.setVariable("addOnModulesDeployed", 0) }catch(Exception ex) { utils.log("DEBUG", "Error Occured in DoCreateVnfAndModules QueryCatalogDB Process " + ex.getMessage(), isDebugEnabled) @@ -254,7 +249,7 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { execution.setVariable("vnfId", "skask") } - utils.log("DEBUG", "*** COMPLETED CreateVnfInfra PrepareCreateGenericVnf Process ***", isDebugEnabled) + utils.log("DEBUG", "*** COMPLETED DoCreateVnfAndModules QueryCatalogDB Process ***", isDebugEnabled) } public void preProcessAddOnModule(Execution execution){ @@ -263,25 +258,28 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { logDebug(" ======== STARTED preProcessAddOnModule ======== ", isDebugLogEnabled) try { - JSONArray addOnModules = (JSONArray) execution.getVariable("addOnModules") + List<ModuleResource>addOnModules = execution.getVariable("addOnModules") int addOnIndex = (int) execution.getVariable("addOnModulesDeployed") - JSONObject addOnModule = addOnModules[addOnIndex] + ModuleResource addOnModule = addOnModules[addOnIndex] + + utils.log("DEBUG", "Got addon module", isDebugLogEnabled) def newVfModuleId = UUID.randomUUID().toString() execution.setVariable("addOnVfModuleId", newVfModuleId) + execution.setVariable("isBaseVfModule", "false") + + execution.setVariable("instancesOfThisModuleDeployed", 0) - execution.setVariable("instancesOfThisModelDeployed", 0) - - JSONObject addOnVfModuleModelInfoObject = jsonUtil.getJsonValueForKey(addOnModule, "modelInfo") - String addOnVfModuleModelInfoWithRoot = addOnVfModuleModelInfoObject.toString() + ModelInfo addOnVfModuleModelInfoObject = addOnModule.getModelInfo() + String addOnVfModuleModelInfoWithRoot = addOnVfModuleModelInfoObject.toString() String addOnVfModuleModelInfo = jsonUtil.getJsonValue(addOnVfModuleModelInfoWithRoot, "modelInfo") execution.setVariable("addOnVfModuleModelInfo", addOnVfModuleModelInfo) - String addOnVfModuleLabel = jsonUtil.getJsonValueForKey(addOnModule, "vfModuleLabel") + String addOnVfModuleLabel = addOnModule.getVfModuleLabel() execution.setVariable("addOnVfModuleLabel", addOnVfModuleLabel) - String addOnPersonaModelId = jsonUtil.getJsonValueForKey(addOnVfModuleModelInfoObject, "modelInvariantId") + String addOnPersonaModelId = addOnVfModuleModelInfoObject.getModelInvariantUuid() execution.setVariable("addOnPersonaModelId", addOnPersonaModelId) - String addOnInitialCount = jsonUtil.getJsonValueForKey(addOnModule, "initialCount") + int addOnInitialCount = addOnModule.getInitialCount() execution.setVariable("initialCount", addOnInitialCount) @@ -289,9 +287,25 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessAddOnModule Method:\n" + e.getMessage()) } - logDebug("======== COMPLETED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled) + logDebug("======== COMPLETED preProcessAddOnModule ======== ", isDebugLogEnabled) } + public void postProcessAddOnModule(Execution execution){ + def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") + execution.setVariable("prefix", Prefix) + logDebug(" ======== STARTED postProcessAddOnModule ======== ", isDebugLogEnabled) + + try { + int addOnModulesDeployed = execution.getVariable("addOnModulesDeployed") + execution.setVariable("addOnModulesDeployed", addOnModulesDeployed + 1) + + }catch(Exception e){ + utils.log("ERROR", "Exception Occured Processing postProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during postProcessAddOnModule Method:\n" + e.getMessage()) + } + logDebug("======== COMPLETED postProcessAddOnModule ======== ", isDebugLogEnabled) + } + public void validateBaseModule(Execution execution){ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) @@ -299,11 +313,11 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { try { def baseRollbackData = execution.getVariable("DCVAM_baseRollbackData") - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") def baseModuleMap = baseRollbackData.get("VFMODULE") baseModuleMap.each{ k, v -> rollbackData.put("VFMODULE_BASE", "${k}","${v}") } - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) logDebug("addOnModulesDeployed: " + execution.getVariable("addOnModulesDeployed"), isDebugLogEnabled) logDebug("addOnModulesToDeploy: " + execution.getVariable("addOnModulesToDeploy"), isDebugLogEnabled) if (execution.getVariable("addOnModulesDeployed") < execution.getVariable("addOnModulesToDeploy")) { @@ -329,7 +343,7 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { int instancesOfThisModuleDeployed = execution.getVariable("instancesOfThisModuleDeployed") int numOfCreatedAddOnModules = execution.getVariable("numOfCreatedAddOnModules") def addOnRollbackData = execution.getVariable("DCVAM_addOnRollbackData") - def rollbackData = execution.getVariable("RollbackData") + def rollbackData = execution.getVariable("rollbackData") def addOnModuleMap = addOnRollbackData.get("VFMODULE") numOfCreatedAddOnModules = numOfCreatedAddOnModules + 1 @@ -341,29 +355,55 @@ class DoCreateVnfAndModules extends AbstractServiceTaskProcessor { execution.setVariable("numOfCreatedAddOnModules", numOfCreatedAddOnModules) rollbackData.put("VNFANDMODULES", "numOfCreatedAddOnModules", "${numOfCreatedAddOnModules}") - execution.setVariable("RollbackData", rollbackData) + execution.setVariable("rollbackData", rollbackData) }catch(Exception e){ utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessAddOnModule Method:\n" + e.getMessage()) } - logDebug("======== COMPLETED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled) - } + logDebug("======== COMPLETED validateAddOnModule ======== ", isDebugLogEnabled) + } + + public void preProcessRollback (Execution execution) { + def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + utils.log("DEBUG"," ***** preProcessRollback ***** ", isDebugEnabled) + try { + + Object workflowException = execution.getVariable("WorkflowException"); - public void finishProcessingInitialCountDeployment(Execution execution){ - def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled") - execution.setVariable("prefix", Prefix) - logDebug(" ======== STARTED finishProcessingInitialCountDeployment ======== ", isDebugLogEnabled) + if (workflowException instanceof WorkflowException) { + utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled) + execution.setVariable("prevWorkflowException", workflowException); + //execution.setVariable("WorkflowException", null); + } + } catch (BpmnError e) { + utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugEnabled) + } catch(Exception ex) { + String msg = "Exception in preProcessRollback. " + ex.getMessage() + utils.log("DEBUG", msg, isDebugEnabled) + } + utils.log("DEBUG"," *** Exit preProcessRollback *** ", isDebugEnabled) + } + public void postProcessRollback (Execution execution) { + def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + utils.log("DEBUG"," ***** postProcessRollback ***** ", isDebugEnabled) + String msg = "" try { - int addOnModulesDeployed = execution.getVariable("addOnModulesDeployed") - execution.setVariable("addOnModulesDeployed", addOnModulesDeployed + 1) - }catch(Exception e){ - utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessAddOnModule Method:\n" + e.getMessage()) + Object workflowException = execution.getVariable("prevWorkflowException"); + if (workflowException instanceof WorkflowException) { + utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugEnabled) + execution.setVariable("WorkflowException", workflowException); + } + execution.setVariable("rollbackData", null) + } catch (BpmnError b) { + utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugEnabled) + throw b; + } catch(Exception ex) { + msg = "Exception in postProcessRollback. " + ex.getMessage() + utils.log("DEBUG", msg, isDebugEnabled) } - logDebug("======== COMPLETED preProcessSDNCAssignRequest ======== ", isDebugLogEnabled) + utils.log("DEBUG"," *** Exit postProcessRollback *** ", isDebugEnabled) } - -} +}
\ No newline at end of file diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModulesRollback.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModulesRollback.groovy index 7b9bed3f7a..84546e11f2 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModulesRollback.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVnfAndModulesRollback.groovy @@ -31,8 +31,8 @@ import static org.apache.commons.lang3.StringUtils.*; import org.openecomp.mso.bpmn.core.json.JsonUtils
import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
-import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils
import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils
import org.openecomp.mso.bpmn.common.scripts.VidUtils
import org.openecomp.mso.bpmn.core.RollbackData
import org.openecomp.mso.bpmn.core.WorkflowException
@@ -63,12 +63,46 @@ class DoCreateVnfAndModulesRollback extends AbstractServiceTaskProcessor { try{
// Get Rollback Variables
- def rollbackData = execution.getVariable("RollbackData")
+ def rollbackData = execution.getVariable("rollbackData")
utils.log("DEBUG", "Incoming RollbackData is: " + rollbackData.toString(), isDebugEnabled)
+ execution.setVariable("rolledBack", null)
+ execution.setVariable("rollbackError", null)
+
+ if (execution.getVariable("disableRollback").equals("true" ))
+ {
+ execution.setVariable("skipRollback", true)
+ }
+
String vnfId = rollbackData.get("VNF", "vnfId")
utils.log("DEBUG", "Rollback vnfId is: " + vnfId, isDebugEnabled)
execution.setVariable("DCVAMR_vnfId", vnfId)
+ execution.setVariable("mso-request-id", execution.getVariable("msoRequestId"))
+
+ execution.setVariable("DCVAMR_rollbackSDNCAssign", rollbackData.get("VNF", "rollbackSDNCAssign"))
+ execution.setVariable("DCVAMR_rollbackSDNCActivate", rollbackData.get("VNF", "rollbackSDNCActivate"))
+ execution.setVariable("DCVAMR_rollbackVnfCreate", rollbackData.get("VNF", "rollbackVnfCreate"))
+
+ String sdncCallbackUrl = rollbackData.get("VNF", "sdncCallbackUrl")
+ utils.log("DEBUG", "Rollback sdncCallbackUrl is: " + sdncCallbackUrl, isDebugEnabled)
+ execution.setVariable("DCVAMR_sdncCallbackUrl", sdncCallbackUrl)
+
+ String tenantId= rollbackData.get("VNF", "tenantId")
+ utils.log("DEBUG", "Rollback tenantId is: " + tenantId, isDebugEnabled)
+ execution.setVariable("DCVAMR_tenantId", tenantId)
+
+ String source= rollbackData.get("VNF", "source")
+ utils.log("DEBUG", "Rollback source is: " + source, isDebugEnabled)
+ execution.setVariable("DCVAMR_source", source)
+
+ String serviceInstanceId = rollbackData.get("VNF", "serviceInstanceId")
+ utils.log("DEBUG", "Rollback serviceInstanceId is: " + serviceInstanceId, isDebugEnabled)
+ execution.setVariable("DCVAMR_serviceInstanceId", serviceInstanceId)
+
+ String cloudSiteId = rollbackData.get("VNF", "cloudSiteId")
+ utils.log("DEBUG", "Rollback cloudSiteId is: " + cloudSiteId, isDebugEnabled)
+ execution.setVariable("DCVAMR_cloudSiteId", cloudSiteId)
+
def numOfAddOnModulesString = rollbackData.get("VNFANDMODULES", "numOfCreatedAddOnModules")
int numOfAddOnModules = 0
if (numOfAddOnModulesString != null) {
@@ -105,7 +139,7 @@ class DoCreateVnfAndModulesRollback extends AbstractServiceTaskProcessor { try {
- def rollbackData = execution.getVariable("RollbackData")
+ def rollbackData = execution.getVariable("rollbackData")
def vfModuleRollbackData = new RollbackData()
@@ -137,17 +171,193 @@ class DoCreateVnfAndModulesRollback extends AbstractServiceTaskProcessor { def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
execution.setVariable("prefix", Prefix)
logDebug(" ======== STARTED postProcessCreateVfModuleRollback ======== ", isDebugLogEnabled)
+ def rolledBack = false
- try {
+ try {
+ rolledBack = execution.getVariable("DCVM_rolledBack")
def numOfModulesToDelete = execution.getVariable("DCVAMR_numOfModulesToDelete")
execution.setVariable("DCVAMR_numOfModulesToDelete", numOfModulesToDelete - 1)
}catch(Exception e){
utils.log("ERROR", "Exception Occured Processing postProcessCreateVfModuleRollback. Exception is:\n" + e, isDebugLogEnabled)
exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during postProcessCreateVfModuleRollback Method:\n" + e.getMessage())
}
+ if (rolledBack == false) {
+ logDebug("Failure on DoCreateVfModuleRollback", isDebugLogEnabled)
+ utils.log("ERROR", "Unsuccessful rollback of DoCreateVfModule")
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during rollback of DoCreateVfModule")
+ }
logDebug("======== COMPLETED postProcessCreateVfModuleRollback ======== ", isDebugLogEnabled)
}
+ public void preProcessSDNCDeactivateRequest(Execution execution){
+ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled)
+ def vnfId = execution.getVariable("vnfId")
+ def serviceInstanceId = execution.getVariable("serviceInstanceId")
+
+ try{
+ //Build SDNC Request
+
+ String deactivateSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "deactivate")
+
+ deactivateSDNCRequest = utils.formatXml(deactivateSDNCRequest)
+ execution.setVariable(Prefix + "deactivateSDNCRequest", deactivateSDNCRequest)
+ logDebug("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest, isDebugLogEnabled)
+ utils.logAudit("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest)
+
+ }catch(Exception e){
+ utils.log("ERROR", "Exception Occured Processing preProcessSDNCDeactivateRequest. Exception is:\n" + e, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessSDNCDeactivateRequest Method:\n" + e.getMessage())
+ }
+ logDebug("======== COMPLETED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled)
+ }
+
+ public void preProcessSDNCUnassignRequest(Execution execution) {
+ def method = getClass().getSimpleName() + '.preProcessSDNCUnassignRequest(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled)
+ try{
+ String vnfId = execution.getVariable("vnfId")
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+
+ String unassignSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "unassign")
+
+ execution.setVariable(Prefix + "unassignSDNCRequest", unassignSDNCRequest)
+ logDebug("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest, isDebugLogEnabled)
+ utils.logAudit("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest)
+
+ }catch(Exception e){
+ log.debug("Exception Occured Processing preProcessSDNCUnassignRequest. Exception is:\n" + e, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during preProcessSDNCUnassignRequest Method:\n" + e.getMessage())
+ }
+ logDebug("======== COMPLETED preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled)
+ }
+
+ public String buildSDNCRequest(Execution execution, String svcInstId, String action){
+
+ String uuid = execution.getVariable('testReqId') // for junits
+ if(uuid==null){
+ uuid = execution.getVariable("msoRequestId") + "-" + System.currentTimeMillis()
+ }
+ def callbackURL = execution.getVariable(Prefix + "sdncCallbackUrl")
+ def requestId = execution.getVariable("msoRequestId")
+ def tenantId = execution.getVariable(Prefix + "tenantId")
+ def source = execution.getVariable(Prefix + "source")
+ def vnfId = execution.getVariable(Prefix + "vnfId")
+ def serviceInstanceId = execution.getVariable(Prefix + "serviceInstanceId")
+ def cloudSiteId = execution.getVariable(Prefix + "cloudSiteId")
+
+ String sdncRequest =
+ """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+ xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:sdncadapter="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1">
+ <sdncadapter:RequestHeader>
+ <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId>
+ <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId>
+ <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>
+ <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
+ <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>
+ <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+ </sdncadapter:RequestHeader>
+ <sdncadapterworkflow:SDNCRequestData>
+ <request-information>
+ <request-id>${requestId}</request-id>
+ <request-action>DeleteVnfInstance</request-action>
+ <source>${source}</source>
+ <notification-url/>
+ <order-number/>
+ <order-version/>
+ </request-information>
+ <service-information>
+ <service-id/>
+ <subscription-service-type/>
+ <service-instance-id>${serviceInstanceId}</service-instance-id>
+ <global-customer-id/>
+ </service-information>
+ <vnf-information>
+ <vnf-id>${vnfId}</vnf-id>
+ <vnf-type/>
+ </vnf-information>
+ <vnf-request-input>
+ <vnf-name/>
+ <tenant>${tenantId}</tenant>
+ <aic-cloud-region>${cloudSiteId}</aic-cloud-region>
+ </vnf-request-input>
+ </sdncadapterworkflow:SDNCRequestData>
+ </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
+
+ utils.logAudit("sdncRequest: " + sdncRequest)
+ return sdncRequest
+ }
+
+ public void validateSDNCResponse(Execution execution, String response, String method){
+ def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix",Prefix)
+ logDebug(" *** STARTED ValidateSDNCResponse Process*** ", isDebugLogEnabled)
+
+ WorkflowException workflowException = execution.getVariable("WorkflowException")
+ boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
+
+ utils.logAudit("workflowException: " + workflowException)
+
+ SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
+ sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
+
+ utils.logAudit("SDNCResponse: " + response)
+
+ String sdncResponse = response
+ if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){
+ logDebug("Received a Good Response from SDNC Adapter for " + method + " SDNC Call. Response is: \n" + sdncResponse, isDebugLogEnabled)
+ }else{
+ logDebug("Received a BAD Response from SDNC Adapter for " + method + " SDNC Call.", isDebugLogEnabled)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ logDebug(" *** COMPLETED ValidateSDNCResponse Process*** ", isDebugLogEnabled)
+ }
+
+ public void setSuccessfulRollbackStatus (Execution execution){
+ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED setSuccessfulRollbackStatus ======== ", isDebugLogEnabled)
+
+ try{
+ // Set rolledBack to true, rollbackError to null
+ execution.setVariable("rolledBack", true)
+ execution.setVariable("rollbackError", null)
+
+ }catch(Exception e){
+ utils.log("ERROR", "Exception Occured Processing setSuccessfulRollbackStatus. Exception is:\n" + e, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during setSuccessfulRollbackStatus Method:\n" + e.getMessage())
+ }
+ logDebug("======== COMPLETED setSuccessfulRollbackStatus ======== ", isDebugLogEnabled)
+ }
+
+ public void setFailedRollbackStatus (Execution execution){
+ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED setFailedRollbackStatus ======== ", isDebugLogEnabled)
+
+ try{
+ // Set rolledBack to false, rollbackError to actual value, rollbackData to null
+ execution.setVariable("rolledBack", false)
+ def rollbackError = execution.getVariable("rollbackError")
+ if (rollbackError == null) {
+ execution.setVariable("rollbackError", 'Caught exception in DoCreateVnfAndModulesRollback')
+ }
+ execution.setVariable("rollbackData", null)
+
+ }catch(Exception e){
+ utils.log("ERROR", "Exception Occured Processing setFailedRollbackStatus. Exception is:\n" + e, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during setFailedRollbackStatus Method:\n" + e.getMessage())
+ }
+ logDebug("======== COMPLETED setFailedRollbackStatus ======== ", isDebugLogEnabled)
+ }
+
}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstance.groovy index 2bf3e55301..72ee0d8a81 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteNetworkInstance.groovy @@ -415,6 +415,8 @@ public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor { if (utils.nodeExists(networkRequest, "networkModelInfo")) { String networkModelInfo = utils.getNodeXml(networkRequest, "networkModelInfo", false).replace("tag0:","").replace(":tag0","") modelCustomizationUuid = utils.getNodeText1(networkModelInfo, "modelCustomizationUuid") + } else { + modelCustomizationUuid = utils.getNodeText1(networkRequest, "modelCustomizationId") } String deleteNetworkRequest = """ @@ -772,10 +774,10 @@ public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor { String serviceInstanceId = utils.getNodeText1(deleteNetworkInput, "service-instance-id") // 2. prepare rollback topology via SDNC Adapter SUBFLOW call - String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "ActivateNetworkInstance", cloudRegionId, networkId, null) + String sndcTopologyRollbackRpcRequest = sdncAdapterUtils.sdncTopologyRequestRsrc(execution, deleteNetworkInput, serviceInstanceId, sdncCallback, "activate", "CreateNetworkInstance", cloudRegionId, networkId, null) String sndcTopologyRollbackRpcRequestAsString = utils.formatXml(sndcTopologyRollbackRpcRequest) execution.setVariable(Prefix + "rollbackDeactivateSDNCRequest", sndcTopologyRollbackRpcRequestAsString) - utils.log("DEBUG", " Preparing request for RPC SDNC Topology 'activate-ActivateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString, isDebugEnabled) + utils.log("DEBUG", " Preparing request for RPC SDNC Topology 'activate-CreateNetworkInstance' rollback . . . - " + "\n" + sndcTopologyRollbackRpcRequestAsString, isDebugEnabled) } catch (Exception ex) { @@ -892,7 +894,7 @@ public class DoDeleteNetworkInstance extends AbstractServiceTaskProcessor { try { - if (execution.getVariable("sdncVersion") == '1702') { + if (execution.getVariable("sdncVersion") != '1610') { prepareRpcSDNCDeactivateRollback(execution) prepareRpcSDNCUnassignRollback(execution) } else { diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy index 32197c1bc2..338b4cc7bc 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteServiceInstance.groovy @@ -27,7 +27,6 @@ import org.openecomp.mso.bpmn.core.json.JsonUtils import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils -import org.openecomp.mso.bpmn.common.scripts.VidUtils import org.openecomp.mso.bpmn.core.WorkflowException import org.openecomp.mso.rest.APIResponse; import org.openecomp.mso.rest.RESTClient @@ -60,6 +59,7 @@ import org.xml.sax.InputSource * @param - serviceInstanceName - O * @param - serviceModelInfo - O * @param - productFamilyId + * @param - serviceInputParams (should contain aic_zone for serviceTypes TRANSPORT,ATM) * @param - sdncVersion * @param - failNotFound - TODO * @param - serviceInputParams - TODO @@ -74,7 +74,6 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { String Prefix="DDELSI_" ExceptionUtil exceptionUtil = new ExceptionUtil() JsonUtils jsonUtil = new JsonUtils() - VidUtils vidUtils = new VidUtils() public void preProcessRequest (Execution execution) { def isDebugEnabled = execution.getVariable("isDebugLogEnabled") @@ -117,6 +116,30 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { execution.setVariable("sdncCallbackUrl", sdncCallbackUrl) utils.log("DEBUG","SDNC Callback URL: " + sdncCallbackUrl, isDebugEnabled) + StringBuilder sbParams = new StringBuilder() + Map<String, String> paramsMap = execution.getVariable("serviceInputParams") + if (paramsMap != null) + { + sbParams.append("<service-input-parameters>") + for (Map.Entry<String, String> entry : paramsMap.entrySet()) { + String paramsXml + String paramName = entry.getKey() + String paramValue = entry.getValue() + paramsXml = + """ <param> + <name>${paramName}</name> + <value>${paramValue}</value> + </param> + """ + sbParams.append(paramsXml) + } + sbParams.append("</service-input-parameters>") + } + String siParamsXml = sbParams.toString() + if (siParamsXml == null) + siParamsXml = "" + execution.setVariable("siParamsXml", siParamsXml) + } catch (BpmnError e) { throw e; } catch (Exception ex){ @@ -133,12 +156,6 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { String msg = "" try { - /* - String uuid = execution.getVariable('testReqId') // for junits - if(uuid==null){ - uuid = execution.getVariable("msoRequestId") + "-" + System.currentTimeMillis() - } - */ def serviceInstanceId = execution.getVariable("serviceInstanceId") def serviceInstanceName = execution.getVariable("serviceInstanceName") def callbackURL = execution.getVariable("sdncCallbackUrl") @@ -148,25 +165,25 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { def globalSubscriberId = execution.getVariable("globalSubscriberId") //globalCustomerId String serviceModelInfo = execution.getVariable("serviceModelInfo") - def modelInvariantId = "" + def modelInvariantUuid = "" def modelVersion = "" - def modelUUId = "" + def modelUuid = "" def modelName = "" if (!isBlank(serviceModelInfo)) { - modelInvariantId = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantId") + modelInvariantUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelInvariantUuid") modelVersion = jsonUtil.getJsonValue(serviceModelInfo, "modelVersion") - modelUUId = jsonUtil.getJsonValue(serviceModelInfo, "modelVersionId") + modelUuid = jsonUtil.getJsonValue(serviceModelInfo, "modelUuid") modelName = jsonUtil.getJsonValue(serviceModelInfo, "modelName") - - if (modelInvariantId == null) { - modelInvariantId = "" + + if (modelInvariantUuid == null) { + modelInvariantUuid = "" } if (modelVersion == null) { modelVersion = "" } - if (modelUUId == null) { - modelUUId = "" + if (modelUuid == null) { + modelUuid = "" } if (modelName == null) { modelName = "" @@ -178,11 +195,18 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { if (serviceId == null) { serviceId = "" } - + + def siParamsXml = execution.getVariable("siParamsXml") + def serviceType = execution.getVariable("serviceType") + if (serviceType == null) + { + serviceType = "" + } + def sdncRequestId = UUID.randomUUID().toString() String sdncDelete = - """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1" + """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1" xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> @@ -191,6 +215,7 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { <sdncadapter:SvcAction>delete</sdncadapter:SvcAction> <sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation> <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl> + <sdncadapter:MsoAction>${serviceType}</sdncadapter:MsoAction> </sdncadapter:RequestHeader> <sdncadapterworkflow:SDNCRequestData> <request-information> @@ -205,8 +230,8 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { <service-id>${serviceId}</service-id> <subscription-service-type>${subscriptionServiceType}</subscription-service-type> <ecomp-model-information> - <model-invariant-uuid>${modelInvariantId}</model-invariant-uuid> - <model-uuid>${modelUUId}</model-uuid> + <model-invariant-uuid>${modelInvariantUuid}</model-invariant-uuid> + <model-uuid>${modelUuid}</model-uuid> <model-version>${modelVersion}</model-version> <model-name>${modelName}</model-name> </ecomp-model-information> @@ -216,6 +241,7 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { </service-information> <service-request-input> <service-instance-name>${serviceInstanceName}</service-instance-name> + ${siParamsXml} </service-request-input> </sdncadapterworkflow:SDNCRequestData> </sdncadapterworkflow:SDNCAdapterWorkflowRequest>""" @@ -249,7 +275,7 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator") utils.log("DEBUG", "SDNCResponse: " + response, isDebugEnabled) utils.log("DEBUG", "workflowException: " + workflowException, isDebugEnabled) - + SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this) sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator) @@ -280,6 +306,7 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { String serviceInstanceId = execution.getVariable("serviceInstanceId") boolean foundInAAI = execution.getVariable("GENGS_FoundIndicator") + String serviceType = "" if(foundInAAI == true){ utils.log("DEBUG","Found Service-instance in AAI", isDebugEnabled) @@ -304,18 +331,18 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { } //Extract Service Type if not provided on request - String serviceType = execution.getVariable("subscriptionServiceType") - if(isBlank(serviceType)){ + String subscriptionServiceType = execution.getVariable("subscriptionServiceType") + if(isBlank(subscriptionServiceType)){ int serviceStart = siRelatedLink.indexOf("service-subscription/") int serviceEnd = siRelatedLink.indexOf("/service-instances/") String serviceTypeEncoded = siRelatedLink.substring(serviceStart + 21, serviceEnd) - serviceType = UriUtils.decode(serviceTypeEncoded, "UTF-8") - execution.setVariable("subscriptionServiceType", serviceType) + subscriptionServiceType = UriUtils.decode(serviceTypeEncoded, "UTF-8") + execution.setVariable("subscriptionServiceType", subscriptionServiceType) } - if (isBlank(globalSubscriberId) || isBlank(serviceType)) + if (isBlank(globalSubscriberId) || isBlank(subscriptionServiceType)) { - msg = "Could not retrive global-customer-id & service-type from AAI to delete id:" + serviceInstanceId + msg = "Could not retrive global-customer-id & subscription-service-type from AAI to delete id:" + serviceInstanceId utils.log("DEBUG", msg, isDebugEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) } @@ -332,6 +359,11 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { else { utils.log("DEBUG", "SI Data" + siData, isDebugEnabled) + serviceType = utils.getNodeText1(siData,"service-type") + execution.setVariable("serviceType", serviceType) + execution.setVariable("serviceRole", utils.getNodeText1(siData,"service-role")) + String orchestrationStatus = utils.getNodeText1(siData,"orchestration-status") + //Confirm there are no related service instances (vnf/network or volume) if (utils.nodeExists(siData, "relationship-list")) { utils.log("DEBUG", "SI Data relationship-list exists:", isDebugEnabled) @@ -346,8 +378,8 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { if (node.getNodeType() == Node.ELEMENT_NODE) { Element eElement = (Element) node def e = eElement.getElementsByTagName("related-to").item(0).getTextContent() - if(e.equals("generic-vnf") || e.equals("l3-network")){ - utils.log("DEBUG", "ServiceInstance still has relationship(s) to generic-vnfs or l3-networks", isDebugEnabled) + if(e.equals("generic-vnf") || e.equals("l3-network") || e.equals("allotted-resource") ){ + utils.log("DEBUG", "ServiceInstance still has relationship(s) to generic-vnfs, l3-networks or allotted-resources", isDebugEnabled) execution.setVariable("siInUse", true) //there are relationship dependencies to this Service Instance msg = " Stopped deleting Service Instance, it has dependencies. Service instance id: " + serviceInstanceId @@ -359,6 +391,21 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { } } } + + if ("TRANSPORT".equalsIgnoreCase(serviceType)) + { + if ("PendingDelete".equals(orchestrationStatus)) + { + execution.setVariable("skipDeactivate", true) + } + else + { + msg = "ServiceInstance of type TRANSPORT must in PendingDelete status to allow Delete. Orchestration-status:" + orchestrationStatus + utils.log("DEBUG", msg, isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) + } + + } } }else{ boolean succInAAI = execution.getVariable("GENGS_SuccessIndicator") @@ -376,6 +423,7 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { exceptionUtil.buildAndThrowWorkflowException(execution, 2500, msg) } } + utils.log("DEBUG","Service-instance NOT found in AAI. Silent Success", isDebugEnabled) } } catch (BpmnError e) { @@ -387,7 +435,7 @@ public class DoDeleteServiceInstance extends AbstractServiceTaskProcessor { } utils.log("DEBUG"," *** Exit postProcessAAIGET *** ", isDebugEnabled) } - + public void postProcessAAIDEL(Execution execution) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") utils.log("DEBUG"," ***** postProcessAAIDEL ***** ", isDebugEnabled) diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModule.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModule.groovy index cd9c798c09..afb09839b4 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModule.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModule.groovy @@ -36,6 +36,8 @@ import org.springframework.web.util.UriUtils import org.w3c.dom.Document import org.w3c.dom.Element import org.xml.sax.InputSource +import org.w3c.dom.Node +import org.w3c.dom.NodeList; /* Subflow for Delete VF Module. When no DoDeleteVfModuleRequest is specified on input, @@ -51,6 +53,7 @@ import org.xml.sax.InputSource * @param - vfModuleModelInfo * @param - cloudConfiguration* * @param - sdncVersion ("1610") +* @param - retainResources * * Outputs: * @param - WorkflowException @@ -114,7 +117,12 @@ public class DoDeleteVfModule extends AbstractServiceTaskProcessor{ //vfModuleModelName def vfModuleModelName = jsonUtil.getJsonValue(vfModuleModelInfo, "modelName") execution.setVariable("vfModuleModelName", vfModuleModelName) - + // retainResources + def retainResources = execution.getVariable("retainResources") + if (retainResources == null) { + retainResources = false + } + execution.setVariable("retainResources", retainResources) } else { @@ -179,6 +187,11 @@ public class DoDeleteVfModule extends AbstractServiceTaskProcessor{ public void prepSDNCAdapterRequest(Execution execution, String action) { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") + String uuid = execution.getVariable('testReqId') // for junits + if(uuid==null){ + uuid = execution.getVariable("requestId") + "-" + System.currentTimeMillis() + } + def srvInstId = execution.getVariable("srvInstId") def callbackUrl = execution.getVariable("URN_mso_workflow_sdncadapter_callback") String requestId = execution.getVariable("requestId") @@ -198,11 +211,16 @@ public class DoDeleteVfModule extends AbstractServiceTaskProcessor{ } String vfModuleModelName = execution.getVariable("vfModuleModelName") String cloudSiteId = execution.getVariable("cloudSiteId") + boolean retainResources = execution.getVariable("retainResources") + String requestSubActionString = "" + if (retainResources) { + requestSubActionString = "<request-sub-action>RetainResource</request-sub-action>" + } String request = """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1" xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${vfModuleId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation> @@ -212,6 +230,7 @@ public class DoDeleteVfModule extends AbstractServiceTaskProcessor{ <request-information> <request-id>${requestId}</request-id> <request-action>DisconnectVNFRequest</request-action> + ${requestSubActionString} <source>${source}</source> <notification-url/> <order-number/> diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModuleFromVnf.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModuleFromVnf.groovy new file mode 100644 index 0000000000..41663434db --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModuleFromVnf.groovy @@ -0,0 +1,613 @@ +package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import javax.xml.parsers.DocumentBuilder
+import javax.xml.parsers.DocumentBuilderFactory
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.runtime.Execution
+import org.openecomp.mso.bpmn.common.scripts.AaiUtil
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils
+import org.openecomp.mso.bpmn.common.scripts.VfModule
+import org.openecomp.mso.bpmn.common.scripts.VfModuleBase
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.rest.APIResponse
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+import org.springframework.web.util.UriUtils
+import org.w3c.dom.Document
+import org.w3c.dom.Element
+import org.xml.sax.InputSource
+
+public class DoDeleteVfModuleFromVnf extends VfModuleBase {
+
+ def Prefix="DDVFMV_"
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ JsonUtils jsonUtil = new JsonUtils()
+
+ public void initProcessVariables(Execution execution) {
+ execution.setVariable("prefix",Prefix)
+ execution.setVariable("DDVFMV_contrailNetworkPolicyFqdnList", null)
+ }
+
+ // parse the incoming request
+ public void preProcessRequest(Execution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ initProcessVariables(execution)
+
+ try {
+
+ // Building Block-type request
+
+ // Set mso-request-id to request-id for VNF Adapter interface
+ String requestId = execution.getVariable("msoRequestId")
+ execution.setVariable("mso-request-id", requestId)
+ execution.setVariable("requestId", requestId)
+ utils.log("DEBUG", "msoRequestId: " + requestId, isDebugEnabled)
+ String tenantId = execution.getVariable("tenantId")
+ utils.log("DEBUG", "tenantId: " + tenantId, isDebugEnabled)
+ String cloudSiteId = execution.getVariable("lcpCloudRegionId")
+ execution.setVariable("cloudSiteId", cloudSiteId)
+ utils.log("DEBUG", "cloudSiteId: " + cloudSiteId, isDebugEnabled)
+ // Source is HARDCODED
+ String source = "VID"
+ execution.setVariable("source", source)
+ // isVidRequest is hardcoded to "true"
+ execution.setVariable("isVidRequest", "true")
+ // SrvInstId is hardcoded to empty
+ execution.setVariable("srvInstId", "")
+ // ServiceId is hardcoded to empty
+ execution.setVariable("serviceId", "")
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ utils.log("DEBUG", "serviceInstanceId: " + serviceInstanceId, isDebugEnabled)
+ String vnfId = execution.getVariable("vnfId")
+ utils.log("DEBUG", "vnfId: " + vnfId, isDebugEnabled)
+ String vfModuleId = execution.getVariable("vfModuleId")
+ utils.log("DEBUG", "vfModuleId: " + vfModuleId, isDebugEnabled)
+ if (serviceInstanceId == null || serviceInstanceId.isEmpty()) {
+ execution.setVariable(Prefix + "serviceInstanceIdToSdnc", vfModuleId)
+ }
+ else {
+ execution.setVariable(Prefix + "serviceInstanceIdToSdnc", serviceInstanceId)
+ }
+
+ String sdncVersion = execution.getVariable("sdncVersion")
+ if (sdncVersion == null) {
+ sdncVersion = "1707"
+ }
+ execution.setVariable(Prefix + "sdncVersion", sdncVersion)
+ utils.log("DEBUG", "Incoming Sdnc Version is: " + sdncVersion, isDebugEnabled)
+
+ String sdncCallbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback')
+ if (sdncCallbackUrl == null || sdncCallbackUrl.trim().isEmpty()) {
+ def msg = 'Required variable \'URN_mso_workflow_sdncadapter_callback\' is missing'
+ logError(msg)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, msg)
+ }
+ execution.setVariable("sdncCallbackUrl", sdncCallbackUrl)
+ utils.logAudit("SDNC Callback URL: " + sdncCallbackUrl)
+ utils.log("DEBUG:", "SDNC Callback URL is: " + sdncCallbackUrl, isDebugEnabled)
+
+
+
+ }catch(BpmnError b){
+ throw b
+ }catch(Exception e){
+ utils.log("DEBUG", "Exception is: " + e.getMessage(), isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Internal Error encountered in PreProcess method!")
+ }
+ }
+
+ public void queryAAIForVfModule(Execution execution) {
+ def method = getClass().getSimpleName() + '.queryAAIForVfModule(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def vnfId = execution.getVariable('vnfId')
+
+ AaiUtil aaiUriUtil = new AaiUtil(this)
+ def aai_uri = aaiUriUtil.getNetworkGenericVnfUri(execution)
+ logDebug('AAI URI is: ' + aai_uri, isDebugLogEnabled)
+
+ String endPoint = execution.getVariable("URN_aai_endpoint") + "${aai_uri}/" + UriUtils.encode(vnfId, "UTF-8") + "?depth=1"
+
+ utils.logAudit("DoDeleteVfModuleFromVnf: AAI endPoint : " + endPoint)
+
+ try {
+ RESTConfig config = new RESTConfig(endPoint);
+ def responseData = ''
+ def aaiRequestId = UUID.randomUUID().toString()
+ RESTClient client = new RESTClient(config).
+ addHeader('X-TransactionId', aaiRequestId).
+ addHeader('X-FromAppId', 'MSO').
+ addHeader('Content-Type', 'application/xml').
+ addHeader('Accept','application/xml');
+ logDebug('sending GET to AAI endpoint \'' + endPoint + '\'', isDebugLogEnabled)
+ APIResponse response = client.httpGet()
+ utils.logAudit("DoDeleteVfModuleFromVnf: - invoking httpGet to AAI")
+
+ responseData = response.getResponseBodyAsString()
+ execution.setVariable('DDVMFV_getVnfResponseCode', response.getStatusCode())
+ execution.setVariable('DDVMFV_getVnfResponse', responseData)
+
+ utils.logAudit("DoDeleteVfModuleFromVnf: AAI Response : " + responseData)
+ utils.logAudit("DoDeleteVfModuleFromVnf: AAI ResponseCode : " + response.getStatusCode())
+
+ logDebug('Response code:' + response.getStatusCode(), isDebugLogEnabled)
+ logDebug('Response:' + System.lineSeparator() + responseData, isDebugLogEnabled)
+
+ } catch (Exception ex) {
+ ex.printStackTrace()
+ logDebug('Exception occurred while executing AAI GET:' + ex.getMessage(), isDebugLogEnabled)
+ execution.setVariable('DDVMFV_getVnfResponseCode', 500)
+ execution.setVariable('DDVFMV_getVnfResponse', 'AAI GET Failed:' + ex.getMessage())
+ }
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in queryAAIForVfModule(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * Validate the VF Module. That is, confirm that a VF Module with the input VF Module ID
+ * exists in the retrieved Generic VNF. Then, check to make sure that if that VF Module
+ * is the base VF Module and it's not the only VF Module for this Generic VNF, that we're not
+ * attempting to delete it.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void validateVfModule(Execution execution) {
+ def method = getClass().getSimpleName() + '.validateVfModule(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def genericVnf = execution.getVariable('DDVMFV_getVnfResponse')
+ def vnfId = execution.getVariable('_vnfId')
+ def vfModuleId = execution.getVariable('vfModuleId')
+ def VfModule vfModule = findVfModule(genericVnf, vfModuleId)
+ if (vfModule == null) {
+ def String msg = 'VF Module \'' + vfModuleId + '\' does not exist in Generic VNF \'' + vnfId + '\''
+ logDebug(msg, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, msg)
+ } else {
+
+ if (isDebugLogEnabled) {
+ logDebug('VF Module \'' + vfModuleId + '\': isBaseVfModule=' + vfModule.isBaseVfModule() +
+ ', isOnlyVfModule=' + vfModule.isOnlyVfModule(),
+ isDebugLogEnabled)
+ }
+ if (vfModule.isBaseVfModule() && !vfModule.isOnlyVfModule()) {
+ def String msg = 'Cannot delete VF Module \'' + vfModuleId +
+ '\'since it is the base VF Module and it\'s not the only VF Module in Generic VNF \'' + vnfId + '\''
+ logDebug("Received a BAD Response from VNF Adapter for CREATE_VF_MODULE Call.", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "VNF Adapter Error")
+ }
+
+ def heatStackId = vfModule.getElementText('heat-stack-id')
+ execution.setVariable('DDVMFV_heatStackId', heatStackId)
+ logDebug('VF Module heatStackId retrieved from AAI: ' + heatStackId, isDebugLogEnabled)
+ }
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in validateVfModule(): ' + e.getMessage())
+ }
+ }
+
+
+ public void preProcessSDNCDeactivateRequest(Execution execution){
+ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled)
+
+ def serviceInstanceId = execution.getVariable("serviceInstanceId")
+
+ try{
+ //Build SDNC Request
+
+ String deactivateSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "deactivate")
+
+ deactivateSDNCRequest = utils.formatXml(deactivateSDNCRequest)
+ execution.setVariable("DDVMFV_deactivateSDNCRequest", deactivateSDNCRequest)
+ logDebug("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest, isDebugLogEnabled)
+ utils.logAudit("Outgoing DeactivateSDNCRequest is: \n" + deactivateSDNCRequest)
+
+ }catch(Exception e){
+ utils.log("ERROR", "Exception Occured Processing preProcessSDNCDeactivateRequest. Exception is:\n" + e, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during preProcessSDNCDeactivateRequest Method:\n" + e.getMessage())
+ }
+ logDebug("======== COMPLETED preProcessSDNCDeactivateRequest ======== ", isDebugLogEnabled)
+ }
+
+ public void preProcessSDNCUnassignRequest(Execution execution) {
+ def method = getClass().getSimpleName() + '.preProcessSDNCUnassignRequest(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled)
+ try{
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+
+ String unassignSDNCRequest = buildSDNCRequest(execution, serviceInstanceId, "unassign")
+
+ execution.setVariable("DDVMFV_unassignSDNCRequest", unassignSDNCRequest)
+ logDebug("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest, isDebugLogEnabled)
+ utils.logAudit("Outgoing UnassignSDNCRequest is: \n" + unassignSDNCRequest)
+
+ }catch(Exception e){
+ log.debug("Exception Occured Processing preProcessSDNCUnassignRequest. Exception is:\n" + e, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occured during preProcessSDNCUnassignRequest Method:\n" + e.getMessage())
+ }
+ logDebug("======== COMPLETED preProcessSDNCUnassignRequest Process ======== ", isDebugLogEnabled)
+ }
+
+ public String buildSDNCRequest(Execution execution, String svcInstId, String action){
+
+ String uuid = execution.getVariable('testReqId') // for junits
+ if(uuid==null){
+ uuid = execution.getVariable("msoRequestId") + "-" + System.currentTimeMillis()
+ }
+ def callbackURL = execution.getVariable("sdncCallbackUrl")
+ def requestId = execution.getVariable("msoRequestId")
+ def serviceId = execution.getVariable("serviceId")
+ def serviceInstanceId = execution.getVariable("serviceInstanceId")
+ def vfModuleId = execution.getVariable("vfModuleId")
+ def source = execution.getVariable("source")
+ def vnfId = execution.getVariable("vnfId")
+
+ def sdncVersion = execution.getVariable(Prefix + "sdncVersion")
+
+ String sdncRequest =
+ """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.openecomp/mso/request/types/v1"
+ xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:sdncadapter="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1">
+ <sdncadapter:RequestHeader>
+ <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId>
+ <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId>
+ <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction>
+ <sdncadapter:SvcOperation>vf-module-topology-operation</sdncadapter:SvcOperation>
+ <sdncadapter:CallbackUrl>${callbackURL}</sdncadapter:CallbackUrl>
+ <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+ </sdncadapter:RequestHeader>
+ <sdncadapterworkflow:SDNCRequestData>
+ <request-information>
+ <request-id>${requestId}</request-id>
+ <request-action>DeleteVfModuleInstance</request-action>
+ <source>${source}</source>
+ <notification-url/>
+ <order-number/>
+ <order-version/>
+ </request-information>
+ <service-information>
+ <service-id/>
+ <subscription-service-type/>
+ <service-instance-id>${serviceInstanceId}</service-instance-id>
+ <global-customer-id/>
+ </service-information>
+ <vnf-information>
+ <vnf-id>${vnfId}</vnf-id>
+ <vnf-type/>
+ </vnf-information>
+ <vf-module-information>
+ <vf-module-id>${vfModuleId}</vf-module-id>
+ </vf-module-information>
+ <vf-module-request-input/>
+ </sdncadapterworkflow:SDNCRequestData>
+ </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
+
+ utils.logAudit("sdncRequest: " + sdncRequest)
+ return sdncRequest
+ }
+
+ public void validateSDNCResponse(Execution execution, String response, String method){
+ def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix",Prefix)
+ logDebug(" *** STARTED ValidateSDNCResponse Process*** ", isDebugLogEnabled)
+
+ WorkflowException workflowException = execution.getVariable("WorkflowException")
+ boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
+
+ utils.logAudit("workflowException: " + workflowException)
+
+ SDNCAdapterUtils sdncAdapterUtils = new SDNCAdapterUtils(this)
+ sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
+
+ utils.logAudit("SDNCResponse: " + response)
+
+ String sdncResponse = response
+ if(execution.getVariable(Prefix + 'sdncResponseSuccess') == true){
+ logDebug("Received a Good Response from SDNC Adapter for " + method + " SDNC Call. Response is: \n" + sdncResponse, isDebugLogEnabled)
+ }else{
+ logDebug("Received a BAD Response from SDNC Adapter for " + method + " SDNC Call.", isDebugLogEnabled)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ logDebug(" *** COMPLETED ValidateSDNCResponse Process*** ", isDebugLogEnabled)
+ }
+
+
+ // parse the incoming DELETE_VF_MODULE request
+ // and formulate the outgoing VnfAdapterDeleteV1 request
+ public void prepVNFAdapterRequest(Execution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ def requestId = UUID.randomUUID().toString()
+ def origRequestId = execution.getVariable('requestId')
+ def srvInstId = execution.getVariable("serviceInstanceId")
+ def aicCloudRegion = execution.getVariable("cloudSiteId")
+ def vnfId = execution.getVariable("vnfId")
+ def vfModuleId = execution.getVariable("vfModuleId")
+ def vfModuleStackId = execution.getVariable('DDVMFV_heatStackId')
+ def tenantId = execution.getVariable("tenantId")
+ def messageId = execution.getVariable('requestId') + '-' +
+ System.currentTimeMillis()
+ def notificationUrl = createCallbackURL(execution, "VNFAResponse", messageId)
+ def useQualifiedHostName = execution.getVariable("URN_mso_use_qualified_host")
+ if ('true'.equals(useQualifiedHostName)) {
+ notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl)
+ }
+
+ String request = """
+ <deleteVfModuleRequest>
+ <cloudSiteId>${aicCloudRegion}</cloudSiteId>
+ <tenantId>${tenantId}</tenantId>
+ <vnfId>${vnfId}</vnfId>
+ <vfModuleId>${vfModuleId}</vfModuleId>
+ <vfModuleStackId>${vfModuleStackId}</vfModuleStackId>
+ <skipAAI>true</skipAAI>
+ <msoRequest>
+ <requestId>${origRequestId}</requestId>
+ <serviceInstanceId>${srvInstId}</serviceInstanceId>
+ </msoRequest>
+ <messageId>${messageId}</messageId>
+ <notificationUrl>${notificationUrl}</notificationUrl>
+ </deleteVfModuleRequest>
+ """ as String
+
+ utils.log("DEBUG", "vnfAdapterRestV1Request: " + request, isDebugEnabled)
+ utils.logAudit("deleteVfModuleRequest: " + request)
+ execution.setVariable("vnfAdapterRestV1Request", request)
+ }
+
+
+ // generates a WorkflowException if
+ // -
+ public void handleDoDeleteVfModuleFailure(Execution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ utils.log("ERROR", "AAI error occurred deleting the Generic Vnf: "
+ + execution.getVariable("DDVFMV_deleteGenericVnfResponse"), isDebugEnabled)
+ String processKey = getProcessKey(execution);
+ WorkflowException exception = new WorkflowException(processKey, 5000,
+ execution.getVariable("DDVFMV_deleteGenericVnfResponse"))
+ execution.setVariable("WorkflowException", exception)
+ }
+
+ public void postProcessVNFAdapterRequest(Execution execution) {
+ def method = getClass().getSimpleName() + '.postProcessVNFAdapterRequest(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable("prefix",Prefix)
+ try{
+ logDebug(" *** STARTED postProcessVNFAdapterRequest Process*** ", isDebugLogEnabled)
+
+ String vnfResponse = execution.getVariable("DDVMFV_doDeleteVfModuleResponse")
+ logDebug("VNF Adapter Response is: " + vnfResponse, isDebugLogEnabled)
+ utils.logAudit("deleteVnfAResponse is: \n" + vnfResponse)
+
+ if(vnfResponse != null){
+
+ if(vnfResponse.contains("deleteVfModuleResponse")){
+ logDebug("Received a Good Response from VNF Adapter for DELETE_VF_MODULE Call.", isDebugLogEnabled)
+ execution.setVariable("DDVFMV_vnfVfModuleDeleteCompleted", true)
+
+ // Parse vnfOutputs for contrail network polcy FQDNs
+ if (vnfResponse.contains("vfModuleOutputs")) {
+ def vfModuleOutputsXml = utils.getNodeXml(vnfResponse, "vfModuleOutputs")
+ InputSource source = new InputSource(new StringReader(vfModuleOutputsXml));
+ DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
+ docFactory.setNamespaceAware(true)
+ DocumentBuilder docBuilder = docFactory.newDocumentBuilder()
+ Document outputsXml = docBuilder.parse(source)
+
+ NodeList entries = outputsXml.getElementsByTagNameNS("*", "entry")
+ List contrailNetworkPolicyFqdnList = []
+ for (int i = 0; i< entries.getLength(); i++) {
+ Node node = entries.item(i)
+ if (node.getNodeType() == Node.ELEMENT_NODE) {
+ Element element = (Element) node
+ String key = element.getElementsByTagNameNS("*", "key").item(0).getTextContent()
+ if (key.endsWith("contrail_network_policy_fqdn")) {
+ String contrailNetworkPolicyFqdn = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()
+ logDebug("Obtained contrailNetworkPolicyFqdn: " + contrailNetworkPolicyFqdn, isDebugLogEnabled)
+ contrailNetworkPolicyFqdnList.add(contrailNetworkPolicyFqdn)
+ }
+ else if (key.equals("oam_management_v4_address")) {
+ String oamManagementV4Address = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()
+ logDebug("Obtained oamManagementV4Address: " + oamManagementV4Address, isDebugLogEnabled)
+ execution.setVariable(Prefix + "oamManagementV4Address", oamManagementV4Address)
+ }
+ else if (key.equals("oam_management_v6_address")) {
+ String oamManagementV6Address = element.getElementsByTagNameNS("*", "value").item(0).getTextContent()
+ logDebug("Obtained oamManagementV6Address: " + oamManagementV6Address, isDebugLogEnabled)
+ execution.setVariable(Prefix + "oamManagementV6Address", oamManagementV6Address)
+ }
+
+ }
+ }
+ if (!contrailNetworkPolicyFqdnList.isEmpty()) {
+ logDebug("Setting the fqdn list", isDebugLogEnabled)
+ execution.setVariable("DDVFMV_contrailNetworkPolicyFqdnList", contrailNetworkPolicyFqdnList)
+ }
+ }
+ }else{
+ logDebug("Received a BAD Response from VNF Adapter for DELETE_VF_MODULE Call.", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "VNF Adapter Error")
+ }
+ }else{
+ logDebug("Response from VNF Adapter is Null for DELETE_VF_MODULE Call.", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Empty response from VNF Adapter")
+ }
+
+ }catch(BpmnError b){
+ throw b
+ }catch(Exception e){
+ logDebug("Internal Error Occured in PostProcess Method", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Internal Error Occured in PostProcess Method")
+ }
+ logDebug(" *** COMPLETED postProcessVnfAdapterResponse Process*** ", isDebugLogEnabled)
+ }
+
+ public void deleteNetworkPoliciesFromAAI(Execution execution) {
+ def method = getClass().getSimpleName() + '.deleteNetworkPoliciesFromAAI(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED deleteNetworkPoliciesFromAAI ======== ", isDebugLogEnabled)
+
+ try {
+ // get variables
+ List fqdnList = execution.getVariable("DDVFMV_contrailNetworkPolicyFqdnList")
+ if (fqdnList == null) {
+ logDebug("No network policies to delete", isDebugLogEnabled)
+ return
+ }
+ int fqdnCount = fqdnList.size()
+
+ execution.setVariable("DDVFMV_networkPolicyFqdnCount", fqdnCount)
+ logDebug("DDVFMV_networkPolicyFqdnCount - " + fqdnCount, isDebugLogEnabled)
+
+ String aai_endpoint = execution.getVariable("URN_aai_endpoint")
+ AaiUtil aaiUriUtil = new AaiUtil(this)
+ String aai_uri = aaiUriUtil.getNetworkPolicyUri(execution)
+
+ if (fqdnCount > 0) {
+ // AII loop call over contrail network policy fqdn list
+ for (i in 0..fqdnCount-1) {
+
+ int counting = i+1
+ String fqdn = fqdnList[i]
+
+ // Query AAI for this network policy FQDN
+
+ String queryNetworkPolicyByFqdnAAIRequest = "${aai_endpoint}${aai_uri}?network-policy-fqdn=" + UriUtils.encode(fqdn, "UTF-8")
+ utils.logAudit("AAI request endpoint: " + queryNetworkPolicyByFqdnAAIRequest)
+ logDebug("AAI request endpoint: " + queryNetworkPolicyByFqdnAAIRequest, isDebugLogEnabled)
+
+ APIResponse response = aaiUriUtil.executeAAIGetCall(execution, queryNetworkPolicyByFqdnAAIRequest)
+ int returnCode = response.getStatusCode()
+ execution.setVariable("DCVFM_aaiQueryNetworkPolicyByFqdnReturnCode", returnCode)
+ logDebug(" ***** AAI query network policy Response Code, NetworkPolicy #" + counting + " : " + returnCode, isDebugLogEnabled)
+
+ String aaiResponseAsString = response.getResponseBodyAsString()
+
+ if (isOneOf(returnCode, 200, 201)) {
+ logDebug("The return code is: " + returnCode, isDebugLogEnabled)
+ // This network policy FQDN exists in AAI - need to delete it now
+ utils.logAudit(aaiResponseAsString)
+ execution.setVariable("DDVFMV_queryNetworkPolicyByFqdnAAIResponse", aaiResponseAsString)
+ logDebug("QueryAAINetworkPolicyByFQDN Success REST Response, , NetworkPolicy #" + counting + " : " + "\n" + aaiResponseAsString, isDebugLogEnabled)
+ // Retrieve the network policy id for this FQDN
+ def networkPolicyId = utils.getNodeText1(aaiResponseAsString, "network-policy-id")
+ logDebug("Deleting network-policy with network-policy-id " + networkPolicyId, isDebugLogEnabled)
+
+ // Retrieve the resource version for this network policy
+ def resourceVersion = utils.getNodeText1(aaiResponseAsString, "resource-version")
+ logDebug("Deleting network-policy with resource-version " + resourceVersion, isDebugLogEnabled)
+
+ String delNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + UriUtils.encode(networkPolicyId, "UTF-8") +
+ "?resource-version=" + UriUtils.encode(resourceVersion, "UTF-8")
+ utils.logAudit("AAI request endpoint: " + delNetworkPolicyAAIRequest)
+ logDebug("AAI request endpoint: " + delNetworkPolicyAAIRequest, isDebugLogEnabled)
+
+ logDebug("invoking DELETE call to AAI", isDebugLogEnabled)
+ utils.logAudit("Sending DELETE call to AAI with Endpoint /n" + delNetworkPolicyAAIRequest)
+ APIResponse responseDel = aaiUriUtil.executeAAIDeleteCall(execution, delNetworkPolicyAAIRequest)
+ int returnCodeDel = responseDel.getStatusCode()
+ execution.setVariable("DDVFMV_aaiDeleteNetworkPolicyReturnCode", returnCodeDel)
+ logDebug(" ***** AAI delete network policy Response Code, NetworkPolicy #" + counting + " : " + returnCodeDel, isDebugLogEnabled)
+
+ if (isOneOf(returnCodeDel, 200, 201, 204)) {
+ logDebug("The return code from deleting network policy is: " + returnCodeDel, isDebugLogEnabled)
+ // This network policy was deleted from AAI successfully
+ logDebug(" DelAAINetworkPolicy Success REST Response, , NetworkPolicy #" + counting + " : ", isDebugLogEnabled)
+
+ } else {
+ // aai all errors
+ String delErrorMessage = "Unable to delete network-policy to AAI deleteNetworkPoliciesFromAAI - " + returnCodeDel
+ logDebug(delErrorMessage, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, delErrorMessage)
+ }
+ } else if (returnCode == 404) {
+ // This network policy FQDN is not in AAI. No need to delete.
+ logDebug("The return code is: " + returnCode, isDebugLogEnabled)
+ logDebug("This network policy FQDN is not in AAI: " + fqdn, isDebugLogEnabled)
+ utils.logAudit("Network policy FQDN is not in AAI")
+ } else {
+ if (aaiResponseAsString.contains("RESTFault")) {
+ WorkflowException exceptionObject = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ execution.setVariable("WorkflowException", exceptionObject)
+ throw new BpmnError("MSOWorkflowException")
+
+ } else {
+ // aai all errors
+ String dataErrorMessage = "Unexpected Response from deleteNetworkPoliciesFromAAI - " + returnCode
+ logDebug(dataErrorMessage, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
+
+ }
+ }
+
+
+
+ } // end loop
+
+
+ } else {
+ logDebug("No contrail network policies to query/create", isDebugLogEnabled)
+
+ }
+
+ } catch (BpmnError e) {
+ throw e;
+
+ } catch (Exception ex) {
+ String exceptionMessage = "Bpmn error encountered in DoDeletVfModule flow. deleteNetworkPoliciesFromAAI() - " + ex.getMessage()
+ logDebug(exceptionMessage, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+ }
+
+ }
+
+ // and formulate the outgoing DeleteAAIVfModuleRequest request
+ public void prepDeleteAAIVfModule(Execution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+
+ def vnfId = execution.getVariable("vnfId")
+ def vfModuleId = execution.getVariable("vfModuleId")
+ // formulate the request for UpdateAAIVfModule
+ String request = """<DeleteAAIVfModuleRequest>
+ <vnf-id>${vnfId}</vnf-id>
+ <vf-module-id>${vfModuleId}</vf-module-id>
+ </DeleteAAIVfModuleRequest>""" as String
+ utils.log("DEBUG", "DeleteAAIVfModuleRequest :" + request, isDebugEnabled)
+ utils.logAudit("DeleteAAIVfModuleRequest: " + request)
+ execution.setVariable("DeleteAAIVfModuleRequest", request)
+ }
+}
\ No newline at end of file diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModuleVolumeV2.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModuleVolumeV2.groovy new file mode 100644 index 0000000000..c2952ad0f4 --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVfModuleVolumeV2.groovy @@ -0,0 +1,358 @@ +/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - MSO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import groovy.json.JsonSlurper
+import groovy.util.XmlParser;
+
+import java.util.concurrent.ExecutionException;
+
+import org.springframework.web.util.UriUtils
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.runtime.Execution
+import org.openecomp.mso.bpmn.common.scripts.AaiUtil
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.rest.APIResponse
+import org.apache.commons.lang3.*
+
+class DoDeleteVfModuleVolumeV2 extends AbstractServiceTaskProcessor {
+
+ String prefix="DDVMV_"
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ XmlParser xmlParser = new XmlParser()
+ JsonUtils jsonUtil = new JsonUtils()
+
+ @Override
+ public void preProcessRequest(Execution execution) {
+ def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+ preProcessRequest(execution, isDebugEnabled)
+ }
+
+ /**
+ * Set default variable values
+ * @param execution
+ * @param isDebugLogEnabled
+ */
+ public void preProcessRequest (Execution execution, isDebugEnabled) {
+
+ //Input:
+ // msoRequestId
+ // isDebugLogEnabled
+ // failIfNotFound (Optional)
+ // serviceInstanceId (Optional)
+ // vnfId (Optional)
+ // volumeGroupId
+ // vfModuleModelInfo (Optional)
+ // lcpCloudRegionId (Optional) @TODO: this is actually required
+ // tenantId (Optional) @TODO: this is actually required
+ // cloudConfiguration @TODO: temporary solution? this contains lcpCloudregion and tenantId
+ //
+ //Output:
+ // workflowException @TODO: actual variable name is WorkflowException
+ // rolledBack
+ // wasDeleted
+
+ execution.setVariable('prefix', prefix)
+ execution.setVariable('wasDeleted', 'false')
+
+ def tenantId = execution.getVariable("tenantId")
+ def cloudSiteId = execution.getVariable("lcpCloudRegionId")
+
+ // if tenantId or lcpCloudregionId is not passed, get it from cloudRegionConfiguration variable
+ if(!tenantId || !cloudSiteId) {
+ def cloudConfiguration = execution.getVariable("cloudConfiguration")
+ utils.log("DEBUG", "Using cloudConfiguration variable to get tenantId and lcpCloudRegionId - " + cloudConfiguration, isDebugEnabled)
+ tenantId = jsonUtil.getJsonValue(cloudConfiguration, "tenantId")
+ execution.setVariable("tenantId", tenantId)
+ cloudSiteId = jsonUtil.getJsonValue(cloudConfiguration, "lcpCloudRegionId")
+ execution.setVariable("lcpCloudRegionId", cloudSiteId)
+ }
+ }
+
+
+ /**
+ * Set out 'wasDeleted' variable to 'true'
+ * @param execution
+ * @param isDebugLogEnabled
+ */
+ public void postProcess(Execution execution, isDebugLogEnabled) {
+ execution.setVariable('wasDeleted', 'true')
+ }
+
+
+ /**
+ * Query and set cloud region to use for AAI calls
+ * Output variables: prefix+'aicCloudRegion', prefix+'cloudRegion'
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTQueryAAICloudRegion(Execution execution, isDebugEnabled) {
+
+ String cloudRegion = execution.getVariable('lcpCloudRegionId')
+ String aai_endpoint = execution.getVariable("URN_aai_endpoint")
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution)
+ String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion
+ utils.logAudit(queryCloudRegionRequest)
+ utils.log("DEBUG", "AAI query cloud region URI - " + queryCloudRegionRequest, isDebugEnabled)
+
+ cloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "PO", cloudRegion)
+
+ if ((cloudRegion != "ERROR")) {
+ if(execution.getVariable(prefix+"queryCloudRegionReturnCode") == "404") {
+ execution.setVariable(prefix+"aicCloudRegion", "AAIAIC25")
+ }
+ else{
+ execution.setVariable(prefix+"aicCloudRegion", cloudRegion)
+ }
+ }
+ else {
+ utils.log("DEBUG", "AAI Query Cloud Region Unsuccessful.", isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "AAI Query Cloud Region Unsuccessful. Return Code: " + execution.getVariable(prefix+"queryCloudRegionReturnCode"))
+ }
+ }
+
+
+ /**
+ * Query AAI Volume Group
+ * Output variables: prefix+'queryAAIVolGrpResponse'; prefix+'volumeGroupHeatStackId'
+ * @param execution
+ * @param isDebugLogEnabled
+ */
+ public void callRESTQueryAAIForVolumeGroup(Execution execution, isDebugLogEnabled) {
+
+ def tenantId = execution.getVariable('tenantId')
+ def volumeGroupId = execution.getVariable('volumeGroupId')
+ if(volumeGroupId == null) {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, 'volumeGroupId is not provided in the request')
+ throw new Exception('volume-group-id is not provided in the request')
+ }
+ String cloudRegion = execution.getVariable(prefix+'aicCloudRegion')
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String queryAAIVolumeGroupRequest = aaiEndpoint + '/' + URLEncoder.encode(cloudRegion, "UTF-8") + "/volume-groups/volume-group/" + UriUtils.encode(volumeGroupId, "UTF-8")
+
+ utils.logAudit('Query AAI volume group by ID: ' + queryAAIVolumeGroupRequest)
+ logDebug('Query AAI volume group by ID: ' + queryAAIVolumeGroupRequest, isDebugLogEnabled)
+
+ APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIVolumeGroupRequest)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI query volume group by id return code: " + returnCode)
+ utils.logAudit("AAI query volume group by id response: " + aaiResponseAsString)
+ logDebug('AAI query volume group by id return code: ' + returnCode, isDebugLogEnabled)
+ logDebug('AAI query volume group by id response: ' + aaiResponseAsString, isDebugLogEnabled)
+
+ execution.setVariable(prefix+"queryAAIVolGrpResponse", aaiResponseAsString)
+
+ if (returnCode=='200' || returnCode == '204') {
+
+ def heatStackId = getNodeTextForce(aaiResponseAsString, 'heat-stack-id')
+ execution.setVariable(prefix+'volumeGroupHeatStackId', heatStackId)
+
+ logDebug('Heat stack id from AAI response: ' + heatStackId, isDebugLogEnabled)
+
+ if(hasVfModuleRelationship(aaiResponseAsString)){
+ utils.log("DEBUG", 'Volume Group ' + volumeGroupId + ' currently in use', isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume Group ${volumeGroupId} currently in use - found vf-module relationship.")
+ }
+
+ def volumeGroupTenantId = getTenantIdFromVolumeGroup(aaiResponseAsString)
+ logDebug('Tenant ID from AAI response: ' + volumeGroupTenantId, isDebugLogEnabled)
+
+ if (volumeGroupTenantId == null) {
+ utils.log("DEBUG", "Could not find Tenant Id element in Volume Group with Volume Group Id ${volumeGroupId}", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Could not find Tenant Id element in Volume Group with Volume Group Id ${volumeGroupId}")
+ }
+
+ if (volumeGroupTenantId != tenantId) {
+ def String errorMessage = 'TenantId ' + tenantId + ' in incoming request does not match Tenant Id ' + volumeGroupTenantId + ' retrieved from AAI for Volume Group Id ' + volumeGroupId
+ utils.log("DEBUG", "Error in DeleteVfModuleVolume: " + errorMessage, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 5000, errorMessage)
+ }
+ logDebug('Received Tenant Id ' + volumeGroupTenantId + ' from AAI for Volume Group with Volume Group Id ' + volumeGroupId , isDebugLogEnabled)
+ }
+ else {
+ if (returnCode=='404') {
+ utils.log("DEBUG", "Volume Group ${volumeGroupId} not found in AAI", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume Group ${volumeGroupId} not found in AAI. Response code: 404")
+ }
+ else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+ /**
+ * Format VNF Adapter subflow request XML
+ * Variables: prefix+'deleteVnfARequest'
+ * @param execution
+ * @param isDebugLogEnabled
+ */
+ public void prepareVnfAdapterDeleteRequest(Execution execution, isDebugLogEnabled) {
+ def cloudRegion = execution.getVariable(prefix+'aicCloudRegion')
+ def tenantId = execution.getVariable('tenantId') // input parameter (optional) - see preProcessRequest
+ def volumeGroupId = execution.getVariable('volumeGroupId') // input parameter (required)
+ def volumeGroupHeatStackId = execution.getVariable(prefix+'volumeGroupHeatStackId') // from AAI query volume group
+ def requestId = execution.getVariable('msoRequestId') // input parameter (required)
+ def serviceId = execution.getVariable('serviceInstanceId') // imput parameter (optional)
+
+ def messageId = UUID.randomUUID().toString()
+ def notificationUrl = createCallbackURL(execution, "VNFAResponse", messageId)
+ def useQualifiedHostName = execution.getVariable("URN_mso_use_qualified_host")
+ if ('true'.equals(useQualifiedHostName)) {
+ notificationUrl = utils.getQualifiedHostNameForCallback(notificationUrl)
+ }
+
+ String vnfAdapterRestRequest = """
+ <deleteVolumeGroupRequest>
+ <cloudSiteId>${cloudRegion}</cloudSiteId>
+ <tenantId>${tenantId}</tenantId>
+ <volumeGroupId>${volumeGroupId}</volumeGroupId>
+ <volumeGroupStackId>${volumeGroupHeatStackId}</volumeGroupStackId>
+ <skipAAI>true</skipAAI>
+ <msoRequest>
+ <requestId>${requestId}</requestId>
+ <serviceInstanceId>${serviceId}</serviceInstanceId>
+ </msoRequest>
+ <messageId>${messageId}</messageId>
+ <notificationUrl>${notificationUrl}</notificationUrl>
+ </deleteVolumeGroupRequest>
+ """
+ vnfAdapterRestRequest = utils.formatXml(vnfAdapterRestRequest)
+ execution.setVariable(prefix+'deleteVnfARequest', vnfAdapterRestRequest)
+ logDebug('Request for VNFAdapter Rest:\n' + vnfAdapterRestRequest, isDebugLogEnabled)
+ }
+
+
+ /**
+ * Delete volume group in AAI
+ * @param execution
+ * @param isDebugEnabled
+ */
+ public void callRESTDeleteAAIVolumeGroup(Execution execution, isDebugEnabled) {
+
+ // get variables
+ String queryAAIVolGrpIdResponse = execution.getVariable(prefix+"queryAAIVolGrpResponse")
+ String groupId = utils.getNodeText(queryAAIVolGrpIdResponse, "volume-group-id")
+ String resourceVersion = utils.getNodeText(queryAAIVolGrpIdResponse, "resource-version")
+
+ String messageId = UUID.randomUUID().toString()
+ String cloudRegion = execution.getVariable(prefix+'aicCloudRegion')
+
+ AaiUtil aaiUtil = new AaiUtil(this)
+ String aaiEndpoint = aaiUtil.getCloudInfrastructureCloudRegionEndpoint(execution)
+ String deleteAAIVolumeGrpIdRequest = aaiEndpoint + '/' + URLEncoder.encode(cloudRegion, "UTF-8") + "/volume-groups/volume-group/" + UriUtils.encode(groupId, "UTF-8")
+
+ if(resourceVersion !=null){
+ deleteAAIVolumeGrpIdRequest = deleteAAIVolumeGrpIdRequest +'?resource-version=' + UriUtils.encode(resourceVersion, 'UTF-8')
+ }
+
+ utils.logAudit('Delete AAI volume group : ' + deleteAAIVolumeGrpIdRequest)
+ utils.log("DEBUG", "Delete AAI volume group : " + deleteAAIVolumeGrpIdRequest, isDebugEnabled)
+
+ APIResponse response = aaiUtil.executeAAIDeleteCall(execution, deleteAAIVolumeGrpIdRequest)
+
+ String returnCode = response.getStatusCode()
+ String aaiResponseAsString = response.getResponseBodyAsString()
+ aaiResponseAsString = StringEscapeUtils.unescapeXml(aaiResponseAsString)
+
+ utils.logAudit("AAI delete volume group return code: " + returnCode)
+ utils.logAudit("AAI delete volume group response: " + aaiResponseAsString)
+ utils.log("DEBUG", "AAI delete volume group return code: " + returnCode, isDebugEnabled)
+ utils.log("DEBUG", "AAI delete volume group response: " + aaiResponseAsString, isDebugEnabled)
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ if (returnCode=='200' || (returnCode == '204')) {
+ utils.log("DEBUG", "Volume group $groupId deleted.", isDebugEnabled)
+ } else {
+ if (returnCode=='404') {
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Volume group $groupId not found for delete in AAI Response code: 404")
+ } else {
+ WorkflowException aWorkflowException = exceptionUtil.MapAAIExceptionToWorkflowException(aaiResponseAsString, execution)
+ throw new BpmnError("MSOWorkflowException")
+ }
+ }
+ }
+
+
+ /**
+ * Check if volume group has a relationship to vf-module
+ * @param volumeGroupXml
+ * @return
+ */
+ private boolean hasVfModuleRelationship(String volumeGroupXml) {
+ def Node volumeGroupNode = xmlParser.parseText(volumeGroupXml)
+ def Node relationshipList = utils.getChildNode(volumeGroupNode, 'relationship-list')
+ if (relationshipList != null) {
+ def NodeList relationships = utils.getIdenticalChildren(relationshipList, 'relationship')
+ for (Node relationship in relationships) {
+ def Node relatedTo = utils.getChildNode(relationship, 'related-to')
+ if ((relatedTo != null) && (relatedTo.text().equals('vf-module'))) {
+ def Node relatedLink = utils.getChildNode(relationship, 'related-link')
+ if (relatedLink !=null && relatedLink.text() != null){
+ return true
+ }
+ }
+ }
+ }
+ return false
+ }
+
+
+ /**
+ * Extract the Tenant Id from the Volume Group information returned by AAI.
+ * @param volumeGroupXml Volume Group XML returned by AAI.
+ * @return the Tenant Id extracted from the Volume Group information. 'null' is returned if
+ * the Tenant Id is missing or could not otherwise be extracted.
+ */
+ private String getTenantIdFromVolumeGroup(String volumeGroupXml) {
+ def Node volumeGroupNode = xmlParser.parseText(volumeGroupXml)
+ def Node relationshipList = utils.getChildNode(volumeGroupNode, 'relationship-list')
+ if (relationshipList != null) {
+ def NodeList relationships = utils.getIdenticalChildren(relationshipList, 'relationship')
+ for (Node relationship in relationships) {
+ def Node relatedTo = utils.getChildNode(relationship, 'related-to')
+ if ((relatedTo != null) && (relatedTo.text().equals('tenant'))) {
+ def NodeList relationshipDataList = utils.getIdenticalChildren(relationship, 'relationship-data')
+ for (Node relationshipData in relationshipDataList) {
+ def Node relationshipKey = utils.getChildNode(relationshipData, 'relationship-key')
+ if ((relationshipKey != null) && (relationshipKey.text().equals('tenant.tenant-id'))) {
+ def Node relationshipValue = utils.getChildNode(relationshipData, 'relationship-value')
+ if (relationshipValue != null) {
+ return relationshipValue.text()
+ }
+ }
+ }
+ }
+ }
+ }
+ return null
+ }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVnfAndModules.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVnfAndModules.groovy index 208caa790d..23f036896f 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVnfAndModules.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVnfAndModules.groovy @@ -23,7 +23,6 @@ import java.util.UUID; import org.json.JSONObject; import org.json.JSONArray; - import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.runtime.Execution; @@ -35,12 +34,12 @@ import org.openecomp.mso.rest.RESTClient import org.openecomp.mso.rest.RESTConfig import org.openecomp.mso.bpmn.common.scripts.AaiUtil import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor -import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil import org.openecomp.mso.bpmn.common.scripts.SDNCAdapterUtils import org.openecomp.mso.bpmn.common.scripts.VidUtils import org.openecomp.mso.bpmn.core.RollbackData import org.openecomp.mso.bpmn.core.WorkflowException +import org.springframework.web.util.UriUtils; /** * This class supports the macro VID Flow @@ -69,7 +68,8 @@ class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor { try{ // Get Variables - String cloudConfiguration = execution.getVariable("cloudConfiguration") + String cloudConfiguration = execution.getVariable("cloudConfiguration") + utils.log("DEBUG", "Cloud Configuration: " + cloudConfiguration, isDebugEnabled) String requestId = execution.getVariable("msoRequestId") execution.setVariable("requestId", requestId) @@ -86,6 +86,8 @@ class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor { execution.setVariable("DDVAM_source", source) utils.log("DEBUG", "Incoming Source is: " + source, isDebugEnabled) + execution.setVariable("DDVAM_isVidRequest", "true") + String sdncVersion = execution.getVariable("sdncVersion") if (sdncVersion == null) { sdncVersion = "1702" @@ -165,7 +167,7 @@ class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor { exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoCreateVnf PreProcessRequest") } - utils.log("DEBUG", "*** COMPLETED DoCreateVnfAndModules PreProcessRequest Process ***", isDebugEnabled) + utils.log("DEBUG", "*** COMPLETED DoDeleteVnfAndModules PreProcessRequest Process ***", isDebugEnabled) } @@ -191,7 +193,7 @@ class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor { execution.setVariable("addOnVfModuleModelInfo", addOnVfModuleModelInfo) String addOnVfModuleLabel = jsonUtil.getJsonValueForKey(addOnModule, "vfModuleLabel") execution.setVariable("addOnVfModuleLabel", addOnVfModuleLabel) - String addOnPersonaModelId = jsonUtil.getJsonValueForKey(addOnVfModuleModelInfoObject, "modelInvariantId") + String addOnPersonaModelId = jsonUtil.getJsonValueForKey(addOnVfModuleModelInfoObject, "modelInvariantUuid") execution.setVariable("addOnPersonaModelId", addOnPersonaModelId) String addOnInitialCount = jsonUtil.getJsonValueForKey(addOnModule, "initialCount") execution.setVariable("initialCount", addOnInitialCount) @@ -389,7 +391,7 @@ class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor { String uuid = execution.getVariable('testReqId') // for junits if(uuid==null){ - uuid = execution.getVariable("mso-request-id") + "-" + System.currentTimeMillis() + uuid = execution.getVariable("msoRequestId") + "-" + System.currentTimeMillis() } def callbackURL = execution.getVariable("sdncCallbackUrl") def requestId = execution.getVariable("msoRequestId") @@ -399,7 +401,7 @@ class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor { def vnfId = execution.getVariable("vnfId") def serviceInstanceId = execution.getVariable("serviceInstanceId") def cloudSiteId = execution.getVariable("DDVAM_cloudSiteId") - def modelCustomizationId = execution.getVariable("DDVAM_modelCustomizationId") + def modelCustomizationId = execution.getVariable("DDVAM_modelCustomizationId") //def serviceModelInfo = execution.getVariable("serviceModelInfo") //def vnfModelInfo = execution.getVariable("vnfModelInfo") //String serviceEcompModelInformation = sdncAdapterUtils.modelInfoToEcompModelInformation(serviceModelInfo) @@ -412,7 +414,7 @@ class DoDeleteVnfAndModules extends AbstractServiceTaskProcessor { xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>${action}</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation> diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy index 5bd9f96bc6..7feafcc421 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateNetworkInstance.groovy @@ -539,9 +539,9 @@ public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor { if (aai_uri == null || aai_uri == "") { // using value of 'related-link' from response if (vpnBindingUri[i].charAt(vpnBindingUri[i].length()-1) == '/') { - queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i].substring(0, vpnBindingUri[i].length()-1) + queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i].substring(0, vpnBindingUri[i].length()-1) + "?depth=all" } else { - queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i] + queryVpnBindingAAIRequest = "${aai_endpoint}" + vpnBindingUri[i] + "?depth=all" } } else { @@ -550,7 +550,7 @@ public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor { if (vpnBindingId.charAt(vpnBindingId.length()-1) == '/') { vpnBindingId = vpnBindingId.substring(0, vpnBindingId.length()-1) } - queryVpnBindingAAIRequest = "${aai_endpoint}${aai_uri}/" + vpnBindingId + queryVpnBindingAAIRequest = "${aai_endpoint}${aai_uri}/" + vpnBindingId + "?depth=all" } utils.logAudit(queryVpnBindingAAIRequest) @@ -673,9 +673,9 @@ public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor { if (aai_uri == null || aai_uri == "") { // using value of 'related-link' from response if (networkPolicyUriList[i].charAt(networkPolicyUriList[i].length()-1) == '/') { - queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i].substring(0, networkPolicyUriList[i].length()-1) + queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i].substring(0, networkPolicyUriList[i].length()-1) + "?depth=all" } else { - queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i] + queryNetworkPolicyAAIRequest = "${aai_endpoint}" + networkPolicyUriList[i] + "?depth=all" } } else { // using uri value in URN mapping @@ -684,7 +684,7 @@ public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor { if (networkPolicyId.charAt(networkPolicyId.length()-1) == '/') { networkPolicyId = networkPolicyId.substring(0, networkPolicyId.length()-1) } - queryNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + networkPolicyId + queryNetworkPolicyAAIRequest = "${aai_endpoint}${aai_uri}/" + networkPolicyId + "?depth=all" } @@ -809,9 +809,9 @@ public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor { if (aai_uri == null || aai_uri == "") { // using value of 'related-link' from response if (networkTableRefUriList[i].charAt(networkTableRefUriList[i].length()-1) == '/') { - queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i].substring(0, networkTableRefUriList[i].length()-1) + queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i].substring(0, networkTableRefUriList[i].length()-1) + "?depth=all" } else { - queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i] + queryNetworkTableRefAAIRequest = "${aai_endpoint}" + networkTableRefUriList[i] + "?depth=all" } } else { // using uri value in URN mapping @@ -820,7 +820,7 @@ public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor { if (networkTableRefId.charAt(networkTableRefId.length()-1) == '/') { networkTableRefId = networkTableRefId.substring(0, networkTableRefId.length()-1) } - queryNetworkTableRefAAIRequest = "${aai_endpoint}${aai_uri}/" + networkTableRefId + queryNetworkTableRefAAIRequest = "${aai_endpoint}${aai_uri}/" + networkTableRefId + "?depth=all" } @@ -1308,7 +1308,7 @@ public class DoUpdateNetworkInstance extends AbstractServiceTaskProcessor { try { - if (execution.getVariable("sdncVersion") == '1702') { + if (execution.getVariable("sdncVersion") != '1610') { // skip: 1702 for 'changeassign' or equivalent not yet defined in SNDC, so no rollback. } else { prepareSDNCRollbackRequest(execution) diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateVfModule.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateVfModule.groovy index f07bb0df49..87a6a73fb0 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateVfModule.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateVfModule.groovy @@ -36,6 +36,7 @@ import org.springframework.web.util.UriUtils public class DoUpdateVfModule extends VfModuleBase { ExceptionUtil exceptionUtil = new ExceptionUtil() + JsonUtils jsonUtil = new JsonUtils() /** * Initialize the flow's variables. @@ -62,6 +63,7 @@ public class DoUpdateVfModule extends VfModuleBase { execution.setVariable('DOUPVfMod_aicCloudRegion', null) execution.setVariable('DOUPVfMod_tenantId', null) execution.setVariable('DOUPVfMod_volumeGroupId', null) + execution.setVariable("DOUPVfMod_volumeGroupStackId", "") execution.setVariable('DOUPVfMod_vfModule', null) execution.setVariable('DOUPVfMod_vnfParams', null) execution.setVariable("DOUPVfMod_baseVfModuleId", "") @@ -110,18 +112,16 @@ public class DoUpdateVfModule extends VfModuleBase { //tenantId - def tenantId = jsonUtil.getJsonValue(cloudConfiguration, "cloudConfiguration.tenantId") + def tenantId = execution.getVariable("tenantId") execution.setVariable("DOUPVfMod_tenantId", tenantId) //volumeGroupId def volumeGroupId = execution.getVariable("volumeGroupId") execution.setVariable("DOUPVfMod_volumeGroupId", volumeGroupId) - //volumeGroupName - def volumeGroupName = execution.getVariable("volumeGroupName") - execution.setVariable("DOUPVfMod_volumeGroupName", volumeGroupName) + //cloudSiteId - def cloudSiteId = jsonUtil.getJsonValue(cloudConfiguration, "cloudConfiguration.lcpCloudRegionId") - execution.setVariable("DOUPVfMod_cloudSiteId", cloudSiteId) + def cloudSiteId = execution.getVariable("lcpCloudRegionId") + execution.setVariable("DOUPVfMod_aicCloudRegion", cloudSiteId) logDebug("cloudSiteId: " + cloudSiteId, isDebugLogEnabled) //vnfType @@ -150,7 +150,10 @@ public class DoUpdateVfModule extends VfModuleBase { logDebug("vfModuleModelName: " + vfModuleModelName, isDebugLogEnabled) //modelCustomizationUuid - def modelCustomizationUuid = jsonUtil.getJsonValue(vfModuleModelInfo, "modelCustomizationId") + def modelCustomizationUuid = jsonUtil.getJsonValue(vfModuleModelInfo, "modelCustomizationUuid") + if (modelCustomizationUuid == null) { + modelCustomizationUuid = "" + } execution.setVariable("DOUPVfMod_modelCustomizationUuid", modelCustomizationUuid) logDebug("modelCustomizationUuid: " + modelCustomizationUuid, isDebugLogEnabled) @@ -158,7 +161,7 @@ public class DoUpdateVfModule extends VfModuleBase { def vfModuleId = execution.getVariable("vfModuleId") execution.setVariable("DOUPVfMod_vfModuleId", vfModuleId) logDebug("vfModuleId: " + vfModuleId, isDebugLogEnabled) - def requestId = execution.getVariable("requestId") + def requestId = execution.getVariable("msoRequestId") execution.setVariable("DOUPVfMod_requestId", requestId) logDebug("requestId: " + requestId, isDebugLogEnabled) // Set mso-request-id to request-id for VNF Adapter interface @@ -194,7 +197,7 @@ public class DoUpdateVfModule extends VfModuleBase { execution.setVariable("DOUPVfMod_asdcServiceModelVersion", asdcServiceModelVersion) logDebug("asdcServiceModelVersion: " + asdcServiceModelVersion, isDebugLogEnabled) //personaModelId - execution.setVariable("DOUPVfMod_personaModelId", jsonUtil.getJsonValue(vfModuleModelInfo, "modelInvariantId")) + execution.setVariable("DOUPVfMod_personaModelId", jsonUtil.getJsonValue(vfModuleModelInfo, "modelInvariantUuid")) //personaModelVersion execution.setVariable("DOUPVfMod_personaModelVersion", jsonUtil.getJsonValue(vfModuleModelInfo, "modelVersion")) //Get or Generate UUID @@ -211,6 +214,10 @@ public class DoUpdateVfModule extends VfModuleBase { if (isVidRequest == null || isVidRequest.isEmpty()) { execution.setVariable("isVidRequest", "true") } + //usePreload + def usePreload = execution.getVariable("usePreload") + execution.setVariable("DOUPVfMod_usePreload", usePreload) + logDebug("usePreload: " + usePreload, isDebugLogEnabled) //globalSubscriberId String globalSubscriberId = execution.getVariable("globalSubscriberId") execution.setVariable("DOUPVfMod_globalSubscriberId", globalSubscriberId) @@ -323,8 +330,8 @@ public class DoUpdateVfModule extends VfModuleBase { } /** - * Prepare a Request for invoking the ConfirmVolumeGroupTenant subflow. Currently, - * there is really nothing to do, so we just log that we're passing through. + * Prepare a Request for invoking the ConfirmVolumeGroupTenant subflow. + * Determine cloud region id for the volume group. * * @param execution The flow's execution instance. */ @@ -332,21 +339,54 @@ public class DoUpdateVfModule extends VfModuleBase { def method = getClass().getSimpleName() + '.prepConfirmVolumeGroupTenant(' + 'execution=' + execution.getId() + ')' + + def prefix = execution.getVariable("prefix") def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) try { - // Nothing to do - just log that we're passing through here + String cloudRegion = execution.getVariable(prefix + "aicCloudRegion") - logDebug('Exited ' + method, isDebugLogEnabled) - } catch (BpmnError e) { - throw e; - } catch (Exception e) { - logError('Caught exception in ' + method, e) - exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in prepConfirmVolumeGroupTenant(): ' + e.getMessage()) + // Prepare AA&I url + String aai_endpoint = execution.getVariable("URN_aai_endpoint") + AaiUtil aaiUtil = new AaiUtil(this) + String aai_uri = aaiUtil.getCloudInfrastructureCloudRegionUri(execution) + String queryCloudRegionRequest = "${aai_endpoint}${aai_uri}/" + cloudRegion + utils.logAudit("CloudRegion Request: " + queryCloudRegionRequest) + + execution.setVariable(prefix + "queryCloudRegionRequest", queryCloudRegionRequest) + utils.log("DEBUG", prefix + "queryCloudRegionRequest - " + "\n" + queryCloudRegionRequest, isDebugLogEnabled) + + cloudRegion = aaiUtil.getAAICloudReqion(execution, queryCloudRegionRequest, "AAI", cloudRegion) + + if ((cloudRegion != "ERROR")) { + if(execution.getVariable(prefix + "queryCloudRegionReturnCode") == "404"){ + execution.setVariable(prefix + "cloudRegionForVolume", "AAIAIC25") + }else{ + execution.setVariable(prefix + "cloudRegionForVolume", cloudRegion) + } + execution.setVariable(prefix + "isCloudRegionGood", true) + } else { + String errorMessage = "AAI Query Cloud Region Unsuccessful. AAI Response Code: " + execution.getVariable(prefix + "queryCloudRegionReturnCode") + utils.log("DEBUG", errorMessage, isDebugLogEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, errorMessage) + execution.setVariable(prefix + "isCloudRegionGood", false) + } + utils.log("DEBUG", " is Cloud Region Good: " + execution.getVariable(prefix + "isCloudRegionGood"), isDebugLogEnabled) + + } catch(BpmnError b){ + utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugLogEnabled) + throw b + }catch (Exception e) { + // try error + String errorMessage = "Bpmn error encountered in CreateVfModule flow. Unexpected Response from AAI - " + e.getMessage() + utils.log("ERROR", " AAI Query Cloud Region Failed. Exception - " + "\n" + errorMessage, isDebugLogEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception occured during prepConfirmVolumeGroupTenant(): " + e.getMessage()) } + logDebug('Exited ' + method, isDebugLogEnabled) + } - + /** * Prepare a Request for invoking the SDNC Adapter subflow to perform * a VNF topology 'changeassign' operation. @@ -362,6 +402,10 @@ public class DoUpdateVfModule extends VfModuleBase { try { def requestId = execution.getVariable('DOUPVfMod_requestId') + String uuid = execution.getVariable('testReqId') // for junits + if(uuid==null){ + uuid = execution.getVariable("DOUPVfMod_requestId") + "-" + System.currentTimeMillis() + } def serviceInstanceId = execution.getVariable('DOUPVfMod_serviceInstanceId') def callbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback') def serviceId = execution.getVariable('DOUPVfMod_serviceId') @@ -373,6 +417,13 @@ public class DoUpdateVfModule extends VfModuleBase { def vfModuleName = vfModule.getElementText('vf-module-name') def tenantId = execution.getVariable('DOUPVfMod_tenantId') def aicCloudRegion = execution.getVariable('DOUPVfMod_aicCloudRegion') + boolean usePreload = execution.getVariable("DOUPVfMod_usePreload") + String usePreloadToSDNC = usePreload ? "Y" : "N" + def modelCustomizationUuid = execution.getVariable("DoUPVfMod_modelCustomizationUuid") + def modelCustomizationUuidString = "" + if (!usePreload) { + modelCustomizationUuidString = "<modelCustomizationUuid>" + modelCustomizationUuid + "</modelCustomizationUuid>" + } // Retrieve vnf name from AAI response def vnfName = execution.getVariable('DOUPVfMod_vnfNameFromAAI') @@ -386,7 +437,7 @@ public class DoUpdateVfModule extends VfModuleBase { xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>changeassign</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation> @@ -415,6 +466,8 @@ public class DoUpdateVfModule extends VfModuleBase { <generic-vnf-type>${vnfType}</generic-vnf-type> <tenant>${tenantId}</tenant> <aic-cloud-region>${aicCloudRegion}</aic-cloud-region> + ${modelCustomizationUuidString} + <use-preload>${usePreloadToSDNC}</use-preload> ${vnfNetworks} </vnf-request-information> </sdncadapterworkflow:SDNCRequestData> @@ -448,6 +501,10 @@ public class DoUpdateVfModule extends VfModuleBase { logDebug('Entered ' + method, isDebugLogEnabled) try { + String uuid = execution.getVariable('testReqId') // for junits + if(uuid==null){ + uuid = execution.getVariable("DOUPVfMod_requestId") + "-" + System.currentTimeMillis() + } def requestId = execution.getVariable('DOUPVfMod_requestId') def serviceInstanceId = execution.getVariable('DOUPVfMod_serviceInstanceId') def callbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback') @@ -469,7 +526,7 @@ public class DoUpdateVfModule extends VfModuleBase { xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${svcInstId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>query</sdncadapter:SvcAction> <sdncadapter:SvcOperation>/VNF-API:vnfs/vnf-list/${vfModuleId}</sdncadapter:SvcOperation> @@ -513,6 +570,7 @@ public class DoUpdateVfModule extends VfModuleBase { def vnfInputs = execution.getVariable('DOUPVfMod_vnfInputs') def tenantId = execution.getVariable('DOUPVfMod_tenantId') def volumeGroupId = execution.getVariable('DOUPVfMod_volumeGroupId') + def volumeGroupStackId = execution.getVariable('DOUPVfMod_volumeGroupStackId') def VfModule vfModule = (VfModule) execution.getVariable('DOUPVfMod_vfModule') def heatStackId = vfModule.getElementText('heat-stack-id') def cloudId = execution.getVariable('DOUPVfMod_aicCloudRegion') @@ -552,6 +610,7 @@ public class DoUpdateVfModule extends VfModuleBase { <modelCustomizationUuid>${modelCustomizationUuid}</modelCustomizationUuid> <vfModuleType>${vfModuleModelName}</vfModuleType> <volumeGroupId>${volumeGroupId}</volumeGroupId> + <volumeGroupStackId>${volumeGroupStackId}</volumeGroupStackId> <baseVfModuleId>${baseVfModuleId}</baseVfModuleId> <baseVfModuleStackId>${baseVfModuleStackId}</baseVfModuleStackId> <skipAAI>true</skipAAI> @@ -671,7 +730,7 @@ public class DoUpdateVfModule extends VfModuleBase { def personaModelCustomizationIdElement = '' def modelCustomizationId = execution.getVariable('DOUPVfMod_modelCustomizationUuid') if (modelCustomizationId != null) { - personaModelCustomizationIdElement = '<persona-model-customization-id>' + modelCustomizationId + '</persona-model-customization-id>' + personaModelCustomizationIdElement = '<model-customization-id>' + modelCustomizationId + '</model-customization-id>' } String updateAAIVfModuleRequest = """ @@ -716,6 +775,10 @@ public class DoUpdateVfModule extends VfModuleBase { logDebug('Entered ' + method, isDebugLogEnabled) try { + String uuid = execution.getVariable('testReqId') // for junits + if(uuid==null){ + uuid = execution.getVariable("DOUPVfMod_requestId") + "-" + System.currentTimeMillis() + } def requestId = execution.getVariable('DOUPVfMod_requestId') def serviceInstanceId = execution.getVariable('DOUPVfMod_serviceInstanceId') def callbackUrl = (String) execution.getVariable('URN_mso_workflow_sdncadapter_callback') @@ -730,6 +793,14 @@ public class DoUpdateVfModule extends VfModuleBase { def tenantId = execution.getVariable('DOUPVfMod_tenantId') def aicCloudRegion = execution.getVariable('DOUPVfMod_aicCloudRegion') + boolean usePreload = execution.getVariable("DOUPVfMod_usePreload") + String usePreloadToSDNC = usePreload ? "Y" : "N" + def modelCustomizationUuid = execution.getVariable("DoUPVfMod_modelCustomizationUuid") + def modelCustomizationUuidString = "" + if (!usePreload) { + modelCustomizationUuidString = "<modelCustomizationUuid>" + modelCustomizationUuid + "</modelCustomizationUuid>" + } + def vnfParamsXml = execution.getVariable('DOUPVfMod_vnfParams') def vnfNetworks = transformNetworkParamsToVnfNetworks(vnfParamsXml) @@ -738,7 +809,7 @@ public class DoUpdateVfModule extends VfModuleBase { xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1" xmlns:sdncadapter="http://org.openecomp/workflow/sdnc/adapter/schema/v1"> <sdncadapter:RequestHeader> - <sdncadapter:RequestId>${requestId}</sdncadapter:RequestId> + <sdncadapter:RequestId>${uuid}</sdncadapter:RequestId> <sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId> <sdncadapter:SvcAction>activate</sdncadapter:SvcAction> <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation> @@ -767,6 +838,8 @@ public class DoUpdateVfModule extends VfModuleBase { <generic-vnf-type>${vnfType}</generic-vnf-type> <tenant>${tenantId}</tenant> <aic-cloud-region>${aicCloudRegion}</aic-cloud-region> + ${modelCustomizationUuidString} + <use-preload>${usePreloadToSDNC}</use-preload> </vnf-request-information> </sdncadapterworkflow:SDNCRequestData> </sdncadapterworkflow:SDNCAdapterWorkflowRequest> diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateVnfAndModules.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateVnfAndModules.groovy new file mode 100644 index 0000000000..7d7505f307 --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoUpdateVnfAndModules.groovy @@ -0,0 +1,391 @@ +/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - MSO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import java.io.ObjectInputStream.BlockDataInputStream
+import java.util.UUID;
+
+import org.json.JSONObject;
+import org.json.JSONArray;
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.runtime.Execution;
+import org.hibernate.jpa.criteria.predicate.IsEmptyPredicate
+
+import static org.apache.commons.lang3.StringUtils.*;
+
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.rest.APIResponse
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+import org.openecomp.mso.bpmn.common.scripts.AaiUtil
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.core.domain.ModelInfo
+import org.openecomp.mso.bpmn.core.domain.ModuleResource
+import org.openecomp.mso.bpmn.core.domain.VnfResource
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.springframework.web.util.UriUtils;
+
+/**
+ * This class supports the VID Flow
+ * with the update of a generic vnf and related VF modules.
+ */
+class DoUpdateVnfAndModules extends AbstractServiceTaskProcessor {
+
+ String Prefix="DUVAM_"
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ JsonUtils jsonUtil = new JsonUtils()
+
+ /**
+ * This method gets and validates the incoming
+ * request.
+ *
+ * @param - execution
+ *
+ */
+ public void preProcessRequest(Execution execution) {
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix",Prefix)
+ utils.log("DEBUG", " *** STARTED DoUpdateVnfAndModules PreProcessRequest Process*** ", isDebugEnabled)
+
+ try{
+ // Get Variables
+
+ String requestId = execution.getVariable("msoRequestId")
+ execution.setVariable("requestId", requestId)
+ execution.setVariable("mso-request-id", requestId)
+ utils.log("DEBUG", "Incoming Request Id is: " + requestId, isDebugEnabled)
+
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ utils.log("DEBUG", "Incoming Service Instance Id is: " + serviceInstanceId, isDebugEnabled)
+
+ String vnfId = execution.getVariable("vnfId")
+ utils.log("DEBUG", "Incoming Vnf Id is: " + vnfId, isDebugEnabled)
+
+ String source = "VID"
+ execution.setVariable("DUVAM_source", source)
+ utils.log("DEBUG", "Incoming Source is: " + source, isDebugEnabled)
+
+ String sdncVersion = execution.getVariable("sdncVersion")
+ if (sdncVersion == null) {
+ sdncVersion = "1702"
+ }
+ execution.setVariable("DUVAM_sdncVersion", sdncVersion)
+ utils.log("DEBUG", "Incoming Sdnc Version is: " + sdncVersion, isDebugEnabled)
+
+ VnfResource vnfResource = (VnfResource) execution.getVariable("vnfResourceDecomposition")
+
+ String vnfModelInfo = execution.getVariable("vnfModelInfo")
+ String serviceModelInfo = execution.getVariable("serviceModelInfo")
+
+ String serviceId = execution.getVariable("productFamilyId")
+ execution.setVariable("DUVAM_serviceId", serviceId)
+ utils.log("DEBUG", "Incoming Service Id is: " + serviceId, isDebugEnabled)
+
+ String modelUuid = jsonUtil.getJsonValue(vnfModelInfo, "modelUuid")
+ execution.setVariable("DUVAM_modelUuid", modelUuid)
+ utils.log("DEBUG", "Incoming modelUuid is: " + modelUuid, isDebugEnabled)
+
+ String modelCustomizationUuid = jsonUtil.getJsonValue(vnfModelInfo, "modelCustomizationUuid")
+ execution.setVariable("DUVAM_modelCustomizationUuid", modelCustomizationUuid)
+ utils.log("DEBUG", "Incoming Model Customization Uuid is: " + modelCustomizationUuid, isDebugEnabled)
+
+ String cloudSiteId = execution.getVariable("lcpCloudRegionId")
+ execution.setVariable("DUVAM_cloudSiteId", cloudSiteId)
+ utils.log("DEBUG", "Incoming Cloud Site Id is: " + cloudSiteId, isDebugEnabled)
+
+ String tenantId = execution.getVariable("tenantId")
+ execution.setVariable("DUVAM_tenantId", tenantId)
+ utils.log("DEBUG", "Incoming Tenant Id is: " + tenantId, isDebugEnabled)
+
+ String globalSubscriberId = execution.getVariable("globalSubscriberId")
+ if (globalSubscriberId == null) {
+ globalSubscriberId = ""
+ }
+ execution.setVariable("DUVAM_globalSubscriberId", globalSubscriberId)
+ utils.log("DEBUG", "Incoming Global Subscriber Id is: " + globalSubscriberId, isDebugEnabled)
+
+ execution.setVariable("DUVAM_moduleCount", 0)
+ execution.setVariable("DUVAM_nextModule", 0)
+
+
+ }catch(BpmnError b){
+ utils.log("DEBUG", "Rethrowing MSOWorkflowException", isDebugEnabled)
+ throw b
+ }catch(Exception e){
+ utils.log("DEBUG", " Error Occured in DoUpdateVnfAndModules PreProcessRequest method!" + e.getMessage(), isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in DoUpdateVnfAndModules PreProcessRequest")
+
+ }
+ utils.log("DEBUG", "*** COMPLETED DoUpdateVnfAndModules PreProcessRequest Process ***", isDebugEnabled)
+ }
+
+ /**
+ * Using the received vnfId and vfModuleId, query AAI to get the corresponding VNF info.
+ * A 200 response is expected with the VNF info in the response body. Will find out the base module info.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void queryAAIVfModule(Execution execution) {
+ def isDebugLogEnabled=execution.getVariable("isDebugLogEnabled")
+ def method = getClass().getSimpleName() + '.queryAAIVfModule(' +
+ 'execution=' + execution.getId() +
+ ')'
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def vnfId = execution.getVariable('vnfId')
+
+ AaiUtil aaiUriUtil = new AaiUtil(this)
+ String aai_uri = aaiUriUtil.getNetworkGenericVnfUri(execution)
+ logDebug('AAI URI is: ' + aai_uri, isDebugLogEnabled)
+
+ String endPoint = execution.getVariable("URN_aai_endpoint") + "${aai_uri}/" + UriUtils.encode(vnfId, "UTF-8") + "?depth=1"
+ utils.logAudit("AAI endPoint: " + endPoint)
+
+ try {
+ RESTConfig config = new RESTConfig(endPoint);
+ def responseData = ''
+ def aaiRequestId = UUID.randomUUID().toString()
+ RESTClient client = new RESTClient(config).
+ addHeader('X-TransactionId', aaiRequestId).
+ addHeader('X-FromAppId', 'MSO').
+ addHeader('Content-Type', 'application/xml').
+ addHeader('Accept','application/xml');
+ logDebug('sending GET to AAI endpoint \'' + endPoint + '\'', isDebugLogEnabled)
+ APIResponse response = client.httpGet()
+ utils.logAudit("createVfModule - invoking httpGet() to AAI")
+
+ responseData = response.getResponseBodyAsString()
+ if (responseData != null) {
+ logDebug("Received generic VNF data: " + responseData, isDebugLogEnabled)
+
+ }
+
+ utils.logAudit("createVfModule - queryAAIVfModule Response: " + responseData)
+ utils.logAudit("createVfModule - queryAAIVfModule ResponseCode: " + response.getStatusCode())
+
+ execution.setVariable('DUVAM_queryAAIVfModuleResponseCode', response.getStatusCode())
+ execution.setVariable('DUVAM_queryAAIVfModuleResponse', responseData)
+ logDebug('Response code:' + response.getStatusCode(), isDebugLogEnabled)
+ logDebug('Response:' + System.lineSeparator() + responseData, isDebugLogEnabled)
+ //Map<String, String>[] vfModules = new HashMap<String,String>[]
+ def vfModulesList = new ArrayList<Map<String,String>>()
+ def vfModules = null
+ def vfModuleBaseEntry = null
+ if (response.getStatusCode() == 200) {
+ // Parse the VNF record from A&AI to find base module info
+ logDebug('Parsing the VNF data to find base module info', isDebugLogEnabled)
+ if (responseData != null) {
+ def vfModulesText = utils.getNodeXml(responseData, "vf-modules")
+ logDebug("vModulesText: " + vfModulesText, isDebugLogEnabled)
+ if (vfModulesText != null && !vfModulesText.trim().isEmpty()) {
+ def xmlVfModules= new XmlSlurper().parseText(vfModulesText)
+ vfModules = xmlVfModules.'**'.findAll {it.name() == "vf-module"}
+ execution.setVariable("DUVAM_moduleCount", vfModules.size())
+ int vfModulesSize = 0
+ for (i in 0..vfModules.size()-1) {
+ def vfModuleXml = groovy.xml.XmlUtil.serialize(vfModules[i])
+
+ Map<String, String> vfModuleEntry = new HashMap<String, String>()
+ def vfModuleId = utils.getNodeText1(vfModuleXml, "vf-module-id")
+ vfModuleEntry.put("vfModuleId", vfModuleId)
+ def vfModuleName = utils.getNodeText1(vfModuleXml, "vf-module-name")
+ vfModuleEntry.put("vfModuleName", vfModuleName)
+ def modelInvariantUuid = utils.getNodeText1(vfModuleXml, "model-invariant-id")
+ vfModuleEntry.put("modelInvariantUuid", modelInvariantUuid)
+ def modelUuid = utils.getNodeText1(vfModuleXml, "model-version-id")
+ vfModuleEntry.put("modelUuid", modelUuid)
+ def modelCustomizationUuid = utils.getNodeText1(vfModuleXml, "model-customization-id")
+ vfModuleEntry.put("modelCustomizationUuid", modelCustomizationUuid)
+
+ def isBaseVfModule = utils.getNodeText(vfModuleXml, "is-base-vf-module")
+ vfModuleEntry.put("isBaseVfModule", isBaseVfModule)
+ // Save base vf module to add it to the start of the list later
+ if (isBaseVfModule == "true") {
+ vfModuleBaseEntry = vfModuleEntry
+ }
+ else {
+ vfModulesList.add(vfModuleEntry)
+ }
+ }
+ // Start the list with the base module if any
+ if (vfModuleBaseEntry != null) {
+ vfModulesList.add(0, vfModuleBaseEntry)
+ }
+ }
+
+ }
+ }
+ else {
+ logDebug('Response code from AAI GET is: ' + response.getStatusCode(), isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Response code from AAI GET is: ' + response.getStatusCode())
+ }
+ execution.setVariable("DUVAM_vfModules", vfModulesList)
+ } catch (Exception ex) {
+ ex.printStackTrace()
+ logDebug('Exception occurred while executing AAI GET:' + ex.getMessage(),isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'AAI GET Failed:' + ex.getMessage())
+ }
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in queryAAIVfModule(): ' + e.getMessage())
+ }
+ }
+
+ public void prepareNextModuleToUpdate(Execution execution){
+ def isDebugLogEnabled = execution.getVariable("isDebugLogEnabled")
+ execution.setVariable("prefix", Prefix)
+ logDebug(" ======== STARTED prepareNextModuleToUpdate ======== ", isDebugLogEnabled)
+
+ try {
+ int i = execution.getVariable("DUVAM_nextModule")
+ def vfModules = execution.getVariable("DUVAM_vfModules")
+ def vfModule = vfModules[i]
+
+ def vfModuleId = vfModule.get("vfModuleId")
+ execution.setVariable("DUVAM_vfModuleId", vfModuleId)
+
+ def vfModuleName = vfModule.get("vfModuleName")
+ execution.setVariable("DUVAM_vfModuleName", vfModuleName)
+
+ def isBaseVfModule = vfModule.get("isBaseVfModule")
+ execution.setVariable("DUVAM_isBaseVfModule", isBaseVfModule)
+
+ String modelInvariantUuid = vfModule.get("modelInvariantUuid")
+ logDebug("ModelInvariantUuid: " + modelInvariantUuid, isDebugLogEnabled)
+
+ execution.setVariable("DUVAM_volumeGroupId", "")
+ execution.setVariable("DUVAM_volumeGroupName", "")
+
+ VnfResource vnfResource = (VnfResource) execution.getVariable("vnfResourceDecomposition")
+ List<ModuleResource> moduleResources = vnfResource.getVfModules()
+
+ for (j in 0..moduleResources.size()-1) {
+ ModelInfo modelInfo = moduleResources[j].getModelInfo()
+ String modelInvariantUuidFromDecomposition = modelInfo.getModelInvariantUuid()
+ logDebug("modelInvariantUuidFromDecomposition: " + modelInvariantUuidFromDecomposition, isDebugLogEnabled)
+
+ if (modelInvariantUuid.equals(modelInvariantUuidFromDecomposition)) {
+ String vfModuleModelInfo = modelInfo.toJsonString()
+ String vfModuleModelInfoValue = jsonUtil.getJsonValue(vfModuleModelInfo, "modelInfo")
+ execution.setVariable("DUVAM_vfModuleModelInfo", vfModuleModelInfoValue)
+ logDebug("vfModuleModelInfo: " + vfModuleModelInfoValue, isDebugLogEnabled)
+ break
+ }
+
+ }
+
+ }catch(Exception e){
+ utils.log("ERROR", "Exception Occured Processing preProcessAddOnModule. Exception is:\n" + e, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, "Error Occurred during prepareNextModuleToUpdate Method:\n" + e.getMessage())
+ }
+ logDebug("======== COMPLETED prepareNextModuleToUpdate ======== ", isDebugLogEnabled)
+ }
+
+
+ /**
+ * Prepare a Request for invoking the UpdateAAIGenericVnf subflow.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void prepUpdateAAIGenericVnf(Execution execution) {
+ def method = getClass().getSimpleName() + '.prepUpdateAAIGenericVnf(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def vnfId = execution.getVariable('vnfId')
+ VnfResource vnfResource = (VnfResource) execution.getVariable("vnfResourceDecomposition")
+ ModelInfo vnfDecompModelInfo = vnfResource.getModelInfo()
+ String vnfModelInfo = execution.getVariable("vnfModelInfo")
+ String modelUuid = execution.getVariable("DUVAM_modelUuid")
+ if (modelUuid == null || modelUuid.isEmpty()) {
+ modelUuid = vnfDecompModelInfo.getModelUuid()
+ }
+ String modelCustomizationUuid = execution.getVariable("DUVAM_modelCustomizationUuid")
+ if (modelCustomizationUuid == null || modelCustomizationUuid.isEmpty()) {
+ modelCustomizationUuid = vnfDecompModelInfo.getModelCustomizationUuid()
+ }
+ String nfType = vnfResource.getNfType()
+ String nfTypeString = ''
+ if (nfType != null && !nfType.isEmpty()) {
+ nfTypeString = "<nf-type>" + nfType + "</nf-type>"
+ }
+ String nfRole = vnfResource.getNfRole()
+ String nfRoleString = ''
+ if (nfRole != null && !nfRole.isEmpty()) {
+ nfRoleString = "<nf-role>" + nfRole + "</nf-role>"
+ }
+ String nfFunction = vnfResource.getNfFunction()
+ String nfFunctionString = ''
+ if (nfFunction != null && !nfFunction.isEmpty()) {
+ nfFunctionString = "<nf-function>" + nfFunction + "</nf-function>"
+ }
+ String nfNamingCode = vnfResource.getNfNamingCode()
+ String nfNamingCodeString = ''
+ if (nfNamingCode != null && !nfNamingCode.isEmpty()) {
+ nfNamingCodeString = "<nf-naming-code>" + nfNamingCode + "</nf-naming-code>"
+ }
+
+ String updateAAIGenericVnfRequest = """
+ <UpdateAAIGenericVnfRequest>
+ <vnf-id>${vnfId}</vnf-id>
+ <model-version-id>${modelUuid}</model-version-id>
+ <model-customization-id>${modelCustomizationUuid}</model-customization-id>
+ ${nfTypeString}
+ ${nfRoleString}
+ ${nfFunctionString}
+ ${nfNamingCodeString}
+ </UpdateAAIGenericVnfRequest>
+ """
+ updateAAIGenericVnfRequest = utils.formatXml(updateAAIGenericVnfRequest)
+ execution.setVariable('DUVAM_updateAAIGenericVnfRequest', updateAAIGenericVnfRequest)
+ utils.logAudit("updateAAIGenericVnfRequest : " + updateAAIGenericVnfRequest)
+ logDebug('Request for UpdateAAIGenericVnf:\n' + updateAAIGenericVnfRequest, isDebugLogEnabled)
+
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in prepUpdateAAIGenericVnf(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * APP-C Call - placeholder.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void callAppCf(Execution execution) {
+ def method = getClass().getSimpleName() + '.callAppC(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/ReplaceVnfInfra.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/ReplaceVnfInfra.groovy new file mode 100644 index 0000000000..7dbd7a9c57 --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/ReplaceVnfInfra.groovy @@ -0,0 +1,694 @@ +/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - MSO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import groovy.json.JsonOutput
+import groovy.json.JsonSlurper
+import groovy.util.Node
+import groovy.util.XmlParser;
+import groovy.xml.QName
+
+import java.io.Serializable;
+import java.util.UUID;
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.impl.cmd.AbstractSetVariableCmd
+import org.camunda.bpm.engine.runtime.Execution
+import org.openecomp.mso.rest.APIResponse
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor;
+import org.openecomp.mso.bpmn.common.scripts.VidUtils;
+import org.openecomp.mso.bpmn.core.RollbackData
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.bpmn.core.domain.ModelInfo
+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition
+import org.openecomp.mso.bpmn.core.domain.VnfResource
+import org.openecomp.mso.client.aai.*
+
+import org.openecomp.mso.client.appc.ApplicationControllerClient;
+import org.openecomp.mso.client.appc.ApplicationControllerSupport;
+import org.openecomp.appc.client.lcm.model.Action;
+import org.openecomp.appc.client.lcm.model.ActionIdentifiers;
+import org.openecomp.appc.client.lcm.model.LockInput
+import org.openecomp.appc.client.lcm.model.UnlockInput
+import org.openecomp.appc.client.lcm.model.HealthCheckInput
+import org.openecomp.appc.client.lcm.model.StartInput
+import org.openecomp.appc.client.lcm.model.StopInput
+import org.openecomp.appc.client.lcm.model.Flags
+import org.openecomp.appc.client.lcm.model.Status
+
+
+
+public class ReplaceVnfInfra extends AbstractServiceTaskProcessor {
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ JsonUtils jsonUtils = new JsonUtils()
+ ApplicationControllerClient appcClient = new ApplicationControllerClient()
+ def prefix = "RPLVnfI_"
+
+ /**
+ * Initialize the flow's variables.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void initProcessVariables(Execution execution) {
+ execution.setVariable('prefix', 'RPLVnfI_')
+ execution.setVariable('RPLVnfI_Request', null)
+ execution.setVariable('RPLVnfI_requestInfo', null)
+ execution.setVariable('RPLVnfI_requestId', null)
+ execution.setVariable('RPLVnfI_source', null)
+ execution.setVariable('RPLVnfI_vnfInputs', null)
+ execution.setVariable('RPLVnfI_vnfId', null)
+ execution.setVariable('RPLVnfI_tenantId', null)
+ execution.setVariable('RPLVnfI_vnfParams', null)
+ execution.setVariable('RPLVnfI_cloudConfiguration', null)
+ execution.setVariable('ReplaceVnfSuccessIndicator', false)
+ execution.setVariable('RPLVnfI_serviceType', null)
+ execution.setVariable('RPLVnfI_nfRole', null)
+ execution.setVariable('RPLVnfI_currentActivity', 'RPLVnfI')
+ execution.setVariable('RPLVnfI_workStep', null)
+ execution.setVariable('RPLVnfI_failedActivity', null)
+ execution.setVariable('RPLVnfI_errorCode', "0")
+ execution.setVariable('RPLVnfI_errorText', null)
+ execution.setVariable('RPLVnfI_healthCheckIndex', 1)
+ }
+
+ /**
+ * Check for missing elements in the received request.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void preProcessRequest(Execution execution) {
+ def method = getClass().getSimpleName() + '.preProcessRequest(' +
+ 'execution=' + execution.getId() +
+ ')'
+ initProcessVariables(execution)
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ initProcessVariables(execution)
+
+ def incomingRequest = execution.getVariable('bpmnRequest')
+
+ utils.log("DEBUG", "Incoming Infra Request: " + incomingRequest, isDebugLogEnabled)
+ try {
+ def jsonSlurper = new JsonSlurper()
+ def jsonOutput = new JsonOutput()
+ Map reqMap = jsonSlurper.parseText(incomingRequest)
+ utils.log("DEBUG", " Request is in JSON format.", isDebugLogEnabled)
+
+ def serviceInstanceId = execution.getVariable('serviceInstanceId')
+ def vnfId = execution.getVariable('vnfId')
+
+ execution.setVariable(prefix + 'serviceInstanceId', serviceInstanceId)
+ execution.setVariable(prefix + 'vnfId', vnfId)
+ execution.setVariable("isVidRequest", "true")
+
+ def asdcServiceModelVersion = ''
+ def serviceModelInfo = null
+
+ def relatedInstanceList = reqMap.requestDetails?.relatedInstanceList
+
+ if (relatedInstanceList != null) {
+ relatedInstanceList.each {
+ if (it.relatedInstance.modelInfo?.modelType == 'service') {
+ utils.log("DEBUG", "PROCESSING SERVICE INFO", isDebugLogEnabled)
+ asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion
+ serviceModelInfo = jsonOutput.toJson(it.relatedInstance.modelInfo)
+ utils.log("DEBUG", "ServiceModelInfo: " + serviceModelInfo, isDebugLogEnabled)
+ def modelInvariant = jsonUtils.getJsonValue(serviceModelInfo, "modelInvariantUuid")
+ utils.log("DEBUG", "modelInvariant: " + modelInvariant, isDebugLogEnabled)
+ }
+
+ }
+ }
+
+ execution.setVariable(prefix + 'asdcServiceModelVersion', asdcServiceModelVersion)
+ execution.setVariable(prefix + 'serviceModelInfo', serviceModelInfo)
+ def vnfModelInfo = jsonOutput.toJson(reqMap.requestDetails?.modelInfo)
+ execution.setVariable(prefix + 'vnfModelInfo', vnfModelInfo)
+ def vnfModelInvariantUuid = jsonUtils.getJsonValue(vnfModelInfo, "modelInvariantUuid")
+ execution.setVariable(prefix + 'vnfModelInvariantUuid', vnfModelInvariantUuid)
+ logDebug("vnfModelInvariantUuid: " + vnfModelInvariantUuid, isDebugLogEnabled)
+
+ def vnfType = execution.getVariable('vnfType')
+ execution.setVariable(prefix + 'vnfType', vnfType)
+
+ def userParams = reqMap.requestDetails?.requestParameters?.userParams
+
+ Map<String, String> userParamsMap = [:]
+ if (userParams != null) {
+ userParams.each { userParam ->
+ userParamsMap.put(userParam.name, userParam.value)
+ }
+ }
+
+ utils.log("DEBUG", 'Processed user params: ' + userParamsMap, isDebugLogEnabled)
+
+ execution.setVariable(prefix + 'vfModuleInputParams', userParamsMap)
+
+ def requestId = execution.getVariable("mso-request-id")
+ execution.setVariable(prefix + 'requestId', requestId)
+
+
+ def vnfName = reqMap.requestDetails?.requestInfo?.instanceName ?: null
+ execution.setVariable(prefix + 'vnfName', vnfName)
+
+ def requestorId = reqMap.requestDetails?.requestInfo?.requestorId ?: null
+ execution.setVariable(prefix + 'requestorId', requestorId)
+
+ def usePreload = reqMap.requestDetails?.requestParameters?.usePreload
+ execution.setVariable(prefix + 'usePreload', usePreload)
+
+ def cloudConfiguration = jsonOutput.toJson(reqMap.requestDetails?.cloudConfiguration)
+ execution.setVariable(prefix + 'cloudConfiguration', cloudConfiguration)
+ def lcpCloudRegionId = jsonUtils.getJsonValue(cloudConfiguration, "lcpCloudRegionId")
+ execution.setVariable(prefix + 'lcpCloudRegionId', lcpCloudRegionId)
+ def tenantId = jsonUtils.getJsonValue(cloudConfiguration, "tenantId")
+ execution.setVariable(prefix + 'tenantId', tenantId)
+
+ def globalSubscriberId = reqMap.requestDetails?.subscriberInfo?.globalSubscriberId ?: ''
+ execution.setVariable(prefix + 'globalSubscriberId', globalSubscriberId)
+
+ execution.setVariable(prefix + 'sdncVersion', '1702')
+
+ execution.setVariable("ReplaceVnfInfraSuccessIndicator", false)
+
+ execution.setVariable("isDebugLogEnabled", isDebugLogEnabled)
+
+ def source = reqMap.requestDetails?.requestInfo?.source
+ execution.setVariable(prefix + "source", source)
+
+ //For Completion Handler & Fallout Handler
+ String requestInfo =
+ """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ <request-id>${requestId}</request-id>
+ <action>REPLACE</action>
+ <source>${source}</source>
+ </request-info>"""
+
+ execution.setVariable(prefix + "requestInfo", requestInfo)
+
+ logDebug('RequestInfo: ' + execution.getVariable(prefix + "requestInfo"), isDebugLogEnabled)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+
+ }
+ catch(groovy.json.JsonException je) {
+ utils.log("DEBUG", " Request is not in JSON format.", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 5000, "Invalid request format")
+
+ }
+ catch(Exception e) {
+ String restFaultMessage = e.getMessage()
+ utils.log("ERROR", " Exception Encountered - " + "\n" + restFaultMessage, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 5000, restFaultMessage)
+ }
+ }
+
+ /**
+ * Prepare and send the sychronous response for this flow.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void sendSynchResponse(Execution execution) {
+ def method = getClass().getSimpleName() + '.sendSynchResponse(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+
+ try {
+ def requestInfo = execution.getVariable('RPLVnfI_requestInfo')
+ def requestId = execution.getVariable('RPLVnfI_requestId')
+ def source = execution.getVariable('RPLVnfI_source')
+ def progress = getNodeTextForce(requestInfo, 'progress')
+ if (progress.isEmpty()) {
+ progress = '0'
+ }
+ def startTime = getNodeTextForce(requestInfo, 'start-time')
+ if (startTime.isEmpty()) {
+ startTime = System.currentTimeMillis()
+ }
+
+ // RESTResponse (for API Handler (APIH) Reply Task)
+ def vnfId = execution.getVariable("vnfId")
+ String synchResponse = """{"requestReferences":{"instanceId":"${vnfId}","requestId":"${requestId}"}}""".trim()
+
+ sendWorkflowResponse(execution, 200, synchResponse)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in sendResponse(): ' + e.getMessage())
+ }
+ }
+
+
+
+ /**
+ * Get VnfResource decomposition object for this VNF.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void getVnfResourceDecomposition(Execution execution) {
+ def method = getClass().getSimpleName() + '.getVnfResourceDecomposition(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+ String vnfModelInvariantUuid = execution.getVariable(prefix + 'vnfModelInvariantUuid')
+ logDebug("vnfModelInvariantUuid: " + vnfModelInvariantUuid, isDebugLogEnabled)
+ List<VnfResource> vnfResources = serviceDecomposition.getServiceVnfs()
+
+ for (i in 0..vnfResources.size()-1) {
+ ModelInfo modelInfo = vnfResources[i].getModelInfo()
+ String modelInvariantUuidFromDecomposition = modelInfo.getModelInvariantUuid()
+ logDebug("modelInvariantUuidFromDecomposition: " + modelInvariantUuidFromDecomposition, isDebugLogEnabled)
+
+ if (vnfModelInvariantUuid.equals(modelInvariantUuidFromDecomposition)) {
+ VnfResource vnfResourceDecomposition = vnfResources[i]
+ execution.setVariable(prefix + 'vnfResourceDecomposition', vnfResourceDecomposition)
+ def nfRole = vnfResourceDecomposition.getNfRole()
+ execution.setVariable(prefix + 'nfRole', nfRole)
+ logDebug("vnfResourceDecomposition: " + vnfResourceDecomposition.toJsonString(), isDebugLogEnabled)
+ break
+ }
+ else {
+ //exception!
+ }
+
+ }
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in getVnfResourceDecomposition(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * Check if this VNF is already in maintenance in A&AI.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void checkIfVnfInMaintInAAI(Execution execution) {
+ def method = getClass().getSimpleName() + '.checkIfVnfInMaintInAAI(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ execution.setVariable(prefix + "workStep", "checkIfVnfInMaintInAAI")
+ execution.setVariable("failedActivity", "AAI")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def transactionLoggingUuid = UUID.randomUUID().toString()
+ AAIRestClientImpl client = new AAIRestClientImpl()
+ AAIValidatorImpl aaiValidator = new AAIValidatorImpl()
+ aaiValidator.setClient(client)
+ def vnfId = execution.getVariable("vnfId")
+ boolean isInMaint = aaiValidator.isVNFLocked(vnfId, transactionLoggingUuid)
+ logDebug("isInMaint result: " + isInMaint, isDebugLogEnabled)
+ execution.setVariable(prefix + 'isVnfInMaintenance', isInMaint)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in checkIfVnfInMaintInAAI(): ' + e.getMessage())
+ }
+ }
+
+
+ /**
+ * Check if this VNF's pservers are locked in A&AI.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void checkIfPserversInMaintInAAI(Execution execution) {
+ def method = getClass().getSimpleName() + '.checkIfPserversInMaintInAAI(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable(prefix + "workStep", "checkIfPserversInMaintInAAI")
+ execution.setVariable("failedActivity", "AAI")
+
+ try {
+ def transactionLoggingUuid = UUID.randomUUID().toString()
+ AAIRestClientImpl client = new AAIRestClientImpl()
+ AAIValidatorImpl aaiValidator = new AAIValidatorImpl()
+ aaiValidator.setClient(client)
+ def vnfId = execution.getVariable("vnfId")
+ boolean areLocked = aaiValidator.isPhysicalServerLocked(vnfId, transactionLoggingUuid)
+ logDebug("areLocked result: " + areLocked, isDebugLogEnabled)
+ execution.setVariable(prefix + 'arePserversLocked', areLocked)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in checkIfPserversInMaintInAAI(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * Set inMaint flag for this VNF to the specified value in A&AI.
+ *
+ *
+ * @param execution The flow's execution instance.
+ * @param inMaint The boolean value of the flag to set
+ */
+ public void setVnfInMaintFlagInAAI(Execution execution, boolean inMaint) {
+ def method = getClass().getSimpleName() + '.setVnfInMaintFlagInAAI(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ if (inMaint) {
+ execution.setVariable(prefix + "workStep", "setVnfInMaintFlagInAAI")
+ }
+ else {
+ execution.setVariable(prefix + "workStep", "unsetVnfInMaintFlagInAAI")
+ }
+ execution.setVariable("failedActivity", "AAI")
+
+ try {
+ def transactionLoggingUuid = UUID.randomUUID().toString()
+ AAIRestClientImpl client = new AAIRestClientImpl()
+ AAIUpdatorImpl aaiUpdator = new AAIUpdatorImpl()
+ aaiUpdator.setClient(client)
+ def vnfId = execution.getVariable("vnfId")
+ if (inMaint) {
+ aaiUpdator.updateVnfToLocked(vnfId, transactionLoggingUuid)
+ }
+ else {
+ aaiUpdator.updateVnfToUnLocked(vnfId, transactionLoggingUuid)
+ }
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in setVnfInMaintFlagInAAI(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * Call APP-C client to execute specified APP-C command for this VNF.
+ *
+ *
+ * @param execution The flow's execution instance.
+ * @param action The action to take in APP-C.
+ */
+ public void runAppcCommand(Execution execution, Action action) {
+ def method = getClass().getSimpleName() + '.runAppcCommand(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ logDebug("Running APP-C action: " + action.toString(), isDebugLogEnabled)
+ String vnfId = execution.getVariable('vnfId')
+ String msoRequestId = execution.getVariable(prefix + 'requestId')
+ execution.setVariable('msoRequestId', msoRequestId)
+ execution.setVariable(prefix + "failedActivity", "APP-C")
+
+ ApplicationControllerSupport support = new ApplicationControllerSupport()
+ appcClient.appCSupport=support
+ org.springframework.test.util.ReflectionTestUtils.setField(support, "lcmModelPackage", "org.openecomp.appc.client.lcm.model");
+ Flags flags = new Flags();
+ ActionIdentifiers actionIdentifiers = new ActionIdentifiers();
+ actionIdentifiers.setVnfId(vnfId);
+ Status appcStatus
+ switch(action) {
+ case Action.Lock:
+ execution.setVariable(prefix + 'workStep', "LockVNF")
+ appcStatus = appcClient.runCommand(Action.Lock,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.Unlock:
+ execution.setVariable(prefix + 'workStep', "UnlockVNF")
+ appcStatus = appcClient.runCommand(Action.Unlock,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.HealthCheck:
+ def healthCheckIndex = execution.getVariable(prefix + 'healthCheckIndex')
+ execution.setVariable(prefix + 'workStep', "HealthCheckVNF" + healthCheckIndex)
+ execution.setVariable(prefix + 'healthCheckIndex', healthCheckIndex + 1)
+ appcStatus = appcClient.runCommand(Action.HealthCheck,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.Start:
+ execution.setVariable(prefix + 'workStep', "StartVNF")
+ appcStatus = appcClient.runCommand(Action.Start,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.Stop:
+ execution.setVariable(prefix + 'workStep', "StopVNF")
+ appcStatus = appcClient.runCommand(Action.Stop,actionIdentifiers,flags,null,msoRequestId)
+ break
+ default:
+ break
+ }
+ logDebug("Completed AppC request", isDebugLogEnabled)
+ int appcCode = appcStatus.getCode()
+ logDebug("AppC status code is: " + appcCode, isDebugLogEnabled)
+ logDebug("AppC status message is: " + appcStatus.getMessage(), isDebugLogEnabled)
+ if (support.getCategoryOf(appcStatus) == ApplicationControllerSupport.StatusCategory.ERROR) {
+ execution.setVariable(prefix + "errorCode", Integer.toString(appcCode))
+ execution.setVariable(prefix + "errorText", appcStatus.getMessage())
+ }
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //throw e;
+ } catch (java.lang.NoSuchMethodError e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in ' + method + ': ' + e.getMessage())
+ }
+ }
+
+
+
+
+ /**
+ * Builds a "CompletionHandler" request and stores it in the specified execution variable.
+ *
+ * @param execution the execution
+ * @param resultVar the execution variable in which the result will be stored
+ */
+ public void completionHandlerPrep(Execution execution, String resultVar) {
+ def method = getClass().getSimpleName() + '.completionHandlerPrep(' +
+ 'execution=' + execution.getId() +
+ ', resultVar=' + resultVar +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def requestInfo = getVariable(execution, 'RPLVnfI_requestInfo')
+
+ appcClient.shutdownclient()
+
+ String content = """
+ <sdncadapterworkflow:MsoCompletionRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:reqtype="http://org.openecomp/mso/request/types/v1">
+ ${requestInfo}
+ <sdncadapterworkflow:mso-bpel-name>MSO_ACTIVATE_BPEL</sdncadapterworkflow:mso-bpel-name>
+ </sdncadapterworkflow:MsoCompletionRequest>
+ """
+
+ content = utils.formatXml(content)
+ logDebug(resultVar + ' = ' + System.lineSeparator() + content, isDebugLogEnabled)
+ execution.setVariable(resultVar, content)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, 'Internal Error')
+ }
+ }
+
+ /**
+ * Prepare DoDeleteVnfAndModules call.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void prepDoDeleteVnfAndModules(Execution execution) {
+ def method = getClass().getSimpleName() + '.prepDoDeleteVnfAndModules(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable(prefix + "workStep", "doDeleteVnfAndModules")
+ execution.setVariable("failedActivity", "MSO Delete VNF")
+ logDebug('Exited ' + method, isDebugLogEnabled)
+
+ }
+
+ /**
+ * Prepare DoCreateVnfAndModules call.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void prepDoCreateVnfAndModules(Execution execution) {
+ def method = getClass().getSimpleName() + '.prepDoReplaceVnfAndModules(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable(prefix + "workStep", "doReplaceVnfAndModules")
+ execution.setVariable("failedActivity", "MSO Replace VNF")
+ logDebug('Exited ' + method, isDebugLogEnabled)
+
+ }
+
+ /**
+ * Builds a "FalloutHandler" request and stores it in the specified execution variable.
+ *
+ * @param execution the execution
+ * @param resultVar the execution variable in which the result will be stored
+ */
+ public void falloutHandlerPrep(Execution execution, String resultVar) {
+ def method = getClass().getSimpleName() + '.falloutHandlerPrep(' +
+ 'execution=' + execution.getId() +
+ ', resultVar=' + resultVar +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def prefix = execution.getVariable('prefix')
+ def request = getVariable(execution, prefix+'Request')
+ def requestInformation = execution.getVariable(prefix + "requestInfo")
+
+ appcClient.shutdownclient()
+
+ def WorkflowException workflowException = execution.getVariable("WorkflowException")
+ def errorResponseCode = workflowException.getErrorCode()
+ def errorResponseMsg = workflowException.getErrorMessage()
+ def encErrorResponseMsg = ""
+ if (errorResponseMsg != null) {
+ encErrorResponseMsg = errorResponseMsg.replace("&", "&").replace("<", "<").replace(">", ">")
+ }
+
+ String content = """
+ <sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:reqtype="http://org.openecomp/mso/request/types/v1"
+ xmlns:msoservtypes="http://org.openecomp/mso/request/types/v1"
+ xmlns:structuredtypes="http://org.openecomp/mso/structured/types/v1">
+ ${requestInformation}
+ <sdncadapterworkflow:WorkflowException>
+ <sdncadapterworkflow:ErrorMessage>${encErrorResponseMsg}</sdncadapterworkflow:ErrorMessage>
+ <sdncadapterworkflow:ErrorCode>${errorResponseCode}</sdncadapterworkflow:ErrorCode>
+ </sdncadapterworkflow:WorkflowException>
+ </sdncadapterworkflow:FalloutHandlerRequest>
+ """
+ content = utils.formatXml(content)
+ logDebug(resultVar + ' = ' + System.lineSeparator() + content, isDebugLogEnabled)
+ execution.setVariable(resultVar, content)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildWorkflowException(execution, 2000, 'Internal Error')
+ }
+ }
+
+ /**
+ * Handle Abort disposition from RainyDayHandler
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void abortProcessing(Execution execution) {
+ def method = getClass().getSimpleName() + '.abortProcessing(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ def errorText = execution.getVariable(prefix + "errorText")
+ def errorCode = execution.getVariable(prefix + "errorCode")
+
+ exceptionUtil.buildAndThrowWorkflowException(execution, errorCode as Integer, errorText)
+ }
+
+ /**
+ * Handle Manual disposition from RainyDayHandler
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void manualProcessing(Execution execution) {
+ def method = getClass().getSimpleName() + '.manualProcessing(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ def taskId = execution.getVariable("RPLVnfI_taskId")
+
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Processing halted - manual task created: " + taskId)
+ }
+
+
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstance.groovy index 68b0e58b57..c1a32c7bf9 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstance.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateNetworkInstance.groovy @@ -102,7 +102,6 @@ public class UpdateNetworkInstance extends AbstractServiceTaskProcessor { utils.log("DEBUG", " 'disableRollback' : " + execution.getVariable("disableRollback") , isDebugEnabled) } - // get/set 'msoRequestId' and 'mso-request-id' String requestId = execution.getVariable("msoRequestId") if (requestId != null) { execution.setVariable("mso-request-id", requestId) @@ -184,15 +183,12 @@ public class UpdateNetworkInstance extends AbstractServiceTaskProcessor { try { - // "networkModelInfo" is expected to be sent - String networkModelInfo = execution.getVariable("networkModelInfo") - utils.log("DEBUG", " networkModelInfo - " + networkModelInfo, isDebugEnabled) - - // "serviceModelInfo" is expected to be sent - String serviceModelInfo = execution.getVariable("serviceModelInfo") - utils.log("DEBUG", " serviceModelInfo - " + serviceModelInfo, isDebugEnabled) - - + // For Ala-Carte (sdnc = 1610): + // 1. the Network ModelInfo is expected to be sent + // via requestDetails.modelInfo (modelType = network), ex: modelCustomizationId + // 2. the Service ModelInfo is expected to be sent but will be IGNORE + // via requestDetails.relatedInstanceList.relatedInstance.modelInfo (modelType = service) + } catch (Exception ex) { sendSyncError(execution) String exceptionMessage = "Bpmn error encountered in UpdateNetworkInstance flow. getNetworkModelInfo() - " + ex.getMessage() @@ -233,6 +229,9 @@ public class UpdateNetworkInstance extends AbstractServiceTaskProcessor { try { utils.log("DEBUG", " ***** Inside prepareDBRequestError() of UpdateNetworkInstance ***** ", isDebugEnabled) + // set DB Header Authorization + setBasicDBAuthHeader(execution, isDebugEnabled) + String statusMessage = "" WorkflowException wfe = null if (execution.getVariable("WorkflowException") instanceof WorkflowException) { @@ -378,12 +377,16 @@ public class UpdateNetworkInstance extends AbstractServiceTaskProcessor { def isDebugEnabled=execution.getVariable("isDebugLogEnabled") execution.setVariable("prefix", Prefix) + utils.log("DEBUG", "DB updateInfraRequest ResponseCode: " + execution.getVariable(Prefix + "dbReturnCode"), isDebugEnabled) + utils.log("DEBUG", "DB updateInfraRequest Response: " + execution.getVariable(Prefix + "createDBResponse"), isDebugEnabled) + utils.log("DEBUG", " ***** Prepare for FalloutHandler. FAILURE - prepare request for sub-process FalloutHandler. *****", isDebugEnabled) - + String falloutHandlerRequest = "" String requestId = execution.getVariable("mso-request-id") try { + WorkflowException wfe = execution.getVariable("WorkflowException") String errorCode = String.valueOf(wfe.getErrorCode()) String errorMessage = wfe.getErrorMessage() @@ -407,8 +410,8 @@ public class UpdateNetworkInstance extends AbstractServiceTaskProcessor { utils.log("DEBUG", " Overall Error Response going to FalloutHandler: " + "\n" + falloutHandlerRequest, isDebugEnabled) } catch (Exception ex) { - String errorException = " Bpmn error encountered in UpdateNetworkInstance flow. FalloutHandlerRequest, buildErrorResponse() - " + ex.getMessage() - utils.log("DEBUG", errorException, isDebugEnabled) + String errorException = " Bpmn error encountered in UpdateNetworkInstance flow. FalloutHandlerRequest, buildErrorResponse() - " + utils.log("DEBUG", "Exception error in UpdateNetworkInstance flow, buildErrorResponse(): " + ex.getMessage(), isDebugEnabled) falloutHandlerRequest = """<aetgt:FalloutHandlerRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1" xmlns:ns="http://org.openecomp/mso/request/types/v1" diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleInfra.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleInfra.groovy index d0949ae4d1..7389ff0916 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleInfra.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleInfra.groovy @@ -20,6 +20,7 @@ package org.openecomp.mso.bpmn.infrastructure.scripts +import groovy.json.JsonOutput import groovy.json.JsonSlurper import groovy.util.Node import groovy.util.XmlParser; @@ -69,40 +70,148 @@ public class UpdateVfModuleInfra extends AbstractServiceTaskProcessor { * @param execution The flow's execution instance. */ public void preProcessRequest(Execution execution) { + def method = getClass().getSimpleName() + '.preProcessRequest(' + - 'execution=' + execution.getId() + - ')' + 'execution=' + execution.getId() + + ')' def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled') logDebug('Entered ' + method, isDebugLogEnabled) initProcessVariables(execution) - def prefix = "UPDVfModI_" - - execution.setVariable("isVidRequest", "false") + def prefix = "UPDVfModI_" def incomingRequest = execution.getVariable('bpmnRequest') utils.log("DEBUG", "Incoming Infra Request: " + incomingRequest, isDebugLogEnabled) - - // check if request is xml or json try { def jsonSlurper = new JsonSlurper() + def jsonOutput = new JsonOutput() Map reqMap = jsonSlurper.parseText(incomingRequest) utils.log("DEBUG", " Request is in JSON format.", isDebugLogEnabled) def serviceInstanceId = execution.getVariable('serviceInstanceId') def vnfId = execution.getVariable('vnfId') - - def vidUtils = new VidUtils(this) - - String requestInXmlFormat = vidUtils.createXmlVfModuleRequest(execution, reqMap, 'UPDATE_VF_MODULE', serviceInstanceId) - - utils.log("DEBUG", " Request in XML format: " + requestInXmlFormat, isDebugLogEnabled) - - execution.setVariable(prefix + 'Request', requestInXmlFormat) + + execution.setVariable(prefix + 'serviceInstanceId', serviceInstanceId) execution.setVariable(prefix+'vnfId', vnfId) execution.setVariable("isVidRequest", "true") + + def vnfName = '' + def asdcServiceModelVersion = '' + def serviceModelInfo = null + def vnfModelInfo = null + + def relatedInstanceList = reqMap.requestDetails?.relatedInstanceList + + if (relatedInstanceList != null) { + relatedInstanceList.each { + if (it.relatedInstance.modelInfo?.modelType == 'service') { + asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion + serviceModelInfo = jsonOutput.toJson(it.relatedInstance.modelInfo) + + } + if (it.relatedInstance.modelInfo.modelType == 'vnf') { + vnfName = it.relatedInstance.instanceName ?: '' + vnfModelInfo = jsonOutput.toJson(it.relatedInstance.modelInfo) + } + } + } + + execution.setVariable(prefix + 'vnfName', vnfName) + execution.setVariable(prefix + 'asdcServiceModelVersion', asdcServiceModelVersion) + execution.setVariable(prefix + 'serviceModelInfo', serviceModelInfo) + execution.setVariable(prefix + 'vnfModelInfo', vnfModelInfo) + + def vnfType = execution.getVariable('vnfType') + execution.setVariable(prefix + 'vnfType', vnfType) + def vfModuleId = execution.getVariable('vfModuleId') + execution.setVariable(prefix + 'vfModuleId', vfModuleId) + def volumeGroupId = execution.getVariable('volumeGroupId') + execution.setVariable(prefix + 'volumeGroupId', volumeGroupId) + def userParams = reqMap.requestDetails?.requestParameters?.userParams + + Map<String, String> userParamsMap = [:] + if (userParams != null) { + userParams.each { userParam -> + userParamsMap.put(userParam.name, userParam.value) + } + } + + utils.log("DEBUG", 'Processed user params: ' + userParamsMap, isDebugLogEnabled) + + execution.setVariable(prefix + 'vfModuleInputParams', userParamsMap) + + def isBaseVfModule = "false" + if (execution.getVariable('isBaseVfModule') == true) { + isBaseVfModule = "true" + } + + execution.setVariable(prefix + 'isBaseVfModule', isBaseVfModule) + + def requestId = execution.getVariable("mso-request-id") + execution.setVariable(prefix + 'requestId', requestId) + + def vfModuleModelInfo = jsonOutput.toJson(reqMap.requestDetails?.modelInfo) + execution.setVariable(prefix + 'vfModuleModelInfo', vfModuleModelInfo) + + def suppressRollback = reqMap.requestDetails?.requestInfo?.suppressRollback + + + def backoutOnFailure = "" + if(suppressRollback != null){ + if ( suppressRollback == true) { + backoutOnFailure = "false" + } else if ( suppressRollback == false) { + backoutOnFailure = "true" + } + } + + execution.setVariable('disableRollback', suppressRollback) + + def vfModuleName = reqMap.requestDetails?.requestInfo?.instanceName ?: null + execution.setVariable(prefix + 'vfModuleName', vfModuleName) + + def serviceId = reqMap.requestDetails?.requestParameters?.serviceId ?: '' + execution.setVariable(prefix + 'serviceId', serviceId) + + def usePreload = reqMap.requestDetails?.requestParameters?.usePreload + execution.setVariable(prefix + 'usePreload', usePreload) + + def cloudConfiguration = reqMap.requestDetails?.cloudConfiguration + def lcpCloudRegionId = cloudConfiguration.lcpCloudRegionId + execution.setVariable(prefix + 'lcpCloudRegionId', lcpCloudRegionId) + def tenantId = cloudConfiguration.tenantId + execution.setVariable(prefix + 'tenantId', tenantId) + + def globalSubscriberId = reqMap.requestDetails?.subscriberInfo?.globalSubscriberId ?: '' + execution.setVariable(prefix + 'globalSubscriberId', globalSubscriberId) + + execution.setVariable(prefix + 'sdncVersion', '1702') + + execution.setVariable("UpdateVfModuleInfraSuccessIndicator", false) + + execution.setVariable("isDebugLogEnabled", isDebugLogEnabled) + + + def source = reqMap.requestDetails?.requestInfo?.source + execution.setVariable(prefix + "source", source) + + //For Completion Handler & Fallout Handler + String requestInfo = + """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1"> + <request-id>${requestId}</request-id> + <action>UPDATE</action> + <source>${source}</source> + </request-info>""" + + execution.setVariable(prefix + "requestInfo", requestInfo) + + //backoutOnFailure + + logDebug('RequestInfo: ' + execution.getVariable(prefix + "requestInfo"), isDebugLogEnabled) + + logDebug('Exited ' + method, isDebugLogEnabled) } catch(groovy.json.JsonException je) { @@ -114,35 +223,7 @@ public class UpdateVfModuleInfra extends AbstractServiceTaskProcessor { String restFaultMessage = e.getMessage() utils.log("ERROR", " Exception Encountered - " + "\n" + restFaultMessage, isDebugLogEnabled) exceptionUtil.buildAndThrowWorkflowException(execution, 5000, restFaultMessage) - } - - - try { - - String request = validateInfraRequest(execution) - - def requestInfo = getRequiredNodeXml(execution, request, 'request-info') - execution.setVariable('UPDVfModI_requestInfo', requestInfo) - execution.setVariable('UPDVfModI_requestId', getRequiredNodeText(execution, requestInfo, 'request-id')) - execution.setVariable('UPDVfModI_source', getNodeTextForce(requestInfo, 'source')) - - def vnfInputs = getRequiredNodeXml(execution, request, 'vnf-inputs') - execution.setVariable('UPDVfModI_vnfInputs', vnfInputs) - execution.setVariable('UPDVfModI_vnfId', getRequiredNodeText(execution, vnfInputs, 'vnf-id')) - execution.setVariable('UPDVfModI_vfModuleId', getRequiredNodeText(execution, vnfInputs, 'vf-module-id')) - execution.setVariable('UPDVfModI_tenantId', getRequiredNodeText(execution, vnfInputs, 'tenant-id')) - execution.setVariable('UPDVfModI_volumeGroupId', getNodeTextForce(vnfInputs, 'volume-group-id')) - - def vnfParams = utils.getNodeXml(request, 'vnf-params') - execution.setVariable('UPDVfModI_vnfParams', vnfParams) - - logDebug('Exited ' + method, isDebugLogEnabled) - } catch (BpmnError e) { - throw e; - } catch (Exception e) { - logError('Caught exception in ' + method, e) - exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in preProcessRequest(): ' + e.getMessage()) - } + } } /** @@ -322,7 +403,7 @@ public class UpdateVfModuleInfra extends AbstractServiceTaskProcessor { try { def prefix = execution.getVariable('prefix') def request = getVariable(execution, prefix+'Request') - def requestInformation = utils.getNodeXml(request, 'request-info', false) + def requestInformation = execution.getVariable(prefix + "requestInfo") def WorkflowException workflowException = execution.getVariable("WorkflowException") def errorResponseCode = workflowException.getErrorCode() diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleInfraV2.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleInfraV2.groovy new file mode 100644 index 0000000000..eefe33d725 --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleInfraV2.groovy @@ -0,0 +1,473 @@ +/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - MSO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+
+import groovy.json.JsonOutput
+import groovy.json.JsonSlurper
+import groovy.util.Node
+import groovy.util.XmlParser;
+import groovy.xml.QName
+import inventory.aai.att.com.v10.GenericVnf
+import inventory.aai.att.com.v10.GenericVnfs
+import inventory.aai.att.com.v10.Pserver
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.impl.cmd.AbstractSetVariableCmd
+import org.camunda.bpm.engine.runtime.Execution
+
+import java.io.Serializable;
+import java.util.List
+
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.rest.APIResponse
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+import org.springframework.beans.factory.annotation.Autowired
+
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.VidUtils
+import org.openecomp.mso.bpmn.core.RollbackData
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.client.aai.AAIValidatorImpl
+import org.openecomp.mso.client.aai.AAIUpdatorImpl
+import org.openecomp.mso.client.appc.ApplicationControllerClient
+import org.openecomp.mso.client.sdno.SDNOValidatorImpl
+
+
+
+public class UpdateVfModuleInfraV2 {
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+ boolean preProcessRequestCheck = true;
+ boolean sendSynchResponseCheck = true;
+ boolean checkPserverFlagCheck = true;
+ boolean vfFlagCheckSetCheck = true;
+ boolean lockAppCCheck = true;
+ boolean healthDiagnosticSDNOCheck = true;
+ boolean healthCheckAppCCheck = true;
+ boolean stopVfModuleControllerCheck = true;
+ boolean healthCheckControllerCheck = true;
+ boolean doUpdateVfModulePrepCheck = true;
+ boolean completionHandlerPrepCheck = true;
+ boolean startVfModuleControllerCheck = true;
+ boolean vFFlagUnsetCheck = true;
+ boolean unlockAppCCheck = true;
+ boolean postUpgradeHealthCheckControllerCheck = true;
+
+
+
+ public void initProcessVariables(Execution execution) {
+ execution.setVariable('prefix', 'UPDVfModI_')
+ execution.setVariable('UPDVfModI_Request', null)
+ execution.setVariable('UPDVfModI_requestInfo', null)
+ execution.setVariable('UPDVfModI_requestId', null)
+ execution.setVariable('UPDVfModI_source', null)
+ execution.setVariable('UPDVfModI_vnfInputs', null)
+ execution.setVariable('UPDVfModI_vnfId', null)
+ execution.setVariable('UPDVFModI_moduleUuid', null)
+ execution.setVariable('UPDVfModI_vfModuleId', null)
+ execution.setVariable('UPDVfModI_tenantId', null)
+ execution.setVariable('UPDVfModI_volumeGroupId', null)
+ execution.setVariable('UPDVfModI_vnfParams', null)
+ execution.setVariable('UPDVfModI_updateInfraRequest', null)
+ execution.setVariable('UpdateVfModuleSuccessIndicator', false)
+ }
+
+ /**
+ * Check for missing elements in the received request.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void preProcessRequest(Execution execution) {
+ System.out.print("*****************************PreProcessRequest**************************")
+
+ def method = getClass().getSimpleName() + '.preProcessRequest(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ //logDebug('Entered ' + method, isDebugLogEnabled)
+
+ initProcessVariables(execution)
+
+ def prefix = "UPDVfModI_"
+
+ def incomingRequest = execution.getVariable('bpmnRequest')
+
+ //utils.log("DEBUG", "Incoming Infra Request: " + incomingRequest, isDebugLogEnabled)
+ try {
+ def jsonSlurper = new JsonSlurper()
+ def jsonOutput = new JsonOutput()
+ Map reqMap = jsonSlurper.parseText(incomingRequest)
+ //utils.log("DEBUG", " Request is in JSON format.", isDebugLogEnabled)
+
+ def serviceInstanceId = execution.getVariable('serviceInstanceId')
+ def vnfId = execution.getVariable('vnfId')
+ def moduleUuid = execution.getVariable('moduleUuid')
+ execution.setVariable(prefix + 'moduleUuid',moduleUuid)
+ execution.setVariable(prefix + 'serviceInstanceId', serviceInstanceId)
+ execution.setVariable(prefix+'vnfId', vnfId)
+ execution.setVariable("isVidRequest", "true")
+
+ def vnfName = ''
+ def asdcServiceModelVersion = ''
+ def serviceModelInfo = null
+ def vnfModelInfo = null
+
+ def relatedInstanceList = reqMap.requestDetails?.relatedInstanceList
+
+ if (relatedInstanceList != null) {
+ relatedInstanceList.each {
+ if (it.relatedInstance.modelInfo?.modelType == 'service') {
+ asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion
+ serviceModelInfo = jsonOutput.toJson(it.relatedInstance.modelInfo)
+ }
+ if (it.relatedInstance.modelInfo.modelType == 'vnf') {
+ vnfName = it.relatedInstance.instanceName ?: ''
+ vnfModelInfo = jsonOutput.toJson(it.relatedInstance.modelInfo)
+ }
+ }
+ }
+
+ execution.setVariable(prefix + 'vnfName', vnfName)
+ execution.setVariable(prefix + 'asdcServiceModelVersion', asdcServiceModelVersion)
+ execution.setVariable(prefix + 'serviceModelInfo', serviceModelInfo)
+ execution.setVariable(prefix + 'vnfModelInfo', vnfModelInfo)
+
+ def vnfType = execution.getVariable('vnfType')
+ execution.setVariable(prefix + 'vnfType', vnfType)
+ def vfModuleId = execution.getVariable('vfModuleId')
+ execution.setVariable(prefix + 'vfModuleId', vfModuleId)
+ def volumeGroupId = execution.getVariable('volumeGroupId')
+ execution.setVariable(prefix + 'volumeGroupId', volumeGroupId)
+ def userParams = reqMap.requestDetails?.requestParameters?.userParams
+
+ Map<String, String> userParamsMap = [:]
+ if (userParams != null) {
+ userParams.each { userParam ->
+ userParamsMap.put(userParam.name, userParam.value)
+ }
+ }
+
+ //utils.log("DEBUG", 'Processed user params: ' + userParamsMap, isDebugLogEnabled)
+
+ execution.setVariable(prefix + 'vfModuleInputParams', userParamsMap)
+
+ def isBaseVfModule = "false"
+ if (execution.getVariable('isBaseVfModule') == true) {
+ isBaseVfModule = "true"
+ }
+
+ execution.setVariable(prefix + 'isBaseVfModule', isBaseVfModule)
+
+ def requestId = execution.getVariable("mso-request-id")
+ execution.setVariable(prefix + 'requestId', requestId)
+
+ def vfModuleModelInfo = jsonOutput.toJson(reqMap.requestDetails?.modelInfo)
+ execution.setVariable(prefix + 'vfModuleModelInfo', vfModuleModelInfo)
+
+ def suppressRollback = reqMap.requestDetails?.requestInfo?.suppressRollback
+
+
+ def backoutOnFailure = ""
+ if(suppressRollback != null){
+ if ( suppressRollback == true) {
+ backoutOnFailure = "false"
+ } else if ( suppressRollback == false) {
+ backoutOnFailure = "true"
+ }
+ }
+
+ execution.setVariable('disableRollback', suppressRollback)
+
+ def vfModuleName = reqMap.requestDetails?.requestInfo?.instanceName ?: null
+ execution.setVariable(prefix + 'vfModuleName', vfModuleName)
+
+ def serviceId = reqMap.requestDetails?.requestParameters?.serviceId ?: ''
+ execution.setVariable(prefix + 'serviceId', serviceId)
+
+ def usePreload = reqMap.requestDetails?.requestParameters?.usePreload
+ execution.setVariable(prefix + 'usePreload', usePreload)
+
+ def cloudConfiguration = reqMap.requestDetails?.cloudConfiguration
+ def lcpCloudRegionId = cloudConfiguration.lcpCloudRegionId
+ execution.setVariable(prefix + 'lcpCloudRegionId', lcpCloudRegionId)
+ def tenantId = cloudConfiguration.tenantId
+ execution.setVariable(prefix + 'tenantId', tenantId)
+
+ def globalSubscriberId = reqMap.requestDetails?.subscriberInfo?.globalSubscriberId ?: ''
+ execution.setVariable(prefix + 'globalSubscriberId', globalSubscriberId)
+
+ execution.setVariable(prefix + 'sdncVersion', '1702')
+
+ execution.setVariable("UpdateVfModuleInfraSuccessIndicator", false)
+
+ execution.setVariable("isDebugLogEnabled", isDebugLogEnabled)
+
+
+ def source = reqMap.requestDetails?.requestInfo?.source
+ execution.setVariable(prefix + "source", source)
+
+ //For Completion Handler & Fallout Handler
+ String requestInfo =
+ """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ <request-id>${requestId}</request-id>
+ <action>UPDATE</action>
+ <source>${source}</source>
+ </request-info>"""
+
+ execution.setVariable(prefix + "requestInfo", requestInfo)
+
+ //backoutOnFailure
+
+ //logDebug('RequestInfo: ' + execution.getVariable(prefix + "requestInfo"), isDebugLogEnabled)
+
+ //logDebug('Exited ' + method, isDebugLogEnabled)
+
+ }
+ catch(groovy.json.JsonException je) {
+ //utils.log("DEBUG", " Request is not in JSON format.", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 5000, "Invalid request format")
+ }
+ catch(Exception e) {
+ String restFaultMessage = e.getMessage()
+ //utils.log("ERROR", " Exception Encountered - " + "\n" + restFaultMessage, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 5000, restFaultMessage)
+ }
+ }
+
+ /**
+ * Prepare and send the synchronous response for this flow.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void sendSynchResponse(Execution execution) {
+ System.out.print("*****************************SendSynchResponse**************************")
+
+ def method = getClass().getSimpleName() + '.sendSynchResponse(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ //logDebug('Entered ' + method, isDebugLogEnabled)
+
+
+ try {
+ def requestInfo = execution.getVariable('UPDVfModI_requestInfo')
+ def requestId = execution.getVariable('UPDVfModI_requestId')
+ def source = execution.getVariable('UPDVfModI_source')
+
+ def progress = getNodeTextForce(requestInfo, 'progress')
+ if (progress.isEmpty()) {
+ progress = '0'
+ }
+ def startTime = getNodeTextForce(requestInfo, 'start-time')
+ if (startTime.isEmpty()) {
+ startTime = System.currentTimeMillis()
+ }
+ // RESTResponse (for API Handler (APIH) Reply Task)
+ def vfModuleId = execution.getVariable("vfModuleId")
+ String synchResponse = """{"requestReferences":{"instanceId":"${vfModuleId}","requestId":"${requestId}"}}""".trim()
+ sendWorkflowResponse(execution, 200, synchResponse)
+ //logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ //logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in sendResponse(): ' + e.getMessage())
+ }
+ }
+
+ //check to see if the Pserver Flag is locked
+ public void checkPserverFlag(Execution execution) {
+
+ System.out.println("*****************************CheckingPserverFlag*************************")
+ String vnfId = (String)execution.getVariable('vnfId')
+ String uuid = (String)execution.getVariable('moduleUuid')
+ AAIValidatorImpl aaiVI = new AAIValidatorImpl()
+ boolean flag = aaiVI.isPhysicalServerLocked(vnfId, uuid)
+ }
+
+ //check to see if the VFFlag is locked
+ public void vfFlagCheck(Execution execution) {
+
+ System.out.print("*****************************VfFlagCheck*************************")
+ String vnfId = (String)execution.getVariable('vnfId')
+ String uuid = (String)execution.getVariable('moduleUuid')
+ AAIValidatorImpl aaiVI = new AAIValidatorImpl()
+ boolean flag = aaiVI.isVNFLocked(vnfId, uuid)
+
+ }
+ //lock the VF Flag
+ public void vfFlagSet(Execution execution) {
+
+ System.out.print("*****************************VfFlagSet*************************")
+ String vnfId = (String)execution.getVariable('vnfId')
+ String uuid = (String)execution.getVariable('moduleUuid')
+ AAIValidatorImpl aaiVI = new AAIValidatorImpl()
+ aaiVI.updateVnfToLocked(vnfId,uuid);
+
+ }
+
+ //Lock AppC
+ public void lockAppC(Execution execution) {
+
+ System.out.print("*****************************lockAppC*************************")
+ def vfModuleId = ""
+ ApplicationControllerClient aCC = new ApplicationControllerClient();
+ def status = aCC.runCommand("Lock",vfModuleId)
+
+
+ }
+ //run health check
+ public void healthCheckAppC(Execution execution) {
+
+ System.out.print("*****************************healthCheckAppC*************************")
+ def vfModuleId = ""
+ ApplicationControllerClient aCC = new ApplicationControllerClient();
+ def status = aCC.runCommand("HealthCheck",vfModuleId)
+
+ }
+ //SDNO health diagnostic
+ public void healthDiagnosticSDNO(Execution execution) {
+
+ System.out.print("*****************************healthDiagnosticSDNO is currently ignored*************************")
+ //SDNOValidatorImpl.healthDiagnostic("","");
+
+ }
+ //stop VF module controller
+ public void stopVfModuleController(Execution execution) {
+
+ System.out.print("*****************************stopVfModuleController*************************")
+ def vfModuleId = ""
+ ApplicationControllerClient aCC = new ApplicationControllerClient();
+ def status = aCC.runCommand("Stop",vfModuleId)
+
+
+ }
+
+ public void doUpdateVfModulePrep(Execution execution) {
+
+ System.out.print("*****************************doUpdateVfModulePrep*************************")
+ def method = getClass().getSimpleName() + '.prepDoUpdateVfModule(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ //logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+
+ //logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ //logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in prepDoUpdateVfModule(): ' + e.getMessage())
+
+ }
+
+ }
+
+ public void completionHandlerPrep(Execution execution,String resultVar) {
+
+ System.out.print("*****************************completionHandlerPrep*************************")
+ def method = getClass().getSimpleName() + '.completionHandlerPrep(' +
+ 'execution=' + execution.getId() +
+ ', resultVar=' + resultVar +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ //logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def requestInfo = getVariable(execution, 'UPDVfModI_requestInfo')
+
+ String content = """
+ <sdncadapterworkflow:MsoCompletionRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:reqtype="http://org.openecomp/mso/request/types/v1">
+ ${requestInfo}
+ <sdncadapterworkflow:mso-bpel-name>MSO_ACTIVATE_BPEL</sdncadapterworkflow:mso-bpel-name>
+ </sdncadapterworkflow:MsoCompletionRequest>
+ """
+
+ content = utils.formatXml(content)
+ //logDebug(resultVar + ' = ' + System.lineSeparator() + content, isDebugLogEnabled)
+ execution.setVariable(resultVar, content)
+
+ //logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ //logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, 'Internal Error')
+
+ }
+
+ }
+
+ public void healthCheckController(Execution execution) {
+
+ System.out.print("*****************************healthCheckController*************************")
+ def vfModuleId = ""
+ ApplicationControllerClient aCC = new ApplicationControllerClient();
+ def status = aCC.runCommand("HealthCheck",vfModuleId)
+
+ }
+
+ public void startVfModuleController(Execution execution) {
+
+ System.out.print("*****************************startVfModuleController*************************")
+ def vfModuleId = ""
+ ApplicationControllerClient aCC = new ApplicationControllerClient();
+ def status = aCC.runCommand("Start",vfModuleId)
+
+ }
+
+ public void vFFlagUnset(Execution execution) {
+
+ System.out.print("*****************************vFFlagUnset*************************")
+ String vnfId = (String)execution.getVariable('vnfId')
+ String uuid = (String)execution.getVariable('moduleUuid')
+ AAIValidatorImpl aaiVI = new AAIValidatorImpl()
+ aaiVI.updateVnfToUnLocked(vnfId,uuid);
+
+
+ }
+
+ public void unlockAppC(Execution execution) {
+
+ System.out.print("*****************************unlockAppC*************************")
+ def vfModuleId = ""
+ ApplicationControllerClient aCC = new ApplicationControllerClient();
+ def status = aCC.runCommand("Unlock",vfModuleId)
+
+ }
+
+ public void postUpgradeHealthCheckController(Execution execution) {
+
+ System.out.print("*****************************postUpgradeHealthCheckController*************************")
+ def vfModuleId = ""
+ ApplicationControllerClient aCC = new ApplicationControllerClient();
+ def status = aCC.runCommand("HealthCheck",vfModuleId)
+
+ }
+
+}
+
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleVolumeInfraV1.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleVolumeInfraV1.groovy index ffe122aed6..e1d567a37d 100644 --- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleVolumeInfraV1.groovy +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVfModuleVolumeInfraV1.groovy @@ -95,9 +95,10 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { //need to get persona-model-id aka model-invariantId to use later to validate vf-module relation in AAI
- def modelInvariantId = reqMap.requestDetails.modelInfo.modelInvariantId ?: ''
+ def modelInvariantId = reqMap.requestDetails.modelInfo.modelInvariantUuid ?: ''
execution.setVariable('UPDVfModVol_modelInvariantId', modelInvariantId)
+ utils.log("DEBUG", "modelInvariantId from request: " + modelInvariantId, isDebugLogEnabled)
utils.log("DEBUG", "XML request:\n" + request, isDebugLogEnabled)
}
catch(groovy.json.JsonException je) {
@@ -123,18 +124,8 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { execution.setVariable('UPDVfModVol_tenantId', getRequiredNodeText(execution, volumeInputs, 'tenant-id'))
//execution.setVariable('UPDVfModVol_modelCustomizationId', getRequiredNodeText(execution, volumeInputs, 'model-customization-id'))
- try {
- // Catalog DB headers Authorization
- String basicAuthValueDB = execution.getVariable("URN_mso_adapters_db_auth")
- utils.log("DEBUG", " Obtained BasicAuth userid password for Catalog DB adapter: " + basicAuthValueDB, isDebugLogEnabled)
-
- def encodedString = utils.getBasicAuth(basicAuthValueDB, execution.getVariable("URN_mso_msoKey"))
- execution.setVariable("BasicAuthHeaderValueDB",encodedString)
- } catch (IOException ex) {
- String dataErrorMessage = " Unable to encode Catalog DB user/password string - " + ex.getMessage()
- utils.log("DEBUG", dataErrorMessage, isDebugLogEnabled)
- exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
- }
+ setBasicDBAuthHeader(execution, isDebugLogEnabled)
+
def volumeParams = utils.getNodeXml(request, 'volume-params')
execution.setVariable('UPDVfModVol_volumeParams', volumeParams)
}
@@ -303,7 +294,13 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { utils.logAudit('Query AAI VF Module: ' + queryAAIVfModuleRequest)
logDebug('Query AAI VF Module: ' + queryAAIVfModuleRequest, isDebugLogEnabled)
- APIResponse response = aaiUtil.executeAAIGetCall(execution, queryAAIVfModuleRequest)
+ def aaiUrl = execution.getVariable("URN_aai_endpoint")
+ logDebug('A&AI URL: ' + aaiUrl, isDebugLogEnabled)
+
+ def requestEndpoint = aaiUrl + queryAAIVfModuleRequest
+ logDebug('A&AI request endpoint: ' + requestEndpoint, isDebugLogEnabled)
+
+ APIResponse response = aaiUtil.executeAAIGetCall(execution, requestEndpoint)
String returnCode = response.getStatusCode()
String aaiResponseAsString = response.getResponseBodyAsString()
@@ -318,7 +315,12 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { ExceptionUtil exceptionUtil = new ExceptionUtil()
if ((returnCode == '200') || (returnCode == '204')) {
- def personaModelId = utils.getNodeText1(aaiResponseAsString, 'persona-model-id')
+ def personaModelId = utils.getNodeText1(aaiResponseAsString, 'model-invariant-id')
+ if(personaModelId == null) {
+ //check old attribute name
+ personaModelId = utils.getNodeText1(aaiResponseAsString, 'persona-model-id')
+ }
+ logDebug("vfModule personaModelId: " + personaModelId, isDebugLogEnabled)
execution.setVariable('UPDVfModVol_personaModelId', personaModelId)
}
else if (returnCode == '404') {
@@ -353,7 +355,11 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { def aaiVolumeGroupResponse = execution.getVariable('UPDVfModVol_aaiVolumeGroupResponse')
def volumeGroupHeatStackId = getNodeTextForce(aaiVolumeGroupResponse, 'heat-stack-id')
def volumeGroupName = getNodeTextForce(aaiVolumeGroupResponse, 'volume-group-name')
- def modelCustomizationId = getNodeTextForce(aaiVolumeGroupResponse, 'vf-module-persona-model-customization-id')
+ def modelCustomizationId = getNodeTextForce(aaiVolumeGroupResponse, 'vf-module-model-customization-id')
+ if(modelCustomizationId == null) {
+ // Check old attribute name
+ modelCustomizationId = getNodeTextForce(aaiVolumeGroupResponse, 'vf-module-persona-model-customization-id')
+ }
def vnfType = execution.getVariable('UPDVfModVol_vnfType')
def vnfVersion = execution.getVariable('UPDVfModVol_vnfVersion')
@@ -430,6 +436,7 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { public void prepDbInfraDbRequest(Execution execution, isDebugLogEnabled) {
def requestId = execution.getVariable('UPDVfModVol_requestId')
+ ExceptionUtil exceptionUtil = new ExceptionUtil();
String updateInfraRequest = """
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
@@ -462,7 +469,7 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { xmlns:ns="http://org.openecomp/mso/request/types/v1">
<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
<request-id>${requestId}</request-id>
- <action>CREATE</action>
+ <action>UPDATE</action>
<source>${source}</source>
</request-info>
<aetgt:mso-bpel-name>BPMN VF Module Volume action: UPDATE</aetgt:mso-bpel-name>
@@ -480,8 +487,15 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { * @param execution The flow's execution instance.
*/
public void prepFalloutHandler(Execution execution, isDebugLogEnabled) {
+ def requestId = execution.getVariable('UPDVfModVol_requestId')
+ def source = execution.getVariable('UPDVfModVol_source')
- def requestInfo = execution.getVariable('UPDVfModVol_requestInfo')
+ String requestInfo = """
+ <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ <request-id>${requestId}</request-id>
+ <action>UPDATE</action>
+ <source>${source}</source>
+ </request-info>"""
def WorkflowException workflowException = execution.getVariable("WorkflowException")
def errorResponseCode = workflowException.getErrorCode()
@@ -495,7 +509,7 @@ class UpdateVfModuleVolumeInfraV1 extends VfModuleBase { <sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
xmlns:reqtype="http://org.openecomp/mso/request/types/v1"
xmlns:msoservtypes="http://org.openecomp/mso/request/types/v1"
- xmlns:structuredtypes="http://org.openecomp/mso/structured/types/v1">
+ xmlns:structuredtypes="http://org.openecomp/mso/structured/types/v1">
${requestInfo}
<sdncadapterworkflow:WorkflowException>
<sdncadapterworkflow:ErrorMessage>${encErrorResponseMsg}</sdncadapterworkflow:ErrorMessage>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVnfInfra.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVnfInfra.groovy new file mode 100644 index 0000000000..47121a38d1 --- /dev/null +++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateVnfInfra.groovy @@ -0,0 +1,676 @@ +/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - MSO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.mso.bpmn.infrastructure.scripts
+
+import groovy.json.JsonOutput
+import groovy.json.JsonSlurper
+import groovy.util.Node
+import groovy.util.XmlParser;
+import groovy.xml.QName
+
+import java.beans.MetaData.java_lang_Class_PersistenceDelegate
+import java.io.Serializable;
+import java.util.UUID;
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.impl.cmd.AbstractSetVariableCmd
+import org.camunda.bpm.engine.runtime.Execution
+import org.openecomp.mso.rest.APIResponse
+import org.openecomp.mso.rest.RESTClient
+import org.openecomp.mso.rest.RESTConfig
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor;
+import org.openecomp.mso.bpmn.common.scripts.VidUtils;
+import org.openecomp.mso.bpmn.core.RollbackData
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.bpmn.core.domain.ModelInfo
+import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition
+import org.openecomp.mso.bpmn.core.domain.VnfResource
+import org.openecomp.mso.client.aai.*
+
+import org.openecomp.mso.client.appc.ApplicationControllerClient;
+import org.openecomp.mso.client.appc.ApplicationControllerSupport;
+import org.openecomp.appc.client.lcm.model.Action;
+import org.openecomp.appc.client.lcm.model.ActionIdentifiers;
+import org.openecomp.appc.client.lcm.model.LockInput
+import org.openecomp.appc.client.lcm.model.UnlockInput
+import org.openecomp.appc.client.lcm.model.HealthCheckInput
+import org.openecomp.appc.client.lcm.model.StartInput
+import org.openecomp.appc.client.lcm.model.StopInput
+import org.openecomp.appc.client.lcm.model.Flags
+import org.openecomp.appc.client.lcm.model.Status
+
+
+
+public class UpdateVnfInfra extends AbstractServiceTaskProcessor {
+
+ ExceptionUtil exceptionUtil = new ExceptionUtil()
+ JsonUtils jsonUtils = new JsonUtils()
+ ApplicationControllerClient appcClient = new ApplicationControllerClient()
+ def prefix = "UPDVnfI_"
+
+ /**
+ * Initialize the flow's variables.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void initProcessVariables(Execution execution) {
+ execution.setVariable('prefix', 'UPDVnfI_')
+ execution.setVariable('UPDVnfI_Request', null)
+ execution.setVariable('UPDVnfI_requestInfo', null)
+ execution.setVariable('UPDVnfI_requestId', null)
+ execution.setVariable('UPDVnfI_source', null)
+ execution.setVariable('UPDVnfI_vnfInputs', null)
+ execution.setVariable('UPDVnfI_vnfId', null)
+ execution.setVariable('UPDVnfI_tenantId', null)
+ execution.setVariable('UPDVnfI_vnfParams', null)
+ execution.setVariable('UpdateVnfSuccessIndicator', false)
+ execution.setVariable('UPDVnfI_serviceType', null)
+ execution.setVariable('UPDVnfI_nfRole', null)
+ execution.setVariable('UPDVnfI_currentActivity', 'UPDVnfI')
+ execution.setVariable('UPDVnfI_workStep', null)
+ execution.setVariable('UPDVnfI_failedActivity', null)
+ execution.setVariable('UPDVnfI_errorCode', "0")
+ execution.setVariable('UPDVnfI_errorText', null)
+ execution.setVariable('UPDVnfI_healthCheckIndex', 1)
+ }
+
+ /**
+ * Check for missing elements in the received request.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void preProcessRequest(Execution execution) {
+ def method = getClass().getSimpleName() + '.preProcessRequest(' +
+ 'execution=' + execution.getId() +
+ ')'
+ initProcessVariables(execution)
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ initProcessVariables(execution)
+
+ def incomingRequest = execution.getVariable('bpmnRequest')
+
+ utils.log("DEBUG", "Incoming Infra Request: " + incomingRequest, isDebugLogEnabled)
+ try {
+ def jsonSlurper = new JsonSlurper()
+ def jsonOutput = new JsonOutput()
+ Map reqMap = jsonSlurper.parseText(incomingRequest)
+ utils.log("DEBUG", " Request is in JSON format.", isDebugLogEnabled)
+
+ def serviceInstanceId = execution.getVariable('serviceInstanceId')
+ def vnfId = execution.getVariable('vnfId')
+
+ execution.setVariable(prefix + 'serviceInstanceId', serviceInstanceId)
+ execution.setVariable(prefix + 'vnfId', vnfId)
+ execution.setVariable("isVidRequest", "true")
+
+ def asdcServiceModelVersion = ''
+ def serviceModelInfo = null
+
+ def relatedInstanceList = reqMap.requestDetails?.relatedInstanceList
+
+ if (relatedInstanceList != null) {
+ relatedInstanceList.each {
+ if (it.relatedInstance.modelInfo?.modelType == 'service') {
+ utils.log("DEBUG", "PROCESSING SERVICE INFO", isDebugLogEnabled)
+ asdcServiceModelVersion = it.relatedInstance.modelInfo?.modelVersion
+ serviceModelInfo = jsonOutput.toJson(it.relatedInstance.modelInfo)
+ utils.log("DEBUG", "ServiceModelInfo: " + serviceModelInfo, isDebugLogEnabled)
+ def modelInvariant = jsonUtils.getJsonValue(serviceModelInfo, "modelInvariantUuid")
+ utils.log("DEBUG", "modelInvariant: " + modelInvariant, isDebugLogEnabled)
+ }
+
+ }
+ }
+
+ execution.setVariable(prefix + 'asdcServiceModelVersion', asdcServiceModelVersion)
+ execution.setVariable(prefix + 'serviceModelInfo', serviceModelInfo)
+ def vnfModelInfo = jsonOutput.toJson(reqMap.requestDetails?.modelInfo)
+ execution.setVariable(prefix + 'vnfModelInfo', vnfModelInfo)
+ def vnfModelInvariantUuid = jsonUtils.getJsonValue(vnfModelInfo, "modelInvariantUuid")
+ execution.setVariable(prefix + 'vnfModelInvariantUuid', vnfModelInvariantUuid)
+ logDebug("vnfModelInvariantUuid: " + vnfModelInvariantUuid, isDebugLogEnabled)
+
+ def vnfType = execution.getVariable('vnfType')
+ execution.setVariable(prefix + 'vnfType', vnfType)
+
+ def userParams = reqMap.requestDetails?.requestParameters?.userParams
+
+ Map<String, String> userParamsMap = [:]
+ if (userParams != null) {
+ userParams.each { userParam ->
+ userParamsMap.put(userParam.name, userParam.value)
+ }
+ }
+
+ utils.log("DEBUG", 'Processed user params: ' + userParamsMap, isDebugLogEnabled)
+
+ execution.setVariable(prefix + 'vfModuleInputParams', userParamsMap)
+
+ def requestId = execution.getVariable("mso-request-id")
+ execution.setVariable(prefix + 'requestId', requestId)
+ execution.setVariable('msoRequestId', requestId)
+
+
+ def vnfName = reqMap.requestDetails?.requestInfo?.instanceName ?: null
+ execution.setVariable(prefix + 'vnfName', vnfName)
+
+ def requestorId = reqMap.requestDetails?.requestInfo?.requestorId ?: null
+ execution.setVariable(prefix + 'requestorId', requestorId)
+
+ def usePreload = reqMap.requestDetails?.requestParameters?.usePreload
+ execution.setVariable(prefix + 'usePreload', usePreload)
+
+ def cloudConfiguration = reqMap.requestDetails?.cloudConfiguration
+ def lcpCloudRegionId = cloudConfiguration.lcpCloudRegionId
+ execution.setVariable(prefix + 'lcpCloudRegionId', lcpCloudRegionId)
+ def tenantId = cloudConfiguration.tenantId
+ execution.setVariable(prefix + 'tenantId', tenantId)
+
+ def globalSubscriberId = reqMap.requestDetails?.subscriberInfo?.globalSubscriberId ?: ''
+ execution.setVariable(prefix + 'globalSubscriberId', globalSubscriberId)
+
+ execution.setVariable(prefix + 'sdncVersion', '1702')
+
+ execution.setVariable("UpdateVnfInfraSuccessIndicator", false)
+
+ execution.setVariable("isDebugLogEnabled", isDebugLogEnabled)
+
+ def source = reqMap.requestDetails?.requestInfo?.source
+ execution.setVariable(prefix + "source", source)
+
+ //For Completion Handler & Fallout Handler
+ String requestInfo =
+ """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+ <request-id>${requestId}</request-id>
+ <action>UPDATE</action>
+ <source>${source}</source>
+ </request-info>"""
+
+ execution.setVariable(prefix + "requestInfo", requestInfo)
+
+ logDebug('RequestInfo: ' + execution.getVariable(prefix + "requestInfo"), isDebugLogEnabled)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+
+ }
+ catch(groovy.json.JsonException je) {
+ utils.log("DEBUG", " Request is not in JSON format.", isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 5000, "Invalid request format")
+
+ }
+ catch(Exception e) {
+ String restFaultMessage = e.getMessage()
+ utils.log("ERROR", " Exception Encountered - " + "\n" + restFaultMessage, isDebugLogEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 5000, restFaultMessage)
+ }
+ }
+
+ /**
+ * Prepare and send the sychronous response for this flow.
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void sendSynchResponse(Execution execution) {
+ def method = getClass().getSimpleName() + '.sendSynchResponse(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+
+ try {
+ def requestInfo = execution.getVariable('UPDVnfI_requestInfo')
+ def requestId = execution.getVariable('UPDVnfI_requestId')
+ def source = execution.getVariable('UPDVnfI_source')
+ def progress = getNodeTextForce(requestInfo, 'progress')
+ if (progress.isEmpty()) {
+ progress = '0'
+ }
+ def startTime = getNodeTextForce(requestInfo, 'start-time')
+ if (startTime.isEmpty()) {
+ startTime = System.currentTimeMillis()
+ }
+
+ // RESTResponse (for API Handler (APIH) Reply Task)
+ def vnfId = execution.getVariable("vnfId")
+ String synchResponse = """{"requestReferences":{"instanceId":"${vnfId}","requestId":"${requestId}"}}""".trim()
+
+ sendWorkflowResponse(execution, 200, synchResponse)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in sendResponse(): ' + e.getMessage())
+ }
+ }
+
+
+
+ /**
+ * Get VnfResource decomposition object for this VNF.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void getVnfResourceDecomposition(Execution execution) {
+ def method = getClass().getSimpleName() + '.getVnfResourceDecomposition(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+ String vnfModelInvariantUuid = execution.getVariable(prefix + 'vnfModelInvariantUuid')
+ logDebug("vnfModelInvariantUuid: " + vnfModelInvariantUuid, isDebugLogEnabled)
+ List<VnfResource> vnfResources = serviceDecomposition.getServiceVnfs()
+
+ for (i in 0..vnfResources.size()-1) {
+ ModelInfo modelInfo = vnfResources[i].getModelInfo()
+ String modelInvariantUuidFromDecomposition = modelInfo.getModelInvariantUuid()
+ logDebug("modelInvariantUuidFromDecomposition: " + modelInvariantUuidFromDecomposition, isDebugLogEnabled)
+
+ if (vnfModelInvariantUuid.equals(modelInvariantUuidFromDecomposition)) {
+ VnfResource vnfResourceDecomposition = vnfResources[i]
+ execution.setVariable(prefix + 'vnfResourceDecomposition', vnfResourceDecomposition)
+ def nfRole = vnfResourceDecomposition.getNfRole()
+ execution.setVariable(prefix + 'nfRole', nfRole)
+ logDebug("vnfResourceDecomposition: " + vnfResourceDecomposition.toJsonString(), isDebugLogEnabled)
+ break
+ }
+ else {
+ //exception!
+ }
+
+ }
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in getVnfResourceDecomposition(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * Check if this VNF is already in maintenance in A&AI.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void checkIfVnfInMaintInAAI(Execution execution) {
+ def method = getClass().getSimpleName() + '.checkIfVnfInMaintInAAI(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ execution.setVariable(prefix + "workStep", "checkIfVnfInMaintInAAI")
+ execution.setVariable(prefix + "failedActivity", "AAI")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def transactionLoggingUuid = UUID.randomUUID().toString()
+ AAIRestClientImpl client = new AAIRestClientImpl()
+ AAIValidatorImpl aaiValidator = new AAIValidatorImpl()
+ aaiValidator.setClient(client)
+ def vnfId = execution.getVariable("vnfId")
+ boolean isInMaint = aaiValidator.isVNFLocked(vnfId, transactionLoggingUuid)
+ logDebug("isInMaint result: " + isInMaint, isDebugLogEnabled)
+ execution.setVariable(prefix + 'isVnfInMaintenance', isInMaint)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in checkIfVnfInMaintInAAI(): ' + e.getMessage())
+ }
+ }
+
+
+ /**
+ * Check if this VNF's pservers are locked in A&AI.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void checkIfPserversInMaintInAAI(Execution execution) {
+ def method = getClass().getSimpleName() + '.checkIfPserversInMaintInAAI(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable(prefix + "workStep", "checkIfPserversInMaintInAAI")
+ execution.setVariable(prefix + "failedActivity", "AAI")
+
+ try {
+ def transactionLoggingUuid = UUID.randomUUID().toString()
+ AAIRestClientImpl client = new AAIRestClientImpl()
+ AAIValidatorImpl aaiValidator = new AAIValidatorImpl()
+ aaiValidator.setClient(client)
+ def vnfId = execution.getVariable("vnfId")
+ boolean areLocked = aaiValidator.isPhysicalServerLocked(vnfId, transactionLoggingUuid)
+ logDebug("areLocked result: " + areLocked, isDebugLogEnabled)
+ execution.setVariable(prefix + 'arePserversLocked', areLocked)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in checkIfPserversInMaintInAAI(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * Set inMaint flag for this VNF to the specified value in A&AI.
+ *
+ *
+ * @param execution The flow's execution instance.
+ * @param inMaint The boolean value of the flag to set
+ */
+ public void setVnfInMaintFlagInAAI(Execution execution, boolean inMaint) {
+ def method = getClass().getSimpleName() + '.setVnfInMaintFlagInAAI(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ if (inMaint) {
+ execution.setVariable(prefix + "workStep", "setVnfInMaintFlagInAAI")
+ }
+ else {
+ execution.setVariable(prefix + "workStep", "unsetVnfInMaintFlagInAAI")
+ }
+ execution.setVariable(prefix + "failedActivity", "AAI")
+
+ try {
+ def transactionLoggingUuid = UUID.randomUUID().toString()
+ AAIRestClientImpl client = new AAIRestClientImpl()
+ AAIUpdatorImpl aaiUpdator = new AAIUpdatorImpl()
+ aaiUpdator.setClient(client)
+ def vnfId = execution.getVariable("vnfId")
+ if (inMaint) {
+ aaiUpdator.updateVnfToLocked(vnfId, transactionLoggingUuid)
+ }
+ else {
+ aaiUpdator.updateVnfToUnLocked(vnfId, transactionLoggingUuid)
+ }
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in setVnfInMaintFlagInAAI(): ' + e.getMessage())
+ }
+ }
+
+ /**
+ * Call APP-C client to execute specified APP-C command for this VNF.
+ *
+ *
+ * @param execution The flow's execution instance.
+ * @param action The action to take in APP-C.
+ */
+ public void runAppcCommand(Execution execution, Action action) {
+ def method = getClass().getSimpleName() + '.runAppcCommand(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ logDebug("Running APP-C action: " + action.toString(), isDebugLogEnabled)
+ String vnfId = execution.getVariable('vnfId')
+ String msoRequestId = execution.getVariable(prefix + 'requestId')
+ execution.setVariable('msoRequestId', msoRequestId)
+ execution.setVariable(prefix + "failedActivity", "APP-C")
+
+ ApplicationControllerSupport support = new ApplicationControllerSupport()
+ appcClient.appCSupport=support
+ org.springframework.test.util.ReflectionTestUtils.setField(support, "lcmModelPackage", "org.openecomp.appc.client.lcm.model");
+ Flags flags = new Flags();
+ ActionIdentifiers actionIdentifiers = new ActionIdentifiers();
+ actionIdentifiers.setVnfId(vnfId);
+ Status appcStatus
+ switch(action) {
+ case Action.Lock:
+ execution.setVariable(prefix + 'workStep', "LockVNF")
+ appcStatus = appcClient.runCommand(Action.Lock,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.Unlock:
+ execution.setVariable(prefix + 'workStep', "UnlockVNF")
+ appcStatus = appcClient.runCommand(Action.Unlock,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.HealthCheck:
+ def healthCheckIndex = execution.getVariable(prefix + 'healthCheckIndex')
+ execution.setVariable(prefix + 'workStep', "HealthCheckVNF" + healthCheckIndex)
+ execution.setVariable(prefix + 'healthCheckIndex', healthCheckIndex + 1)
+ appcStatus = appcClient.runCommand(Action.HealthCheck,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.Start:
+ execution.setVariable(prefix + 'workStep', "StartVNF")
+ appcStatus = appcClient.runCommand(Action.Start,actionIdentifiers,flags,null,msoRequestId)
+ break
+ case Action.Stop:
+ execution.setVariable(prefix + 'workStep', "StopVNF")
+ appcStatus = appcClient.runCommand(Action.Stop,actionIdentifiers,flags,null,msoRequestId)
+ break
+ default:
+ break
+ }
+ logDebug("Completed AppC request", isDebugLogEnabled)
+ int appcCode = appcStatus.getCode()
+ logDebug("AppC status code is: " + appcCode, isDebugLogEnabled)
+ logDebug("AppC status message is: " + appcStatus.getMessage(), isDebugLogEnabled)
+ if (support.getCategoryOf(appcStatus) == ApplicationControllerSupport.StatusCategory.ERROR) {
+ execution.setVariable(prefix + "errorCode", Integer.toString(appcCode))
+ execution.setVariable(prefix + "errorText", appcStatus.getMessage())
+ }
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //throw e;
+ } catch (java.lang.NoSuchMethodError e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+ //throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ execution.setVariable(prefix + "errorCode", "1002")
+ execution.setVariable(prefix + "errorText", e.getMessage())
+
+ //exceptionUtil.buildAndThrowWorkflowException(execution, 1002, 'Error in ' + method + ': ' + e.getMessage())
+ }
+ }
+
+
+
+
+
+ /**
+ * Builds a "CompletionHandler" request and stores it in the specified execution variable.
+ *
+ * @param execution the execution
+ * @param resultVar the execution variable in which the result will be stored
+ */
+ public void completionHandlerPrep(Execution execution, String resultVar) {
+ def method = getClass().getSimpleName() + '.completionHandlerPrep(' +
+ 'execution=' + execution.getId() +
+ ', resultVar=' + resultVar +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+
+ try {
+ appcClient.shutdownclient()
+ def requestInfo = getVariable(execution, 'UPDVnfI_requestInfo')
+
+ String content = """
+ <sdncadapterworkflow:MsoCompletionRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:reqtype="http://org.openecomp/mso/request/types/v1">
+ ${requestInfo}
+ <sdncadapterworkflow:mso-bpel-name>MSO_ACTIVATE_BPEL</sdncadapterworkflow:mso-bpel-name>
+ </sdncadapterworkflow:MsoCompletionRequest>
+ """
+
+ content = utils.formatXml(content)
+ logDebug(resultVar + ' = ' + System.lineSeparator() + content, isDebugLogEnabled)
+ execution.setVariable(resultVar, content)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, 'Internal Error')
+ }
+ }
+
+ /**
+ * Prepare DoUpdateVnfAndModules call.
+ *
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void prepDoUpdateVnfAndModules(Execution execution) {
+ def method = getClass().getSimpleName() + '.prepDoUpdateVnfAndModules(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ execution.setVariable(prefix + 'errorCode', "0")
+ logDebug('Entered ' + method, isDebugLogEnabled)
+ execution.setVariable(prefix + "workStep", "doUpdateVnfAndModules")
+ execution.setVariable(prefix + "failedActivity", "MSO Update VNF")
+ logDebug('Exited ' + method, isDebugLogEnabled)
+
+ }
+
+ /**
+ * Builds a "FalloutHandler" request and stores it in the specified execution variable.
+ *
+ * @param execution the execution
+ * @param resultVar the execution variable in which the result will be stored
+ */
+ public void falloutHandlerPrep(Execution execution, String resultVar) {
+ def method = getClass().getSimpleName() + '.falloutHandlerPrep(' +
+ 'execution=' + execution.getId() +
+ ', resultVar=' + resultVar +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ try {
+ def prefix = execution.getVariable('prefix')
+ def request = getVariable(execution, prefix+'Request')
+ def requestInformation = execution.getVariable(prefix + "requestInfo")
+
+ appcClient.shutdownclient()
+
+ def WorkflowException workflowException = execution.getVariable("WorkflowException")
+ def errorResponseCode = workflowException.getErrorCode()
+ def errorResponseMsg = workflowException.getErrorMessage()
+ def encErrorResponseMsg = ""
+ if (errorResponseMsg != null) {
+ encErrorResponseMsg = errorResponseMsg.replace("&", "&").replace("<", "<").replace(">", ">")
+ }
+
+ String content = """
+ <sdncadapterworkflow:FalloutHandlerRequest xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:reqtype="http://org.openecomp/mso/request/types/v1"
+ xmlns:msoservtypes="http://org.openecomp/mso/request/types/v1"
+ xmlns:structuredtypes="http://org.openecomp/mso/structured/types/v1">
+ ${requestInformation}
+ <sdncadapterworkflow:WorkflowException>
+ <sdncadapterworkflow:ErrorMessage>${encErrorResponseMsg}</sdncadapterworkflow:ErrorMessage>
+ <sdncadapterworkflow:ErrorCode>${errorResponseCode}</sdncadapterworkflow:ErrorCode>
+ </sdncadapterworkflow:WorkflowException>
+ </sdncadapterworkflow:FalloutHandlerRequest>
+ """
+ content = utils.formatXml(content)
+ logDebug(resultVar + ' = ' + System.lineSeparator() + content, isDebugLogEnabled)
+ execution.setVariable(resultVar, content)
+
+ logDebug('Exited ' + method, isDebugLogEnabled)
+ } catch (BpmnError e) {
+ throw e;
+ } catch (Exception e) {
+ logError('Caught exception in ' + method, e)
+ exceptionUtil.buildWorkflowException(execution, 2000, 'Internal Error')
+ }
+ }
+
+ /**
+ * Handle Abort disposition from RainyDayHandler
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void abortProcessing(Execution execution) {
+ def method = getClass().getSimpleName() + '.abortProcessing(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ def errorText = execution.getVariable(prefix + "errorText")
+ def errorCode = execution.getVariable(prefix + "errorCode")
+
+ exceptionUtil.buildAndThrowWorkflowException(execution, errorCode as Integer, errorText)
+ }
+
+ /**
+ * Handle Manual disposition from RainyDayHandler
+ *
+ * @param execution The flow's execution instance.
+ */
+ public void manualProcessing(Execution execution) {
+ def method = getClass().getSimpleName() + '.manualProcessing(' +
+ 'execution=' + execution.getId() +
+ ')'
+ def isDebugLogEnabled = execution.getVariable('isDebugLogEnabled')
+ logDebug('Entered ' + method, isDebugLogEnabled)
+
+ def taskId = execution.getVariable("UPDVnfI_taskId")
+
+ exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Processing halted - manual task created: " + taskId)
+ }
+
+
+}
|