Fixes for bugs found in Transport Slicing integration
[so.git] / bpmn / so-bpmn-infrastructure-common / src / main / groovy / org / onap / so / bpmn / infrastructure / scripts / TnNssmfUtils.groovy
index 1bb0e8a..cfee1aa 100644 (file)
@@ -32,6 +32,7 @@ import org.onap.so.bpmn.core.RollbackData
 import org.onap.so.bpmn.core.UrnPropertiesReader
 import org.onap.so.bpmn.core.WorkflowException
 import org.onap.so.bpmn.core.json.JsonUtils
+import org.onap.so.db.request.beans.ResourceOperationStatus
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory
 
@@ -66,7 +67,29 @@ class TnNssmfUtils {
         }
     }
 
-    String buildSDNCRequest(DelegateExecution execution, String svcInstId, String action) {
+    String buildSDNCRequest(DelegateExecution execution, String svcInstId, String svcAction) {
+        String reqAction
+        switch (svcAction) {
+            case "create":
+                reqAction = "AllocateTransportSliceInstance"
+                break
+            case "delete":
+                reqAction = "DeleteTransportSliceInstance"
+                break
+            case "activate":
+                reqAction = "ActivateTransportSliceInstance"
+                break
+            case "deactivate":
+                reqAction = "DeactivateTransportSliceInstance"
+                break
+            default:
+                reqAction = svcAction
+        }
+
+        buildSDNCRequest(execution, svcInstId, svcAction, reqAction)
+    }
+
+    String buildSDNCRequest(DelegateExecution execution, String svcInstId, String svcAction, String reqAction) {
 
         String uuid = execution.getVariable('testReqId') // for junits
         if (uuid == null) {
@@ -76,6 +99,7 @@ class TnNssmfUtils {
         def callbackURL = execution.getVariable("sdncCallbackUrl")
         def requestId = execution.getVariable("msoRequestId")
         def serviceId = execution.getVariable("sliceServiceInstanceId")
+        def subServiceType = execution.getVariable("subscriptionServiceType")
         def vnfType = execution.getVariable("serviceType")
         def vnfName = execution.getVariable("sliceServiceInstanceName")
         def tenantId = execution.getVariable("sliceServiceInstanceId")
@@ -95,55 +119,67 @@ class TnNssmfUtils {
         if (execution.getVariable("vnfParamsExistFlag") == true) {
             sdncVNFParamsXml = buildSDNCParamsXml(execution)
         } else {
-            sdncVNFParamsXml = ""
+            sdncVNFParamsXml = buildDefaultVnfInputParams(vnfId)
         }
 
         String sdncRequest =
                 """<sdncadapterworkflow:SDNCAdapterWorkflowRequest xmlns:ns5="http://org.onap/so/request/types/v1"
-                                                                                                       xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
-                                                                                                       xmlns:sdncadapter="http://org.onap/workflow/sdnc/adapter/schema/v1">
-          <sdncadapter:RequestHeader>
-                               <sdncadapter:RequestId>${MsoUtils.xmlEscape(uuid)}</sdncadapter:RequestId>
-                               <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(svcInstId)}</sdncadapter:SvcInstanceId>
-                               <sdncadapter:SvcAction>${MsoUtils.xmlEscape(action)}</sdncadapter:SvcAction>
-                               <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
-                               <sdncadapter:CallbackUrl>${MsoUtils.xmlEscape(callbackURL)}</sdncadapter:CallbackUrl>
-                               <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
-               </sdncadapter:RequestHeader>
-       <sdncadapterworkflow:SDNCRequestData>
-               <request-information>
-                       <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
-                       <request-action>AllocateTnNssi</request-action>
-                       <source>${MsoUtils.xmlEscape(source)}</source>
-                       <notification-url/>
-                       <order-number/>
-                       <order-version/>
-               </request-information>
-               <service-information>
-                       <service-id>${MsoUtils.xmlEscape(serviceId)}</service-id>
-                       <subscription-service-type>${MsoUtils.xmlEscape(serviceId)}</subscription-service-type>
-                       ${serviceEcompModelInformation}
-                       <service-instance-id>${MsoUtils.xmlEscape(svcInstId)}</service-instance-id>
-                       <global-customer-id>${MsoUtils.xmlEscape(globalSubscriberId)}</global-customer-id>
-               </service-information>
-               <vnf-information>
-                       <vnf-id>${MsoUtils.xmlEscape(vnfId)}</vnf-id>
-                       <vnf-type>${MsoUtils.xmlEscape(vnfType)}</vnf-type>
-                       ${vnfEcompModelInformation}
-               </vnf-information>
-               <vnf-request-input>
-                       ${vnfNameString}
-                       <tenant>${MsoUtils.xmlEscape(tenantId)}</tenant>
-                       <aic-cloud-region>${MsoUtils.xmlEscape(cloudSiteId)}</aic-cloud-region>
-                       ${sdncVNFParamsXml}
-               </vnf-request-input>
-       </sdncadapterworkflow:SDNCRequestData>
-       </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
+                                                    xmlns:sdncadapterworkflow="http://org.onap/so/workflow/schema/v1"
+                                                    xmlns:sdncadapter="http://org.onap/workflow/sdnc/adapter/schema/v1">
+         <sdncadapter:RequestHeader>
+            <sdncadapter:RequestId>${MsoUtils.xmlEscape(uuid)}</sdncadapter:RequestId>
+            <sdncadapter:SvcInstanceId>${MsoUtils.xmlEscape(svcInstId)}</sdncadapter:SvcInstanceId>
+            <sdncadapter:SvcAction>${MsoUtils.xmlEscape(svcAction)}</sdncadapter:SvcAction>
+            <sdncadapter:SvcOperation>vnf-topology-operation</sdncadapter:SvcOperation>
+            <sdncadapter:CallbackUrl>${MsoUtils.xmlEscape(callbackURL)}</sdncadapter:CallbackUrl>
+            <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
+         </sdncadapter:RequestHeader>
+    <sdncadapterworkflow:SDNCRequestData>
+        <request-information>
+            <request-id>${MsoUtils.xmlEscape(requestId)}</request-id>
+            <request-action>${MsoUtils.xmlEscape(reqAction)}</request-action>
+            <source>${MsoUtils.xmlEscape(source)}</source>
+            <notification-url/>
+            <order-number/>
+            <order-version/>
+        </request-information>
+        <service-information>
+            <service-id>${MsoUtils.xmlEscape(serviceId)}</service-id>
+            <subscription-service-type>${MsoUtils.xmlEscape(subServiceType)}</subscription-service-type>
+            ${serviceEcompModelInformation}
+            <service-instance-id>${MsoUtils.xmlEscape(svcInstId)}</service-instance-id>
+            <global-customer-id>${MsoUtils.xmlEscape(globalSubscriberId)}</global-customer-id>
+        </service-information>
+        <vnf-information>
+            <vnf-id>${MsoUtils.xmlEscape(vnfId)}</vnf-id>
+            <vnf-type>${MsoUtils.xmlEscape(vnfType)}</vnf-type>
+            ${vnfEcompModelInformation}
+        </vnf-information>
+        <vnf-request-input>
+            ${vnfNameString}
+            <tenant>${MsoUtils.xmlEscape(tenantId)}</tenant>
+            <aic-cloud-region>${MsoUtils.xmlEscape(cloudSiteId)}</aic-cloud-region>
+            ${sdncVNFParamsXml}
+        </vnf-request-input>
+    </sdncadapterworkflow:SDNCRequestData>
+    </sdncadapterworkflow:SDNCAdapterWorkflowRequest>"""
 
         logger.debug("sdncRequest:  " + sdncRequest)
         return sdncRequest
     }
 
+
+    String buildDefaultVnfInputParams(String vnfName) {
+        String res =
+                """<vnf-input-parameters>
+                      <param>
+                          <name>${MsoUtils.xmlEscape(vnfName)}</name>
+                      </param>
+                   </vnf-input-parameters>"""
+
+        return res
+    }
+
     String buildSDNCParamsXml(DelegateExecution execution) {
         String params = ""
         StringBuilder sb = new StringBuilder()
@@ -168,7 +204,7 @@ class TnNssmfUtils {
 
         String msg
 
-        String prefix = execution.setVariable("prefix")
+        String prefix = execution.getVariable("prefix")
         if (isBlank(prefix)) {
             if (exceptionOnErr) {
                 msg = "validateSDNCResponse: prefix is null"
@@ -181,7 +217,8 @@ class TnNssmfUtils {
         WorkflowException workflowException = execution.getVariable("WorkflowException")
         boolean successIndicator = execution.getVariable("SDNCA_SuccessIndicator")
 
-        logger.debug("workflowException: " + workflowException)
+        logger.debug("TnNssmfUtils.validateSDNCResponse: SDNCResponse: " + response)
+        logger.debug("TnNssmfUtils.validateSDNCResponse: workflowException: " + workflowException)
 
         sdncAdapterUtils.validateSDNCResponse(execution, response, workflowException, successIndicator)
 
@@ -189,6 +226,9 @@ class TnNssmfUtils {
         if (execution.getVariable(prefix + 'sdncResponseSuccess') == true) {
             logger.debug("Received a Good Response from SDNC Adapter for " + method + " SDNC Call.  Response is: \n" + sdncResponse)
             RollbackData rollbackData = execution.getVariable("rollbackData")
+            if (rollbackData == null) {
+                rollbackData = new RollbackData()
+            }
 
             if (method.equals("allocate")) {
                 rollbackData.put("VNFMODULE", "rollbackSDNCRequestAllocate", "true")
@@ -204,7 +244,7 @@ class TnNssmfUtils {
             execution.setVariable("rollbackData", rollbackData)
         } else {
             if (exceptionOnErr) {
-                msg = "validateSDNCResponse: bad Response from SDNC Adapter for " + method + " SDNC Call."
+                msg = "TnNssmfUtils.validateSDNCResponse: bad Response from SDNC Adapter for " + method + " SDNC Call."
                 logger.error(msg)
                 exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
             }
@@ -214,19 +254,19 @@ class TnNssmfUtils {
     }
 
     String getExecutionInputParams(DelegateExecution execution) {
-        String res = "msoRequestId=" + execution.getVariable("msoRequestId") +
-                ", modelInvariantUuid=" + execution.getVariable("modelInvariantUuid") +
-                ", modelUuid=" + execution.getVariable("modelUuid") +
-                ", serviceInstanceID=" + execution.getVariable("serviceInstanceID") +
-                ", operationType=" + execution.getVariable("operationType") +
-                ", globalSubscriberId=" + execution.getVariable("globalSubscriberId") +
-                ", dummyServiceId=" + execution.getVariable("dummyServiceId") +
-                ", nsiId=" + execution.getVariable("nsiId") +
-                ", networkType=" + execution.getVariable("networkType") +
-                ", subscriptionServiceType=" + execution.getVariable("subscriptionServiceType") +
-                ", jobId=" + execution.getVariable("jobId") +
-                ", sliceParams=" + execution.getVariable("sliceParams") +
-                ", servicename=" + execution.getVariable("servicename")
+        String res = "\n msoRequestId=" + execution.getVariable("msoRequestId") +
+                "\n modelInvariantUuid=" + execution.getVariable("modelInvariantUuid") +
+                "\n modelUuid=" + execution.getVariable("modelUuid") +
+                "\n serviceInstanceID=" + execution.getVariable("serviceInstanceID") +
+                "\n operationType=" + execution.getVariable("operationType") +
+                "\n globalSubscriberId=" + execution.getVariable("globalSubscriberId") +
+                "\n dummyServiceId=" + execution.getVariable("dummyServiceId") +
+                "\n nsiId=" + execution.getVariable("nsiId") +
+                "\n networkType=" + execution.getVariable("networkType") +
+                "\n subscriptionServiceType=" + execution.getVariable("subscriptionServiceType") +
+                "\n jobId=" + execution.getVariable("jobId") +
+                "\n sliceParams=" + execution.getVariable("sliceParams") +
+                "\n servicename=" + execution.getVariable("servicename")
 
         return res
     }
@@ -270,7 +310,6 @@ class TnNssmfUtils {
     void attachLogicalLinkToAllottedResource(DelegateExecution execution, String aaiVersion, AAIResourceUri arUri,
                                              String logicalLinkId) {
 
-
         String toLink = "aai/${aaiVersion}/network/logical-links/logical-link/${logicalLinkId}"
 
         Relationship relationship = new Relationship()
@@ -280,4 +319,39 @@ class TnNssmfUtils {
 
         createRelationShipInAAI(execution, arUri, relationship)
     }
+
+    void attachNetworkPolicyToAllottedResource(DelegateExecution execution, String aaiVersion,
+                                               AAIResourceUri aaiResourceUri, String networkPolicyId) {
+
+        String toLink = "aai/${aaiVersion}/network/network-policies/network-policy/${networkPolicyId}"
+
+        Relationship relationship = new Relationship()
+        relationship.setRelatedLink(toLink)
+        relationship.setRelatedTo("network-policy")
+        relationship.setRelationshipLabel("org.onap.relationships.inventory.Uses")
+
+        createRelationShipInAAI(execution, aaiResourceUri, relationship)
+
+    }
+
+    ResourceOperationStatus buildRoStatus(String nsstId,
+                                          String nssiId,
+                                          String jobId,
+                                          String nsiId,
+                                          String action,
+                                          String status,
+                                          String progress,
+                                          String statusDescription) {
+        ResourceOperationStatus roStatus = new ResourceOperationStatus()
+        roStatus.setResourceTemplateUUID(nsstId)
+        roStatus.setResourceInstanceID(nssiId)
+        roStatus.setServiceId(nsiId)
+        roStatus.setOperationId(jobId)
+        roStatus.setOperType(action)
+        roStatus.setProgress(progress)
+        roStatus.setStatus(status)
+        roStatus.setStatusDescription(statusDescription)
+
+        return roStatus
+    }
 }