mso is not updating the vip in aai for the vnf 96/78096/1
authorBenjamin, Max (mb388a) <mb388a@us.att.com>
Thu, 7 Feb 2019 22:25:53 +0000 (17:25 -0500)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Thu, 7 Feb 2019 22:26:07 +0000 (17:26 -0500)
Update JUnits for multiple invocation argument verifications
Implement delete mechanism for network policies and vnf adapter params
in AAI.
Fix a JUnit for getNetworkPolicy().
Implement creation of network policies and setting of
openstack-provided params for vf module in AAI
CreateNetworkPolicies in AAI functionality update
Add the plumbing for create network policy in AAI.
Enable VnfAdapterBB to return fqdn and management ip info

Change-Id: Id34fe088846a52dbafaf3e7c754bebada05f1bf1
Issue-ID: SO-1478
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
19 files changed:
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateVfModuleBB.bpmn
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/DeleteVfModuleBB.bpmn
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateVfModuleBBTest.java
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/DeleteVfModuleBBTest.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImpl.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/aai/mapper/AAIObjectMapper.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIVfModuleResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/common/data/TestDataSetup.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIDeleteTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasksTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/adapter/vnf/tasks/VnfAdapterImplTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/aai/mapper/AAIObjectMapperTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIVfModuleResourcesTest.java

index 08252f6..97fad57 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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.7.1">
+<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:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.4.0">
   <bpmn:process id="CreateVfModuleBB" name="CreateVfModuleBB" isExecutable="true">
     <bpmn:startEvent id="CreateVfModuleBB_Start">
       <bpmn:outgoing>SequenceFlow_1xr6chl</bpmn:outgoing>
       <bpmn:outgoing>SequenceFlow_1s4rpyp</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_16g4dz0" sourceRef="CreateVfModule" targetRef="VnfAdapter" />
-    <bpmn:sequenceFlow id="SequenceFlow_0ecr393" sourceRef="VnfAdapter" targetRef="UpdateVfModuleHeatStackId" />
+    <bpmn:sequenceFlow id="SequenceFlow_0ecr393" sourceRef="VnfAdapter" targetRef="CreateNetworkPolicies" />
     <bpmn:callActivity id="VnfAdapter" name="Vnf Adapter" calledElement="VnfAdapter">
       <bpmn:extensionElements>
         <camunda:in source="gBuildingBlockExecution" target="gBuildingBlockExecution" />
         <camunda:out source="WorkflowException" target="WorkflowException" />
         <camunda:in source="VNFREST_Request" target="VNFREST_Request" />
         <camunda:out source="heatStackId" target="heatStackId" />
+        <camunda:out source="contrailServiceInstanceFqdn" target="contrailServiceInstanceFqdn" />
+        <camunda:out source="oamManagementV4Address" target="oamManagementV4Address" />
+        <camunda:out source="oamManagementV6Address" target="oamManagementV6Address" />
+        <camunda:out source="contrailNetworkPolicyFqdnList" target="contrailNetworkPolicyFqdnList" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_16g4dz0</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0ecr393</bpmn:outgoing>
@@ -39,7 +43,7 @@
       <bpmn:outgoing>SequenceFlow_1vbwdaw</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:serviceTask id="UpdateVfModuleHeatStackId" name="&#10;AAI&#10;Update&#10;(vf module)&#10;" camunda:expression="${AAIUpdateTasks.updateHeatStackIdVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn:incoming>SequenceFlow_0ecr393</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_15do1tu</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0rds4rj</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:subProcess id="SubProcess_1getwnf" name="Error Handling&#10;&#10;" triggeredByEvent="true">
     </bpmn:subProcess>
     <bpmn:sequenceFlow id="SequenceFlow_0rds4rj" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleStatus" />
     <bpmn:sequenceFlow id="SequenceFlow_1vbwdaw" sourceRef="UpdateVfModuleStatus" targetRef="CreateVfModuleBB_End" />
+    <bpmn:serviceTask id="CreateNetworkPolicies" name="AAI Create (network policies)" camunda:expression="${AAICreateTasks.createNetworkPolicies(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0ecr393</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0xqhep5</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0xqhep5" sourceRef="CreateNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" />
+    <bpmn:serviceTask id="UpdateVnfIpv4OamAddress" name="AAI Update (VNF) " camunda:expression="${AAIUpdateTasks.updateIpv4OamAddressVnf(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0xqhep5</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1yo6mvv</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1yo6mvv" sourceRef="UpdateVnfIpv4OamAddress" targetRef="UpdateVnfManagementV6Address" />
+    <bpmn:serviceTask id="UpdateVnfManagementV6Address" name="AAI Update (VNF)" camunda:expression="${AAIUpdateTasks.updateManagementV6AddressVnf(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_1yo6mvv</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1i03uy2</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_1i03uy2" sourceRef="UpdateVnfManagementV6Address" targetRef="UpdateVfModuleContrailServiceInstanceFqdn" />
+    <bpmn:serviceTask id="UpdateVfModuleContrailServiceInstanceFqdn" name="AAI&#10;Update&#10;(vf module)&#10;" camunda:expression="${AAIUpdateTasks.updateContrailServiceInstanceFqdnVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_1i03uy2</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_15do1tu</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_15do1tu" sourceRef="UpdateVfModuleContrailServiceInstanceFqdn" targetRef="UpdateVfModuleHeatStackId" />
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateVfModuleBB">
       <bpmndi:BPMNShape id="StartEvent_0kxwniy_di" bpmnElement="CreateVfModuleBB_Start">
-        <dc:Bounds x="100" y="88" width="36" height="36" />
+        <dc:Bounds x="59" y="88" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="106" y="124" width="24" height="12" />
+          <dc:Bounds x="77" y="124" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_13t22km_di" bpmnElement="QueryVfModule">
         <dc:Bounds x="416" y="66" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1xr6chl_di" bpmnElement="SequenceFlow_1xr6chl">
-        <di:waypoint xsi:type="dc:Point" x="136" y="106" />
+        <di:waypoint xsi:type="dc:Point" x="95" y="106" />
         <di:waypoint xsi:type="dc:Point" x="216" y="106" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="131" y="91" width="90" height="0" />
+          <dc:Bounds x="156" y="91" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_0qdq7wj_di" bpmnElement="CreateVfModuleBB_End">
-        <dc:Bounds x="1299" y="88" width="36" height="36" />
+        <dc:Bounds x="1118" y="293" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1272" y="128" width="90" height="12" />
+          <dc:Bounds x="1136" y="333" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_1dgenhy_di" bpmnElement="CreateVfModule">
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_16g4dz0_di" bpmnElement="SequenceFlow_16g4dz0">
         <di:waypoint xsi:type="dc:Point" x="712" y="106" />
