Merge branch 'recursive-orch' 90/130190/1
authorLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Fri, 5 Aug 2022 12:19:19 +0000 (14:19 +0200)
committerLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Fri, 5 Aug 2022 12:19:57 +0000 (14:19 +0200)
Issue-ID: SO-3980
Signed-off-by: Lukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Change-Id: Ie0cd0f973800196d5cb1e038db4a49208a6c4a3b

12 files changed:
1  2 
adapters/mso-catalog-db-adapter/src/main/resources/db/migration/R__MacroData.sql
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ExecuteBuildingBlockBuilder.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/Resource.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionBBTasks.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionConstants.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoader.java
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/UserParamsServiceTraversal.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/ebb/loader/ServiceEBBLoaderTest.java
common/src/main/java/org/onap/so/serviceinstancebeans/Service.java

@@@ -26,7 -26,7 +26,7 @@@ INSERT INTO northbound_request_ref_look
  ('VNF-Create', 'createInstance', 'Vnf', true,true, '7', '7', 'DEFAULT', '*'),
  ('VNF-Delete', 'deleteInstance', 'Vnf', true,true, '7', '7', 'DEFAULT', '*'),
  ('VNF-Macro-Delete', 'deleteInstance', 'Vnf', false,true, '7', '7', 'DEFAULT', '*'),
 -('VNF-Macro-Modify', 'updateInstance', 'Vnf', false,true, '7', '7','k8scloudowner4', '*'),
 +('VNF-Macro-Modify', 'updateInstance', 'Vnf', false,true, '7', '7','DEFAULT', '*'),
  ('VNF-Macro-HealthCheck', 'healthCheck', 'Vnf', false,true, '7', '7','DEFAULT', '*'),
  ('VolumeGroup-Create', 'createInstance', 'VolumeGroup', true,true, '7','7', 'DEFAULT', '*'),
  ('VolumeGroup-Delete', 'deleteInstance', 'VolumeGroup', true,true, '7','7', 'DEFAULT', '*'),
