Drools-App changes to support CQ 75/84975/3
authorpramod.jamkhedkar <pramod@research.att.com>
Thu, 11 Apr 2019 01:22:01 +0000 (21:22 -0400)
committerpramod.jamkhedkar <pramod@research.att.com>
Thu, 11 Apr 2019 14:10:05 +0000 (10:10 -0400)
Changes in event manager to support Aai custom query

Issue-ID: POLICY-1278
Change-Id: I693dd6b94f1fa6f24b08a389db099914636cf2ba
Signed-off-by: pramod.jamkhedkar <pramod@research.att.com>
controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManager.java
controlloop/common/eventmanager/src/main/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManager.java
controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopEventManagerTest.java
controlloop/common/eventmanager/src/test/java/org/onap/policy/controlloop/eventmanager/ControlLoopOperationManagerTest.java
controlloop/common/eventmanager/src/test/resources/AaiCqResponse.json [new file with mode: 0644]
controlloop/common/feature-controlloop-management/src/main/feature/config/controlloop.properties.environment

index bfb8c13..edee4c2 100644 (file)
@@ -31,7 +31,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.NoSuchElementException;
 import java.util.UUID;
-
+import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.aai.AaiGetVnfResponse;
 import org.onap.policy.aai.AaiGetVserverResponse;
 import org.onap.policy.aai.AaiManager;
@@ -82,8 +82,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
     private static final String QUERY_AAI_ERROR_MSG = "Exception from queryAai: ";
 
     /**
-     * Additional time, in seconds, to add to a "lock" request. This ensures that the lock
-     * won't expire right before an operation completes.
+     * Additional time, in seconds, to add to a "lock" request. This ensures that the lock won't expire right before an
+     * operation completes.
      */
     private static final int ADDITIONAL_LOCK_SEC = 60;
 
@@ -111,8 +111,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
     private boolean useTargetLock = true;
 
     /**
-     * Wrapper for AAI vserver named-query response. This is initialized in a lazy
-     * fashion.
+     * Wrapper for AAI vserver named-query response. This is initialized in a lazy fashion.
      */
     private AaiNqResponseWrapper nqVserverResponse = null;
 
@@ -305,8 +304,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
     /**
      * Check if the control loop is final.
      *
-     * @return a VirtualControlLoopNotification if the control loop is final, otherwise
-     *         <code>null</code> is returned
+     * @return a VirtualControlLoopNotification if the control loop is final, otherwise <code>null</code> is returned
      * @throws ControlLoopException if an error occurs
      */
     public VirtualControlLoopNotification isControlLoopFinal() throws ControlLoopException {
@@ -496,8 +494,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
         //
         if (!this.useTargetLock) {
             TargetLock lock = PolicyGuard.createTargetLock(this.currentOperation.policy.getTarget().getType(),
-                                                           this.currentOperation.getTargetEntity(),
-                                                           this.onset.getRequestId(), this);
+                    this.currentOperation.getTargetEntity(), this.onset.getRequestId(), this);
             this.targetLock = lock;
             return LockResult.createLockResult(GuardResult.LOCK_ACQUIRED, lock);
         }
@@ -510,16 +507,15 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
             // Currently, it should be. But in the future it may not.
             //
             GuardResult result = PolicyGuard.lockTarget(targetLock,
-                            this.currentOperation.getOperationTimeout() + ADDITIONAL_LOCK_SEC);
+                    this.currentOperation.getOperationTimeout() + ADDITIONAL_LOCK_SEC);
             return new LockResult<>(result, this.targetLock);
         } else {
             //
             // Ask the Guard
             //
-            LockResult<GuardResult, TargetLock> lockResult =
-                    PolicyGuard.lockTarget(this.currentOperation.policy.getTarget().getType(),
-                            this.currentOperation.getTargetEntity(), this.onset.getRequestId(), this,
-                            this.currentOperation.getOperationTimeout() + ADDITIONAL_LOCK_SEC);
+            LockResult<GuardResult, TargetLock> lockResult = PolicyGuard.lockTarget(
+                    this.currentOperation.policy.getTarget().getType(), this.currentOperation.getTargetEntity(),
+                    this.onset.getRequestId(), this, this.currentOperation.getOperationTimeout() + ADDITIONAL_LOCK_SEC);
             //
             // Was it acquired?
             //
@@ -637,13 +633,13 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
             return;
         }
         try {
-            this.lastOperationManager.commitAbatement(message,outcome);          
+            this.lastOperationManager.commitAbatement(message, outcome);
         } catch (NoSuchElementException e) {
             logger.error("{}: commitAbatement threw an exception ", this, e);
         }
     }
 