-        <di:waypoint xsi:type="dc:Point" x="777" y="106" />
+        <di:waypoint xsi:type="dc:Point" x="790" y="106" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="700" y="85" width="90" height="12" />
+          <dc:Bounds x="751" y="91" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0ecr393_di" bpmnElement="SequenceFlow_0ecr393">
-        <di:waypoint xsi:type="dc:Point" x="877" y="107" />
-        <di:waypoint xsi:type="dc:Point" x="931" y="107" />
+        <di:waypoint xsi:type="dc:Point" x="890" y="107" />
+        <di:waypoint xsi:type="dc:Point" x="994" y="107" />
+        <di:waypoint xsi:type="dc:Point" x="994" y="209" />
+        <di:waypoint xsi:type="dc:Point" x="73" y="209" />
+        <di:waypoint xsi:type="dc:Point" x="73" y="306" />
+        <di:waypoint xsi:type="dc:Point" x="142" y="306" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="859" y="92" width="90" height="0" />
+          <dc:Bounds x="534" y="194" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="CallActivity_1i1pfzb_di" bpmnElement="VnfAdapter">
-        <dc:Bounds x="777" y="66" width="100" height="80" />
+        <dc:Bounds x="790" y="66" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_0fpfn71_di" bpmnElement="UpdateVfModuleStatus">
-        <dc:Bounds x="1117" y="66" width="100" height="80" />
+        <dc:Bounds x="942" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="ServiceTask_04k1b85_di" bpmnElement="UpdateVfModuleHeatStackId">
-        <dc:Bounds x="931" y="68" width="100" height="80" />
+        <dc:Bounds x="777" y="271" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="SubProcess_1getwnf_di" bpmnElement="SubProcess_1getwnf" isExpanded="true">
-        <dc:Bounds x="172" y="276" width="231" height="135" />
+        <dc:Bounds x="136" y="439" width="231" height="135" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_1c8o652_di" bpmnElement="StartEvent_1c8o652">
-        <dc:Bounds x="211" y="334" width="36" height="36" />
+        <dc:Bounds x="175" y="497" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="184" y="370" width="0" height="12" />
+          <dc:Bounds x="148" y="533" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_1emam1w_di" bpmnElement="EndEvent_1emam1w">
-        <dc:Bounds x="348" y="334" width="36" height="36" />
+        <dc:Bounds x="312" y="497" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="321" y="370" width="0" height="12" />
+          <dc:Bounds x="285" y="533" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0gcots6_di" bpmnElement="SequenceFlow_0gcots6">
-        <di:waypoint xsi:type="dc:Point" x="247" y="352" />
-        <di:waypoint xsi:type="dc:Point" x="348" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="211" y="515" />
+        <di:waypoint xsi:type="dc:Point" x="312" y="515" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="297.5" y="331" width="0" height="12" />
+          <dc:Bounds x="262" y="494" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_0rds4rj_di" bpmnElement="SequenceFlow_0rds4rj">
-        <di:waypoint xsi:type="dc:Point" x="1031" y="107" />
-        <di:waypoint xsi:type="dc:Point" x="1117" y="107" />
+        <di:waypoint xsi:type="dc:Point" x="877" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="942" y="311" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1074" y="85" width="0" height="13" />
+          <dc:Bounds x="910" y="296" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1vbwdaw_di" bpmnElement="SequenceFlow_1vbwdaw">
-        <di:waypoint xsi:type="dc:Point" x="1217" y="106" />
-        <di:waypoint xsi:type="dc:Point" x="1299" y="106" />
+        <di:waypoint xsi:type="dc:Point" x="1042" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="1083" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="1083" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="1118" y="311" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1098" y="311" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1v8zx4s_di" bpmnElement="CreateNetworkPolicies">
+        <dc:Bounds x="142" y="271" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0xqhep5_di" bpmnElement="SequenceFlow_0xqhep5">
+        <di:waypoint xsi:type="dc:Point" x="242" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="295" y="311" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="269" y="296" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_015ayw5_di" bpmnElement="UpdateVnfIpv4OamAddress">
+        <dc:Bounds x="295" y="271" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1yo6mvv_di" bpmnElement="SequenceFlow_1yo6mvv">
+        <di:waypoint xsi:type="dc:Point" x="395" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="464" y="311" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="430" y="296" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0mlfsc9_di" bpmnElement="UpdateVnfManagementV6Address">
+        <dc:Bounds x="464" y="271" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1i03uy2_di" bpmnElement="SequenceFlow_1i03uy2">
+        <di:waypoint xsi:type="dc:Point" x="564" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="612" y="311" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="588" y="296" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0wctnhw_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
+        <dc:Bounds x="612" y="271" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_15do1tu_di" bpmnElement="SequenceFlow_15do1tu">
+        <di:waypoint xsi:type="dc:Point" x="712" y="311" />
+        <di:waypoint xsi:type="dc:Point" x="777" y="311" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="1258" y="84" width="0" height="13" />
+          <dc:Bounds x="745" y="286" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
index 5cf41b6..804ae70 100644 (file)
         <camunda:in source="deleteVfModuleRequest" target="deleteVfModuleRequest" />
         <camunda:in source="VNFREST_Request" target="VNFREST_Request" />
         <camunda:out source="heatStackId" target="heatStackId" />
+        <camunda:out source="oamManagementV4Address" target="oamManagementV4Address" />
+        <camunda:out source="oamManagementV6Address" target="oamManagementV6Address" />
+        <camunda:out source="contrailNetworkPolicyFqdnList" target="contrailNetworkPolicyFqdnList" />
+        <camunda:out source="contrailServiceInstanceFqdn" target="contrailServiceInstanceFqdn" />
       </bpmn:extensionElements>
       <bpmn:incoming>SequenceFlow_08tvhtf</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_02lpx87</bpmn:outgoing>
     </bpmn:callActivity>
-    <bpmn:sequenceFlow id="SequenceFlow_02lpx87" sourceRef="VnfAdapter" targetRef="UpdateVfModuleHeatStackId" />
+    <bpmn:sequenceFlow id="SequenceFlow_02lpx87" sourceRef="VnfAdapter" targetRef="DeleteNetworkPolicies" />
     <bpmn:subProcess id="SubProcess_11p7mrh" name="Error Handling&#10;&#10;" triggeredByEvent="true">
       <bpmn:startEvent id="StartEvent_1xp6ewt">
         <bpmn:outgoing>SequenceFlow_0h607z0</bpmn:outgoing>
       <bpmn:sequenceFlow id="SequenceFlow_0h607z0" sourceRef="StartEvent_1xp6ewt" targetRef="EndEvent_0guhjau" />
     </bpmn:subProcess>
     <bpmn:serviceTask id="UpdateVfModuleHeatStackId" name="&#10;AAI&#10;Update&#10; (vf module)&#10;" camunda:expression="${AAIUpdateTasks.updateHeatStackIdVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
-      <bpmn:incoming>SequenceFlow_02lpx87</bpmn:incoming>
+      <bpmn:incoming>SequenceFlow_0yuz21z</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_01vfwtp</bpmn:outgoing>
     </bpmn:serviceTask>
     <bpmn:sequenceFlow id="SequenceFlow_01vfwtp" sourceRef="UpdateVfModuleHeatStackId" targetRef="UpdateVfModuleDeleteStatus" />
     <bpmn:sequenceFlow id="SequenceFlow_09l7pcg" sourceRef="UpdateVfModuleDeleteStatus" targetRef="DeleteVfModuleBB_End" />
