Add NS relationship delete for E2E service 81/44881/2
authorsubhash kumar singh <subhash.kumar.singh@huawei.com>
Thu, 26 Apr 2018 12:53:50 +0000 (12:53 +0000)
committerRob Daugherty <rd472p@att.com>
Thu, 26 Apr 2018 21:28:25 +0000 (21:28 +0000)
Add NS relationship delete for E2E service

Change-Id: Ia58308dae0fef38b32098d1e92c0871617a86ed2
Issue-ID: SO-422
Signed-off-by: subhash kumar singh <subhash.kumar.singh@huawei.com>
bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoDeleteVFCNetworkServiceInstance.groovy
bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoDeleteVFCNetworkServiceInstance.bpmn

index c71cb05..f0ecbab 100644 (file)
@@ -20,7 +20,7 @@
 \r
 package org.openecomp.mso.bpmn.infrastructure.scripts;\r
 \r
-import static org.apache.commons.lang3.StringUtils.*;\r
+import static org.apache.commons.lang3.StringUtils.*\r
 import groovy.xml.XmlUtil\r
 import groovy.json.*\r
 import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor \r
@@ -39,6 +39,10 @@ import org.springframework.web.util.UriUtils
 import org.openecomp.mso.rest.RESTClient \r
 import org.openecomp.mso.rest.RESTConfig\r
 import org.openecomp.mso.rest.APIResponse;\r
+import org.openecomp.mso.rest.RESTConfig\r
+import org.openecomp.mso.rest.RESTClient\r
+\r
+\r
 \r
 /**\r
  * This groovy class supports the <class>DoDeleteVFCNetworkServiceInstance.bpmn</class> process.\r
@@ -98,6 +102,71 @@ public class DoDeleteVFCNetworkServiceInstance extends AbstractServiceTaskProces
         utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)\r
        }\r
 \r
+    /**\r
+     * unwind NS from AAI relationship\r
+     */\r
+    public void deleteNSRelationship(DelegateExecution execution) {\r
+        def isDebugEnabled=execution.getVariable("isDebugLogEnabled")\r
+        utils.log("INFO"," ***** addNSRelationship *****",  isDebugEnabled)\r
+        String nsInstanceId = execution.getVariable("resourceInstanceId")\r
+        if(nsInstanceId == null || nsInstanceId == ""){\r
+            utils.log("INFO"," Delete NS failed",  isDebugEnabled)\r
+            return\r
+        }\r
+        String globalSubscriberId = execution.getVariable("globalSubscriberId")\r
+        String serviceType = execution.getVariable("serviceType")\r
+        String serviceId = execution.getVariable("serviceId")\r
+        String deleteRelationPayload = """<relationship xmlns="http://org.openecomp.aai.inventory/v11">\r
+                                            <related-to>service-instance</related-to>\r
+                                            <related-link>/aai/v11/business/customers/customer/${globalSubscriberId}/service-subscriptions/service-subscription/${serviceType}/service-instances/service-instance/${nsInstanceId}</related-link>\r
+                                            <relationship-data>\r
+                                                <relationship-key>customer.global-customer-id</relationship-key>\r
+                                                <relationship-value>${globalSubscriberId}</relationship-value>\r
+                                            </relationship-data>\r
+                                            <relationship-data>\r
+                                                <relationship-key>service-subscription.service-type</relationship-key>\r
+                                                <relationship-value>${serviceType}</relationship-value>\r
+                                            </relationship-data>\r
+                                           <relationship-data>\r
+                                                <relationship-key>service-instance.service-instance-id</relationship-key>\r
+                                                <relationship-value>${nsInstanceId}</relationship-value>\r
+                                            </relationship-data>           \r
+                                        </relationship>"""\r
+        String endpoint = execution.getVariable("URN_aai_endpoint")\r
+        utils.log("INFO","Add Relationship req:\n" + deleteRelationPayload,  isDebugEnabled)\r
+        String url = endpoint + "/aai/v11/business/customers/customer/" + globalSubscriberId + "/service-subscriptions/service-subscription/" + serviceType + "/service-instances/service-instance/" + serviceId + "/relationship-list/relationship"\r
+\r
+        APIResponse aaiRsp = executeAAIDeleteCall(execution, url, deleteRelationPayload)\r
+        utils.log("INFO","aai response status code:" + aaiRsp.getStatusCode(),  isDebugEnabled)\r
+        utils.log("INFO","aai response content:" + aaiRsp.getResponseBodyAsString(),  isDebugEnabled)\r
+        utils.log("INFO"," *****Exit addNSRelationship *****",  isDebugEnabled)\r
+    }\r
+\r
+    public APIResponse executeAAIDeleteCall(DelegateExecution execution, String url, String payload){\r
+        def isDebugEnabled = execution.getVariable("isDebugLogEnabled")\r
+        utils.log("INFO", " ======== Started Execute AAI Delete Process ======== ",  isDebugEnabled)\r
+        APIResponse apiResponse = null\r
+        try{\r
+            String uuid = utils.getRequestID()\r
+            utils.log("INFO","Generated uuid is: " + uuid,  isDebugEnabled)\r
+            utils.log("INFO","URL to be used is: " + url,  isDebugEnabled)\r
+            String userName = execution.getVariable("URN_aai_auth")\r
+            String password = execution.getVariable("URN_mso_msoKey")\r
+            String basicAuthCred = utils.getBasicAuth(userName,password)\r
+            RESTConfig config = new RESTConfig(url);\r
+            RESTClient client = new RESTClient(config).addHeader("X-FromAppId", "MSO").addHeader("X-TransactionId", uuid).addHeader("Content-Type", "application/xml").addHeader("Accept","application/xml");\r
+            if (basicAuthCred != null && !"".equals(basicAuthCred)) {\r
+                client.addAuthorizationHeader(basicAuthCred)\r
+            }\r
+            apiResponse = client.httpDelete(payload)\r
+            utils.log("INFO","======== Completed Execute AAI Delete Process ======== ",  isDebugEnabled)\r
+        }catch(Exception e){\r
+            utils.log("ERROR","Exception occured while executing AAI Put Call. Exception is: \n" + e,  isDebugEnabled)\r
+            throw new BpmnError("MSOWorkflowException")\r
+        }\r
+        return apiResponse\r
+    }\r
+\r
     /**\r
      * delete NS task\r
      */\r
