get subnet sequence number from A&AI 10/75710/1
authorBenjamin, Max (mb388a) <mb388a@us.att.com>
Sat, 12 Jan 2019 02:07:06 +0000 (21:07 -0500)
committerBenjamin, Max (mb388a) <mb388a@us.att.com>
Sat, 12 Jan 2019 02:07:20 +0000 (21:07 -0500)
Add AAIQuery for subnet block to CreateNetwork bpmn
MSO shall get subnet sequence number.

Change-Id: I5cf73d1b5344f41ac98a51274948822322e3591b
Issue-ID: SO-1378
Signed-off-by: Benjamin, Max (mb388a) <mb388a@us.att.com>
adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/openstack/beans/Subnet.java
bpmn/so-bpmn-building-blocks/src/main/resources/subprocess/BuildingBlock/CreateNetworkBB.bpmn
bpmn/so-bpmn-building-blocks/src/test/java/org/onap/so/bpmn/infrastructure/bpmn/subprocess/CreateNetworkBBTest.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIQueryTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/adapter/network/mapper/NetworkAdapterObjectMapper.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAINetworkResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAINetworkResourcesTest.java

index 3213323..4fcf469 100644 (file)
@@ -55,8 +55,18 @@ public class Subnet implements Serializable {
     private List<Pool> allocationPools;
 
     private List<String> dnsNameServers;
+    
+    private Integer subnetSequence;
+
+    public Integer getSubnetSequence() {
+               return subnetSequence;
+       }
+
+       public void setSubnetSequence(Integer subnetSequence) {
+               this.subnetSequence = subnetSequence;
+       }
 
-    public Subnet () {
+       public Subnet () {
     }
 
        public String getSubnetName() {
index 609edf4..21f2fbe 100644 (file)
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.9.0" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
   <bpmn2:process id="CreateNetworkBB" name="CreateNetworkBB" isExecutable="true">
     <bpmn2:startEvent id="createNetwork_startEvent">
       <bpmn2:outgoing>SequenceFlow_1maepy7</bpmn2:outgoing>
       <bpmn2:linkEventDefinition name="CatchEvent_Create_Network" />
     </bpmn2:intermediateCatchEvent>
     <bpmn2:intermediateThrowEvent id="ThrowEvent_ToCreateNetwork" name="ThrowEvent_ToCreateNetwork">
-      <bpmn2:incoming>SequenceFlow_1h9kkhb</bpmn2:incoming>
+      <bpmn2:incoming>SequenceFlow_04w6hdq</bpmn2:incoming>
       <bpmn2:linkEventDefinition name="CatchEvent_Create_Network" />
     </bpmn2:intermediateThrowEvent>
-    <bpmn2:sequenceFlow id="SequenceFlow_1h9kkhb" sourceRef="QueryNetworkTableRef_ServiceTask" targetRef="ThrowEvent_ToCreateNetwork" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1h9kkhb" sourceRef="QueryNetworkTableRef_ServiceTask" targetRef="QueryNetworkSubnet_ServiceTask" />
     <bpmn2:sequenceFlow id="SequenceFlow_1oc7wcr" sourceRef="CatchEvent_Collect_AAI_Data" targetRef="QueryVpnBinding_ServiceTask" />
     <bpmn2:sequenceFlow id="SequenceFlow_1eqfh23" sourceRef="CatchEvent_Create_Network" targetRef="Create_Network_ServiceTask" />
     <bpmn2:serviceTask id="ServiceTask_get_cloud_region" name="Process cloud region by version&#10;" camunda:expression="${AssignNetworkBBUtils.getCloudRegion(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
       <bpmn2:outgoing>SequenceFlow_03ebe6c</bpmn2:outgoing>
     </bpmn2:serviceTask>
     <bpmn2:sequenceFlow id="SequenceFlow_03ebe6c" sourceRef="ServiceTask_get_cloud_region" targetRef="ThrowEvent_ToCollectAAIData" />
+    <bpmn2:serviceTask id="QueryNetworkSubnet_ServiceTask" name="&#10;AAI&#10;Query&#10;(subnet)&#10;" camunda:expression="${AAIQueryTasks.querySubnet(InjectExecution.execute(execution, execution.getVariable(&#34;gBuildingBlockExecution&#34;)))}">
+      <bpmn2:incoming>SequenceFlow_1h9kkhb</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_04w6hdq</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_04w6hdq" sourceRef="QueryNetworkSubnet_ServiceTask" targetRef="ThrowEvent_ToCreateNetwork" />
   </bpmn2:process>
   <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
   <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNShape id="IntermediateThrowEvent_04qwhex_di" bpmnElement="ThrowEvent_ToCreateNetwork">
-        <dc:Bounds x="827" y="113" width="36" height="36" />
+        <dc:Bounds x="972" y="113" width="36" height="36" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="868" y="125" width="89" height="24" />
+          <dc:Bounds x="1015" y="125" width="86" height="24" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNShape>
       <bpmndi:BPMNEdge id="SequenceFlow_1h9kkhb_di" bpmnElement="SequenceFlow_1h9kkhb">
         <di:waypoint xsi:type="dc:Point" x="763" y="131" />
-        <di:waypoint xsi:type="dc:Point" x="827" y="131" />
+        <di:waypoint xsi:type="dc:Point" x="818" y="131" />
         <bpmndi:BPMNLabel>
-          <dc:Bounds x="795" y="116" width="0" height="0" />
+          <dc:Bounds x="745.5" y="116" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
       <bpmndi:BPMNEdge id="SequenceFlow_1oc7wcr_di" bpmnElement="SequenceFlow_1oc7wcr">
           <dc:Bounds x="551" y="-52" width="90" height="0" />
         </bpmndi:BPMNLabel>
       </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_0j3odqk_di" bpmnElement="QueryNetworkSubnet_ServiceTask">
+        <dc:Bounds x="818" y="91" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_04w6hdq_di" bpmnElement="SequenceFlow_04w6hdq">
+        <di:waypoint xsi:type="dc:Point" x="918" y="131" />
+        <di:waypoint xsi:type="dc:Point" x="972" y="131" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="945" y="110" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
     </bpmndi:BPMNPlane>
   </bpmndi:BPMNDiagram>
 </bpmn2:definitions>
index e207bb9..0aba1cc 100644 (file)
@@ -35,7 +35,7 @@ public class CreateNetworkBBTest extends BaseBPMNTest{
 
         ProcessInstance pi = runtimeService.startProcessInstanceByKey("CreateNetworkBB",variables);
         assertThat(pi).isNotNull();
-        assertThat(pi).isStarted().hasPassedInOrder("createNetwork_startEvent", "ServiceTask_get_cloud_region", "QueryVpnBinding_ServiceTask", "QueryNetworkPolicy_ServiceTask", "QueryNetworkTableRef_ServiceTask", "Create_Network_ServiceTask", "Update_Network_AAI_ServiceTask", "createNetwork_EndEvent");     
+        assertThat(pi).isStarted().hasPassedInOrder("createNetwork_startEvent", "ServiceTask_get_cloud_region", "QueryVpnBinding_ServiceTask", "QueryNetworkPolicy_ServiceTask", "QueryNetworkTableRef_ServiceTask", "QueryNetworkSubnet_ServiceTask", "Create_Network_ServiceTask", "Update_Network_AAI_ServiceTask", "createNetwork_EndEvent");     
         assertThat(pi).isEnded();
     }
 
index 0079b35..46ff849 100644 (file)
@@ -29,6 +29,7 @@ import org.modelmapper.PropertyMap;
 import org.onap.aai.domain.yang.NetworkPolicy;
 import org.onap.aai.domain.yang.RouteTableReference;
 import org.onap.aai.domain.yang.RouteTargets;
+import org.onap.aai.domain.yang.Subnet;
 import org.onap.aai.domain.yang.VpnBinding;
 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
 import org.onap.so.bpmn.common.BuildingBlockExecution;
@@ -222,4 +223,28 @@ public class AAIQueryTasks {
                }
                return mappedRouteTargets;
        }
+       
+       public void querySubnet(BuildingBlockExecution execution) {
+               try {
+                       L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID,
+                                       execution.getLookupMap().get(ResourceKey.NETWORK_ID));
+                       AAIResultWrapper aaiResultWrapper = aaiNetworkResources.queryNetworkWrapperById(l3network);
+                       Optional<Relationships> networkRelationships = aaiResultWrapper.getRelationships();
+                       if (!networkRelationships.isPresent()) {
+                               throw (new Exception(ERROR_MSG));
+                       }
+                       List<AAIResourceUri> subnetsUriList = networkRelationships.get().getRelatedAAIUris(AAIObjectType.SUBNET);
+                       
+                       if(!subnetsUriList.isEmpty()) {
+                               for(AAIResourceUri subnetUri : subnetsUriList) {
+                                       Optional<Subnet> oSubnet = aaiNetworkResources.getSubnet(subnetUri);
+                                       if(oSubnet.isPresent()) {
+                                               l3network.getSubnets().add(modelMapper.map(oSubnet.get(), org.onap.so.bpmn.servicedecomposition.bbobjects.Subnet.class));
+                                       }
+                               }
+                       }
+               } catch(Exception ex) {
+                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, ex);
+               }
+       }
 }