+    <bpmn:sequenceFlow id="SequenceFlow_0xyu3pk" sourceRef="DeleteNetworkPolicies" targetRef="UpdateVnfIpv4OamAddress" />
+    <bpmn:serviceTask id="DeleteNetworkPolicies" name="AAI Delete (network policies)" camunda:expression="${AAIDeleteTasks.deleteNetworkPolicies(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_02lpx87</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0xyu3pk</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:serviceTask id="UpdateVnfManagementV6Address" name="AAI Update (VNF)" camunda:expression="${AAIUpdateTasks.updateManagementV6AddressVnf(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0jtem3b</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0khqfnc</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0jtem3b" sourceRef="UpdateVnfIpv4OamAddress" targetRef="UpdateVnfManagementV6Address" />
+    <bpmn:serviceTask id="UpdateVnfIpv4OamAddress" name="AAI Update (VNF)" camunda:expression="${AAIUpdateTasks.updateIpv4OamAddressVnf(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0xyu3pk</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0jtem3b</bpmn:outgoing>
+    </bpmn:serviceTask>
+    <bpmn:sequenceFlow id="SequenceFlow_0khqfnc" sourceRef="UpdateVnfManagementV6Address" targetRef="UpdateVfModuleContrailServiceInstanceFqdn" />
+    <bpmn:sequenceFlow id="SequenceFlow_0yuz21z" sourceRef="UpdateVfModuleContrailServiceInstanceFqdn" targetRef="UpdateVfModuleHeatStackId" />
+    <bpmn:serviceTask id="UpdateVfModuleContrailServiceInstanceFqdn" name="AAI&#10;Update&#10;(vf module)&#10;" camunda:expression="${AAIUpdateTasks.updateContrailServiceInstanceFqdnVfModule(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn:incoming>SequenceFlow_0khqfnc</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0yuz21z</bpmn:outgoing>
+    </bpmn:serviceTask>
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
     <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DeleteVfModuleBB">
@@ -66,7 +90,7 @@
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0pbhsub_di" bpmnElement="UpdateVfModuleDeleteStatus">
-        <dc:Bounds x="762" y="80" width="100" height="80" />
+        <dc:Bounds x="758" y="243" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_08tvhtf_di" bpmnElement="SequenceFlow_08tvhtf">
         <di:waypoint xsi:type="dc:Point" x="361" y="120" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="EndEvent_1rn6yvh_di" bpmnElement="DeleteVfModuleBB_End">
-        <dc:Bounds x="922" y="102" width="36" height="36" />
+        <dc:Bounds x="918" y="265" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="940" y="142" width="0" height="0" />
+          <dc:Bounds x="936" y="305" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="CallActivity_0whogn3_di" bpmnElement="VnfAdapter">
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_02lpx87_di" bpmnElement="SequenceFlow_02lpx87">
         <di:waypoint xsi:type="dc:Point" x="527" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="604" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="591" y="120" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="566" y="105" width="0" height="0" />
+          <dc:Bounds x="559" y="105" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="SubProcess_11p7mrh_di" bpmnElement="SubProcess_11p7mrh" isExpanded="true">
-        <dc:Bounds x="261" y="276" width="231" height="135" />
+        <dc:Bounds x="295" y="412" width="231" height="135" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="StartEvent_1xp6ewt_di" bpmnElement="StartEvent_1xp6ewt">
-        <dc:Bounds x="304" y="338" width="36" height="36" />
+        <dc:Bounds x="338" y="474" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="277" y="374" width="0" height="12" />
+          <dc:Bounds x="311" y="510" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="EndEvent_0guhjau_di" bpmnElement="EndEvent_0guhjau">
-        <dc:Bounds x="433" y="338" width="36" height="36" />
+        <dc:Bounds x="467" y="474" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="406" y="374" width="0" height="12" />
+          <dc:Bounds x="440" y="510" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_0h607z0_di" bpmnElement="SequenceFlow_0h607z0">
-        <di:waypoint xsi:type="dc:Point" x="340" y="356" />
-        <di:waypoint xsi:type="dc:Point" x="433" y="356" />
+        <di:waypoint xsi:type="dc:Point" x="374" y="492" />
+        <di:waypoint xsi:type="dc:Point" x="467" y="492" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="386.5" y="335" width="0" height="12" />
+          <dc:Bounds x="421" y="471" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNShape id="ServiceTask_0vlgqod_di" bpmnElement="UpdateVfModuleHeatStackId">
-        <dc:Bounds x="604" y="80" width="100" height="80" />
+        <dc:Bounds x="591" y="243" width="100" height="80" />
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_01vfwtp_di" bpmnElement="SequenceFlow_01vfwtp">
-        <di:waypoint xsi:type="dc:Point" x="704" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="762" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="691" y="283" />
+        <di:waypoint xsi:type="dc:Point" x="758" y="283" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="733" y="95" width="0" height="0" />
+          <dc:Bounds x="725" y="268" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_09l7pcg_di" bpmnElement="SequenceFlow_09l7pcg">
-        <di:waypoint xsi:type="dc:Point" x="862" y="120" />
-        <di:waypoint xsi:type="dc:Point" x="922" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="283" />
+        <di:waypoint xsi:type="dc:Point" x="918" y="283" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="888" y="258" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0xyu3pk_di" bpmnElement="SequenceFlow_0xyu3pk">
+        <di:waypoint xsi:type="dc:Point" x="691" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="751" y="120" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="721" y="105" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0tty0ac_di" bpmnElement="DeleteNetworkPolicies">
+        <dc:Bounds x="591" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0lrrd16_di" bpmnElement="UpdateVnfManagementV6Address">
+        <dc:Bounds x="261" y="243" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0jtem3b_di" bpmnElement="SequenceFlow_0jtem3b">
+        <di:waypoint xsi:type="dc:Point" x="851" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="941" y="120" />
+        <di:waypoint xsi:type="dc:Point" x="941" y="205" />
+        <di:waypoint xsi:type="dc:Point" x="182" y="205" />
+        <di:waypoint xsi:type="dc:Point" x="182" y="283" />
+        <di:waypoint xsi:type="dc:Point" x="261" y="283" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="892" y="95" width="0" height="0" />
+          <dc:Bounds x="562" y="190" width="0" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0w9805b_di" bpmnElement="UpdateVnfIpv4OamAddress">
+        <dc:Bounds x="751" y="80" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0khqfnc_di" bpmnElement="SequenceFlow_0khqfnc">
+        <di:waypoint xsi:type="dc:Point" x="361" y="283" />
+        <di:waypoint xsi:type="dc:Point" x="427" y="283" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="394" y="268" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0yuz21z_di" bpmnElement="SequenceFlow_0yuz21z">
+        <di:waypoint xsi:type="dc:Point" x="527" y="283" />
+        <di:waypoint xsi:type="dc:Point" x="591" y="283" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="559" y="268" width="0" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0v8naz9_di" bpmnElement="UpdateVfModuleContrailServiceInstanceFqdn">
+        <dc:Bounds x="427" y="243" width="100" height="80" />
+      </bpmndi:BPMNShape>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn:definitions>
index 0e4bb5a..8c44309 100644 (file)
@@ -40,6 +40,10 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{
                                "QueryVfModule",
                                "CreateVfModule",
                                "VnfAdapter",
+                               "CreateNetworkPolicies",
+                               "UpdateVnfIpv4OamAddress",
+                               "UpdateVnfManagementV6Address",
+                               "UpdateVfModuleContrailServiceInstanceFqdn",
                                "UpdateVfModuleHeatStackId",
                                "UpdateVfModuleStatus",
                                "CreateVfModuleBB_End");
@@ -53,7 +57,9 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted()
                                .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf")
-                               .hasNotPassed("QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
+                               .hasNotPassed("QueryVfModule", "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress",
+                                               "UpdateVnfManagementV6Address","UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", 
+                                               "UpdateVfModuleStatus", "CreateVfModuleBB_End");
                assertThat(pi).isEnded();
        }
 
@@ -64,7 +70,8 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted()
                                .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule")
-                               .hasNotPassed("CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
+                               .hasNotPassed("CreateVfModule", "VnfAdapter", "CreateNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address",
+                                               "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
                assertThat(pi).isEnded();
        }
        
@@ -75,7 +82,8 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted()
                                .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule")
-                               .hasNotPassed("VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
+                               .hasNotPassed("VnfAdapter", "CreateNetworkPolicies","UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address",
+                                               "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", "UpdateVfModuleStatus", "CreateVfModuleBB_End");
                assertThat(pi).isEnded();
        }
        
@@ -87,7 +95,8 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted()
-                               .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId")
+                               .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies",
+                                               "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId")
                                .hasNotPassed("UpdateVfModuleStatus", "CreateVfModuleBB_End");
                assertThat(pi).isEnded();
                
@@ -100,7 +109,9 @@ public class CreateVfModuleBBTest extends BaseBPMNTest{
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateVfModuleBB", variables);
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted()
-                               .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleStatus")
+                               .hasPassedInOrder("CreateVfModuleBB_Start", "QueryVnf", "QueryVfModule", "CreateVfModule", "VnfAdapter", "CreateNetworkPolicies",
+                                               "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", 
+                                               "UpdateVfModuleStatus")
                                .hasNotPassed("CreateVfModuleBB_End");
                assertThat(pi).isEnded();
        }
index d9190b5..cedffb7 100644 (file)
@@ -38,6 +38,8 @@ public class DeleteVfModuleBBTest extends BaseBPMNTest{
                ProcessInstance pi = runtimeService.startProcessInstanceByKey("DeleteVfModuleBB", variables);
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted().hasPassedInOrder("DeleteVfModuleBB_Start", "DeleteVfModuleVnfAdapter", "VnfAdapter",
+                               "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address",
+                               "UpdateVfModuleContrailServiceInstanceFqdn",
                                "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
                assertThat(pi).isEnded();
        }
@@ -49,7 +51,9 @@ public class DeleteVfModuleBBTest extends BaseBPMNTest{
                assertThat(pi).isNotNull();
                assertThat(pi).isStarted()
                                .hasPassedInOrder("DeleteVfModuleBB_Start", "DeleteVfModuleVnfAdapter")
-                               .hasNotPassed("VnfAdapter", "UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus", "DeleteVfModuleBB_End");
+                               .hasNotPassed("VnfAdapter", "DeleteNetworkPolicies", "UpdateVnfIpv4OamAddress", "UpdateVnfManagementV6Address", 
+                                               "UpdateVfModuleContrailServiceInstanceFqdn","UpdateVfModuleHeatStackId", "UpdateVfModuleDeleteStatus",
+                                               "DeleteVfModuleBB_End");
                assertThat(pi).isEnded();
        }
 }
index e2caaf2..f477810 100644 (file)
@@ -22,7 +22,9 @@ package org.onap.so.bpmn.infrastructure.aai.tasks;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Optional;
 import java.util.TreeSet;
+import java.util.UUID;
 import java.util.stream.Collectors;
 
 import org.camunda.bpm.engine.delegate.BpmnError;
@@ -35,6 +37,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.LineOfBusiness;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Project;
@@ -44,6 +47,9 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
 import org.onap.so.bpmn.servicedecomposition.entities.GeneralBuildingBlock;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.aai.AAIObjectPlurals;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.client.exception.ExceptionBuilder;
 import org.onap.so.client.orchestration.AAIConfigurationResources;
@@ -69,6 +75,9 @@ public class AAICreateTasks {
        
        private static final String networkTypeProvider = "PROVIDER";
        private static String NETWORK_COLLECTION_NAME = "networkCollectionName";
+       private static String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList";
+       private static String HEAT_STACK_ID = "heatStackId";
+       private static String NETWORK_POLICY_FQDN_PARAM = "network-policy-fqdn";
        @Autowired
        private AAIServiceInstanceResources aaiSIResources;
        @Autowired
@@ -440,6 +449,38 @@ public class AAICreateTasks {
                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
                }
        }
+       
+       public void createNetworkPolicies(BuildingBlockExecution execution) {
+               try{                    
+                       String fqdns = execution.getVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST);
+                       if (fqdns != null && !fqdns.isEmpty()) {
+                               String fqdnList[] = fqdns.split(",");
+                               int fqdnCount = fqdnList.length;
+                               if (fqdnCount > 0) {
+                                       for (int i=0; i < fqdnCount; i++) {
+                                               String fqdn = fqdnList[i];
+                                               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.NETWORK_POLICY);
+                                               uri.queryParam(NETWORK_POLICY_FQDN_PARAM, fqdn);
+                                               Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = aaiNetworkResources.getNetworkPolicy(uri);
+                                               if(!oNetPolicy.isPresent()) {                                                           
+                                                       msoLogger.debug("This network policy FQDN is not in AAI yet: " + fqdn);                                                                 
+                                                       String networkPolicyId = UUID.randomUUID().toString();
+                                                       msoLogger.debug("Adding network-policy with network-policy-id " + networkPolicyId);
+                                                       NetworkPolicy networkPolicy = new NetworkPolicy();
+                                                       networkPolicy.setNetworkPolicyId(networkPolicyId);
+                                                       networkPolicy.setNetworkPolicyFqdn(fqdn);
+                                                       networkPolicy.setHeatStackId(execution.getVariable(HEAT_STACK_ID));
+                                                                       
+                                                       aaiNetworkResources.createNetworkPolicy(networkPolicy);
+                                               }
+                                       }
+                               }
+                       }                       
+               } catch (Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }               
+       }
+       
        /**
         * Groups existing vf modules by the model uuid of our new vf module and returns the lowest unused index
         * 
index a00806a..8f0334e 100644 (file)
 package org.onap.so.bpmn.infrastructure.aai.tasks;
 
 
+import java.util.Optional;
+import java.util.UUID;
+
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
 import org.onap.so.bpmn.servicedecomposition.tasks.ExtractPojosForBB;
+import org.onap.so.client.aai.AAIObjectPlurals;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.client.aai.entities.uri.AAIUriFactory;
 import org.onap.so.client.exception.ExceptionBuilder;
 import org.onap.so.client.orchestration.AAIConfigurationResources;
 import org.onap.so.client.orchestration.AAINetworkResources;
@@ -38,11 +45,16 @@ import org.onap.so.client.orchestration.AAIServiceInstanceResources;
 import org.onap.so.client.orchestration.AAIVfModuleResources;
 import org.onap.so.client.orchestration.AAIVnfResources;
 import org.onap.so.client.orchestration.AAIVolumeGroupResources;
+import org.onap.so.logger.MsoLogger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 @Component
 public class AAIDeleteTasks {
+       private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, AAIDeleteTasks.class);
+       
+       private static String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList";
+       private static String NETWORK_POLICY_FQDN_PARAM = "network-policy-fqdn";
        
        @Autowired
        private ExceptionBuilder exceptionUtil;
@@ -145,4 +157,30 @@ public class AAIDeleteTasks {
                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
                }
        }
+       
+       public void deleteNetworkPolicies(BuildingBlockExecution execution) {
+               try{                    
+                       String fqdns = execution.getVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST);
+                       if (fqdns != null && !fqdns.isEmpty()) {
+                               String fqdnList[] = fqdns.split(",");
+                               int fqdnCount = fqdnList.length;
+                               if (fqdnCount > 0) {
+                                       for (int i=0; i < fqdnCount; i++) {
+                                               String fqdn = fqdnList[i];
+                                               AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectPlurals.NETWORK_POLICY);
+                                               uri.queryParam(NETWORK_POLICY_FQDN_PARAM, fqdn);
+                                               Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = aaiNetworkResources.getNetworkPolicy(uri);
+                                               if(oNetPolicy.isPresent()) {
+                                                       String networkPolicyId = oNetPolicy.get().getNetworkPolicyId();
+                                                       msoLogger.debug("Deleting network-policy with network-policy-id " + networkPolicyId);                                                   
+                                                       
+                                                       aaiNetworkResources.deleteNetworkPolicy(networkPolicyId);
+                                               }
+                                       }
+                               }
+                       }                       
+               } catch (Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }               
+       }
 }
index ed6379a..5176bee 100644 (file)
@@ -449,4 +449,53 @@ public class AAIUpdateTasks {
                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
                }
        }
+       
+       public void updateIpv4OamAddressVnf(BuildingBlockExecution execution) {
+               try {
+                       String ipv4OamAddress = execution.getVariable("oamManagementV4Address");
+                       if (ipv4OamAddress != null) {
+                               GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
+                               GenericVnf copiedGenericVnf = genericVnf.shallowCopyId();
+                       
+                               genericVnf.setIpv4OamAddress(ipv4OamAddress);   
+                               copiedGenericVnf.setIpv4OamAddress(ipv4OamAddress);             
+
+                               aaiVnfResources.updateObjectVnf(copiedGenericVnf);
+                       }
+               } catch(Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       }
+       
+       public void updateManagementV6AddressVnf(BuildingBlockExecution execution) {
+               try {
+                       String managementV6Address = execution.getVariable("oamManagementV6Address");
+                       if (managementV6Address != null) {
+                               GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
+                               GenericVnf copiedGenericVnf = genericVnf.shallowCopyId();
+                       
+                               genericVnf.setManagementV6Address(managementV6Address); 
+                               copiedGenericVnf.setManagementV6Address(managementV6Address);           
+
+                               aaiVnfResources.updateObjectVnf(copiedGenericVnf);
+                       }
+               } catch(Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       }
+       
+       public void updateContrailServiceInstanceFqdnVfModule(BuildingBlockExecution execution) {               
+               try {
+                       String contrailServiceInstanceFqdn = execution.getVariable("contrailServiceInstanceFqdn");
+                       if (contrailServiceInstanceFqdn != null) {
+                               VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
+                               GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
+                               vfModule.setContrailServiceInstanceFqdn(contrailServiceInstanceFqdn);
+                               aaiVfModuleResources.updateContrailServiceInstanceFqdnVfModule(vfModule, vnf);
+                       }
+               } catch (Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       }
+       
 }
\ No newline at end of file
index f1a9e95..0851dc9 100644 (file)
@@ -26,6 +26,7 @@ import org.onap.so.adapters.vnfrest.CreateVolumeGroupResponse;
 import org.onap.so.adapters.vnfrest.DeleteVfModuleResponse;
 import org.onap.so.adapters.vnfrest.DeleteVolumeGroupResponse;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
@@ -47,10 +48,18 @@ import javax.xml.bind.Unmarshaller;
 import javax.xml.parsers.SAXParserFactory;
 import javax.xml.transform.sax.SAXSource;
 import java.io.StringReader;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 @Component
 public class VnfAdapterImpl {
-       private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, VnfAdapterCreateTasks.class);
+       private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, VnfAdapterImpl.class);
+       private static final String CONTRAIL_SERVICE_INSTANCE_FQDN = "contrailServiceInstanceFqdn";
+       private static final String OAM_MANAGEMENT_V4_ADDRESS = "oamManagementV4Address";
+       private static final String OAM_MANAGEMENT_V6_ADDRESS = "oamManagementV6Address";
+       private static final String CONTRAIL_NETWORK_POLICY_FQDN_LIST = "contrailNetworkPolicyFqdnList";
        
        @Autowired
        private ExtractPojosForBB extractPojosForBB;
@@ -65,6 +74,10 @@ public class VnfAdapterImpl {
                        execution.setVariable("mso-request-id", gBBInput.getRequestContext().getMsoRequestId());
                        execution.setVariable("mso-service-instance-id", serviceInstance.getServiceInstanceId());
                        execution.setVariable("heatStackId", null);
+                       execution.setVariable(CONTRAIL_SERVICE_INSTANCE_FQDN, null);
+                       execution.setVariable(OAM_MANAGEMENT_V4_ADDRESS, null);
+                       execution.setVariable(OAM_MANAGEMENT_V6_ADDRESS, null);
+                       execution.setVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST, null);                 
                } catch (Exception ex) {
                        exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
                }
@@ -79,15 +92,36 @@ public class VnfAdapterImpl {
                     VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
                     String heatStackId = ((CreateVfModuleResponse) vnfRestResponse).getVfModuleStackId();
                     if(!StringUtils.isEmpty(heatStackId)) {
-                        vfModule.setHeatStackId(heatStackId);
+                        vfModule.setHeatStackId(heatStackId);                        
                         execution.setVariable("heatStackId", heatStackId);
                     }
+                    Map<String,String> vfModuleOutputs = ((CreateVfModuleResponse) vnfRestResponse).getVfModuleOutputs();
+                    if (vfModuleOutputs != null) {
+                       processVfModuleOutputs(execution, vfModuleOutputs);
+                    }
                 } else if(vnfRestResponse instanceof DeleteVfModuleResponse) {
                     VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
+                    GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
                     Boolean vfModuleDelete = ((DeleteVfModuleResponse) vnfRestResponse).getVfModuleDeleted();
                     if(null!= vfModuleDelete && vfModuleDelete) {
                         vfModule.setHeatStackId(null);
                         execution.setVariable("heatStackId", null);
+                        Map<String,String> vfModuleOutputs = ((DeleteVfModuleResponse) vnfRestResponse).getVfModuleOutputs();
+                        if (vfModuleOutputs != null) {
+                               processVfModuleOutputs(execution, vfModuleOutputs);
+                               if (execution.getVariable(OAM_MANAGEMENT_V4_ADDRESS) != null) {
+                                       genericVnf.setIpv4OamAddress("");
+                                       execution.setVariable(OAM_MANAGEMENT_V4_ADDRESS, "");                                   
+                               }
+                               if (execution.getVariable(OAM_MANAGEMENT_V6_ADDRESS) != null) {
+                                       genericVnf.setManagementV6Address("");
+                                       execution.setVariable(OAM_MANAGEMENT_V6_ADDRESS, "");                                   
+                               }
+                               if (execution.getVariable(CONTRAIL_SERVICE_INSTANCE_FQDN) != null) {
+                                       vfModule.setContrailServiceInstanceFqdn("");
+                                       execution.setVariable(CONTRAIL_SERVICE_INSTANCE_FQDN, "");
+                               }                               
+                        }
                     }
                 } else if(vnfRestResponse instanceof CreateVolumeGroupResponse) {
                     VolumeGroup volumeGroup = extractPojosForBB.extractByKey(execution, ResourceKey.VOLUME_GROUP_ID, execution.getLookupMap().get(ResourceKey.VOLUME_GROUP_ID));
@@ -108,7 +142,7 @@ public class VnfAdapterImpl {
                 }
             }
                } catch (Exception ex) {
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);                      
                }
        }
 
@@ -133,4 +167,49 @@ public class VnfAdapterImpl {
             throw new MarshallerException("Error parsing VNF Adapter response. " + e.getMessage(), MsoLogger.ErrorCode.SchemaError.getValue(), e);
         }
     }
+    
+    private void processVfModuleOutputs(BuildingBlockExecution execution, Map<String,String> vfModuleOutputs) {
+       if (vfModuleOutputs == null) {
+               return;
+       }
+       try {
+               VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID, execution.getLookupMap().get(ResourceKey.VF_MODULE_ID));
+               GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID, execution.getLookupMap().get(ResourceKey.GENERIC_VNF_ID));
+               List<String> contrailNetworkPolicyFqdnList = new ArrayList<String>();
+               Iterator<String> keys = vfModuleOutputs.keySet().iterator();
+               while (keys.hasNext()) {
+                       String key = keys.next();                       
+                       if (key.equals("contrail-service-instance-fqdn")) {
+                                       String contrailServiceInstanceFqdn = vfModuleOutputs.get(key);                          
+                                       msoLogger.debug("Obtained contrailServiceInstanceFqdn: " + contrailServiceInstanceFqdn);
+                                       vfModule.setContrailServiceInstanceFqdn(contrailServiceInstanceFqdn);
+                                       execution.setVariable(CONTRAIL_SERVICE_INSTANCE_FQDN, contrailServiceInstanceFqdn);
+                               }
+                               else if (key.endsWith("contrail_network_policy_fqdn")) {
+                                       String contrailNetworkPolicyFqdn = vfModuleOutputs.get(key);
+                                       msoLogger.debug("Obtained contrailNetworkPolicyFqdn: " + contrailNetworkPolicyFqdn);
+                                       contrailNetworkPolicyFqdnList.add(contrailNetworkPolicyFqdn);
+                               }
+                               else if (key.equals("oam_management_v4_address")) {
+                                       String oamManagementV4Address = vfModuleOutputs.get(key);
+                                       msoLogger.debug("Obtained oamManagementV4Address: " + oamManagementV4Address);
+                                       genericVnf.setIpv4OamAddress(oamManagementV4Address);
+                                       execution.setVariable(OAM_MANAGEMENT_V4_ADDRESS, oamManagementV4Address);
+                               }
+                               else if (key.equals("oam_management_v6_address")) {
+                                       String oamManagementV6Address = vfModuleOutputs.get(key);
+                                       msoLogger.debug("Obtained oamManagementV6Address: " + oamManagementV6Address);
+                                       genericVnf.setManagementV6Address(oamManagementV6Address);
+                                       execution.setVariable(OAM_MANAGEMENT_V6_ADDRESS, oamManagementV6Address);
+                               }
+                       
+                       if (!contrailNetworkPolicyFqdnList.isEmpty()) {
+                                       execution.setVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST, String.join(",", contrailNetworkPolicyFqdnList));
+                               }
+               }
+       } catch (Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       
+    }
 }
index c895566..c8eeaa7 100644 (file)
@@ -302,4 +302,8 @@ public class AAIObjectMapper {
        public org.onap.aai.domain.yang.Subnet mapSubnet (Subnet subnet){
                return modelMapper.map(subnet,org.onap.aai.domain.yang.Subnet.class);
        }
+       
+       public org.onap.aai.domain.yang.NetworkPolicy mapNetworkPolicy (NetworkPolicy networkPolicy){
+               return modelMapper.map(networkPolicy,org.onap.aai.domain.yang.NetworkPolicy.class);
+       }
 }
index d2bf95a..4ca3f2a 100644 (file)
@@ -45,6 +45,7 @@ import org.springframework.stereotype.Component;
 
 @Component
 public class AAINetworkResources {
+       
        @Autowired
        private InjectionHelper injectionHelper;
 
@@ -171,6 +172,16 @@ public class AAINetworkResources {
                AAIResourceUri instanceGroupURI = AAIUriFactory.createResourceUri(AAIObjectType.INSTANCE_GROUP, instanceGroup.getId());
                injectionHelper.getAaiClient().delete(instanceGroupURI);
        }
-
-
+       
+       public void createNetworkPolicy(org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy networkPolicy) {
+               NetworkPolicy aaiNetworkPolicy = aaiObjectMapper.mapNetworkPolicy(networkPolicy);
+               String networkPolicyId = networkPolicy.getNetworkPolicyId();
+               AAIResourceUri netUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, networkPolicyId);
+               injectionHelper.getAaiClient().create(netUri, aaiNetworkPolicy);
+       }
+       
+       public void deleteNetworkPolicy(String networkPolicyId) {
+               AAIResourceUri networkPolicyURI = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, networkPolicyId);
+               injectionHelper.getAaiClient().delete(networkPolicyURI);
+       }
 }
index a641d43..ef61319 100644 (file)
@@ -76,6 +76,15 @@ public class AAIVfModuleResources {
                injectionHelper.getAaiClient().update(vfModuleURI, aaiVfModule);
        }
        
+       public void updateContrailServiceInstanceFqdnVfModule(VfModule vfModule, GenericVnf vnf) {
+               AAIResourceUri vfModuleURI = AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnf.getVnfId(), vfModule.getVfModuleId());
+               VfModule copiedVfModule = vfModule.shallowCopyId();
+               
+               copiedVfModule.setContrailServiceInstanceFqdn(vfModule.getContrailServiceInstanceFqdn());
+               org.onap.aai.domain.yang.VfModule aaiVfModule = aaiObjectMapper.mapVfModule(copiedVfModule);
+               injectionHelper.getAaiClient().update(vfModuleURI, aaiVfModule);
+       }
+       
        public void changeAssignVfModule(VfModule vfModule, GenericVnf vnf) {
                AAIResourceUri vfModuleURI = AAIUriFactory.createResourceUri(AAIObjectType.VF_MODULE, vnf.getVnfId(), vfModule.getVfModuleId());
                org.onap.aai.domain.yang.VfModule AAIVfModule = aaiObjectMapper.mapVfModule(vfModule);
index 7375f09..d8c7eba 100644 (file)
@@ -45,6 +45,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.LineOfBusiness;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Platform;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
@@ -708,4 +709,12 @@ public class TestDataSetup{
         subnet.setNeutronSubnetId("testNeutronSubnetId");
                return subnet;
        }
+       
+       public NetworkPolicy buildNetworkPolicy() {
+               NetworkPolicy networkPolicy = new NetworkPolicy();
+               networkPolicy.setNetworkPolicyId("testNetworkPolicyId");
+               networkPolicy.setNetworkPolicyFqdn("testNetworkPolicyFqdn");
+               networkPolicy.setHeatStackId("testHeatStackId");                
+               return networkPolicy;
+       }
 }
index 4e05d72..c48019a 100644 (file)
@@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.util.Arrays;
+import java.util.Optional;
 import java.util.TreeSet;
 
 import org.camunda.bpm.engine.delegate.BpmnError;
@@ -38,7 +39,9 @@ import org.junit.Before;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.mockito.ArgumentCaptor;
 import org.mockito.ArgumentMatchers;
+import org.mockito.Captor;
 import org.mockito.InjectMocks;
 import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
@@ -47,6 +50,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Customer;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
@@ -55,6 +59,7 @@ import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoGenericVnf;
 import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoVfModule;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 
 public class AAICreateTasksTest extends BaseTaskTest{
        
@@ -71,6 +76,9 @@ public class AAICreateTasksTest extends BaseTaskTest{
        private Customer customer;
        private Configuration configuration;
        
+       @Captor
+       ArgumentCaptor<NetworkPolicy> networkPolicyCaptor;
+       
        @Rule
        public final ExpectedException exception = ExpectedException.none();
        
@@ -459,6 +467,39 @@ public class AAICreateTasksTest extends BaseTaskTest{
                aaiCreateTasks.connectVnfToTenant(execution);
                verify(aaiVnfResources, times(1)).connectVnfToTenant(genericVnf, gBBInput.getCloudRegion());
        }
+       @Test
+       public void createNetworkPolicyNeedToCreateAllTest() throws Exception { 
+               execution.setVariable("heatStackId", "testHeatStackId");
+               execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123,ED456");
+               Optional<NetworkPolicy> networkPolicy = Optional.empty();
+               doReturn(networkPolicy).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class));
+               doNothing().when(aaiNetworkResources).createNetworkPolicy(any(NetworkPolicy.class));
+               aaiCreateTasks.createNetworkPolicies(execution);
+               verify(aaiNetworkResources, times(2)).createNetworkPolicy(networkPolicyCaptor.capture());
+               assertEquals("ABC123", networkPolicyCaptor.getAllValues().get(0).getNetworkPolicyFqdn());
+               assertEquals("ED456", networkPolicyCaptor.getAllValues().get(1).getNetworkPolicyFqdn());
+               assertEquals("testHeatStackId", networkPolicyCaptor.getAllValues().get(0).getHeatStackId());
+               assertEquals("testHeatStackId", networkPolicyCaptor.getAllValues().get(1).getHeatStackId());
+       }
+       
+       @Test
+       public void createNetworkPolicyNeedToCreateNoneTest() throws Exception {
+               execution.setVariable("heatStackId", "testHeatStackId");
+               execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123");
+               NetworkPolicy networkPolicy = new NetworkPolicy();              
+               doReturn(Optional.of(networkPolicy)).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class));
+               doNothing().when(aaiNetworkResources).createNetworkPolicy(any(NetworkPolicy.class));
+               aaiCreateTasks.createNetworkPolicies(execution);
+               verify(aaiNetworkResources, times(0)).createNetworkPolicy(any(NetworkPolicy.class));
+       }
+       
+       @Test
+       public void createNetworkPolicyNoNetworkPoliciesTest() throws Exception {
+               execution.setVariable("heatStackId", "testHeatStackId");        
+               aaiCreateTasks.createNetworkPolicies(execution);
+               verify(aaiNetworkResources, times(0)).createNetworkPolicy(any(NetworkPolicy.class));
+       }
+       
        @Test
        public void createVfModuleGetLowestIndexTest() throws Exception {
                GenericVnf vnf = new GenericVnf();
index 67f5d19..5cb7751 100644 (file)
 
 package org.onap.so.bpmn.infrastructure.aai.tasks;
 
+import static org.junit.Assert.assertEquals;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doNothing;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Optional;
 
 import org.camunda.bpm.engine.delegate.BpmnError;
 import org.junit.Before;
 import org.junit.Test;
+import org.mockito.ArgumentCaptor;
 import org.mockito.ArgumentMatchers;
+import org.mockito.Captor;
 import org.mockito.InjectMocks;
+import org.onap.aai.domain.yang.NetworkPolicy;
 import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
@@ -46,6 +50,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
 import org.onap.so.bpmn.servicedecomposition.entities.ResourceKey;
+import org.onap.so.client.aai.entities.uri.AAIResourceUri;
 import org.onap.so.client.exception.BBObjectNotFoundException;
 
 
@@ -62,6 +67,9 @@ public class AAIDeleteTasksTest extends BaseTaskTest {
        private CloudRegion cloudRegion;
        private Configuration configuration;
        
+       @Captor
+       ArgumentCaptor<String> stringCaptor;    
+       
        @Before
        public void before() throws BBObjectNotFoundException {
                serviceInstance = setServiceInstance();
@@ -179,4 +187,34 @@ public class AAIDeleteTasksTest extends BaseTaskTest {
                aaiDeleteTasks.deleteConfiguration(execution);
                verify(aaiConfigurationResources, times(1)).deleteConfiguration(configuration);
        }
+       
+       @Test
+       public void deleteNetworkPolicyNeedToDeleteAllTest() throws Exception {         
+               execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123,DEF456");
+               NetworkPolicy networkPolicy0 = new NetworkPolicy();
+               networkPolicy0.setNetworkPolicyId("testNetworkPolicyId0");
+               NetworkPolicy networkPolicy1 = new NetworkPolicy();
+               networkPolicy1.setNetworkPolicyId("testNetworkPolicyId1");
+               doReturn(Optional.of(networkPolicy0),Optional.of(networkPolicy1)).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class));
+               doNothing().when(aaiNetworkResources).deleteNetworkPolicy(any(String.class));
+               aaiDeleteTasks.deleteNetworkPolicies(execution);
+               verify(aaiNetworkResources, times(2)).deleteNetworkPolicy(stringCaptor.capture());
+               assertEquals("testNetworkPolicyId0", stringCaptor.getAllValues().get(0));
+               assertEquals("testNetworkPolicyId1", stringCaptor.getAllValues().get(1));
+       }
+       
+       @Test
+       public void deleteNetworkPolicyNeedToDeleteNoneTest() throws Exception {                
+               execution.setVariable("contrailNetworkPolicyFqdnList", "ABC123");
+               Optional<NetworkPolicy> networkPolicy = Optional.empty();               
+               doReturn(networkPolicy).when(aaiNetworkResources).getNetworkPolicy(any(AAIResourceUri.class));
+               aaiDeleteTasks.deleteNetworkPolicies(execution);
+               verify(aaiNetworkResources, times(0)).deleteNetworkPolicy(any(String.class));
+       }
+       
+       @Test
+       public void deleteNetworkPolicyNoNetworkPoliciesTest() throws Exception {                       
+               aaiDeleteTasks.deleteNetworkPolicies(execution);
+               verify(aaiNetworkResources, times(0)).deleteNetworkPolicy(any(String.class));
+       }
 }
index f97b137..73d7257 100644 (file)
@@ -586,4 +586,49 @@ public class AAIUpdateTasksTest extends BaseTaskTest{
 
                verify(aaiConfigurationResources, times(1)).updateOrchestrationStatusConfiguration(configuration, OrchestrationStatus.ACTIVE);
        }
+       @Test
+       public void updateContrailServiceInstanceFqdnVfModuleTest() throws Exception {
+               execution.setVariable("contrailServiceInstanceFqdn", "newContrailServiceInstanceFqdn");
+               doNothing().when(aaiVfModuleResources).updateContrailServiceInstanceFqdnVfModule(vfModule, genericVnf);
+
+               aaiUpdateTasks.updateContrailServiceInstanceFqdnVfModule(execution);
+
+               verify(aaiVfModuleResources, times(1)).updateContrailServiceInstanceFqdnVfModule(vfModule, genericVnf);
+               assertEquals("newContrailServiceInstanceFqdn", vfModule.getContrailServiceInstanceFqdn());
+       }
+       @Test
+       public void updateContrailServiceInstanceFqdnVfModuleNoUpdateTest() throws Exception {          
+               aaiUpdateTasks.updateContrailServiceInstanceFqdnVfModule(execution);
+               verify(aaiVfModuleResources, times(0)).updateContrailServiceInstanceFqdnVfModule(vfModule, genericVnf);         
+       }
+       @Test
+       public void updateIpv4OamAddressVnfTest() throws Exception {
+               execution.setVariable("oamManagementV4Address", "newIpv4OamAddress");
+               doNothing().when(aaiVnfResources).updateObjectVnf(genericVnf);
+
+               aaiUpdateTasks.updateIpv4OamAddressVnf(execution);
+
+               verify(aaiVnfResources, times(1)).updateObjectVnf(genericVnf);
+               assertEquals("newIpv4OamAddress", genericVnf.getIpv4OamAddress());
+       }
+       @Test
+       public void updateIpv4OamAddressVnfNoUpdateTest() throws Exception {            
+               aaiUpdateTasks.updateIpv4OamAddressVnf(execution);
+               verify(aaiVnfResources, times(0)).updateObjectVnf(genericVnf);
+       }
+       @Test
+       public void updateManagementV6AddressVnfTest() throws Exception {
+               execution.setVariable("oamManagementV6Address", "newManagementV6Address");
+               doNothing().when(aaiVnfResources).updateObjectVnf(genericVnf);
+
+               aaiUpdateTasks.updateManagementV6AddressVnf(execution);
+
+               verify(aaiVnfResources, times(1)).updateObjectVnf(genericVnf);
+               assertEquals("newManagementV6Address", genericVnf.getManagementV6Address());
+       }
+       @Test
+       public void updateManagementV6AddressVnfNoUpdateTest() throws Exception {               
+               aaiUpdateTasks.updateManagementV6AddressVnf(execution);
+               verify(aaiVnfResources, times(0)).updateObjectVnf(genericVnf);
+       }
 }
index 4158f9c..33d0dbe 100644 (file)
@@ -21,6 +21,7 @@
 package org.onap.so.bpmn.infrastructure.adapter.vnf.tasks;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
 import static org.junit.Assert.assertNull;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.eq;
@@ -35,6 +36,7 @@ import org.mockito.InjectMocks;
 import org.onap.so.FileUtil;
 import org.onap.so.bpmn.BaseTaskTest;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.VolumeGroup;
@@ -50,6 +52,7 @@ public class VnfAdapterImplTest extends BaseTaskTest {
 
        private RequestContext requestContext;
        private ServiceInstance serviceInstance;
+       private GenericVnf genericVnf;
        private VfModule vfModule;
     private VolumeGroup volumeGroup;
        
@@ -58,12 +61,17 @@ public class VnfAdapterImplTest extends BaseTaskTest {
     private static final String VNF_ADAPTER_VOLUME_CREATE_RESPONSE =  FileUtil.readResourceFile("__files/VfModularity/CreateVfModuleVolumeCallbackResponse.xml");
     private static final String VNF_ADAPTER_VOLUME_DELETE_RESPONSE =  FileUtil.readResourceFile("__files/VfModularity/DeleteVfModuleVolumeCallbackResponse.xml");
        private static final String TEST_VFMODULE_HEATSTACK_ID = "slowburn";
-    private static final String TEST_VOLUME_HEATSTACK_ID = "testHeatStackId1";   
+    private static final String TEST_VOLUME_HEATSTACK_ID = "testHeatStackId1";
+    private static final String TEST_CONTRAIL_SERVICE_INSTANCE_FQDN = "default-domain:MSOTest:MsoNW-RA";
+    private static final String TEST_OAM_MANAGEMENT_V4_ADDRESS = "127.0.0.1";
+    private static final String TEST_OAM_MANAGEMENT_V6_ADDRESS = "2000:abc:bce:1111";
+    private static final String TEST_CONTRAIL_NETWORK_POLICY_FQDNS = "MSOTest:DefaultPolicyFQDN2,MSOTest:DefaultPolicyFQDN1";
 
        @Before
        public void before() throws BBObjectNotFoundException {
                requestContext = setRequestContext();
                serviceInstance = setServiceInstance();
+               genericVnf = setGenericVnf();
                vfModule = setVfModule();
         volumeGroup = setVolumeGroup();
                vfModule.setHeatStackId(null);
@@ -72,6 +80,7 @@ public class VnfAdapterImplTest extends BaseTaskTest {
         doThrow(new BpmnError("BPMN Error")).when(exceptionUtil).buildAndThrowWorkflowException(any(BuildingBlockExecution.class), eq(7000), any(Exception.class));
        when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.SERVICE_INSTANCE_ID), any())).thenReturn(serviceInstance);
        when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VOLUME_GROUP_ID), any())).thenReturn(volumeGroup);
+       when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.GENERIC_VNF_ID), any())).thenReturn(genericVnf);
        when(extractPojosForBB.extractByKey(any(),ArgumentMatchers.eq(ResourceKey.VF_MODULE_ID), any())).thenReturn(vfModule);
        }
 
@@ -86,8 +95,15 @@ public class VnfAdapterImplTest extends BaseTaskTest {
        @Test
        public void postProcessVnfAdapter_CreateResponseTest() {
                execution.setVariable("vnfAdapterRestV1Response", VNF_ADAPTER_REST_CREATE_RESPONSE);
-               vnfAdapterImpl.postProcessVnfAdapter(execution);
+               vnfAdapterImpl.postProcessVnfAdapter(execution);                
                assertEquals(TEST_VFMODULE_HEATSTACK_ID, vfModule.getHeatStackId());
+               assertEquals(TEST_CONTRAIL_SERVICE_INSTANCE_FQDN, vfModule.getContrailServiceInstanceFqdn());
+               assertEquals(TEST_CONTRAIL_SERVICE_INSTANCE_FQDN, execution.getVariable("contrailServiceInstanceFqdn"));
+               assertEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, genericVnf.getIpv4OamAddress());
+               assertEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, execution.getVariable("oamManagementV4Address"));
+               assertEquals(TEST_OAM_MANAGEMENT_V6_ADDRESS, genericVnf.getManagementV6Address());
+               assertEquals(TEST_OAM_MANAGEMENT_V6_ADDRESS, execution.getVariable("oamManagementV6Address"));
+               assertEquals(TEST_CONTRAIL_NETWORK_POLICY_FQDNS, execution.getVariable("contrailNetworkPolicyFqdnList"));               
        }
        
 
@@ -111,6 +127,20 @@ public class VnfAdapterImplTest extends BaseTaskTest {
                vnfAdapterImpl.postProcessVnfAdapter(execution);
                assertNull(vfModule.getHeatStackId());
        }
+       
+       @Test
+       public void postProcessVnfAdapter_CreateResponseTest_EmptyVfModuleOutputs() {
+               execution.setVariable("vnfAdapterRestV1Response", "<createVfModuleResponse><vfModuleOutputs></vfModuleOutputs></createVfModuleResponse>");
+               vnfAdapterImpl.postProcessVnfAdapter(execution);
+               assertNull(vfModule.getHeatStackId());
+               assertNull(vfModule.getContrailServiceInstanceFqdn());
+               assertNull(execution.getVariable("contrailServiceInstanceFqdn"));
+               assertNotEquals(TEST_OAM_MANAGEMENT_V4_ADDRESS, genericVnf.getIpv4OamAddress());                
+               assertNull(execution.getVariable("oamManagementV4Address"));
+               assertNull(genericVnf.getManagementV6Address());
+               assertNull(execution.getVariable("oamManagementV6Address"));
+               assertNull(execution.getVariable("contrailNetworkPolicyFqdnList"));
+       }
 
        @Test
        public void postProcessVnfAdapter_DeleteResponseTest() {
@@ -118,6 +148,25 @@ public class VnfAdapterImplTest extends BaseTaskTest {
                execution.setVariable("vnfAdapterRestV1Response", VNF_ADAPTER_REST_DELETE_RESPONSE);
                vnfAdapterImpl.postProcessVnfAdapter(execution);
                assertNull(vfModule.getHeatStackId());
+               assertEquals(vfModule.getContrailServiceInstanceFqdn(), "");
+               assertEquals(execution.getVariable("contrailServiceInstanceFqdn"), "");
+               assertEquals(genericVnf.getIpv4OamAddress(), "");
+               assertEquals(execution.getVariable("oamManagementV4Address"), "");
+               assertEquals(genericVnf.getManagementV6Address(), "");
+               assertEquals(execution.getVariable("oamManagementV6Address"), "");                              
+               assertEquals(TEST_CONTRAIL_NETWORK_POLICY_FQDNS, execution.getVariable("contrailNetworkPolicyFqdnList"));
+       }
+       
+       @Test
+       public void postProcessVnfAdapter_DeleteResponseTest_EmptyVfModuleOutputs() {
+               execution.setVariable("vnfAdapterRestV1Response", "<createVfModuleResponse><vfModuleOutputs></vfModuleOutputs></createVfModuleResponse>");
+               vnfAdapterImpl.postProcessVnfAdapter(execution);
+               assertNull(vfModule.getHeatStackId());
+               assertNull(vfModule.getContrailServiceInstanceFqdn());
+               assertNull(execution.getVariable("contrailServiceInstanceFqdn"));                               
+               assertNull(execution.getVariable("oamManagementV4Address"));            
+               assertNull(execution.getVariable("oamManagementV6Address"));
+               assertNull(execution.getVariable("contrailNetworkPolicyFqdnList"));
        }
        
        @Test
index db01399..a8e9a7e 100644 (file)
@@ -41,6 +41,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.GenericVnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.HostRoute;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.OwningEntity;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Project;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.RouteTarget;
@@ -672,4 +673,21 @@ public class AAIObjectMapperTest {
 
         assertThat(actualSubnet, sameBeanAs(expectedSubnet));
     }
+    
+    @Test
+    public void mapNetworkPolicyTest() {
+        NetworkPolicy networkPolicy = new NetworkPolicy();
+        networkPolicy.setNetworkPolicyId("testNetworkPolicyId");
+        networkPolicy.setNetworkPolicyFqdn("testNetworkPolicyFqdn");
+        networkPolicy.setHeatStackId("testHeatStackId");        
+
+        org.onap.aai.domain.yang.NetworkPolicy expectedNetworkPolicy = new org.onap.aai.domain.yang.NetworkPolicy();
+        expectedNetworkPolicy.setNetworkPolicyId("testNetworkPolicyId");
+        expectedNetworkPolicy.setNetworkPolicyFqdn("testNetworkPolicyFqdn");
+        expectedNetworkPolicy.setHeatStackId("testHeatStackId");        
+        
+        org.onap.aai.domain.yang.NetworkPolicy actualNetworkPolicy = aaiObjectMapper.mapNetworkPolicy(networkPolicy);
+
+        assertThat(actualNetworkPolicy, sameBeanAs(expectedNetworkPolicy));
+    }
 }
index 82ffdf9..2e2cc5d 100644 (file)
@@ -45,7 +45,6 @@ import org.junit.runner.RunWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
-import org.onap.aai.domain.yang.NetworkPolicy;
 import org.onap.aai.domain.yang.RouteTableReference;
 import org.onap.aai.domain.yang.VpnBinding;
 import org.onap.so.bpmn.common.InjectionHelper;
@@ -54,6 +53,7 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.InstanceGroup;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network;
+import org.onap.so.bpmn.servicedecomposition.bbobjects.NetworkPolicy;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet;
 import org.onap.so.client.aai.AAIObjectType;
@@ -77,6 +77,7 @@ public class AAINetworkResourcesTest extends TestDataSetup{
        private ServiceInstance serviceInstance;
        private CloudRegion cloudRegion;
        private Subnet subnet;
+       private NetworkPolicy networkPolicy;
        
        @Mock
        protected AAIResourcesClient MOCK_aaiResourcesClient;
@@ -107,6 +108,8 @@ public class AAINetworkResourcesTest extends TestDataSetup{
                
                subnet = buildSubnet();
                
+               networkPolicy = buildNetworkPolicy();
+               
                doReturn(MOCK_aaiResourcesClient).when(MOCK_injectionHelper).getAaiClient();
        }
        
@@ -175,16 +178,15 @@ public class AAINetworkResourcesTest extends TestDataSetup{
        public void getNetworkPolicyTest() throws Exception {
                final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "queryAaiNetworkPolicy.json")));
                AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
-               Optional<NetworkPolicy> oNetPolicy = Optional.empty();
+               Optional<org.onap.aai.domain.yang.NetworkPolicy> oNetPolicy = Optional.empty();
                AAIResourceUri netPolicyUri = AAIUriFactory.createResourceUri(AAIObjectType.NETWORK_POLICY, "ModelInvariantUUID");
                
                doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
                oNetPolicy = aaiNetworkResources.getNetworkPolicy(netPolicyUri);
-               verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
-               
+               verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));               
                if (oNetPolicy.isPresent()) {
-                       NetworkPolicy networkPolicy = oNetPolicy.get();
-                       assertThat(aaiResultWrapper.asBean(NetworkPolicy.class).get(), sameBeanAs(networkPolicy));
+                       org.onap.aai.domain.yang.NetworkPolicy networkPolicy = oNetPolicy.get();
+                       assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.NetworkPolicy.class).get(), sameBeanAs(networkPolicy));
                }
        }
        
@@ -357,4 +359,20 @@ public class AAINetworkResourcesTest extends TestDataSetup{
                        assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.Subnet.class).get(), sameBeanAs(subnet));
                }
        }
+       
+       @Test
+       public void createNetworkPolicyTest() throws Exception {
+               doNothing().when(MOCK_aaiResourcesClient).create(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.NetworkPolicy.class));         
+               doReturn(new org.onap.aai.domain.yang.NetworkPolicy()).when(MOCK_aaiObjectMapper).mapNetworkPolicy(networkPolicy);
+               aaiNetworkResources.createNetworkPolicy(networkPolicy);         
+               verify(MOCK_aaiResourcesClient, times(1)).create(any(AAIResourceUri.class), isA(org.onap.aai.domain.yang.NetworkPolicy.class));
+       }
+       
+       @Test
+       public void deleteNetworkPolicyTest() throws Exception {
+               doNothing().when(MOCK_aaiResourcesClient).delete(isA(AAIResourceUri.class));
+               aaiNetworkResources.deleteNetworkPolicy(networkPolicy.getNetworkPolicyId());
+               verify(MOCK_aaiResourcesClient, times(1)).delete(any(AAIResourceUri.class));
+       }
+       
 }
index 0a8e7ce..a8200ca 100644 (file)
@@ -138,4 +138,17 @@ public class AAIVfModuleResourcesTest extends TestDataSetup{
                
                assertEquals("testHeatStackId", vfModule.getHeatStackId());
        }
+       
+       @Test
+       public void updateContrailServiceInstanceFqdnVfModuleTest() throws Exception {
+               vfModule.setContrailServiceInstanceFqdn("testContrailServiceInstanceFqdn");
+               
+               doNothing().when(MOCK_aaiResourcesClient).update(isA(AAIResourceUri.class), isA(org.onap.aai.domain.yang.VfModule.class));
+               
+               aaiVfModuleResources.updateContrailServiceInstanceFqdnVfModule(vfModule, vnf);
+
+               verify(MOCK_aaiResourcesClient, times(1)).update(any(AAIResourceUri.class),ArgumentMatchers.isNull());
+               
+               assertEquals("testContrailServiceInstanceFqdn", vfModule.getContrailServiceInstanceFqdn());
+       }
 }