index 3cef94d..41b8d2e 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3">
   <bpmn:process id="DoDeleteVFCNetworkServiceInstance" name="DoDeleteVFCNetworkServiceInstance" isExecutable="true">
     <bpmn:startEvent id="deleteNS_StartEvent" name="deleteNS_StartEvent">
       <bpmn:outgoing>SequenceFlow_1qo2pln</bpmn:outgoing>
@@ -20,7 +20,7 @@ def dcsi = new DoDeleteVFCNetworkServiceInstance()
 dcsi.preProcessRequest(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="terminate_NSTask" name="terminate Network Service" scriptFormat="groovy">
-      <bpmn:incoming>SequenceFlow_150q0fo</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_1h1c24p</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1ywe21t</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
 def dcsi = new DoDeleteVFCNetworkServiceInstance()
@@ -91,11 +91,19 @@ def dcsi = new DoDeleteVFCNetworkServiceInstance()
 dcsi.timeDelay(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_1gsbpxj" sourceRef="timeDelay_Task" targetRef="queryJob_Task" />
-    <bpmn:sequenceFlow id="SequenceFlow_150q0fo" sourceRef="PreprocessIncomingRequest_task" targetRef="terminate_NSTask" />
+    <bpmn:sequenceFlow id="SequenceFlow_150q0fo" sourceRef="PreprocessIncomingRequest_task" targetRef="deleteNSRelationship" />
     <bpmn:sequenceFlow id="SequenceFlow_1sjop71" sourceRef="Task_09nzhwk" targetRef="ExclusiveGateway_0zfksms" />
     <bpmn:sequenceFlow id="deleteNSSuccess_SequenceFlow" name="yes" sourceRef="ExclusiveGateway_0zfksms" targetRef="finishNSDelete_Task">
       <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression"><![CDATA[#{(execution.getVariable("operationStatus" ) == "finished")}]]></bpmn:conditionExpression>
     </bpmn:sequenceFlow>
+    <bpmn:sequenceFlow id="SequenceFlow_1h1c24p" sourceRef="deleteNSRelationship" targetRef="terminate_NSTask" />
+    <bpmn:scriptTask id="deleteNSRelationship" name="Delete NS Relationship " scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_150q0fo</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1h1c24p</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new DoDeleteVFCNetworkServiceInstance()
+dcsi.deleteNSRelationship(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoDeleteVFCNetworkServiceInstance">
@@ -107,19 +115,19 @@ dcsi.timeDelay(execution)]]></bpmn:script>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1qo2pln_di" bpmnElement="SequenceFlow_1qo2pln">
         <di:waypoint xsi:type="dc:Point" x="211" y="129" />
-        <di:waypoint xsi:type="dc:Point" x="407" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="321" y="129" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="264" y="108" width="90" height="12" />
+          <dc:Bounds x="221" y="108" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ScriptTask_1dw39hg_di" bpmnElement="Task_09nzhwk">
         <dc:Bounds x="722" y="555" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task">
-        <dc:Bounds x="407" y="89" width="100" height="80" />
+        <dc:Bounds x="321" y="89" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ScriptTask_1qmmew8_di" bpmnElement="terminate_NSTask">
-        <dc:Bounds x="694" y="89" width="100" height="80" />
+        <dc:Bounds x="744" y="89" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ExclusiveGateway_0zfksms_di" bpmnElement="ExclusiveGateway_0zfksms" isMarkerVisible="true">
         <dc:Bounds x="517" y="570" width="50" height="50" />
@@ -141,10 +149,10 @@ dcsi.timeDelay(execution)]]></bpmn:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1ywe21t_di" bpmnElement="SequenceFlow_1ywe21t">
-        <di:waypoint xsi:type="dc:Point" x="794" y="128" />
+        <di:waypoint xsi:type="dc:Point" x="844" y="129" />
         <di:waypoint xsi:type="dc:Point" x="1034" y="130" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="869" y="108" width="90" height="12" />
+          <dc:Bounds x="894" y="108.5" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0j7xo94_di" bpmnElement="terminateFailed_SequenceFlow">
@@ -232,10 +240,10 @@ dcsi.timeDelay(execution)]]></bpmn:script>
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_150q0fo_di" bpmnElement="SequenceFlow_150q0fo">
-        <di:waypoint xsi:type="dc:Point" x="507" y="129" />
-        <di:waypoint xsi:type="dc:Point" x="694" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="421" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="523" y="129" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="600.5" y="108" width="0" height="12" />
+          <dc:Bounds x="427" y="108" width="90" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1sjop71_di" bpmnElement="SequenceFlow_1sjop71">
@@ -252,6 +260,16 @@ dcsi.timeDelay(execution)]]></bpmn:script>
           <dc:Bounds x="460" y="574" width="19" height="12" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1h1c24p_di" bpmnElement="SequenceFlow_1h1c24p">
+        <di:waypoint xsi:type="dc:Point" x="623" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="744" y="129" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="683.5" y="108" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_11l4g48_di" bpmnElement="deleteNSRelationship">
+        <dc:Bounds x="523" y="89" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>