-    
+
     /**
      * Set the control loop time out.
      *
@@ -775,8 +771,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
      * Process a response from A&AI for a VNF.
      *
      * @param aaiResponse the response from A&AI
-     * @param queryByVnfId <code>true</code> if the query was based on vnf-id,
-     *        <code>false</code> if the query was based on vnf-name
+     * @param queryByVnfId <code>true</code> if the query was based on vnf-id, <code>false</code> if the query was based
+     *        on vnf-name
      * @throws AaiException if an error occurs processing the response
      */
     private static void processVnfResponse(AaiGetVnfResponse aaiResponse, boolean queryByVnfId) throws AaiException {
@@ -831,38 +827,35 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
      * Is closed loop disabled for an event.
      *
      * @param event the event
-     * @return <code>true</code> if the control loop is disabled, <code>false</code>
-     *         otherwise
+     * @return <code>true</code> if the control loop is disabled, <code>false</code> otherwise
      */
     public static boolean isClosedLoopDisabled(VirtualControlLoopEvent event) {
         Map<String, String> aai = event.getAai();
         return (isAaiTrue(aai.get(VSERVER_IS_CLOSED_LOOP_DISABLED))
-                        || isAaiTrue(aai.get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)));
+                || isAaiTrue(aai.get(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)));
     }
 
     /**
      * Does provisioning status, for an event, have a value other than ACTIVE.
      *
      * @param event the event
-     * @return {@code true} if the provisioning status is neither ACTIVE nor {@code null},
-     *         {@code false} otherwise
+     * @return {@code true} if the provisioning status is neither ACTIVE nor {@code null}, {@code false} otherwise
      */
     protected static boolean isProvStatusInactive(VirtualControlLoopEvent event) {
         Map<String, String> aai = event.getAai();
         return (!PROV_STATUS_ACTIVE.equals(aai.getOrDefault(VSERVER_PROV_STATUS, PROV_STATUS_ACTIVE))
-                        || !PROV_STATUS_ACTIVE.equals(aai.getOrDefault(GENERIC_VNF_PROV_STATUS, PROV_STATUS_ACTIVE)));
+                || !PROV_STATUS_ACTIVE.equals(aai.getOrDefault(GENERIC_VNF_PROV_STATUS, PROV_STATUS_ACTIVE)));
     }
 
     /**
      * Determines the boolean value represented by the given AAI field value.
      *
      * @param aaiValue value to be examined
-     * @return the boolean value represented by the field value, or {@code false} if the
-     *         value is {@code null}
+     * @return the boolean value represented by the field value, or {@code false} if the value is {@code null}
      */
     protected static boolean isAaiTrue(String aaiValue) {
         return ("true".equalsIgnoreCase(aaiValue) || "T".equalsIgnoreCase(aaiValue) || "yes".equalsIgnoreCase(aaiValue)
-                        || "Y".equalsIgnoreCase(aaiValue));
+                || "Y".equalsIgnoreCase(aaiValue));
     }
 
     /**
@@ -937,6 +930,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
 
     /**
      * Gets the output from the AAI vserver named-query, using the cache, if appropriate.
+     *
      * @return output from the AAI vserver named-query
      */
     public AaiNqResponseWrapper getNqVserverFromAai() {
@@ -976,7 +970,7 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
         }
 
         AaiNqResponse aaiNqResponse = new AaiManager(new RestManager()).postQuery(getPeManagerEnvProperty(AAI_URL),
-                getPeManagerEnvProperty(AAI_USERNAME_PROPERTY), getPeManagerEnvProperty(AAI_PASS_PROPERTY), 
+                getPeManagerEnvProperty(AAI_USERNAME_PROPERTY), getPeManagerEnvProperty(AAI_PASS_PROPERTY),
                 aaiNqRequest, onset.getRequestId());
 
         // Check AAI response
@@ -997,8 +991,8 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
     }
 
     /**
-     * This method reads and validates environmental properties coming from the policy engine. Null
-     * properties cause an {@link IllegalArgumentException} runtime exception to be thrown
+     * This method reads and validates environmental properties coming from the policy engine. Null properties cause an
+     * {@link IllegalArgumentException} runtime exception to be thrown
      *
      * @param enginePropertyName the name of the parameter to retrieve
      * @return the property value
@@ -1032,4 +1026,40 @@ public class ControlLoopEventManager implements LockCallback, Serializable {
                 + ", currentOperation=" + currentOperation + ", targetLock=" + targetLock + "]";
     }
 
+    /**
+     * This function calls Aai Custom Query and responds with the AaiCqResponse.
+     *
+     * @param event input event
+     * @return AaiCqResponse Response from Aai for custom query
+     * @throws AaiException if error occurs
+     */
+    public AaiCqResponse getCqResponse(VirtualControlLoopEvent event) throws AaiException {
+
+        Map<String, String> aai = event.getAai();
+
+        if (aai.containsKey(VSERVER_IS_CLOSED_LOOP_DISABLED) || aai.containsKey(GENERIC_VNF_IS_CLOSED_LOOP_DISABLED)) {
+
+            if (isClosedLoopDisabled(event)) {
+                throw new AaiException("is-closed-loop-disabled is set to true on VServer or VNF");
+            }
+
+            if (isProvStatusInactive(event)) {
+                throw new AaiException("prov-status is not ACTIVE on VServer or VNF");
+            }
+        }
+
+        UUID reqId = event.getRequestId();
+        AaiCqResponse response = null;
+        String vserverId = event.getAai().get(VSERVER_VSERVER_NAME);
+
+        String aaiHostUrl = PolicyEngine.manager.getEnvironmentProperty(AAI_URL);
+        String aaiUser = PolicyEngine.manager.getEnvironmentProperty(AAI_USERNAME_PROPERTY);
+        String aaiPassword = PolicyEngine.manager.getEnvironmentProperty(AAI_PASS_PROPERTY);
+
+        response = new AaiManager(new RestManager()).getCustomQueryResponse(aaiHostUrl, aaiUser, aaiPassword, reqId,
+                vserverId);
+        return response;
+
+    }
+
 }
index 7bd0a0e..9cd2fb3 100644 (file)
@@ -33,6 +33,7 @@ import java.util.Properties;
 import javax.persistence.EntityManager;
 import javax.persistence.Persistence;
 import org.eclipse.persistence.config.PersistenceUnitProperties;
+import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.policy.aai.util.AaiException;
 import org.onap.policy.appc.Response;
 import org.onap.policy.appc.ResponseCode;
@@ -110,14 +111,25 @@ public class ControlLoopOperationManager implements Serializable {
             case "APPC":
                 if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
                     /*
-                     * The target vnf-id may not be the same as the source vnf-id specified in the
-                     * yaml, the target vnf-id is retrieved by a named query to A&AI.
+                     * The target vnf-id may not be the same as the source vnf-id specified in the yaml, the target
+                     * vnf-id is retrieved by a named query to A&AI.
                      */
-                    String targetVnf = AppcLcmActorServiceProvider.vnfNamedQuery(policy.getTarget().getResourceID(),
-                            this.targetEntity, PolicyEngine.manager.getEnvironmentProperty("aai.url"),
-                            PolicyEngine.manager.getEnvironmentProperty("aai.username"),
-                            PolicyEngine.manager.getEnvironmentProperty("aai.password"));
-                    this.targetEntity = targetVnf;
+                    if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty("aai.customQuery"))) {
+                        GenericVnf genvnf = this.eventManager.getCqResponse((VirtualControlLoopEvent) onset)
+                                .getGenericVnfByModelInvariantId(policy.getTarget().getResourceID());
+                        if (genvnf == null) {
+                            logger.info("Target entity could not be found");
+                            throw new AaiException("Target vnf-id could not be found");
+                        }
+                        this.targetEntity = genvnf.getVnfId();
+
+                    } else {
+                        this.targetEntity =
+                                AppcLcmActorServiceProvider.vnfNamedQuery(policy.getTarget().getResourceID(),
+                                        this.targetEntity, PolicyEngine.manager.getEnvironmentProperty("aai.url"),
+                                        PolicyEngine.manager.getEnvironmentProperty("aai.username"),
+                                        PolicyEngine.manager.getEnvironmentProperty("aai.password"));
+                    }
                 }
                 break;
             case "SO":