\ No newline at end of file
index 4abb0a1..3081ab8 100644 (file)
@@ -260,6 +260,7 @@ public class NetworkAdapterObjectMapper {
                                    map(source.getGatewayAddress(), destination.getGatewayIp());
                                    map(source.getIpVersion(), destination.getIpVersion());
                                    map(source.isDhcpEnabled(), destination.getEnableDHCP());
+                                   map(source.getSubnetSequence(), destination.getSubnetSequence());
                                  }
                                };
                        modelMapper.addMappings(personMap);
index 16d5e8e..d2bf95a 100644 (file)
@@ -84,6 +84,10 @@ public class AAINetworkResources {
        public Optional<NetworkPolicy> getNetworkPolicy(AAIResourceUri netPolicyUri) {
                return injectionHelper.getAaiClient().get(netPolicyUri).asBean(NetworkPolicy.class);
        }
+       
+       public Optional<org.onap.aai.domain.yang.Subnet> getSubnet(AAIResourceUri subnetUri) {
+               return injectionHelper.getAaiClient().get(subnetUri).asBean(org.onap.aai.domain.yang.Subnet.class);
+       }
 
        public Optional<RouteTableReference> getRouteTable(AAIResourceUri rTableUri) {
                return injectionHelper.getAaiClient().get(rTableUri).asBean(RouteTableReference.class);
index 6b33440..2efdbde 100644 (file)
@@ -340,4 +340,21 @@ public class AAINetworkResourcesTest extends TestDataSetup{
                                eq(AAIUriFactory.createResourceUri(AAIObjectType.CLOUD_REGION, cloudRegion.getCloudOwner(), cloudRegion.getLcpCloudRegionId())),
                                eq(AAIEdgeLabel.USES));
        }
+       
+       @Test
+       public void getSubnetTest() throws Exception {
+               final String content = new String(Files.readAllBytes(Paths.get(JSON_FILE_LOCATION + "aaiSubnetsMapped_to_aai.json")));
+               AAIResultWrapper aaiResultWrapper = new AAIResultWrapper(content);
+               Optional<org.onap.aai.domain.yang.Subnet> oSubnet = Optional.empty();
+               AAIResourceUri subnetUri = AAIUriFactory.createResourceUri(AAIObjectType.SUBNET, "ModelInvariantUUID", "serviceModelVersionId");
+               
+               doReturn(aaiResultWrapper).when(MOCK_aaiResourcesClient).get(isA(AAIResourceUri.class));
+               oSubnet = aaiNetworkResources.getSubnet(subnetUri);
+               verify(MOCK_aaiResourcesClient, times(1)).get(any(AAIResourceUri.class));
+               
+               if (oSubnet.isPresent()) {
+                       org.onap.aai.domain.yang.Subnet subnet = oSubnet.get();
+                       assertThat(aaiResultWrapper.asBean(org.onap.aai.domain.yang.Subnet.class).get(), sameBeanAs(subnet));
+               }
+       }
 }