@@@ -39,8 -39,7 +39,8 @@@
  ('NetworkCollection-Macro-Delete', 'deleteInstance', 'NetworkCollection', false,true, '7','7', 'DEFAULT', '*'),
  ('VFModule-ScaleOut', 'scaleOut', 'VfModule', true, true, '7','7', 'DEFAULT', '*'),
  ('VNF-InPlaceUpdate', 'inPlaceSoftwareUpdate', 'Vnf', true, true, '7','7', 'DEFAULT', '*'),
 -('VNF-Config-Update', 'applyUpdatedConfig', 'Vnf', true, true, '7','7', 'DEFAULT', '*');
 +('VNF-Config-Update', 'applyUpdatedConfig', 'Vnf', true, true, '7','7', 'DEFAULT', '*'),
 +('CNF-Macro-Upgrade', 'upgradeCnf', 'Vnf', false,true, '7', '7','DEFAULT', '*');
  
  
  INSERT INTO orchestration_flow_reference(COMPOSITE_ACTION, SEQ_NO, FLOW_NAME, SCOPE, ACTION, FLOW_VERSION, NB_REQ_REF_LOOKUP_ID) VALUES
  ('Service-Macro-Unassign', '4', 'UnassignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Unassign' and CLOUD_OWNER = 'DEFAULT')),
  ('Service-Macro-Unassign', '5', 'UnassignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Unassign' and CLOUD_OWNER = 'DEFAULT')),
  ('Service-Macro-Create', '1', 'AssignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '2', 'CreateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '3', 'AssignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '4', 'AssignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '5', 'AssignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '6', 'AssignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '7', 'ControllerExecutionBB', 'vnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '8', 'AssignPnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '9', 'WaitForPnfReadyBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '10', 'ControllerExecutionBB', 'pnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '11', 'ControllerExecutionBB', 'pnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '12', 'ActivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '13', 'CreateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '14', 'ActivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '15', 'CreateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '16', 'ActivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '17', 'CreateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '18', 'ActivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '19', 'ControllerExecutionBB', 'vnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '20', 'ActivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '21', 'ActivateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Create', '22', 'ActivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '1', 'DeactivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '2', 'DeleteVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '3', 'DeactivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '4', 'DeleteVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '5', 'DeactivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '6', 'DeactivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '7', 'DeactivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '8', 'DeleteNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '9', 'DeleteNetworkCollectionBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '10', 'DeactivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '11', 'UnassignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '12', 'UnassignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '13', 'UnassignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '14', 'UnassignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
- ('Service-Macro-Delete', '15', 'UnassignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '2', 'CreateChildServiceBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '3', 'CreateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '4', 'AssignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '5', 'AssignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '6', 'AssignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '7', 'AssignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '8', 'ControllerExecutionBB', 'vnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '9', 'AssignPnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '10', 'WaitForPnfReadyBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '11', 'ControllerExecutionBB', 'pnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '12', 'ControllerExecutionBB', 'pnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '13', 'ActivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '14', 'CreateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '15', 'ActivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '16', 'CreateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '17', 'ActivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '18', 'CreateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '19', 'ActivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '20', 'ControllerExecutionBB', 'vnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '21', 'ActivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '22', 'ActivateNetworkCollectionBB', NULL, NULL,1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Create', '23', 'ActivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Create' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '1', 'DeleteChildServiceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '2', 'DeactivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '3', 'DeleteVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '4', 'DeactivateVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '5', 'DeleteVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '6', 'DeactivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '7', 'DeactivatePnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '8', 'DeactivateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '9', 'DeleteNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '10', 'DeleteNetworkCollectionBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '11', 'DeactivateServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '12', 'UnassignVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '13', 'UnassignVolumeGroupBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '14', 'UnassignVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '15', 'UnassignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
+ ('Service-Macro-Delete', '16', 'UnassignServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Delete' and CLOUD_OWNER = 'DEFAULT')),
  ('Service-Macro-Upgrade', '1', 'ChangeModelServiceInstanceBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Service-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
  ('Network-Create', '1', 'AssignNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Network-Create' and CLOUD_OWNER = 'DEFAULT')),
  ('Network-Create', '2', 'CreateNetworkBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'Network-Create' and CLOUD_OWNER = 'DEFAULT')),
  ('VNF-Config-Update', '7', 'VNFHealthCheckActivity', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Config-Update' and CLOUD_OWNER = 'DEFAULT')),
  ('VNF-Config-Update', '8', 'VNFUnsetInMaintFlagActivity', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Config-Update' and CLOUD_OWNER = 'DEFAULT')),
  ('VNF-Config-Update', '9', 'VNFUnsetClosedLoopDisabledFlagActivity', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Config-Update' and CLOUD_OWNER = 'DEFAULT')),
 -('VNF-Macro-Modify', '1', 'ControllerExecutionBB', 'vnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Macro-Modify' and CLOUD_OWNER = 'k8scloudowner4')),
 -('VNF-Macro-Modify', '2', 'ControllerExecutionBB', 'vnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Macro-Modify' and CLOUD_OWNER = 'k8scloudowner4')),
 -('VNF-Macro-HealthCheck', '1', 'HealthCheckBB', 'vnf', 'status-check', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Macro-HealthCheck' and CLOUD_OWNER = 'DEFAULT'));
 +('VNF-Macro-Modify', '1', 'ControllerExecutionBB', 'vnf', 'config-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Macro-Modify' and CLOUD_OWNER = 'DEFAULT')),
 +('VNF-Macro-Modify', '2', 'ControllerExecutionBB', 'vnf', 'config-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Macro-Modify' and CLOUD_OWNER = 'DEFAULT')),
 +('VNF-Macro-HealthCheck', '1', 'HealthCheckBB', 'vnf', 'status-check', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Macro-HealthCheck' and CLOUD_OWNER = 'DEFAULT')),
 +('VNF-Macro-HealthCheck', '2', 'HealthCheckBB', 'vnf', 'health-check', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'VNF-Macro-HealthCheck' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '1', 'AAICheckVnfInMaintBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '2', 'AAISetVnfInMaintBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '3', 'DeactivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '4', 'DeactivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '5', 'ChangeModelVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '6', 'ControllerExecutionBB', 'vnf', 'config-upgrade-assign', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '7', 'UpgradeVfModuleBB', NULL , NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '8', 'ControllerExecutionBB', 'vnf', 'config-upgrade-deploy', 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '9', 'ActivateVfModuleBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '10', 'ChangeModelVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '11', 'ActivateVnfBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT')),
 +('CNF-Macro-Upgrade', '12', 'AAIUnsetVnfInMaintBB', NULL, NULL, 1.0,(SELECT id from northbound_request_ref_lookup WHERE MACRO_ACTION = 'CNF-Macro-Upgrade' and CLOUD_OWNER = 'DEFAULT'));
  
  INSERT INTO rainy_day_handler_macro (FLOW_NAME, SERVICE_TYPE, VNF_TYPE, ERROR_CODE, WORK_STEP, POLICY, SECONDARY_POLICY, REG_EX_ERROR_MESSAGE, SERVICE_ROLE)
  VALUES
  ('VNFHealthCheckActivity','*','*','*','*','Manual','Abort','*', '*'),
  ('VNFConfigModifyActivity','*','*','*','*','Manual','Abort','*', '*'),
  ('VNFUnsetInMaintFlagActivity','*','*','*','*','Manual','Abort','*', '*'),
- ('VNFUnsetClosedLoopDisabledActivity','*','*','*','*','Manual','Abort','*', '*');
+ ('VNFUnsetClosedLoopDisabledActivity','*','*','*','*','Manual','Abort','*', '*'),
+ ('DeleteChildServiceBB', '*', '*', '*', '*', 'Rollback', 'Abort', '*', '*'),
+ ('CreateChildServiceBB', '*', '*', '*', '*', 'Rollback', 'Abort', '*', '*');
  
  INSERT INTO building_block_detail (building_block_name, resource_type, target_action)
  VALUES
  ('CreateVfModuleBB', 'VF_MODULE', 'CREATE'),
  ('CreateNetworkBB', 'NETWORK', 'CREATE'),
  ('CreateNetworkCollectionBB', 'NETWORK_COLLECTION', 'CREATE'),
+ ('CreateChildServiceBB', 'NO_VALIDATE', 'CUSTOM'),
  
  ('DeleteVolumeGroupBB', 'VOLUME_GROUP', 'DELETE'),
  ('DeleteVfModuleBB', 'VF_MODULE', 'DELETE'),
  ('DeleteNetworkBB', 'NETWORK', 'DELETE'),
  ('DeleteNetworkCollectionBB', 'NETWORK_COLLECTION', 'DELETE'),
+ ('DeleteChildServiceBB', 'NO_VALIDATE', 'CUSTOM'),
  
  ('ConfigurationScaleOutBB', 'NO_VALIDATE', 'CUSTOM'),
  ('GenericVnfHealthCheckBB', 'NO_VALIDATE', 'CUSTOM'),
  ('VNFConfigModifyActivity', 'NO_VALIDATE', 'CUSTOM'),
  ('ConfigAssignVnfBB', 'NO_VALIDATE', 'CUSTOM'),
  ('ConfigDeployVnfBB', 'NO_VALIDATE', 'CUSTOM'),
 -('ControllerExecutionBB', 'NO_VALIDATE', 'CUSTOM');
 +('ControllerExecutionBB', 'NO_VALIDATE', 'CUSTOM'),
 +('StatusCheckBB', 'NO_VALIDATE', 'CUSTOM'),
 +('HealthCheckBB', 'NO_VALIDATE', 'CUSTOM'),
 +('UpgradeVfModuleBB', 'NO_VALIDATE', 'CUSTOM');
 +
  
  INSERT INTO orchestration_status_state_transition_directive (resource_type, orchestration_status, target_action, flow_directive)
  VALUES
@@@ -878,28 -866,3 +884,28 @@@ DELETE FROM service_recipe where ACTIO
  INSERT INTO service_recipe (ACTION, VERSION_STR, DESCRIPTION, ORCHESTRATION_URI, RECIPE_TIMEOUT, SERVICE_MODEL_UUID)
  VALUES
  ('upgradeInstance', '1.0', 'Gr api recipe to upgrade service-instance', '/mso/async/services/WorkflowActionBB', 180, 'd88da85c-d9e8-4f73-b837-3a72a431622b');
 +
 +INSERT INTO building_block_rollback(BUILDING_BLOCK_NAME,ACTION,ROLLBACK_BUILDING_BLOCK_NAME,ROLLBACK_ACTION)
 +VALUES
 +('ActivateNetworkBB',NULL,'DeactivateNetworkBB',NULL),
 +('ActivatePnfBB',NULL,'DeactivatePnfBB',NULL),
 +('ActivateServiceInstanceBB',NULL,'DeactivateServiceInstanceBB',NULL),
 +('ActivateVfModuleBB',NULL,'DeactivateVfModuleBB',NULL),
 +('ActivateVnfBB',NULL,'DeactivateVnfBB',NULL),
 +('ActivateVolumeGroupBB',NULL,'DeactivateVolumeGroupBB',NULL),
 +('AssignNetworkBB',NULL,'UnassignNetworkBB',NULL),
 +('AssignServiceInstanceBB',NULL,'UnassignServiceInstanceBB',NULL),
 +('AssignVfModuleBB',NULL,'UnassignVfModuleBB',NULL),
 +('AssignVnfBB',NULL,'UnassignVnfBB',NULL),
 +('AssignVolumeGroupBB',NULL,'UnassignVolumeGroupBB',NULL),
 +('CreateNetworkBB',NULL,'DeleteNetworkBB',NULL),
 +('CreateNetworkCollectionBB',NULL,'DeleteNetworkCollectionBB',NULL),
 +('CreateVfModuleBB',NULL,'DeleteVfModuleBB',NULL),
 +('CreateVolumeGroupBB',NULL,'DeleteVolumeGroupBB',NULL),
 +('VNFSetInMaintFlagActivity',NULL,'VNFUnsetInMaintFlagActivity',NULL),
 +('VNFSetClosedLoopDisabledFlagActivity',NULL,'VNFUnsetClosedLoopDisabledFlagActivity',NULL),
 +('VNFLockActivity',NULL,'VNFUnlockActivity',NULL),
 +('VNFStopActivity',NULL,'VNFStartActivity',NULL),
 +('VNFQuiesceTrafficActivity',NULL,'VNFResumeTrafficActivity',NULL),
 +('EtsiVnfInstantiateBB',NULL,'EtsiVnfDeleteBB',NULL),
 +('AddFabricConfigurationBB',NULL,'DeleteFabricConfigurationBB',NULL);
@@@ -262,6 -262,8 +262,8 @@@ public class BBInputSetup implements Ja
          lookupKeyMap.put(ResourceKey.INSTANCE_GROUP_ID, workflowResourceIds.getInstanceGroupId());
          lookupKeyMap.put(ResourceKey.VNF_INSTANCE_NAME, workflowResourceIds.getVnfInstanceName());
          lookupKeyMap.put(ResourceKey.VF_MODULE_INSTANCE_NAME, workflowResourceIds.getVfModuleInstanceName());
+         lookupKeyMap.put(ResourceKey.CHILD_SERVICE_INSTANCE_ID, workflowResourceIds.getChildServiceInstanceId());
+         lookupKeyMap.put(ResourceKey.CHILD_SERVICE_INSTANCE_NAME, workflowResourceIds.getChildServiceInstanceName());
      }
  
      protected GeneralBuildingBlock getGBBALaCarteNonService(ExecuteBuildingBlock executeBB,
                  || requestAction.equalsIgnoreCase("activateFabricConfiguration")
                  || requestAction.equalsIgnoreCase("recreateInstance")
                  || requestAction.equalsIgnoreCase("replaceInstance")
 -                || requestAction.equalsIgnoreCase("upgradeInstance")) {
 +                || requestAction.equalsIgnoreCase("upgradeInstance") || requestAction.equalsIgnoreCase("healthCheck")) {
              return getGBBMacroExistingService(executeBB, lookupKeyMap, bbName, requestAction,
                      requestDetails.getCloudConfiguration());
          }
                      break;
                  }
              }
 +        } else if (bbName.equals("HealthCheckBB")
 +                && (VNF).equalsIgnoreCase(executeBB.getBuildingBlock().getBpmnScope())) {
 +            this.setisHelmforHealthCheckBB(service, serviceInstance, gBB);
          }
          if (executeBB.getWorkflowResourceIds() != null) {
              parameter.setResourceId(executeBB.getWorkflowResourceIds().getNetworkCollectionId());
          Vnfs vnfs = null;
          VfModules vfModules = null;
          Networks networks = null;
 +
          CloudConfiguration cloudConfiguration = requestDetails.getCloudConfiguration();
 -        CloudRegion cloudRegion = getCloudRegionFromMacroRequest(cloudConfiguration, resources);
 -        gBB.setCloudRegion(cloudRegion);
 +        CloudRegion cloudRegion = setCloudConfiguration(gBB, cloudConfiguration);
 +
          BBInputSetupParameter parameter =
                  new BBInputSetupParameter.Builder().setRequestId(executeBB.getRequestId()).setService(service)
                          .setBbName(bbName).setServiceInstance(serviceInstance).setLookupKeyMap(lookupKeyMap).build();
                  vnfs = findVnfsByKey(key, resources);
              }
  
 +            // Vnf level cloud configuration takes precedence over service level cloud configuration.
 +            if (vnfs.getCloudConfiguration() != null) {
 +                setCloudConfiguration(gBB, vnfs.getCloudConfiguration());
 +            }
 +
              String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
              // This stores the vnf id in request db to be retrieved later when
              // working on a vf module or volume group
                  vfModules = getVfModulesByKey(key, resources);
              }
  
 +            String vfModulesName = vfModules.getInstanceName();
 +            String vfModulesModelCustId = vfModules.getModelInfo().getModelCustomizationId();
 +            // Get the Vnf associated with vfModule
 +            Optional<org.onap.so.serviceinstancebeans.Vnfs> parentVnf = resources.getVnfs().stream()
 +                    .filter(aVnf -> aVnf.getCloudConfiguration() != null)
 +                    .filter(aVnf -> aVnf.getVfModules().stream()
 +                            .anyMatch(aVfModules -> aVfModules.getInstanceName().equals(vfModulesName) && aVfModules
 +                                    .getModelInfo().getModelCustomizationId().equals(vfModulesModelCustId)))
 +                    .findAny();
 +
 +            // Get the cloud configuration from this Vnf
 +            if (parentVnf.isPresent()) {
 +                cloudRegion = setCloudConfiguration(gBB, parentVnf.get().getCloudConfiguration());
 +            }
 +
              lookupKeyMap.put(ResourceKey.GENERIC_VNF_ID, getVnfId(executeBB, lookupKeyMap));
  
              parameter.setModelInfo(vfModules.getModelInfo());
              networks = findNetworksByKey(key, resources);
              String networkId = lookupKeyMap.get(ResourceKey.NETWORK_ID);
              if (networks != null) {
 +                // If service level cloud configuration is not provided then get it from networks.
 +                if (cloudConfiguration == null) {
 +                    Optional<org.onap.so.serviceinstancebeans.Networks> netWithCloudConfig = resources.getNetworks()
 +                            .stream().filter(aNetwork -> aNetwork.getCloudConfiguration() != null).findAny();
 +                    if (netWithCloudConfig.isPresent()) {
 +                        setCloudConfiguration(gBB, netWithCloudConfig.get().getCloudConfiguration());
 +                    } else {
 +                        logger.debug("Could not find any cloud configuration for this request.");
 +                    }
 +                }
                  parameter.setInstanceName(networks.getInstanceName());
                  parameter.setModelInfo(networks.getModelInfo());
                  parameter.setInstanceParams(networks.getInstanceParams());
          return gBB;
      }
  
 +    /**
 +     * setCloudConfiguration - set cloud info on a building block.
 +     * 
 +     * @param gBB
 +     * @param cloudConfiguration
 +     * @return CloudRegion
 +     * @throws Exception
 +     */
 +    private CloudRegion setCloudConfiguration(GeneralBuildingBlock gBB, CloudConfiguration cloudConfiguration)
 +            throws Exception {
 +        org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
 +        Tenant tenant = getTenant(cloudConfiguration, aaiCloudRegion);
 +        gBB.setTenant(tenant);
 +        CloudRegion cloudRegion = mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
 +        gBB.setCloudRegion(cloudRegion);
 +        return cloudRegion;
 +    }
 +
      protected Networks findNetworksByKey(String key, Resources resources) {
          for (Networks networks : resources.getNetworks()) {
              if (networks.getModelInfo().getModelCustomizationId().equalsIgnoreCase(key)) {
          throw new ResourceNotFoundException("Could not find vnf with key: " + key + " in userparams");
      }
  
 -    protected CloudRegion getCloudRegionFromMacroRequest(CloudConfiguration cloudConfiguration, Resources resources) {
 -        if (cloudConfiguration == null) {
 -            for (Vnfs vnfs : resources.getVnfs()) {
 -                if (cloudConfiguration == null) {
 -                    cloudConfiguration = vnfs.getCloudConfiguration();
 -                } else {
 -                    break;
 -                }
 -                for (VfModules vfModules : vnfs.getVfModules()) {
 -                    if (cloudConfiguration == null) {
 -                        cloudConfiguration = vfModules.getCloudConfiguration();
 -                    } else {
 -                        break;
 -                    }
 -                }
 -            }
 -            for (Networks networks : resources.getNetworks()) {
 -                if (cloudConfiguration == null) {
 -                    cloudConfiguration = networks.getCloudConfiguration();
 -                } else {
 -                    break;
 -                }
 -            }
 -        }
 -        if (cloudConfiguration != null) {
 -            org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = bbInputSetupUtils.getCloudRegion(cloudConfiguration);
 -            return mapperLayer.mapCloudRegion(cloudConfiguration, aaiCloudRegion);
 -        } else {
 -            logger.debug("Could not find any cloud configuration for this request.");
 -            return null;
 -        }
 -    }
 -
      protected String getVnfId(ExecuteBuildingBlock executeBB, Map<ResourceKey, String> lookupKeyMap) {
          String vnfId = lookupKeyMap.get(ResourceKey.GENERIC_VNF_ID);
          if (vnfId == null) {
          return collection;
      }
  
 +    private void setisHelmforHealthCheckBB(Service service, ServiceInstance serviceInstance, GeneralBuildingBlock gBB) {
 +        for (GenericVnf vnf : serviceInstance.getVnfs()) {
 +            for (VfModule vfModule : vnf.getVfModules()) {
 +                String vnfModelCustomizationUUID =
 +                        this.bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId()).getModelCustomizationId();
 +                ModelInfo vnfModelInfo = new ModelInfo();
 +                vnfModelInfo.setModelCustomizationUuid(vnfModelCustomizationUUID);
 +                this.mapCatalogVnf(vnf, vnfModelInfo, service);
 +                String vfModuleCustomizationUUID = this.bbInputSetupUtils
 +                        .getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId()).getModelCustomizationId();
 +                ModelInfo vfModuleModelInfo = new ModelInfo();
 +                vfModuleModelInfo.setModelCustomizationId(vfModuleCustomizationUUID);
 +                this.mapCatalogVfModule(vfModule, vfModuleModelInfo, service, vnfModelCustomizationUUID);
 +                if (vfModule.getModelInfoVfModule() != null && vfModule.getModelInfoVfModule().getModelName() != null
 +                        && vfModule.getModelInfoVfModule().getModelName().contains("helm")) {
 +                    gBB.getRequestContext().setIsHelm(true);
 +                    break;
 +                }
 +            }
 +        }
 +    }
 +
      protected void mapL3Networks(List<AAIResourceUri> list, List<L3Network> l3Networks) {
          for (AAIResourceUri aaiResourceUri : list) {
              l3Networks.add(this.mapL3Network(aaiResourceUri));
@@@ -2121,6 -2121,8 +2121,8 @@@ public class BBInputSetupTest 
          String instanceGroupId = "instancegroupId";
          String vnfInstanceName = "vnfInstanceName";
          String vfModuleInstanceName = "vfModuleInstanceName";
+         String childServiceInstanceId = "childServiceInstanceId";
+         String childServiceInstanceName = "childServiceInstanceName";
  
          expected.put(ResourceKey.SERVICE_INSTANCE_ID, serviceInstanceId);
          expected.put(ResourceKey.NETWORK_ID, networkId);
          expected.put(ResourceKey.INSTANCE_GROUP_ID, instanceGroupId);
          expected.put(ResourceKey.VNF_INSTANCE_NAME, vnfInstanceName);
          expected.put(ResourceKey.VF_MODULE_INSTANCE_NAME, vfModuleInstanceName);
+         expected.put(ResourceKey.CHILD_SERVICE_INSTANCE_ID, childServiceInstanceId);
+         expected.put(ResourceKey.CHILD_SERVICE_INSTANCE_NAME, childServiceInstanceName);
  
          WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
          workflowResourceIds.setServiceInstanceId(serviceInstanceId);
          workflowResourceIds.setInstanceGroupId(instanceGroupId);
          workflowResourceIds.setVnfInstanceName(vnfInstanceName);
          workflowResourceIds.setVfModuleInstanceName(vfModuleInstanceName);
+         workflowResourceIds.setChildServiceInstanceId(childServiceInstanceId);
+         workflowResourceIds.setChildServiceInstanceName(childServiceInstanceName);
  
          SPY_bbInputSetup.populateLookupKeyMapWithIds(workflowResourceIds, actual);
  
          assertThat(actual, sameBeanAs(expected));
      }
  
 -    @Test
 -    public void testgetGBBMacroCloudConfiguration() throws Exception {
 -        org.onap.so.serviceinstancebeans.Service serviceMacro = mapper.readValue(
 -                new File(RESOURCE_PATH + "ServiceMacroVfModules.json"), org.onap.so.serviceinstancebeans.Service.class);
 -        CloudConfiguration cloudConfig = null;
 -        org.onap.aai.domain.yang.CloudRegion aaiCloudRegion = new org.onap.aai.domain.yang.CloudRegion();
 -        aaiCloudRegion.setCloudOwner("test-owner-name");
 -        Resources resources = serviceMacro.getResources();
 -        doReturn(aaiCloudRegion).when(SPY_bbInputSetupUtils).getCloudRegion(any(CloudConfiguration.class));
 -        CloudRegion expected = new CloudRegion();
 -        expected.setLcpCloudRegionId("mdt1");
 -        expected.setCloudOwner("test-owner-name");
 -        expected.setTenantId("88a6ca3ee0394ade9403f075db23167e");
 -
 -        CloudRegion actual = SPY_bbInputSetup.getCloudRegionFromMacroRequest(cloudConfig, resources);
 -        assertThat(actual, sameBeanAs(expected));
 -
 -        serviceMacro = mapper.readValue(new File(RESOURCE_PATH + "ServiceMacroVnfs.json"),
 -                org.onap.so.serviceinstancebeans.Service.class);
 -        resources = serviceMacro.getResources();
 -
 -        actual = SPY_bbInputSetup.getCloudRegionFromMacroRequest(cloudConfig, resources);
 -        assertThat(actual, sameBeanAs(expected));
 -
 -        serviceMacro = mapper.readValue(new File(RESOURCE_PATH + "ServiceMacroNetworks.json"),
 -                org.onap.so.serviceinstancebeans.Service.class);
 -        resources = serviceMacro.getResources();
 -
 -        actual = SPY_bbInputSetup.getCloudRegionFromMacroRequest(cloudConfig, resources);
 -        assertThat(actual, sameBeanAs(expected));
 -
 -        serviceMacro = mapper.readValue(new File(RESOURCE_PATH + "ServiceMacroNoCloudConfig.json"),
 -                org.onap.so.serviceinstancebeans.Service.class);
 -        resources = serviceMacro.getResources();
 -
 -        actual = SPY_bbInputSetup.getCloudRegionFromMacroRequest(cloudConfig, resources);
 -        assertNull(actual);
 -    }
 -
      @Test
      public void testgetGBBMacroWithEmptyUserParams() throws Exception {
          String resourceId = "123";
@@@ -55,7 -55,6 +55,7 @@@ public class ExecuteBuildingBlockBuilde
      private static final String VFMODULE = "VfModule";
      private static final String NETWORK = "Network";
      private static final String HEALTH_CHECK = "HealthCheckBB";
 +    private static final String UPGRADE_CNF = "UpgradeVfModuleBB";
  
      protected List<ExecuteBuildingBlock> buildExecuteBuildingBlockList(List<OrchestrationFlow> orchFlows,
              List<Resource> originalResourceList, String requestId, String apiVersion, String resourceId,
              String requestId, String apiVersion, String resourceId, String requestAction, String vnfType,
              WorkflowResourceIds workflowResourceIds, RequestDetails requestDetails, boolean replaceVnf) {
          List<ExecuteBuildingBlock> flowsToExecute = new ArrayList<>();
-         if (orchFlow.getFlowName().contains(SERVICE) || (orchFlow.getFlowName().contains(CONTROLLER)
+         if (orchFlow.getFlowName().contains(CHILD_SERVICE)) {
+             if (WorkflowType.SERVICE.equals(resource.getResourceType()) && resource.hasParent()) {
+                 addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.SERVICE, orchFlow, requestId,
+                         apiVersion, resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false,
+                         false);
+             }
+         } else if (orchFlow.getFlowName().contains(SERVICE) || (orchFlow.getFlowName().contains(CONTROLLER)
                  && (SERVICE).equalsIgnoreCase(orchFlow.getBpmnScope()))) {
              if (!replaceVnf) {
                  workflowResourceIds.setServiceInstanceId(resourceId);
              }
-             addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.SERVICE, orchFlow, requestId,
-                     apiVersion, resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false, false);
+             if (!resource.hasParent()) {
+                 addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.SERVICE, orchFlow, requestId,
+                         apiVersion, resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false,
+                         false);
+             }
          } else if (orchFlow.getFlowName().contains(VNF)
                  || (orchFlow.getFlowName().contains(CONTROLLER) && (VNF).equalsIgnoreCase(orchFlow.getBpmnScope()))) {
              addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.VNF, orchFlow, requestId, apiVersion,
                  && (VNF).equalsIgnoreCase(orchFlow.getBpmnScope())) {
              addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.VNF, orchFlow, requestId, apiVersion,
                      resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false, false);
 +        } else if ((orchFlow.getFlowName().equalsIgnoreCase(UPGRADE_CNF))
 +                && (VNF).equalsIgnoreCase(orchFlow.getBpmnScope())) {
 +            addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.VNF, orchFlow, requestId, apiVersion,
 +                    resourceId, requestAction, vnfType, workflowResourceIds, requestDetails, false, false);
          } else if (orchFlow.getFlowName().contains(PNF)
                  || (orchFlow.getFlowName().contains(CONTROLLER) && (PNF).equalsIgnoreCase(orchFlow.getBpmnScope()))) {
              addBuildingBlockToExecuteBBList(flowsToExecute, resource, WorkflowType.PNF, orchFlow, requestId, apiVersion,
@@@ -40,8 -40,6 +40,8 @@@ public class Resource implements Serial
      private String cvnfModuleCustomizationId;
      private String instanceName;
      private String modelInvariantId;
 +    private String modelVersionId;
 +    private String modelCustomizationId;
      private int processingPriority;
      private Resource parent;
      private List<Resource> children;
          this.modelInvariantId = modelInvariantId;
      }
  
 +    public String getModelVersionId() {
 +        return modelVersionId;
 +    }
 +
 +    public void setModelVersionId(String modelVersionId) {
 +        this.modelVersionId = modelVersionId;
 +    }
 +
 +    public String getModelCustomizationId() {
 +        return modelCustomizationId;
 +    }
 +
 +    public void setModelCustomizationId(String modelCustomizationId) {
 +        this.modelCustomizationId = modelCustomizationId;
 +    }
  
      public int getProcessingPriority() {
          return processingPriority == 0 ? (isBaseVfModule() ? Integer.MIN_VALUE + 1 : 0) : processingPriority;
      public List<Resource> getChildren() {
          return this.children;
      }
+     public Boolean hasParent() {
+         return parent != null;
+     }
  }
@@@ -28,6 -28,8 +28,8 @@@
  
  package org.onap.so.bpmn.infrastructure.workflow.tasks;
  
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.IS_CHILD_PROCESS;
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.PARENT_CORRELATION_ID;
  import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.ASSIGN_INSTANCE;
  import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CONTROLLER;
  import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.CREATE_INSTANCE;
@@@ -40,7 -42,6 +42,7 @@@ import static org.onap.so.bpmn.infrastr
  import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.UPDATE_INSTANCE;
  import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.HEALTH_CHECK;
  import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.WORKFLOW_ACTION_ERROR_MESSAGE;
 +import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConstants.UPGRADE_CNF;
  import java.io.IOException;
  import java.util.ArrayList;
  import java.util.Arrays;
@@@ -97,6 -98,7 +99,7 @@@ import org.springframework.core.env.Env
  import org.springframework.stereotype.Component;
  import org.springframework.util.CollectionUtils;
  import com.fasterxml.jackson.databind.ObjectMapper;
+ import org.onap.so.serviceinstancebeans.InstanceDirection;
  
  @Component
  public class WorkflowAction {
          } else if (resourceType == WorkflowType.VNF && HEALTH_CHECK.equalsIgnoreCase(requestAction)) {
              vnfEBBLoader.customTraverseAAIVnf(execution, resourceList, workflowResourceIds.getServiceInstanceId(),
                      workflowResourceIds.getVnfId(), aaiResourceIds);
 +        } else if (resourceType == WorkflowType.VNF && UPGRADE_CNF.equalsIgnoreCase(requestAction)) {
 +            vnfEBBLoader.customTraverseAAIVnf(execution, resourceList, workflowResourceIds.getServiceInstanceId(),
 +                    workflowResourceIds.getVnfId(), aaiResourceIds);
          } else {
              buildAndThrowException(execution, "Current Macro Request is not supported");
          }
                  log += ", Action: " + block.getBuildingBlock().getBpmnAction();
              logger.info(log);
          }
+         RelatedInstanceList[] instanceList = sIRequest.getRequestDetails().getRelatedInstanceList();
+         execution.setVariable(IS_CHILD_PROCESS, Boolean.FALSE);
+         if (instanceList != null) {
+             for (RelatedInstanceList relatedInstanceList : instanceList) {
+                 RelatedInstance relatedInstance = relatedInstanceList.getRelatedInstance();
+                 if (InstanceDirection.source.equals(relatedInstance.getInstanceDirection())) {
+                     execution.setVariable(IS_CHILD_PROCESS, Boolean.TRUE);
+                     execution.setVariable(PARENT_CORRELATION_ID, requestDetails.getRequestInfo().getCorrelator());
+                 }
+             }
+         }
          // By default, enable homing at VNF level for CREATE_INSTANCE and ASSIGNINSTANCE
          if (resourceType == WorkflowType.SERVICE
                  && (requestAction.equals(CREATE_INSTANCE) || requestAction.equals(ASSIGN_INSTANCE))
              logger.debug("{}, {}", pair.getValue0(), pair.getValue1());
          }
          Map<Resource, String> resourceInstanceIds = new HashMap<>();
-         Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
-                 .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
-                         .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource,
-                                 retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId,
-                                 resourceInstanceIds)));
+         Arrays.stream(WorkflowType.values()).forEach(type -> resourceList.stream()
+                 .filter(resource -> type.equals(resource.getResourceType())
+                         && !(WorkflowType.SERVICE.equals(type) && !resource.hasParent()))
+                 .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource,
+                         retrieveAAIResourceId(aaiResourceIds, type), null, serviceInstanceId, resourceInstanceIds)));
      }
  
      private String retrieveAAIResourceId(List<Pair<WorkflowType, String>> aaiResourceIds, WorkflowType resource) {
      private void generateResourceIds(List<ExecuteBuildingBlock> flowsToExecute, List<Resource> resourceList,
              String serviceInstanceId) {
          Map<Resource, String> resourceInstanceIds = new HashMap<>();
-         Arrays.stream(WorkflowType.values()).filter(type -> !type.equals(WorkflowType.SERVICE))
-                 .forEach(type -> resourceList.stream().filter(resource -> type.equals(resource.getResourceType()))
+         Arrays.stream(WorkflowType.values())
+                 .forEach(type -> resourceList.stream()
+                         .filter(resource -> resource.hasParent() && type.equals(resource.getResourceType()))
                          .forEach(resource -> updateWorkflowResourceIds(flowsToExecute, type, resource, null,
                                  resource.getVirtualLinkKey(), serviceInstanceId, resourceInstanceIds)));
      }
                  WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds();
                  workflowResourceIds.setServiceInstanceId(serviceInstanceId);
                  Resource parent = resource.getParent();
-                 if (parent != null && resourceInstanceIds.containsKey(parent)) {
+                 if (resource.hasParent() && resourceInstanceIds.containsKey(parent)) {
                      WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, parent.getResourceType(),
                              resourceInstanceIds.get(parent));
                  }
-                 WorkflowResourceIdsUtils.setInstanceNameByWorkflowType(workflowResourceIds, resourceType,
-                         resource.getInstanceName());
-                 WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, resourceType, resourceId);
+                 if (resource.hasParent() && WorkflowType.SERVICE.equals(resourceType)
+                         && WorkflowType.SERVICE.equals(parent.getResourceType())) {
+                     String childServiceInstanceId = resource.isGenerated() ? resourceId : resource.getResourceId();
+                     workflowResourceIds.setChildServiceInstanceId(childServiceInstanceId);
+                     workflowResourceIds.setChildServiceInstanceName(resource.getInstanceName());
+                 } else {
+                     WorkflowResourceIdsUtils.setInstanceNameByWorkflowType(workflowResourceIds, resourceType,
+                             resource.getInstanceName());
+                     WorkflowResourceIdsUtils.setResourceIdByWorkflowType(workflowResourceIds, resourceType, resourceId);
+                 }
                  ebb.setWorkflowResourceIds(workflowResourceIds);
                  assignedFlows.add(flowName + action);
              }
  
      private boolean isFlowAssignable(Set<String> assignedFlows, ExecuteBuildingBlock ebb, WorkflowType resourceType,
              String assignedFlowName) {
-         String id = WorkflowResourceIdsUtils.getResourceIdByWorkflowType(ebb.getWorkflowResourceIds(), resourceType);
+         String id = WorkflowType.SERVICE.equals(resourceType)
+                 ? StringUtils.defaultString(ebb.getWorkflowResourceIds().getChildServiceInstanceId())
+                 : WorkflowResourceIdsUtils.getResourceIdByWorkflowType(ebb.getWorkflowResourceIds(), resourceType);
          return !assignedFlows.contains(assignedFlowName) && id.isEmpty();
      }
  