@@ -133,6 +145,7 @@ public class ControlLoopOperationManager implements Serializable {
         }
     }
 
+
     public ControlLoopEventManager getEventManager() {
         return eventManager;
     }
@@ -218,10 +231,16 @@ public class ControlLoopOperationManager implements Serializable {
                     }
 
                     /*
-                     * If the vnf-name was retrieved from the onset then the vnf-id must be obtained
-                     * from the event manager's A&AI GET query
+                     * If the vnf-name was retrieved from the onset then the vnf-id must be obtained from the event
+                     * manager's A&AI GET query
                      */
-                    String vnfId = this.eventManager.getVnfResponse().getVnfId();
+                    String vnfId;
+                    if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty("aai.customQuery"))) {
+                        vnfId = this.eventManager.getCqResponse((VirtualControlLoopEvent) onset).getDefaultGenericVnf()
+                                .getVnfId();
+                    } else {
+                        vnfId = this.eventManager.getVnfResponse().getVnfId();
+                    }
                     if (vnfId == null) {
                         throw new AaiException("No vnf-id found");
                     }
@@ -243,10 +262,16 @@ public class ControlLoopOperationManager implements Serializable {
                     }
 
                     /*
-                     * If the vnf-name was retrieved from the onset then the vnf-id must be obtained
-                     * from the event manager's A&AI GET query
+                     * If the vnf-name was retrieved from the onset then the vnf-id must be obtained from the event
+                     * manager's A&AI GET query
                      */
-                    String vnfId = this.eventManager.getVnfResponse().getVnfId();
+                    String vnfId;
+                    if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty("aai.customQuery"))) {
+                        vnfId = this.eventManager.getCqResponse((VirtualControlLoopEvent) onset).getDefaultGenericVnf()
+                                .getVnfId();
+                    } else {
+                        vnfId = this.eventManager.getVnfResponse().getVnfId();
+                    }
                     if (vnfId == null) {
                         throw new AaiException("No vnf-id found");
                     }
