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.core.domain.AllottedResource
+import org.openecomp.mso.bpmn.core.domain.ModelInfo
+import org.openecomp.mso.bpmn.core.domain.NetworkResource
import org.openecomp.mso.bpmn.core.domain.Resource
import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition
import org.openecomp.mso.bpmn.core.domain.ServiceInstance
+import org.openecomp.mso.bpmn.core.domain.VnfResource
import org.openecomp.mso.bpmn.core.json.JsonUtils
import org.openecomp.mso.bpmn.infrastructure.properties.BPMNProperties
import static org.apache.commons.lang3.StringUtils.isBlank
-import static org.apache.commons.lang3.StringUtils.isBlank
-
/**
* input for script :
utils.log("INFO"," ***** Exit preProcessRequest *****", isDebugEnabled)
}
- public void sequenceResource(execution){
+ public void sequenceResource(DelegateExecution execution){
def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
utils.log("INFO", " ======== STARTED sequenceResource Process ======== ", isDebugEnabled)
- List<String> nsResources = new ArrayList<String>()
- List<String> wanResources = new ArrayList<String>()
- List<String> resourceSequence = new ArrayList<String>()
+ List<Resource> sequencedResourceList = new ArrayList<Resource>()
+ List<Resource> wanResources = new ArrayList<Resource>()
// get delete resource list and order list
List<Resource> delResourceList = execution.getVariable("deleteResourceList")
- // existing resource list
- List<ServiceInstance> existResourceList = execution.getVariable("realNSRessources")
-
- for(ServiceInstance rc_e : existResourceList){
-
- String muuid = rc_e.getModelInfo().getModelUuid()
- String mIuuid = rc_e.getModelInfo().getModelInvariantUuid()
- String mCuuid = rc_e.getModelInfo().getModelCustomizationUuid()
- rcType = rc_e.getInstanceName()
-
- for(Resource rc_d : delResourceList){
-
- if(rc_d.getModelInfo().getModelUuid() == muuid
- && rc_d.getModelInfo().getModelInvariantUuid() == mIuuid
- && rc_d.getModelInfo().getModelCustomizationUuid() == mCuuid) {
-
- if(StringUtils.containsIgnoreCase(rcType, "overlay")
- || StringUtils.containsIgnoreCase(rcType, "underlay")){
- wanResources.add(rcType)
- }else{
- nsResources.add(rcType)
+
+ def resourceSequence = BPMNProperties.getResourceSequenceProp()
+
+ if(resourceSequence != null) {
+ for (resourceType in resourceSequence.reverse()) {
+ for (resource in delResourceList) {
+ if (StringUtils.containsIgnoreCase(resource.getModelInfo().getModelName(), resourceType)) {
+ sequencedResourceList.add(resource)
+
+ if (resource instanceof NetworkResource) {
+ wanResources.add(resource)
+ }
}
-
+ }
+ }
+ }else {
+ //define sequenced resource list, we deploy vf first and then network and then ar
+ //this is defaule sequence
+ List<VnfResource> vnfResourceList = new ArrayList<VnfResource>()
+ List<AllottedResource> arResourceList = new ArrayList<AllottedResource>()
+ for (Resource rc : delResourceList) {
+ if (rc instanceof VnfResource) {
+ vnfResourceList.add(rc)
+ } else if (rc instanceof NetworkResource) {
+ wanResources.add(rc)
+ } else if (rc instanceof AllottedResource) {
+ arResourceList.add(rc)
}
}
+ sequencedResourceList.addAll(arResourceList)
+ sequencedResourceList.addAll(wanResources)
+ sequencedResourceList.addAll(vnfResourceList)
}
- resourceSequence.addAll(wanResources)
- resourceSequence.addAll(nsResources)
String isContainsWanResource = wanResources.isEmpty() ? "false" : "true"
execution.setVariable("isContainsWanResource", isContainsWanResource)
execution.setVariable("currentResourceIndex", 0)
- execution.setVariable("resourceSequence", resourceSequence)
+ execution.setVariable("sequencedResourceList", sequencedResourceList)
utils.log("INFO", "resourceSequence: " + resourceSequence, isDebugEnabled)
- execution.setVariable("wanResources", wanResources)
utils.log("INFO", " ======== END sequenceResource Process ======== ", isDebugEnabled)
}
/**
* prepare delete parameters
*/
- public void preResourceDelete(execution, resourceName){
+ public void preResourceDelete(DelegateExecution execution){
def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
utils.log("INFO", " ======== STARTED preResourceDelete Process ======== ", isDebugEnabled)
- List<ServiceInstance> existResourceList = execution.getVariable("realNSRessources")
-
- for(ServiceInstance rc_e : existResourceList){
+ List<Resource> sequencedResourceList = execution.getVariable("sequencedResourceList")
- if(StringUtils.containsIgnoreCase(rc_e.getInstanceName(), resourceName)) {
+ int currentIndex = execution.getVariable("currentResourceIndex")
+ Resource curResource = sequencedResourceList.get(currentIndex);
- String resourceInstanceUUID = rc_e.getInstanceId()
- String resourceTemplateUUID = rc_e.getModelInfo().getModelUuid()
- execution.setVariable("resourceInstanceId", resourceInstanceUUID)
- execution.setVariable("resourceTemplateId", resourceTemplateUUID)
- execution.setVariable("resourceType", resourceName)
- utils.log("INFO", "Delete Resource Info resourceTemplate Id :" + resourceTemplateUUID + " resourceInstanceId: "
- + resourceInstanceUUID + " resourceType: " + resourceName, isDebugEnabled)
- }
- }
+ String resourceInstanceUUID = curResource.getResourceId()
+ String resourceTemplateUUID = curResource.getModelInfo().getModelUuid()
+ execution.setVariable("resourceInstanceId", resourceInstanceUUID)
+ execution.setVariable("currentResource", curResource)
+ utils.log("INFO", "Delete Resource Info resourceTemplate Id :" + resourceTemplateUUID + " resourceInstanceId: "
+ + resourceInstanceUUID + " resourceModelName: " + curResource.getModelInfo().getModelName(), isDebugEnabled)
utils.log("INFO", " ======== END preResourceDelete Process ======== ", isDebugEnabled)
}
/**
* Execute delete workflow for resource
*/
- public void executeResourceDelete(execution) {
+ public void executeResourceDelete(DelegateExecution execution) {
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
utils.log("INFO", "======== Start executeResourceDelete Process ======== ", isDebugEnabled)
String requestId = execution.getVariable("msoRequestId")
String serviceInstanceId = execution.getVariable("serviceInstanceId")
String serviceType = execution.getVariable("serviceType")
- ResourceInput resourceInput = execution.getVariable("resourceInput")
- String requestAction = resourceInput.getOperationType()
- JSONObject resourceRecipe = cutils.getResourceRecipe(execution, resourceInput.getResourceUuid(), requestAction)
+
+ String resourceInstanceId = execution.getVariable("resourceInstanceId")
+
+ Resource currentResource = execution.getVariable("currentResource")
+ String action = "deleteInstance"
+ JSONObject resourceRecipe = cutils.getResourceRecipe(execution, currentResource.getModelInfo().getModelUuid(), action)
String recipeUri = resourceRecipe.getString("orchestrationUri")
- String recipeTimeOut = resourceRecipe.getString("recipeTimeout")
+ int recipeTimeout = resourceRecipe.getInt("recipeTimeout")
String recipeParamXsd = resourceRecipe.get("paramXSD")
- HttpResponse resp = BpmnRestClient.post(recipeUri, requestId, recipeTimeout, requestAction, serviceInstanceId, serviceType, resourceInput.toString(), recipeParamXsd)
+
+
+ ResourceInput resourceInput = new ResourceInput();
+ resourceInput.setServiceInstanceId(serviceInstanceId)
+ resourceInput.setResourceInstanceName(currentResource.getResourceInstanceName())
+ resourceInput.setResourceInstancenUuid(currentResource.getResourceId())
+ resourceInput.setOperationId(execution.getVariable("operationId"))
+ resourceInput.setOperationType(execution.getVariable("operationType"))
+ String globalSubscriberId = execution.getVariable("globalSubscriberId")
+ resourceInput.setGlobalSubscriberId(globalSubscriberId)
+ resourceInput.setResourceModelInfo(currentResource.getModelInfo());
+ ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+ resourceInput.setServiceModelInfo(serviceDecomposition.getModelInfo());
+ resourceInput.setServiceType(serviceType)
+
+ String recipeURL = BPMNProperties.getProperty("bpelURL", "http://mso:8080") + recipeUri
+
+ HttpResponse resp = BpmnRestClient.post(recipeURL, requestId, recipeTimeout, action, serviceInstanceId, serviceType, resourceInput.toString(), recipeParamXsd)
utils.log("INFO", " ======== END executeResourceDelete Process ======== ", isDebugEnabled)
}
- public void parseNextResource(execution){
+ public void parseNextResource(DelegateExecution execution){
def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
utils.log("INFO", "======== Start parseNextResource Process ======== ", isDebugEnabled)
def currentIndex = execution.getVariable("currentResourceIndex")
def nextIndex = currentIndex + 1
execution.setVariable("currentResourceIndex", nextIndex)
- List<String> resourceSequence = execution.getVariable("resourceSequence")
- if(nextIndex >= resourceSequence.size()){
+ List<String> sequencedResourceList = execution.getVariable("sequencedResourceList")
+ if(nextIndex >= sequencedResourceList.size()){
execution.setVariable("allResourceFinished", "true")
}else{
execution.setVariable("allResourceFinished", "false")
}
utils.log("INFO", "======== COMPLETED parseNextResource Process ======== ", isDebugEnabled)
}
+
+ public void prepareFinishedProgressForResource(DelegateExecution execution) {
+
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ String serviceType = execution.getVariable("serviceType")
+ String resourceInstanceId = execution.getVariable("resourceInstanceId")
+ Resource currentResource = execution.getVariable("currentResource")
+ String resourceCustomizationUuid = currentResource.getModelInfo().getModelCustomizationUuid()
+ String resourceModelName = currentResource.getModelInfo().getModelName()
+ String operationType = execution.getVariable("operationType")
+ String progress = "100"
+ String status = "finished"
+ String statusDescription = "The resource instance does not exist for " + resourceModelName
+ String operationId = execution.getVariable("operationId")
+
+ String body = """
+ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
+ xmlns:ns="http://org.openecomp.mso/requestsdb">
+ <soapenv:Header/>
+ <soapenv:Body>
+ <ns:updateResourceOperationStatus>
+ <operType>${operationType}</operType>
+ <operationId>${operationId}</operationId>
+ <progress>${progress}</progress>
+ <resourceTemplateUUID>${resourceCustomizationUuid}</resourceTemplateUUID>
+ <serviceId>${serviceInstanceId}</serviceId>
+ <status>${status}</status>
+ <statusDescription>${statusDescription}</statusDescription>
+ </ns:updateResourceOperationStatus>
+ </soapenv:Body>
+ </soapenv:Envelope>""";
+
+ def dbAdapterEndpoint = execution.getVariable("URN_mso_adapters_openecomp_db_endpoint")
+ execution.setVariable("CVFMI_dbAdapterEndpoint", dbAdapterEndpoint)
+ execution.setVariable("CVFMI_updateResOperStatusRequest", body)
+ }
+
+ public void prepareSDNCServiceDeactivateRequest (DelegateExecution execution) {
+ prepareSDNCServiceRequest (execution, "deactivate")
+ }
+
+ public void prepareSDNCServiceDeleteRequest (DelegateExecution execution) {
+ prepareSDNCServiceRequest (execution, "delete")
+ }
+
+ public void prepareSDNCServiceRequest (DelegateExecution execution, String svcAction) {
+ def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+ utils.log("INFO"," ***** Started prepareSDNCServiceRequest for " + svcAction + "*****", isDebugEnabled)
+
+ try {
+ // get variables
+ String sdnc_svcAction = svcAction
+ String sdncCallback = execution.getVariable("URN_mso_workflow_sdncadapter_callback")
+ String hdrRequestId = execution.getVariable("msoRequestId")
+ String serviceInstanceId = execution.getVariable("serviceInstanceId")
+ String source = execution.getVariable("source")
+ String sdnc_service_id = serviceInstanceId
+ ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+ String serviceType = execution.getVariable("serviceType")
+ String globalCustomerId = execution.getVariable("globalSubscriberId")
+ String serviceModelInvariantUuid = serviceDecomposition.getModelInfo().getModelInvariantUuid()
+ String serviceModelUuid = serviceDecomposition.getModelInfo().getModelUuid()
+ String serviceModelVersion = serviceDecomposition.getModelInfo().getModelVersion()
+ String serviceModelName = serviceDecomposition.getModelInfo().getModelName()
+
+ // 1. prepare assign topology via SDNC Adapter SUBFLOW call
+ String sndcTopologyDeleteRequest =
+ """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+ xmlns:sdncadapter="http://org.openecomp.mso/workflow/sdnc/adapter/schema/v1"
+ xmlns:sdncadapterworkflow="http://org.openecomp/mso/workflow/schema/v1">
+ <sdncadapter:RequestHeader>
+ <sdncadapter:RequestId>${hdrRequestId}</sdncadapter:RequestId>
+ <sdncadapter:SvcInstanceId>${serviceInstanceId}</sdncadapter:SvcInstanceId>
+ <sdncadapter:SvcAction>${sdnc_svcAction}</sdncadapter:SvcAction>
+ <sdncadapter:SvcOperation>service-topology-operation</sdncadapter:SvcOperation>
+ <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
+ <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+ </sdncadapter:RequestHeader>
+ <sdncadapterworkflow:SDNCRequestData>
+ <request-information>
+ <request-id>${hdrRequestId}</request-id>
+ <request-action>DeleteServiceInstance</request-action>
+ <source>${source}</source>
+ <notification-url></notification-url>
+ <order-number></order-number>
+ <order-version></order-version>
+ </request-information>
+ <service-information>
+ <service-id>${serviceInstanceId}</service-id>
+ <subscription-service-type>${serviceType}</subscription-service-type>
+ <onap-model-information>
+ <model-invariant-uuid>${serviceModelInvariantUuid}</model-invariant-uuid>
+ <model-uuid>${serviceModelUuid}</model-uuid>
+ <model-version>${serviceModelVersion}</model-version>
+ <model-name>${serviceModelName}</model-name>
+ </onap-model-information>
+ <service-instance-id>${serviceInstanceId}</service-instance-id>
+ <global-customer-id>${globalCustomerId}</global-customer-id>
+ </service-information>
+ <service-request-input>
+ </service-request-input>
+ </sdncadapterworkflow:SDNCRequestData>
+ </aetgt:SDNCAdapterWorkflowRequest>""".trim()
+
+ String sndcTopologyDeleteRequesAsString = utils.formatXml(sndcTopologyDeleteRequest)
+ utils.logAudit(sndcTopologyDeleteRequesAsString)
+ execution.setVariable("sdncAdapterWorkflowRequest", sndcTopologyDeleteRequesAsString)
+ utils.log("INFO","sdncAdapterWorkflowRequest - " + "\n" + sndcTopologyDeleteRequesAsString, isDebugEnabled)
+
+ } catch (Exception ex) {
+ String exceptionMessage = " Bpmn error encountered in DoDeleteResourcesV1 flow. prepareSDNCServiceRequest() - " + ex.getMessage()
+ utils.log("DEBUG", exceptionMessage, isDebugEnabled)
+ exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+
+ }
+ utils.log("INFO","***** Exit prepareSDNCServiceRequest for " + svcAction + "*****", isDebugEnabled)
+ }
}