@@@ -23,7 -23,6 +23,7 @@@ package org.onap.so.bpmn.infrastructure
  import java.sql.Timestamp;
  import java.util.ArrayList;
  import java.util.List;
 +import java.util.Objects;
  import java.util.Optional;
  import java.util.UUID;
  import java.util.stream.Collectors;
@@@ -50,7 -49,6 +50,7 @@@ import org.onap.so.bpmn.servicedecompos
  import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds;
  import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
  import org.onap.so.client.exception.ExceptionBuilder;
 +import org.onap.so.db.catalog.beans.BuildingBlockRollback;
  import org.onap.so.db.catalog.beans.CvnfcConfigurationCustomization;
  import org.onap.so.db.catalog.client.CatalogDbClient;
  import org.onap.so.db.request.beans.InfraActiveRequests;
@@@ -67,6 -65,12 +67,12 @@@ import org.springframework.core.env.Env
  import org.springframework.stereotype.Component;
  import com.fasterxml.jackson.core.JsonProcessingException;
  import com.fasterxml.jackson.databind.ObjectMapper;
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_ERROR;
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_MESSAGE_NAME;
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_STATUS;
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.IS_CHILD_PROCESS;
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.CHILD_SVC_REQ_CORRELATION_ID;
+ import static org.onap.so.bpmn.infrastructure.service.composition.ServiceCompositionConstants.PARENT_CORRELATION_ID;
  
  @Component
  public class WorkflowActionBBTasks {
@@@ -82,9 -86,6 +88,9 @@@
      private static final String VFMODULE = "VfModule";
      private static final String CONFIGURATION_PATTERN = "(Ad|De)(.*)FabricConfiguration(.*)";
      protected String maxRetries = "mso.rainyDay.maxRetries";
 +    private static final String ROLLBACK_TO_ASSIGNED = "RollbackToAssigned";
 +    private static final String UNASSIGN = "Unassign";
 +    private static final String DELETE = "Delete";
      private static final Logger logger = LoggerFactory.getLogger(WorkflowActionBBTasks.class);
  
      @Autowired
              final boolean aLaCarte = (boolean) execution.getVariable(BBConstants.G_ALACARTE);
              final String resourceName = (String) execution.getVariable("resourceName");
              String statusMessage = (String) execution.getVariable("StatusMessage");
+             if (Boolean.TRUE.equals(execution.getVariable(IS_CHILD_PROCESS))) {
+                 String parentCorrelationId = (String) execution.getVariable(PARENT_CORRELATION_ID);
+                 logger.info("Child service request completed. Sending message to parent process with correlationId: "
+                         + parentCorrelationId);
+                 execution.getProcessEngineServices().getRuntimeService()
+                         .createMessageCorrelation(CHILD_SVC_REQ_MESSAGE_NAME)
+                         .setVariable(CHILD_SVC_REQ_STATUS, "COMPLETED").setVariable(CHILD_SVC_REQ_ERROR, "")
+                         .processInstanceVariableEquals(CHILD_SVC_REQ_CORRELATION_ID, parentCorrelationId).correlate();
+             }
              String macroAction;
              if (statusMessage == null) {
                  if (aLaCarte) {
      public void rollbackExecutionPath(DelegateExecution execution) {
          final String action = (String) execution.getVariable(BBConstants.G_ACTION);
          final String resourceName = (String) execution.getVariable("resourceName");
 -        if (!(boolean) execution.getVariable("isRollback")) {
 -            List<ExecuteBuildingBlock> flowsToExecute =
 -                    (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
 +        if ((boolean) execution.getVariable("isRollback")) {
 +            workflowAction.buildAndThrowException(execution,
 +                    "Rollback has already been called. Cannot rollback a request that is currently in the rollback state.");
 +        }
 +        List<ExecuteBuildingBlock> flowsToExecute =
 +                (List<ExecuteBuildingBlock>) execution.getVariable("flowsToExecute");
  
 -            List<ExecuteBuildingBlock> flowsToExecuteChangeBBs = flowsToExecute.stream()
 -                    .filter(buildingBlock -> buildingBlock.getBuildingBlock().getBpmnFlowName().startsWith("Change"))
 -                    .collect(Collectors.toList());
 +        List<ExecuteBuildingBlock> flowsToExecuteChangeBBs = flowsToExecute.stream()
 +                .filter(buildingBlock -> buildingBlock.getBuildingBlock().getBpmnFlowName().startsWith("Change"))
 +                .collect(Collectors.toList());
 +        List<ExecuteBuildingBlock> rollbackFlows = new ArrayList<>();
 +        int currentSequence = (int) execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
 +        int listSize = flowsToExecute.size();
 +        List<BuildingBlockRollback> bbRollbackList = catalogDbClient.getBuildingBlockRollbackEntries();
  
 -            List<ExecuteBuildingBlock> rollbackFlows = new ArrayList<>();
 -            int currentSequence = (int) execution.getVariable(BBConstants.G_CURRENT_SEQUENCE);
 -            int listSize = flowsToExecute.size();
 +        for (int i = listSize - 1; i >= 0; i--) {
 +            if (i > currentSequence - 1) {
 +                flowsToExecute.remove(i);
 +            } else {
 +                // filter bbRollbackList for bbrollback, and check if action exists, then filter by action
 +                BuildingBlock bb = flowsToExecute.get(i).getBuildingBlock();
 +                String flowName = bb.getBpmnFlowName();
 +                String scope = Objects.toString(bb.getBpmnScope(), "");
 +                String bbAction = Objects.toString(bb.getBpmnAction(), "");
 +                ExecuteBuildingBlock currentBB = (ExecuteBuildingBlock) execution.getVariable("buildingBlock");
  
 -            for (int i = listSize - 1; i >= 0; i--) {
 -                if (i > currentSequence - 1) {
 -                    flowsToExecute.remove(i);
 -                } else {
 -                    String flowName = flowsToExecute.get(i).getBuildingBlock().getBpmnFlowName();
 -                    if (flowName.startsWith("Assign")) {
 -                        flowName = flowName.replaceFirst("Assign", "Unassign");
 -                    } else if (flowName.startsWith("Create")) {
 -                        flowName = flowName.replaceFirst("Create", "Delete");
 -                    } else if (flowName.startsWith("Activate")) {
 -                        flowName = flowName.replaceFirst("Activate", "Deactivate");
 -                    } else if (flowName.startsWith("Add")) {
 -                        flowName = flowName.replaceFirst("Add", "Delete");
 -                    } else if (flowName.startsWith("VNF")) {
 -                        if (flowName.startsWith("VNFSet")) {
 -                            flowName = flowName.replaceFirst("VNFSet", "VNFUnset");
 -                        } else if (flowName.startsWith("VNFLock")) {
 -                            flowName = flowName.replaceFirst("VNFLock", "VNFUnlock");
 -                        } else if (flowName.startsWith("VNFStop")) {
 -                            flowName = flowName.replaceFirst("VNFStop", "VNFStart");
 -                        } else if (flowName.startsWith("VNFQuiesce")) {
 -                            flowName = flowName.replaceFirst("VNFQuiesce", "VNFResume");
 -                        } else {
 -                            continue;
 -                        }
 -                    } else {
 -                        continue;
 +                List<BuildingBlockRollback> filteredList = bbRollbackList.stream()
 +                        .filter(k -> k.getBuildingBlockName().equals((flowName))).collect(Collectors.toList());
 +                Optional<BuildingBlockRollback> matchedBBRollback =
 +                        "".equals(bbAction) ? filteredList.stream().findFirst()
 +                                : filteredList.stream().filter(k -> bbAction.equals(k.getAction())).findFirst();
 +                if (matchedBBRollback.isPresent()) {
 +                    final BuildingBlockRollback buildingBlockRollbackItem = matchedBBRollback.get();
 +                    String rollbackFlow = buildingBlockRollbackItem.getRollbackBuildingBlockName();
 +                    flowsToExecute.get(i).getBuildingBlock().setBpmnFlowName(rollbackFlow);
 +                    // if we have an action, search the filtered list for the bbrollback that matches the given action.
 +                    if (null != buildingBlockRollbackItem.getRollbackAction()) {
 +                        logger.info("Setting rollback_action {} for BB: {} action: {}",
 +                                buildingBlockRollbackItem.getRollbackAction(),
 +                                buildingBlockRollbackItem.getBuildingBlockName(),
 +                                buildingBlockRollbackItem.getAction());
 +                        flowsToExecute.get(i).getBuildingBlock()
 +                                .setBpmnAction(buildingBlockRollbackItem.getRollbackAction());
                      }
 -                    flowsToExecute.get(i).getBuildingBlock().setBpmnFlowName(flowName);
                      rollbackFlows.add(flowsToExecute.get(i));
                  }
              }
 +        }
  
 -            String handlingCode = (String) execution.getVariable(HANDLINGCODE);
 -            List<ExecuteBuildingBlock> rollbackFlowsFiltered = new ArrayList<>(rollbackFlows);
 -            if ("RollbackToAssigned".equals(handlingCode) || ROLLBACKTOCREATED.equals(handlingCode)
 -                    || ROLLBACKTOCREATEDNOCONFIGURATION.equals(handlingCode)) {
 -                for (ExecuteBuildingBlock rollbackFlow : rollbackFlows) {
 -                    if (rollbackFlow.getBuildingBlock().getBpmnFlowName().contains("Unassign")
 -                            && !rollbackFlow.getBuildingBlock().getBpmnFlowName().contains("FabricConfiguration")) {
 -                        rollbackFlowsFiltered.remove(rollbackFlow);
 -                    } else if (rollbackFlow.getBuildingBlock().getBpmnFlowName().contains("Delete")
 -                            && ((!rollbackFlow.getBuildingBlock().getBpmnFlowName().contains("FabricConfiguration")
 -                                    && (ROLLBACKTOCREATED.equals(handlingCode)
 -                                            || ROLLBACKTOCREATEDNOCONFIGURATION.equals(handlingCode)))
 -                                    || (rollbackFlow.getBuildingBlock().getBpmnFlowName()
 -                                            .contains("FabricConfiguration")
 -                                            && ROLLBACKTOCREATEDNOCONFIGURATION.equals(handlingCode)))) {
 -                        rollbackFlowsFiltered.remove(rollbackFlow);
 -                    }
 +        String handlingCode = (String) execution.getVariable(HANDLINGCODE);
 +        List<ExecuteBuildingBlock> rollbackFlowsFiltered = new ArrayList<>(rollbackFlows);
 +        if (ROLLBACK_TO_ASSIGNED.equals(handlingCode) || ROLLBACKTOCREATED.equals(handlingCode)
 +                || ROLLBACKTOCREATEDNOCONFIGURATION.equals(handlingCode)) {
 +            for (ExecuteBuildingBlock rollbackFlow : rollbackFlows) {
 +                if (rollbackFlow.getBuildingBlock().getBpmnFlowName().contains(UNASSIGN)
 +                        && !rollbackFlow.getBuildingBlock().getBpmnFlowName().contains(FABRIC_CONFIGURATION)) {
 +                    rollbackFlowsFiltered.remove(rollbackFlow);
 +                } else if (rollbackFlow.getBuildingBlock().getBpmnFlowName().contains(DELETE)
 +                        && ((!rollbackFlow.getBuildingBlock().getBpmnFlowName().contains(FABRIC_CONFIGURATION)
 +                                && (ROLLBACKTOCREATED.equals(handlingCode)
 +                                        || ROLLBACKTOCREATEDNOCONFIGURATION.equals(handlingCode)))
 +                                || (rollbackFlow.getBuildingBlock().getBpmnFlowName().contains(FABRIC_CONFIGURATION)
 +                                        && ROLLBACKTOCREATEDNOCONFIGURATION.equals(handlingCode)))) {
 +                    rollbackFlowsFiltered.remove(rollbackFlow);
                  }
              }
 +        }
  
 -            List<ExecuteBuildingBlock> rollbackFlowsFilteredNonChangeBBs = new ArrayList<>();
 -            if (action.equals(REPLACEINSTANCE) && resourceName.equals(VFMODULE)) {
 -                for (ExecuteBuildingBlock executeBuildingBlock : rollbackFlowsFiltered) {
 -                    if (!executeBuildingBlock.getBuildingBlock().getBpmnFlowName().startsWith("Change")) {
 -                        rollbackFlowsFilteredNonChangeBBs.add(executeBuildingBlock);
 -                    }
 +        List<ExecuteBuildingBlock> rollbackFlowsFilteredNonChangeBBs = new ArrayList<>();
 +        if (action.equals(REPLACEINSTANCE) && resourceName.equals(VFMODULE)) {
 +            for (ExecuteBuildingBlock executeBuildingBlock : rollbackFlowsFiltered) {
 +                if (!executeBuildingBlock.getBuildingBlock().getBpmnFlowName().startsWith("Change")) {
 +                    rollbackFlowsFilteredNonChangeBBs.add(executeBuildingBlock);
                  }
 -                rollbackFlowsFiltered.clear();
 -                rollbackFlowsFiltered.addAll(flowsToExecuteChangeBBs);
 -                rollbackFlowsFiltered.addAll(rollbackFlowsFilteredNonChangeBBs);
              }
 -
 -            workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
 -            execution.setVariable("isRollbackNeeded", !rollbackFlows.isEmpty());
 -            execution.setVariable("flowsToExecute", rollbackFlowsFiltered);
 -            execution.setVariable(HANDLINGCODE, "PreformingRollback");
 -            execution.setVariable("isRollback", true);
 -            execution.setVariable(BBConstants.G_CURRENT_SEQUENCE, 0);
 -            execution.setVariable(RETRY_COUNT, 0);
 -        } else {
 -            workflowAction.buildAndThrowException(execution,
 -                    "Rollback has already been called. Cannot rollback a request that is currently in the rollback state.");
 +            rollbackFlowsFiltered.clear();
 +            rollbackFlowsFiltered.addAll(flowsToExecuteChangeBBs);
 +            rollbackFlowsFiltered.addAll(rollbackFlowsFilteredNonChangeBBs);
          }
 +
 +        logger.info("List of BuildingBlocks to execute for rollback");
 +        rollbackFlowsFiltered.forEach(item -> {
 +            logger.info(item.getBuildingBlock().getBpmnFlowName());
 +        });
 +
 +        workflowActionBBFailure.updateRequestErrorStatusMessage(execution);
 +        execution.setVariable("isRollbackNeeded", !rollbackFlows.isEmpty());
 +        execution.setVariable("flowsToExecute", rollbackFlowsFiltered);
 +        execution.setVariable(HANDLINGCODE, "PreformingRollback");
 +        execution.setVariable("isRollback", true);
 +        execution.setVariable(BBConstants.G_CURRENT_SEQUENCE, 0);
 +        execution.setVariable(RETRY_COUNT, 0);
      }
  
      protected void updateInstanceId(DelegateExecution execution) {
@@@ -34,6 -34,7 +34,7 @@@ public final class WorkflowActionConsta
  
      public static final String ACTIVATE_INSTANCE = "activateInstance";
      public static final String ASSIGN_INSTANCE = "assignInstance";
+     public static final String CHILD_SERVICE = "ChildService";
      public static final String CONFIGURATION = "Configuration";
      public static final String CONTROLLER = "Controller";
      public static final String CREATE_INSTANCE = "createInstance";
@@@ -52,6 -53,5 +53,6 @@@
      public static final String VOLUMEGROUP = "VolumeGroup";
      public static final String HEALTH_CHECK = "healthCheck";
      public static final String WORKFLOW_ACTION_ERROR_MESSAGE = "WorkflowActionErrorMessage";
 +    public static final String UPGRADE_CNF = "upgradeCnf";
  
  }
@@@ -25,8 -25,12 +25,12 @@@ package org.onap.so.bpmn.infrastructure
  import com.fasterxml.jackson.core.JsonProcessingException;
  import org.camunda.bpm.engine.delegate.DelegateExecution;
  import org.javatuples.Pair;
+ import org.onap.aai.domain.yang.ComposedResource;
+ import org.onap.aai.domain.yang.ComposedResources;
  import org.onap.aai.domain.yang.GenericVnf;
  import org.onap.aai.domain.yang.Relationship;
+ import org.onap.aai.domain.yang.RelationshipData;
+ import org.onap.aai.domain.yang.RelationshipList;
  import org.onap.aai.domain.yang.ServiceInstance;
  import org.onap.aai.domain.yang.VpnBinding;
  import org.onap.aaiclient.client.aai.AAICommonObjectMapperProvider;
@@@ -38,8 -42,6 +42,8 @@@ import org.onap.so.bpmn.infrastructure.
  import org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowType;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration;
  import org.onap.so.bpmn.servicedecomposition.bbobjects.VfModule;
 +import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoNetwork;
 +import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoPnf;
  import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup;
  import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils;
  import org.onap.so.client.exception.ExceptionBuilder;
@@@ -135,7 -137,7 +139,7 @@@ public class ServiceEBBLoader 
                  resourceList = userParamsServiceTraversal.getResourceListFromUserParams(execution, userParams,
                          serviceInstanceId, requestAction);
              }
-             if (!foundRelated(resourceList)) {
+             if (!isComposedService(resourceList) && !foundRelated(resourceList)) {
                  traverseCatalogDbService(execution, sIRequest, resourceList, aaiResourceIds);
              }
          } else if ((ACTIVATE_INSTANCE.equalsIgnoreCase(requestAction)
                  || containsWorkflowType(resourceList, WorkflowType.NETWORKCOLLECTION));
      }
  
+     public boolean isComposedService(List<Resource> resourceList) {
+         return resourceList.stream().anyMatch(s -> s.getResourceType() == WorkflowType.SERVICE && s.hasParent());
+     }
      public void traverseAAIService(DelegateExecution execution, List<Resource> resourceList, String resourceId,
              List<Pair<WorkflowType, String>> aaiResourceIds) {
          try {
              var serviceResource =
                      new Resource(WorkflowType.SERVICE, serviceInstanceMSO.getServiceInstanceId(), false, null);
              serviceResource.setModelInvariantId(serviceInstanceAAI.getModelInvariantId());
 +            serviceResource.setModelVersionId(serviceInstanceAAI.getModelVersionId());
              resourceList.add(serviceResource);
+             traverseServiceInstanceChildService(resourceList, serviceResource, serviceInstanceAAI);
              traverseServiceInstanceMSOVnfs(resourceList, serviceResource, aaiResourceIds, serviceInstanceMSO);
              traverseServiceInstanceMSOPnfs(resourceList, serviceResource, aaiResourceIds, serviceInstanceMSO);
              if (serviceInstanceMSO.getNetworks() != null) {
                  for (org.onap.so.bpmn.servicedecomposition.bbobjects.L3Network network : serviceInstanceMSO
                          .getNetworks()) {
                      aaiResourceIds.add(new Pair<>(WorkflowType.NETWORK, network.getNetworkId()));
 -                    resourceList
 -                            .add(new Resource(WorkflowType.NETWORK, network.getNetworkId(), false, serviceResource));
 +                    Resource networkResource =
 +                            new Resource(WorkflowType.NETWORK, network.getNetworkId(), false, serviceResource);
 +                    ModelInfoNetwork modelInfoNetwork = network.getModelInfoNetwork();
 +                    if (modelInfoNetwork != null) {
 +                        networkResource.setModelCustomizationId(modelInfoNetwork.getModelCustomizationUUID());
 +                        networkResource.setModelVersionId(modelInfoNetwork.getModelUUID());
 +                        networkResource.setModelCustomizationId(modelInfoNetwork.getModelCustomizationUUID());
 +                    }
 +                    resourceList.add(networkResource);
                  }
              }
              if (serviceInstanceMSO.getCollection() != null) {
              GenericVnf genericVnf = bbInputSetupUtils.getAAIGenericVnf(vnf.getVnfId());
              Resource vnfResource = new Resource(WorkflowType.VNF, vnf.getVnfId(), false, serviceResource);
              vnfResource.setVnfCustomizationId(genericVnf.getModelCustomizationId());
 +            vnfResource.setModelCustomizationId(genericVnf.getModelCustomizationId());
 +            vnfResource.setModelVersionId(genericVnf.getModelVersionId());
              resourceList.add(vnfResource);
              traverseVnfModules(resourceList, vnfResource, aaiResourceIds, vnf);
              if (vnf.getVolumeGroups() != null) {
          }
          for (org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf pnf : serviceInstanceMSO.getPnfs()) {
              aaiResourceIds.add(new Pair<>(WorkflowType.PNF, pnf.getPnfId()));
 -            resourceList.add(new Resource(WorkflowType.PNF, pnf.getPnfId(), false, serviceResource));
 +            Resource resource = new Resource(WorkflowType.PNF, pnf.getPnfId(), false, serviceResource);
 +            ModelInfoPnf modelInfo = pnf.getModelInfoPnf();
 +            if (modelInfo != null) {
 +                resource.setModelVersionId(modelInfo.getModelUuid());
 +                resource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
 +            }
 +            resourceList.add(resource);
          }
      }
  
+     public void traverseServiceInstanceChildService(List<Resource> resourceList, Resource serviceResource,
+             ServiceInstance serviceInstanceAAI) {
+         ComposedResources composedResources = serviceInstanceAAI.getComposedResources();
+         if (composedResources == null) {
+             return;
+         }
+         List<ComposedResource> listOfComposedResource = composedResources.getComposedResource();
+         listOfComposedResource.forEach(composedResource -> {
+             // Get ServiceInstance from composedResource relationship List
+             RelationshipList relationshipList = composedResource.getRelationshipList();
+             if (relationshipList == null) {
+                 return;
+             }
+             List<Relationship> composedResourceRelationshipList = relationshipList.getRelationship();
+             ServiceInstance childService = new ServiceInstance();
+             composedResourceRelationshipList.forEach(composedRelation -> {
+                 if ("service-instance".equalsIgnoreCase(composedRelation.getRelatedTo())) {
+                     List<RelationshipData> rData = composedRelation.getRelationshipData();
+                     rData.forEach(data -> {
+                         if ("service-instance.service-instance-id".equalsIgnoreCase(data.getRelationshipKey())) {
+                             childService.setServiceInstanceId(data.getRelationshipValue());
+                         }
+                     });
+                     composedRelation.getRelatedToProperty().forEach(relatedToProperty -> {
+                         if ("service-instance.service-instance-name"
+                                 .equalsIgnoreCase(relatedToProperty.getPropertyKey())) {
+                             childService.setServiceInstanceName(relatedToProperty.getPropertyValue());
+                         }
+                     });
+                 }
+             });
+             if (childService.getServiceInstanceId() == null) {
+                 return;
+             }
+             Resource childServiceResource =
+                     new Resource(WorkflowType.SERVICE, childService.getServiceInstanceId(), false, serviceResource);
+             childServiceResource.setInstanceName(childService.getServiceInstanceName());
+             resourceList.add(childServiceResource);
+         });
+     }
      protected void traverseVrfConfiguration(List<Pair<WorkflowType, String>> aaiResourceIds,
              List<Resource> resourceList, Resource serviceResource, org.onap.so.db.catalog.beans.Service service,
              RelatedInstance relatedVpnBinding, RelatedInstance relatedLocalNetwork)
          for (VfModule vfModule : vnf.getVfModules()) {
              aaiResourceIds.add(new Pair<>(WorkflowType.VFMODULE, vfModule.getVfModuleId()));
              Resource resource = new Resource(WorkflowType.VFMODULE, vfModule.getVfModuleId(), false, vnfResource);
 +            org.onap.aai.domain.yang.VfModule aaiVfModule =
 +                    bbInputSetupUtils.getAAIVfModule(vnf.getVnfId(), vfModule.getVfModuleId());
 +            resource.setModelCustomizationId(aaiVfModule.getModelCustomizationId());
 +            resource.setModelInvariantId(aaiVfModule.getModelInvariantId());
              resource.setBaseVfModule(vfModule.getModelInfoVfModule().getIsBaseBoolean());
              resourceList.add(resource);
          }
@@@ -38,7 -38,6 +38,7 @@@ import org.onap.so.db.catalog.beans.Cvn
  import org.onap.so.db.catalog.beans.CvnfcCustomization;
  import org.onap.so.db.catalog.beans.VfModuleCustomization;
  import org.onap.so.db.catalog.client.CatalogDbClient;
 +import org.onap.so.serviceinstancebeans.ModelInfo;
  import org.onap.so.serviceinstancebeans.Networks;
  import org.onap.so.serviceinstancebeans.Pnfs;
  import org.onap.so.serviceinstancebeans.Service;
@@@ -94,12 -93,10 +94,15 @@@ public class UserParamsServiceTraversa
          List<Resource> resourceList = new ArrayList<>();
          Resource serviceResource =
                  new Resource(WorkflowType.SERVICE, validate.getModelInfo().getModelVersionId(), false, null);
 +        ModelInfo modelInfo = validate.getModelInfo();
 +        if (modelInfo != null) {
 +            serviceResource.setModelVersionId(modelInfo.getModelVersionId());
 +            serviceResource.setModelInvariantId(modelInfo.getModelInvariantUuid());
 +        }
          resourceList.add(serviceResource);
+         if (validate.getResources().getServices() != null) {
+             setResourceListForChildServices(execution, resourceList, serviceResource, validate);
+         }
          if (validate.getResources().getVnfs() != null) {
              setResourceListForVnfs(execution, resourceList, serviceResource, validate);
          }
          return resourceList;
      }
  
+     private void setResourceListForChildServices(DelegateExecution execution, List<Resource> resourceList,
+             Resource serviceResource, Service validate) {
+         for (Service childService : validate.getResources().getServices()) {
+             Resource childServiceResource = new Resource(WorkflowType.SERVICE,
+                     childService.getModelInfo().getModelVersionId(), false, serviceResource);
+             childServiceResource.setProcessingPriority(childService.getProcessingPriority());
+             childServiceResource.setInstanceName(childService.getInstanceName());
+             resourceList.add(childServiceResource);
+         }
+     }
      private void setResourceListForVnfs(DelegateExecution execution, List<Resource> resourceList,
              Resource serviceResource, Service validate) {
          for (Vnfs vnf : validate.getResources().getVnfs()) {
                      serviceResource);
              vnfResource.setProcessingPriority(vnf.getProcessingPriority());
              vnfResource.setInstanceName(vnf.getInstanceName());
 +            ModelInfo modelInfo = vnf.getModelInfo();
 +            if (modelInfo != null) {
 +                vnfResource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
 +                vnfResource.setModelVersionId(modelInfo.getModelVersionId());
 +            }
              resourceList.add(vnfResource);
              setResourceListForVfModules(execution, resourceList, vnfResource, validate, vnf);
          }
              foundVfModuleOrVG = true;
              Resource resource =
                      setVfModuleWorkFlowTypeToResourceList(resourceList, vnfResource, vfModuleCustomization, vfModule);
 +            if (vnf.getModelInfo() != null) {
 +                resource.setModelVersionId(vnf.getModelInfo().getModelVersionId());
 +            }
 +            resource.setVfModuleCustomizationId(vfModuleCustomization.getModelCustomizationUUID());
 +            resource.setModelCustomizationId(vfModuleCustomization.getModelCustomizationUUID());
              setConfigurationWorkFlowTypeToResourceList(resourceList, vnfResource, validate, vnf, vfModule, resource);
          }
      }
          for (Pnfs pnf : validate.getResources().getPnfs()) {
              Resource pnfResource = new Resource(WorkflowType.PNF, pnf.getModelInfo().getModelCustomizationId(), false,
                      serviceResource);
 +            ModelInfo modelInfo = pnf.getModelInfo();
 +            if (modelInfo != null) {
 +                pnfResource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
 +                pnfResource.setModelVersionId(modelInfo.getModelVersionId());
 +            }
              pnfResource.setProcessingPriority(pnf.getProcessingPriority());
              resourceList.add(pnfResource);
          }
              Resource networkResource = new Resource(WorkflowType.NETWORK,
                      network.getModelInfo().getModelCustomizationId(), false, serviceResource);
              networkResource.setProcessingPriority(network.getProcessingPriority());
 +            ModelInfo modelInfo = network.getModelInfo();
 +            if (modelInfo != null) {
 +                networkResource.setModelCustomizationId(modelInfo.getModelCustomizationUuid());
 +                networkResource.setModelVersionId(modelInfo.getModelVersionId());
 +            }
              resourceList.add(networkResource);
          }
          if (requestAction.equals(CREATE_INSTANCE)) {
@@@ -32,7 -32,11 +32,11 @@@ import org.junit.Rule
  import org.junit.Test;
  import org.junit.rules.ExpectedException;
  import org.mockito.Mock;
+ import org.onap.aai.domain.yang.ComposedResource;
+ import org.onap.aai.domain.yang.ComposedResources;
+ import org.onap.aai.domain.yang.RelatedToProperty;
  import org.onap.aai.domain.yang.Relationship;
+ import org.onap.aai.domain.yang.RelationshipData;
  import org.onap.aai.domain.yang.RelationshipList;
  import org.onap.aai.domain.yang.ServiceInstance;
  import org.onap.aaiclient.client.aai.entities.Relationships;
@@@ -239,9 -243,6 +243,9 @@@ public class ServiceEBBLoaderTest exten
          aaiConfiguration2.setConfigurationId("testConfigurationId2");
          aaiConfiguration2.setRelationshipList(relationshipList1);
  
 +        org.onap.aai.domain.yang.VfModule aaiVfModule = new org.onap.aai.domain.yang.VfModule();
 +        aaiVfModule.setIsBaseVfModule(true);
 +
          try {
              doReturn(genericVnfAai).when(mockBbInputSetupUtils).getAAIGenericVnf(genericVnf.getVnfId());
              doReturn(serviceInstanceAAI).when(mockBbInputSetupUtils).getAAIServiceInstanceById(resourceId);
                      .getConfiguration("testConfigurationId");
              doReturn(Optional.of(aaiConfiguration2)).when(mockAaiConfigurationResources)
                      .getConfiguration("testConfigurationId2");
 +            doReturn(aaiVfModule).when(mockBbInputSetupUtils).getAAIVfModule(any(), any());
              serviceEBBLoader.traverseAAIService(execution, resourceCounter, resourceId, aaiResourceIds);
              assertEquals(8, resourceCounter.size());
              assertTrue(resourceCounter.get(2).isBaseVfModule());
          resourceList.add(new Resource(WorkflowType.VFMODULE, "72d9d1cd-f46d-447a-abdb-451d6fb05fa8", false, r2));
          return resourceList;
      }
+     @Test
+     public void traverseServiceInstanceChildServiceTest() {
+         List<Resource> resourceList = new ArrayList<>();
+         Resource parentResource = new Resource(WorkflowType.SERVICE, "parentId", false, null);
+         String resourceId = "siP";
+         ServiceInstance serviceInstanceAAI = new ServiceInstance();
+         serviceInstanceAAI.setServiceInstanceId(resourceId);
+         RelationshipData relationshipData = new RelationshipData();
+         relationshipData.setRelationshipKey("service-instance.service-instance-id");
+         relationshipData.setRelationshipValue("80ced9d5-666e-406b-88f0-a05d31328b70");
+         RelatedToProperty relatedToProperty = new RelatedToProperty();
+         relatedToProperty.setPropertyKey("service-instance.service-instance-name");
+         relatedToProperty.setPropertyValue("child_euler_002");
+         RelationshipData relationshipData1 = new RelationshipData();
+         relationshipData1.setRelationshipKey("service-instance.service-instance-id");
+         relationshipData1.setRelationshipValue("fa5640af-c827-4372-baae-7f1c50fdb5ed");
+         RelatedToProperty relatedToProperty1 = new RelatedToProperty();
+         relatedToProperty1.setPropertyKey("service-instance.service-instance-name");
+         relatedToProperty.setPropertyValue("child_euler_001");
+         Relationship relationship = new Relationship();
+         Relationship relationship1 = new Relationship();
+         relationship.setRelatedTo("service-instance");
+         relationship1.setRelatedTo("service-instance");
+         relationship.getRelationshipData().add(relationshipData);
+         relationship.getRelatedToProperty().add(relatedToProperty);
+         relationship1.getRelationshipData().add(relationshipData1);
+         relationship1.getRelatedToProperty().add(relatedToProperty1);
+         RelationshipList relationshipList = new RelationshipList();
+         RelationshipList relationshipList1 = new RelationshipList();
+         relationshipList.getRelationship().add(relationship);
+         relationshipList1.getRelationship().add(relationship1);
+         ComposedResource composedResource = new ComposedResource();
+         composedResource.setRelationshipList(relationshipList);
+         ComposedResource composedResource1 = new ComposedResource();
+         composedResource1.setRelationshipList(relationshipList);
+         ComposedResources composedResources = new ComposedResources();
+         composedResources.getComposedResource().add(composedResource);
+         composedResources.getComposedResource().add(composedResource1);
+         serviceInstanceAAI.setComposedResources(composedResources);
+         serviceEBBLoader.traverseServiceInstanceChildService(resourceList, parentResource, serviceInstanceAAI);
+         assertEquals(2, resourceList.size());
+     }
  }
@@@ -42,9 -42,12 +42,12 @@@ public class Service implements Seriali
      @JsonProperty("instanceName")
      protected String instanceName;
      @JsonProperty("instanceParams")
 -    private List<Map<String, String>> instanceParams = new ArrayList<>();
 +    private List<Map<String, Object>> instanceParams = new ArrayList<>();
      @JsonProperty("resources")
      protected Resources resources;
+     @JsonProperty("processingPriority")
+     protected Integer processingPriority = 0;
  
      public ModelInfo getModelInfo() {
          return modelInfo;
          this.instanceName = instanceName;
      }
  
 -    public List<Map<String, String>> getInstanceParams() {
 +    public List<Map<String, Object>> getInstanceParams() {
          return instanceParams;
      }
  
 -    public void setInstanceParams(List<Map<String, String>> instanceParams) {
 +    public void setInstanceParams(List<Map<String, Object>> instanceParams) {
          this.instanceParams = instanceParams;
      }
  
          this.resources = resources;
      }
  
+     public Integer getProcessingPriority() {
+         return processingPriority;
+     }
+     public void setProcessingPriority(Integer processingPriority) {
+         this.processingPriority = processingPriority;
+     }
      @Override
      public String toString() {
          return "Service [modelInfo=" + modelInfo + ", cloudConfiguration=" + cloudConfiguration + ", instanceName="
-                 + instanceName + ", instanceParams=" + instanceParams + ", resources=" + resources + "]";
+                 + instanceName + ", instanceParams=" + instanceParams + ", resources=" + resources
+                 + ", processingPriority=" + processingPriority + "]";
      }
  }