@@ -264,8 +289,10 @@ public class ControlLoopOperationManager implements Serializable {
      * @param onset the onset event
      * @return the operation request
      * @throws ControlLoopException if an error occurs
+     * @throws AaiException if error occurs
      */
-    public Object startOperation(/* VirtualControlLoopEvent */ControlLoopEvent onset) throws ControlLoopException {
+    public Object startOperation(/* VirtualControlLoopEvent */ControlLoopEvent onset)
+            throws ControlLoopException, AaiException {
         verifyOperatonCanRun();
 
         //
@@ -284,8 +311,8 @@ public class ControlLoopOperationManager implements Serializable {
         switch (policy.getActor()) {
             case "APPC":
                 /*
-                 * If the recipe is ModifyConfig, a legacy APPC request is constructed. Otherwise an
-                 * LCMRequest is constructed.
+                 * If the recipe is ModifyConfig, a legacy APPC request is constructed. Otherwise an LCMRequest is
+                 * constructed.
                  */
                 this.currentOperation = operation;
                 if ("ModifyConfig".equalsIgnoreCase(policy.getRecipe())) {
@@ -302,8 +329,14 @@ public class ControlLoopOperationManager implements Serializable {
                 return operationRequest;
             case "SO":
                 SoActorServiceProvider soActorSp = new SoActorServiceProvider();
-                this.operationRequest = soActorSp.constructRequest((VirtualControlLoopEvent) onset,
-                                operation.clOperation, this.policy, eventManager.getNqVserverFromAai());
+                if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty("aai.customQuery"))) {
+                    this.operationRequest =
+                            soActorSp.constructRequestCq((VirtualControlLoopEvent) onset, operation.clOperation,
+                                    this.policy, eventManager.getCqResponse((VirtualControlLoopEvent) onset));
+                } else {
+                    this.operationRequest = soActorSp.constructRequest((VirtualControlLoopEvent) onset,
+                            operation.clOperation, this.policy, eventManager.getNqVserverFromAai());
+                }
 
                 // Save the operation
                 this.currentOperation = operation;
@@ -314,11 +347,17 @@ public class ControlLoopOperationManager implements Serializable {
 
                 return operationRequest;
             case "VFC":
-                this.operationRequest = VfcActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
-                        operation.clOperation, this.policy, this.eventManager.getVnfResponse(),
-                        PolicyEngine.manager.getEnvironmentProperty("vfc.url"),
-                        PolicyEngine.manager.getEnvironmentProperty("vfc.username"),
-                        PolicyEngine.manager.getEnvironmentProperty("vfc.password"));
+                if (Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty("aai.customQuery"))) {
+                    this.operationRequest = VfcActorServiceProvider.constructRequestCq((VirtualControlLoopEvent) onset,
+                            operation.clOperation, this.policy,
+                            eventManager.getCqResponse((VirtualControlLoopEvent) onset));
+                } else {
+                    this.operationRequest = VfcActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
+                            operation.clOperation, this.policy, this.eventManager.getVnfResponse(),
+                            PolicyEngine.manager.getEnvironmentProperty("vfc.url"),
+                            PolicyEngine.manager.getEnvironmentProperty("vfc.username"),
+                            PolicyEngine.manager.getEnvironmentProperty("vfc.password"));
+                }
                 this.currentOperation = operation;
                 if (this.operationRequest == null) {
                     this.policyResult = PolicyResult.FAILURE;
@@ -330,7 +369,7 @@ public class ControlLoopOperationManager implements Serializable {
                  */
                 this.currentOperation = operation;
                 this.operationRequest = SdnrActorServiceProvider.constructRequest((VirtualControlLoopEvent) onset,
-                            operation.clOperation, this.policy);
+                        operation.clOperation, this.policy);
                 //
                 // Save the operation
                 //
@@ -341,8 +380,8 @@ public class ControlLoopOperationManager implements Serializable {
                 return operationRequest;
             case "SDNC":
                 SdncActorServiceProvider provider = new SdncActorServiceProvider();
-                this.operationRequest = provider.constructRequest((VirtualControlLoopEvent) onset,
-                        operation.clOperation, this.policy);
+                this.operationRequest =
+                        provider.constructRequest((VirtualControlLoopEvent) onset, operation.clOperation, this.policy);
                 this.currentOperation = operation;
                 if (this.operationRequest == null) {
                     this.policyResult = PolicyResult.FAILURE;
index 7c3a38b..bce96b2 100644 (file)
@@ -43,6 +43,7 @@ import org.junit.BeforeClass;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
+import org.onap.policy.aai.AaiCqResponse;
 import org.onap.policy.aai.AaiGetVnfResponse;
 import org.onap.policy.aai.AaiGetVserverResponse;
 import org.onap.policy.aai.AaiNqRequestError;
@@ -80,6 +81,7 @@ public class ControlLoopEventManagerTest {
 
     private static final Logger logger = LoggerFactory.getLogger(ControlLoopEventManagerTest.class);
 
+
     @Rule
     public ExpectedException thrown = ExpectedException.none();
 
@@ -558,7 +560,7 @@ public class ControlLoopEventManagerTest {
 
         VirtualControlLoopNotification clfNotification = manager.isControlLoopFinal();
         assertNull(clfNotification);
-        
+
         // serialize and de-serialize manager
         manager = Serializer.roundTrip(manager);
 
@@ -632,7 +634,7 @@ public class ControlLoopEventManagerTest {
         ControlLoopOperationManager clom = manager.processControlLoop();
         assertNotNull(clom);
         assertNull(clom.getOperationResult());
-        
+
         // serialize and de-serialize manager
         manager = Serializer.roundTrip(manager);
 
@@ -724,7 +726,7 @@ public class ControlLoopEventManagerTest {
         }
 
         assertNull(manager.unlockCurrentOperation());
-        
+
         // serialize and de-serialize manager
         manager = Serializer.roundTrip(manager);
 
@@ -917,7 +919,7 @@ public class ControlLoopEventManagerTest {
         try {
             onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_IS_CLOSED_LOOP_DISABLED, Boolean.TRUE.toString());
             onset.getAai().put(ControlLoopEventManager.GENERIC_VNF_PROV_STATUS,
-                            ControlLoopEventManager.PROV_STATUS_ACTIVE);
+                    ControlLoopEventManager.PROV_STATUS_ACTIVE);
 
             mgr = makeManager(onset);
             mgr.queryAai(onset);
@@ -1290,6 +1292,23 @@ public class ControlLoopEventManagerTest {
         assertNull(manager.getNqVserverFromAai());
     }
 
+    @Test
+    public void testGetCqResponse() {
+        try {
+            ControlLoopEventManager mgr = null;
+            mgr = makeManager(onset);
+            mgr.queryAai(onset);
+            AaiCqResponse aaiCqResponse = mgr.getCqResponse(onset);
+            assertNotNull(aaiCqResponse);
+
+
+        } catch (Exception e) {
+            logger.error("testGetCqResponse Exception: ", e);
+            fail(e.getMessage());
+        }
+    }
+
+
     private ControlLoopEventManager makeManager(VirtualControlLoopEvent event) {
         return new ControlLoopEventManager(event.getClosedLoopControlName(), event.getRequestId());
     }
index 82da603..d722cc2 100644 (file)
@@ -7,9 +7,9 @@
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -119,7 +119,7 @@ public class ControlLoopOperationManagerTest {
         return numEvents;
     }
 
-    
+
     /**
      * Set up test class.
      */
@@ -131,7 +131,7 @@ public class ControlLoopOperationManagerTest {
         } catch (Exception e) {
             fail(e.getMessage());
         }
-        
+
         // Set PU
         System.setProperty("OperationsHistoryPU", "TestOperationsHistoryPU");
 
@@ -155,7 +155,7 @@ public class ControlLoopOperationManagerTest {
         emf.close();
         HttpServletServer.factory.destroy();
     }
-    
+
     @Test
     public void testRetriesFail() {
         //
@@ -479,8 +479,11 @@ public class ControlLoopOperationManagerTest {
 
         onsetEvent.getAai().remove("generic-vnf.vnf-id");
         manager.getVnfResponse();
-        clom.getEventManager().getVnfResponse().setVnfId("generic-vnf.vnf-id");
-        assertEquals("generic-vnf.vnf-id", clom.getTarget(policy));
+        if (!Boolean.valueOf(PolicyEngine.manager.getEnvironmentProperty("aai.customQuery"))) {
+            clom.getEventManager().getVnfResponse().setVnfId("generic-vnf.vnf-id");
+            assertEquals("generic-vnf.vnf-id", clom.getTarget(policy));
+        }
+
 
         policy.getTarget().setType(TargetType.VFC);
         try {
@@ -550,6 +553,7 @@ public class ControlLoopOperationManagerTest {
         clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
         assertNotNull(clom);
 
+
         policy.setActor("SO");
         clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
         assertNotNull(clom);
@@ -804,13 +808,13 @@ public class ControlLoopOperationManagerTest {
 
         System.setProperty("OperationsHistoryPU", "TestOperationsHistoryPU");
         assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
-    }    
+    }
 
     @Test
     public void testCommitAbatement() throws ControlLoopException, AaiException, IOException {
 
         String yamlString = null;
-        try ( InputStream is = new FileInputStream(new File("src/test/resources/test.yaml")) ) {
+        try (InputStream is = new FileInputStream(new File("src/test/resources/test.yaml"))) {
             yamlString = IOUtils.toString(is, StandardCharsets.UTF_8);
         } catch (Exception e) {
             fail(e.getMessage());
@@ -835,19 +839,19 @@ public class ControlLoopOperationManagerTest {
         Policy policy = manager.getProcessor().getCurrentPolicy();
         ControlLoopOperationManager clom = new ControlLoopOperationManager(onsetEvent, policy, manager);
         assertNotNull(clom);
-        
+
         clom.startOperation(onsetEvent);
 
         int numEventsBefore = getCount();
-        logger.info("numEventsBefore={}", numEventsBefore); 
-        
-        clom.commitAbatement("Test message","TEST_RESULT");
+        logger.info("numEventsBefore={}", numEventsBefore);
+
+        clom.commitAbatement("Test message", "TEST_RESULT");
 
         int numEventsAfter = getCount();
-        logger.info("numEventsAfter={}", numEventsAfter); 
-        
-        assertEquals(1, numEventsAfter - numEventsBefore);        
-    }    
+        logger.info("numEventsAfter={}", numEventsAfter);
+
+        assertEquals(1, numEventsAfter - numEventsBefore);
+    }
 
     @Test
     public void testSerialization() throws Exception {
@@ -876,7 +880,7 @@ public class ControlLoopOperationManagerTest {
 
         clom.startOperation(onsetEvent);
         assertTrue(clom.isOperationRunning());
-        
+
         clom = Serializer.roundTrip(clom);
         assertNotNull(clom);
         assertTrue(clom.isOperationRunning());
@@ -893,7 +897,7 @@ public class ControlLoopOperationManagerTest {
         assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
         assertFalse(clom.isOperationRunning());
         assertEquals(1, clom.getHistory().size());
-        
+
         clom = Serializer.roundTrip(clom);
         assertNotNull(clom);
         assertFalse(clom.isOperationRunning());
@@ -901,7 +905,7 @@ public class ControlLoopOperationManagerTest {
 
         System.setProperty("OperationsHistoryPU", "TestOperationsHistoryPU");
         assertEquals(PolicyResult.FAILURE, clom.onResponse(soRw));
-        
+
         clom = Serializer.roundTrip(clom);
         assertNotNull(clom);
         assertFalse(clom.isOperationRunning());
diff --git a/controlloop/common/eventmanager/src/test/resources/AaiCqResponse.json b/controlloop/common/eventmanager/src/test/resources/AaiCqResponse.json
new file mode 100644 (file)
index 0000000..63d6f79
--- /dev/null
@@ -0,0 +1,673 @@
+{
+    "results": [
+        {
+            "vserver": {
+                "vserver-id": "e7f1db09-ff78-44fc-b256-69095c5556fb",
+                "vserver-name": "vfw-vm-0201-2",
+                "vserver-name2": "vfw-vm-0201-2",
+                "prov-status": "ACTIVE",
+                "vserver-selflink": "http://ecompctl1.research.att.com:8774/v2/3f2aaef74ecb4b19b35e26d0849fe9a2/servers/e7f1db09-ff78-44fc-b256-69095c5556fb",
+                "in-maint": false,
+                "is-closed-loop-disabled": false,
+                "resource-version": "1549553422524",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "generic-vnf",
+                            "related-link": "/aai/v11/network/generic-vnfs/generic-vnf/17044ef4-e7f3-46a1-af03-e2aa562f23ac",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "generic-vnf.vnf-id",
+                                    "relationship-value": "17044ef4-e7f3-46a1-af03-e2aa562f23ac"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "generic-vnf.vnf-name",
+                                    "property-value": "TestVM-Vnf-0201-1"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "vnfc",
+                            "related-link": "/aai/v11/network/vnfcs/vnfc/vfw",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "vnfc.vnfc-name",
+                                    "relationship-value": "vfw"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "vf-module",
+                            "related-link": "/aai/v11/network/generic-vnfs/generic-vnf/17044ef4-e7f3-46a1-af03-e2aa562f23ac/vf-modules/vf-module/33f9e03d-2fbd-4e9c-8e73-ce6b12f0b3d2",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "generic-vnf.vnf-id",
+                                    "relationship-value": "17044ef4-e7f3-46a1-af03-e2aa562f23ac"
+                        },
+                                {
+                                    "relationship-key": "vf-module.vf-module-id",
+                                    "relationship-value": "33f9e03d-2fbd-4e9c-8e73-ce6b12f0b3d2"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "flavor",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/2",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionOne"
+                        },
+                                {
+                                    "relationship-key": "flavor.flavor-id",
+                                    "relationship-value": "2"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "flavor.flavor-name",
+                                    "property-value": "m1.small"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "image",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/84be7136-301f-4f47-9585-3a2e0f9534af",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionOne"
+                        },
+                                {
+                                    "relationship-key": "image.image-id",
+                                    "relationship-value": "84be7136-301f-4f47-9585-3a2e0f9534af"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "image.image-name",
+                                    "property-value": "unknown"
+                        }
+                     ]
+                  }
+               ]
+                }
+            }
+      },
+        {
+            "generic-vnf": {
+                "vnf-id": "7b202620-2936-4b0d-b09c-60b411f10f64",
+                "vnf-name": "vLoadBalancerMS-Vnf-0211-1",
+                "vnf-type": "vLoadBalancerMS/vLoadBalancerMS 0",
+                "prov-status": "ACTIVE",
+                "equipment-role": "vLB",
+                "orchestration-status": "Active",
+                "ipv4-oam-address": "10.0.150.1",
+                "in-maint": true,
+                "is-closed-loop-disabled": false,
+                "resource-version": "1552311656338",
+                "model-invariant-id": "724ab1cf-6120-49e8-b909-849963bed1d6",
+                "model-version-id": "9d5944d8-2267-4799-824a-0f824e9a978d",
+                "model-customization-id": "efcd576d-a05e-4798-bb68-79e7d9c80f4c",
+                "nf-type": "ONAP-LOADBALANCER",
+                "nf-function": "LOADBALANCER",
+                "nf-role": "vLB",
+                "nf-naming-code": "vlb",
+                "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/101b8fc1-1796-4db1-a4e7-fe39c6a51558/service-data/vnfs/vnf/7b202620-2936-4b0d-b09c-60b411f10f64/vnf-data/vnf-topology/",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "service-instance",
+                            "related-link": "/aai/v11/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vLB/service-instances/service-instance/101b8fc1-1796-4db1-a4e7-fe39c6a51558",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "customer.global-customer-id",
+                                    "relationship-value": "Demonstration"
+                        },
+                                {
+                                    "relationship-key": "service-subscription.service-type",
+                                    "relationship-value": "vLB"
+                        },
+                                {
+                                    "relationship-key": "service-instance.service-instance-id",
+                                    "relationship-value": "101b8fc1-1796-4db1-a4e7-fe39c6a51558"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "service-instance.service-instance-name",
+                                    "property-value": "vLoadBalancerMS-0211-1"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "platform",
+                            "related-link": "/aai/v11/business/platforms/platform/Test-Platform",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "platform.platform-name",
+                                    "relationship-value": "Test-Platform"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "line-of-business",
+                            "related-link": "/aai/v11/business/lines-of-business/line-of-business/Test-Business",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "line-of-business.line-of-business-name",
+                                    "relationship-value": "Test-Business"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "vserver",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3f2aaef74ecb4b19b35e26d0849fe9a2/vservers/vserver/58ca8df0-17b8-4aa2-8766-9c6c1a12cec8",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionOne"
+                        },
+                                {
+                                    "relationship-key": "tenant.tenant-id",
+                                    "relationship-value": "3f2aaef74ecb4b19b35e26d0849fe9a2"
+                        },
+                                {
+                                    "relationship-key": "vserver.vserver-id",
+                                    "relationship-value": "58ca8df0-17b8-4aa2-8766-9c6c1a12cec8"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "vserver.vserver-name",
+                                    "property-value": "vdns-ms-0211-1"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "vserver",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3f2aaef74ecb4b19b35e26d0849fe9a2/vservers/vserver/6c3b3714-e36c-45af-9f16-7d3a73d99497",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionOne"
+                        },
+                                {
+                                    "relationship-key": "tenant.tenant-id",
+                                    "relationship-value": "3f2aaef74ecb4b19b35e26d0849fe9a2"
+                        },
+                                {
+                                    "relationship-key": "vserver.vserver-id",
+                                    "relationship-value": "6c3b3714-e36c-45af-9f16-7d3a73d99497"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "vserver.vserver-name",
+                                    "property-value": "vlb-ms-0211-1"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "availability-zone",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/nova",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionOne"
+                        },
+                                {
+                                    "relationship-key": "availability-zone.availability-zone-name",
+                                    "relationship-value": "nova"
+                        }
+                     ]
+                  }
+               ]
+                },
+                "vf-modules": {
+                    "vf-module": [
+                        {
+                            "vf-module-id": "e46c6636-9ce5-4b77-bb1b-455ce9edc892",
+                            "vf-module-name": "vLoadBalancerMS-0211-1",
+                            "heat-stack-id": "vLoadBalancerMS-0211-1/73360253-2dfe-46f6-bcd6-8662a81238ea",
+                            "orchestration-status": "Active",
+                            "is-base-vf-module": true,
+                            "resource-version": "1552311559802",
+                            "model-invariant-id": "d263fc6d-cfce-4e20-8337-e06f48b474e6",
+                            "model-version-id": "24c0aa10-3979-402c-ad98-20124751b551",
+                            "model-customization-id": "65382eb1-db84-466c-b9d7-4e0f1ba7105f",
+                            "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/101b8fc1-1796-4db1-a4e7-fe39c6a51558/service-data/vnfs/vnf/7b202620-2936-4b0d-b09c-60b411f10f64/vnf-data/vf-modules/vf-module/e46c6636-9ce5-4b77-bb1b-455ce9edc892/vf-module-data/vf-module-topology/",
+                            "relationship-list": {
+                                "relationship": [
+                                    {
+                                        "related-to": "vserver",
+                                        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3f2aaef74ecb4b19b35e26d0849fe9a2/vservers/vserver/58ca8df0-17b8-4aa2-8766-9c6c1a12cec8",
+                                        "relationship-data": [
+                                            {
+                                                "relationship-key": "cloud-region.cloud-owner",
+                                                "relationship-value": "CloudOwner"
+                                 },
+                                            {
+                                                "relationship-key": "cloud-region.cloud-region-id",
+                                                "relationship-value": "RegionOne"
+                                 },
+                                            {
+                                                "relationship-key": "tenant.tenant-id",
+                                                "relationship-value": "3f2aaef74ecb4b19b35e26d0849fe9a2"
+                                 },
+                                            {
+                                                "relationship-key": "vserver.vserver-id",
+                                                "relationship-value": "58ca8df0-17b8-4aa2-8766-9c6c1a12cec8"
+                                 }
+                              ],
+                                        "related-to-property": [
+                                            {
+                                                "property-key": "vserver.vserver-name",
+                                                "property-value": "vdns-ms-0211-1"
+                                 }
+                              ]
+                           },
+                                    {
+                                        "related-to": "vserver",
+                                        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3f2aaef74ecb4b19b35e26d0849fe9a2/vservers/vserver/6c3b3714-e36c-45af-9f16-7d3a73d99497",
+                                        "relationship-data": [
+                                            {
+                                                "relationship-key": "cloud-region.cloud-owner",
+                                                "relationship-value": "CloudOwner"
+                                 },
+                                            {
+                                                "relationship-key": "cloud-region.cloud-region-id",
+                                                "relationship-value": "RegionOne"
+                                 },
+                                            {
+                                                "relationship-key": "tenant.tenant-id",
+                                                "relationship-value": "3f2aaef74ecb4b19b35e26d0849fe9a2"
+                                 },
+                                            {
+                                                "relationship-key": "vserver.vserver-id",
+                                                "relationship-value": "6c3b3714-e36c-45af-9f16-7d3a73d99497"
+                                 }
+                              ],
+                                        "related-to-property": [
+                                            {
+                                                "property-key": "vserver.vserver-name",
+                                                "property-value": "vlb-ms-0211-1"
+                                 }
+                              ]
+                           }
+                        ]
+                            }
+                  }
+               ]
+                }
+            }
+      },
+        {
+            "service-instance": {
+                "service-instance-id": "101b8fc1-1796-4db1-a4e7-fe39c6a51558",
+                "service-instance-name": "vLoadBalancerMS-0211-1",
+                "environment-context": "General_Revenue-Bearing",
+                "workload-context": "Production",
+                "model-invariant-id": "1008a768-1b67-407e-88c6-58c82b34ef42",
+                "model-version-id": "81f8c1cd-f664-4450-b3a4-be645613ab32",
+                "resource-version": "1552311350334",
+                "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/101b8fc1-1796-4db1-a4e7-fe39c6a51558/service-data/service-topology/",
+                "orchestration-status": "Active",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "project",
+                            "related-link": "/aai/v11/business/projects/project/Test-Project",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "project.project-name",
+                                    "relationship-value": "Test-Project"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "generic-vnf",
+                            "related-link": "/aai/v11/network/generic-vnfs/generic-vnf/7b202620-2936-4b0d-b09c-60b411f10f64",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "generic-vnf.vnf-id",
+                                    "relationship-value": "7b202620-2936-4b0d-b09c-60b411f10f64"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "generic-vnf.vnf-name",
+                                    "property-value": "vLoadBalancerMS-Vnf-0211-1"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "owning-entity",
+                            "related-link": "/aai/v11/business/owning-entities/owning-entity/bb94a687-4f3b-40a3-914e-e98037d5ebd2",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "owning-entity.owning-entity-id",
+                                    "relationship-value": "bb94a687-4f3b-40a3-914e-e98037d5ebd2"
+                        }
+                     ]
+                  }
+               ]
+                }
+            }
+      },
+        {
+            "generic-vnf": {
+                "vnf-id": "17044ef4-e7f3-46a1-af03-e2aa562f23ac",
+                "vnf-name": "TestVM-Vnf-0201-1",
+                "vnf-type": "TestVM/TestVM 0",
+                "prov-status": "ACTIVE",
+                "equipment-role": "",
+                "orchestration-status": "Active",
+                "ipv4-oam-address": "10.0.70.1",
+                "in-maint": true,
+                "is-closed-loop-disabled": false,
+                "resource-version": "1549041636264",
+                "model-invariant-id": "6a4d7971-0778-4655-9eab-9d6031c7ad57",
+                "model-version-id": "fb6c673c-e5b6-4e0a-9baf-5e0089784de9",
+                "model-customization-id": "706a3100-dbe5-442e-86c3-c7b823abbec2",
+                "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/d41f8217-d464-4458-bf0a-fba33a0f1b31/service-data/vnfs/vnf/17044ef4-e7f3-46a1-af03-e2aa562f23ac/vnf-data/vnf-topology/",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "service-instance",
+                            "related-link": "/aai/v11/business/customers/customer/Demonstration/service-subscriptions/service-subscription/vFW/service-instances/service-instance/d41f8217-d464-4458-bf0a-fba33a0f1b31",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "customer.global-customer-id",
+                                    "relationship-value": "Demonstration"
+                        },
+                                {
+                                    "relationship-key": "service-subscription.service-type",
+                                    "relationship-value": "vFW"
+                        },
+                                {
+                                    "relationship-key": "service-instance.service-instance-id",
+                                    "relationship-value": "d41f8217-d464-4458-bf0a-fba33a0f1b31"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "service-instance.service-instance-name",
+                                    "property-value": "TestVM-Service-0201-1"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "platform",
+                            "related-link": "/aai/v11/business/platforms/platform/Test-Platform",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "platform.platform-name",
+                                    "relationship-value": "Test-Platform"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "line-of-business",
+                            "related-link": "/aai/v11/business/lines-of-business/line-of-business/Test-Business",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "line-of-business.line-of-business-name",
+                                    "relationship-value": "Test-Business"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "vserver",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3f2aaef74ecb4b19b35e26d0849fe9a2/vservers/vserver/e7f1db09-ff78-44fc-b256-69095c5556fb",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionOne"
+                        },
+                                {
+                                    "relationship-key": "tenant.tenant-id",
+                                    "relationship-value": "3f2aaef74ecb4b19b35e26d0849fe9a2"
+                        },
+                                {
+                                    "relationship-key": "vserver.vserver-id",
+                                    "relationship-value": "e7f1db09-ff78-44fc-b256-69095c5556fb"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "vserver.vserver-name",
+                                    "property-value": "vfw-vm-0201-2"
+                        }
+                     ]
+                  },
+                        {
+                            "related-to": "availability-zone",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionTwo/availability-zones/availability-zone/zone-1",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionTwo"
+                        },
+                                {
+                                    "relationship-key": "availability-zone.availability-zone-name",
+                                    "relationship-value": "zone-1"
+                        }
+                     ]
+                  }
+               ]
+                },
+                "vf-modules": {
+                    "vf-module": [
+                        {
+                            "vf-module-id": "0afde97a-3e3f-4597-aec3-e5488c0f20b7",
+                            "vf-module-name": "TestVM-0201-1",
+                            "heat-stack-id": "TestVM-0201-1/aee4d7e5-b4a0-4261-b3cf-bb23348a3d99",
+                            "orchestration-status": "Active",
+                            "is-base-vf-module": true,
+                            "resource-version": "1549039401119",
+                            "model-invariant-id": "6af68fdb-6479-43e2-8989-938f06c994bd",
+                            "model-version-id": "16d1834e-d834-431f-b064-98c469c6505d",
+                            "model-customization-id": "29ffb122-22c8-48d2-b152-b52d9e81e910",
+                            "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/d41f8217-d464-4458-bf0a-fba33a0f1b31/service-data/vnfs/vnf/17044ef4-e7f3-46a1-af03-e2aa562f23ac/vnf-data/vf-modules/vf-module/0afde97a-3e3f-4597-aec3-e5488c0f20b7/vf-module-data/vf-module-topology/"
+                  },
+                        {
+                            "vf-module-id": "33f9e03d-2fbd-4e9c-8e73-ce6b12f0b3d2",
+                            "vf-module-name": "TestVM-0201-2",
+                            "heat-stack-id": "TestVM-0201-2/1b9db6b8-620b-46f1-935a-8a61c294a98b",
+                            "orchestration-status": "Active",
+                            "is-base-vf-module": true,
+                            "resource-version": "1549041447373",
+                            "model-invariant-id": "6af68fdb-6479-43e2-8989-938f06c994bd",
+                            "model-version-id": "16d1834e-d834-431f-b064-98c469c6505d",
+                            "model-customization-id": "29ffb122-22c8-48d2-b152-b52d9e81e910",
+                            "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/d41f8217-d464-4458-bf0a-fba33a0f1b31/service-data/vnfs/vnf/17044ef4-e7f3-46a1-af03-e2aa562f23ac/vnf-data/vf-modules/vf-module/33f9e03d-2fbd-4e9c-8e73-ce6b12f0b3d2/vf-module-data/vf-module-topology/",
+                            "relationship-list": {
+                                "relationship": [
+                                    {
+                                        "related-to": "vserver",
+                                        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3f2aaef74ecb4b19b35e26d0849fe9a2/vservers/vserver/e7f1db09-ff78-44fc-b256-69095c5556fb",
+                                        "relationship-data": [
+                                            {
+                                                "relationship-key": "cloud-region.cloud-owner",
+                                                "relationship-value": "CloudOwner"
+                                 },
+                                            {
+                                                "relationship-key": "cloud-region.cloud-region-id",
+                                                "relationship-value": "RegionOne"
+                                 },
+                                            {
+                                                "relationship-key": "tenant.tenant-id",
+                                                "relationship-value": "3f2aaef74ecb4b19b35e26d0849fe9a2"
+                                 },
+                                            {
+                                                "relationship-key": "vserver.vserver-id",
+                                                "relationship-value": "e7f1db09-ff78-44fc-b256-69095c5556fb"
+                                 }
+                              ],
+                                        "related-to-property": [
+                                            {
+                                                "property-key": "vserver.vserver-name",
+                                                "property-value": "vfw-vm-0201-2"
+                                 }
+                              ]
+                           }
+                        ]
+                            }
+                  }
+               ]
+                }
+            }
+      },
+        {
+            "vf-module": {
+                "vf-module-id": "0afde97a-3e3f-4597-aec3-e5488c0f20b7",
+                "vf-module-name": "TestVM-0201-1",
+                "heat-stack-id": "TestVM-0201-1/aee4d7e5-b4a0-4261-b3cf-bb23348a3d99",
+                "orchestration-status": "Active",
+                "is-base-vf-module": true,
+                "resource-version": "1549039401119",
+                "model-invariant-id": "6af68fdb-6479-43e2-8989-938f06c994bd",
+                "model-version-id": "16d1834e-d834-431f-b064-98c469c6505d",
+                "model-customization-id": "29ffb122-22c8-48d2-b152-b52d9e81e910",
+                "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/d41f8217-d464-4458-bf0a-fba33a0f1b31/service-data/vnfs/vnf/17044ef4-e7f3-46a1-af03-e2aa562f23ac/vnf-data/vf-modules/vf-module/0afde97a-3e3f-4597-aec3-e5488c0f20b7/vf-module-data/vf-module-topology/"
+            }
+      },
+        {
+            "vf-module": {
+                "vf-module-id": "33f9e03d-2fbd-4e9c-8e73-ce6b12f0b3d2",
+                "vf-module-name": "TestVM-0201-2",
+                "heat-stack-id": "TestVM-0201-2/1b9db6b8-620b-46f1-935a-8a61c294a98b",
+                "orchestration-status": "Active",
+                "is-base-vf-module": true,
+                "resource-version": "1549041447373",
+                "model-invariant-id": "6af68fdb-6479-43e2-8989-938f06c994bd",
+                "model-version-id": "16d1834e-d834-431f-b064-98c469c6505d",
+                "model-customization-id": "29ffb122-22c8-48d2-b152-b52d9e81e910",
+                "selflink": "restconf/config/GENERIC-RESOURCE-API:services/service/d41f8217-d464-4458-bf0a-fba33a0f1b31/service-data/vnfs/vnf/17044ef4-e7f3-46a1-af03-e2aa562f23ac/vnf-data/vf-modules/vf-module/33f9e03d-2fbd-4e9c-8e73-ce6b12f0b3d2/vf-module-data/vf-module-topology/",
+                "relationship-list": {
+                    "relationship": [
+                        {
+                            "related-to": "vserver",
+                            "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3f2aaef74ecb4b19b35e26d0849fe9a2/vservers/vserver/e7f1db09-ff78-44fc-b256-69095c5556fb",
+                            "relationship-data": [
+                                {
+                                    "relationship-key": "cloud-region.cloud-owner",
+                                    "relationship-value": "CloudOwner"
+                        },
+                                {
+                                    "relationship-key": "cloud-region.cloud-region-id",
+                                    "relationship-value": "RegionOne"
+                        },
+                                {
+                                    "relationship-key": "tenant.tenant-id",
+                                    "relationship-value": "3f2aaef74ecb4b19b35e26d0849fe9a2"
+                        },
+                                {
+                                    "relationship-key": "vserver.vserver-id",
+                                    "relationship-value": "e7f1db09-ff78-44fc-b256-69095c5556fb"
+                        }
+                     ],
+                            "related-to-property": [
+                                {
+                                    "property-key": "vserver.vserver-name",
+                                    "property-value": "vfw-vm-0201-2"
+                        }
+                     ]
+                  }
+               ]
+                }
+            }
+      },
+        {
+            "tenant": {
+                "tenant-id": "tenant1-16197-as988q",
+                "tenant-name": "tenant-name-16197-as988q",
+                "resource-version": "1550769793637",
+                "vservers": {
+                    "vserver": [
+                        {
+                            "vserver-id": "vserver1-16197-as988q",
+                            "vserver-name": "vserverName",
+                            "vserver-name2": "vserverTE-name2-as988q",
+                            "prov-status": "ACTIVE",
+                            "vserver-selflink": "TRINITY vserverLink",
+                            "in-maint": false,
+                            "is-closed-loop-disabled": false,
+                            "resource-version": "1550769794551",
+                            "relationship-list": {
+                                "relationship": [
+                                    {
+                                        "related-to": "generic-vnf",
+                                        "relationship-label": "tosca.relationships.HostedOn",
+                                        "related-link": "/aai/v16/network/generic-vnfs/generic-vnf/VNF1-16197-as988q",
+                                        "relationship-data": [
+                                            {
+                                                "relationship-key": "generic-vnf.vnf-id",
+                                                "relationship-value": "VNF1-16197-as988q"
+                                 }
+                              ],
+                                        "related-to-property": [
+                                            {
+                                                "property-key": "generic-vnf.vnf-name",
+                                                "property-value": "vnf1Name"
+                                 }
+                              ]
+                           }
+                        ]
+                            }
+                  }
+               ]
+                }
+            }
+      },
+        {
+            "cloud-region": {
+                "cloud-owner": "co-16197-01-as988q",
+                "cloud-region-id": "cr-16197-01-as988q",
+                "resource-version": "1550769792672",
+                "orchestration-disabled": false,
+                "in-maint": false,
+                "tenants": {
+                    "tenant": [
+                        {
+                            "tenant-id": "tenant1-16197-as988q",
+                            "tenant-name": "tenant-name-16197-as988q",
+                            "resource-version": "1550769793637"
+                  }
+               ]
+                }
+            }
+      }
+   ]
+}