Merge "JUnit tests for BBInputSetup"
[so.git] / asdc-controller / src / main / java / org / onap / so / asdc / installer / heat / ToscaResourceInstaller.java
index f8d9d6c..5af427a 100644 (file)
@@ -5,6 +5,8 @@
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
  * ================================================================================
+ * Modifications Copyright (c) 2019 Samsung
+ * ================================================================================
  * 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
@@ -51,6 +53,7 @@ import org.onap.sdc.toscaparser.api.Property;
 import org.onap.sdc.toscaparser.api.RequirementAssignment;
 import org.onap.sdc.toscaparser.api.RequirementAssignments;
 import org.onap.sdc.toscaparser.api.elements.Metadata;
+import org.onap.sdc.toscaparser.api.elements.StatefulEntityType;
 import org.onap.sdc.toscaparser.api.functions.GetInput;
 import org.onap.sdc.toscaparser.api.parameters.Input;
 import org.onap.sdc.utils.DistributionStatusEnum;
@@ -121,9 +124,12 @@ import org.onap.so.db.request.beans.WatchdogServiceModVerIdLookup;
 import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatusRepository;
 import org.onap.so.db.request.data.repository.WatchdogDistributionStatusRepository;
 import org.onap.so.db.request.data.repository.WatchdogServiceModVerIdLookupRepository;
+import org.onap.so.logger.ErrorCode;
 import org.onap.so.logger.MessageEnum;
-import org.onap.so.logger.MsoLogger;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.orm.ObjectOptimisticLockingFailureException;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -133,6 +139,10 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 @Component
 public class ToscaResourceInstaller {
 
+       protected static final String NODES_VRF_ENTRY = "org.openecomp.nodes.VRFEntry";
+
+       protected static final String VLAN_NETWORK_RECEPTOR = "org.openecomp.nodes.VLANNetworkReceptor";
+
        protected static final String ALLOTTED_RESOURCE = "Allotted Resource";
 
        protected static final String MULTI_STAGE_DESIGN = "multi_stage_design";
@@ -220,7 +230,7 @@ public class ToscaResourceInstaller {
        @Autowired
        protected ExternalServiceToInternalServiceRepository externalServiceToInternalServiceRepository;
        
-       protected static final MsoLogger logger = MsoLogger.getMsoLogger (MsoLogger.Catalog.ASDC,ToscaResourceInstaller.class);
+       protected static final Logger logger = LoggerFactory.getLogger(ToscaResourceInstaller.class);
 
        public boolean isResourceAlreadyDeployed(VfResourceStructure vfResourceStruct) throws ArtifactInstallerException {
                boolean status = false;
@@ -256,15 +266,16 @@ public class ToscaResourceInstaller {
                        }
                        return status;
                } catch (Exception e) {
-                       logger.error(MessageEnum.ASDC_ARTIFACT_CHECK_EXC, "", "", MsoLogger.ErrorCode.SchemaError,
+                       logger
+                               .error("{} {} {}", MessageEnum.ASDC_ARTIFACT_CHECK_EXC.toString(), ErrorCode.SchemaError.getValue(),
                                        "Exception - isResourceAlreadyDeployed");
                        throw new ArtifactInstallerException("Exception caught during checking existence of the VNF Resource.", e);
                }
        }
 
        public void installTheComponentStatus(IStatusData iStatus) throws ArtifactInstallerException {
-               logger.debug("Entering installTheComponentStatus for distributionId " + iStatus.getDistributionID()
-                               + " and ComponentName " + iStatus.getComponentName());
+               logger.debug("Entering installTheComponentStatus for distributionId {} and ComponentName {}",
+                       iStatus.getDistributionID(), iStatus.getComponentName());
 
                try {
                        WatchdogComponentDistributionStatus cdStatus = new WatchdogComponentDistributionStatus(iStatus.getDistributionID(),
@@ -273,7 +284,7 @@ public class ToscaResourceInstaller {
                        watchdogCDStatusRepository.save(cdStatus);
 
                } catch (Exception e) {
-                       logger.debug("Exception caught in installTheComponentStatus " + e.getMessage());
+                       logger.debug("Exception caught in installTheComponentStatus {}", e.getMessage());
                        throw new ArtifactInstallerException("Exception caught in installTheComponentStatus " + e.getMessage());
                }
        }
@@ -289,20 +300,7 @@ public class ToscaResourceInstaller {
                List<ASDCElementInfo> artifactListForLogging = new ArrayList<>();
                try {
                        createToscaCsar(toscaResourceStruct);                   
-                       createService(toscaResourceStruct, vfResourceStruct);                   
-                       Service service = toscaResourceStruct.getCatalogService();                              
-                       List<NodeTemplate> vfNodeTemplatesList = toscaResourceStruct.getSdcCsarHelper().getServiceVfList();
-                       
-               
-                       for (NodeTemplate nodeTemplate : vfNodeTemplatesList) { 
-                               
-                               Metadata metadata = nodeTemplate.getMetaData();         
-                               String serviceType = toscaResourceStruct.getCatalogService().getServiceType();                  
-                               String vfCustomizationCategory = toscaResourceStruct.getSdcCsarHelper()
-                                               .getMetadataPropertyValue(metadata, SdcPropertyNames.PROPERTY_NAME_CATEGORY);
-                               processVfModules(toscaResourceStruct, vfResourceStructure, service, nodeTemplate, metadata,
-                                               vfCustomizationCategory);
-                       }
+                       Service service = createService(toscaResourceStruct, vfResourceStruct);
                        
                        processResourceSequence(toscaResourceStruct, service);
                        processVFResources(toscaResourceStruct, service, vfResourceStructure);
@@ -336,18 +334,18 @@ public class ToscaResourceInstaller {
 
                        if (dbExceptionToCapture instanceof ConstraintViolationException
                                        || dbExceptionToCapture instanceof LockAcquisitionException) {
-                               logger.warn(MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED,
-                                               vfResourceStructure.getResourceInstance().getResourceName(),
-                                               vfResourceStructure.getNotification().getServiceVersion(), "", MsoLogger.ErrorCode.DataError, "Exception - ASCDC Artifact already deployed", e);
+                               logger.warn("{} {} {} {} {}", MessageEnum.ASDC_ARTIFACT_ALREADY_DEPLOYED.toString(),
+                                       vfResourceStructure.getResourceInstance().getResourceName(),
+                                       vfResourceStructure.getNotification().getServiceVersion(), ErrorCode.DataError.getValue(),
+                                       "Exception - ASCDC Artifact already deployed", e);
                        } else {
                                String elementToLog = (!artifactListForLogging.isEmpty()
                                                ? artifactListForLogging.get(artifactListForLogging.size() - 1).toString()
                                                : "No element listed");
-                               logger.error(MessageEnum.ASDC_ARTIFACT_INSTALL_EXC, elementToLog, "", "", MsoLogger.ErrorCode.DataError,
-                                               "Exception caught during installation of "
-                                                               + vfResourceStructure.getResourceInstance().getResourceName()
-                                                               + ". Transaction rollback",
-                                               e);
+                               logger.error("{} {} {} {}", MessageEnum.ASDC_ARTIFACT_INSTALL_EXC.toString(), elementToLog,
+                                       ErrorCode.DataError.getValue(),
+                                       "Exception caught during installation of " + vfResourceStructure.getResourceInstance().getResourceName()
+                                               + ". Transaction rollback", e);
                                throw new ArtifactInstallerException("Exception caught during installation of "
                                                + vfResourceStructure.getResourceInstance().getResourceName() + ". Transaction rollback.", e);
                        }
@@ -530,6 +528,62 @@ public class ToscaResourceInstaller {
                        }
                }
        }
+       
+       
+       protected ConfigurationResource getConfigurationResource(NodeTemplate nodeTemplate) {
+               Metadata metadata = nodeTemplate.getMetaData();
+               ConfigurationResource configResource = new ConfigurationResource();
+               configResource.setModelName(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
+               configResource.setModelInvariantUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
+               configResource.setModelUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+               configResource.setModelVersion(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
+               configResource.setDescription(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
+               configResource.setToscaNodeType(nodeTemplate.getType());
+               return configResource;
+       }
+       
+       protected ConfigurationResourceCustomization getConfigurationResourceCustomization(NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure, 
+                       ServiceProxyResourceCustomization spResourceCustomization ) {
+               Metadata metadata = nodeTemplate.getMetaData();
+               
+               ConfigurationResource configResource = getConfigurationResource(nodeTemplate);
+               
+               ConfigurationResourceCustomization configCustomizationResource = new ConfigurationResourceCustomization();
+               
+               Set<ConfigurationResourceCustomization> configResourceCustomizationSet = new HashSet<>();
+               
+               configCustomizationResource.setModelCustomizationUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
+               configCustomizationResource.setModelInstanceName(nodeTemplate.getName());
+               
+               configCustomizationResource.setNfFunction(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION));
+               configCustomizationResource.setNfRole(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE));
+               configCustomizationResource.setNfType(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE));
+               configCustomizationResource.setServiceProxyResourceCustomizationUUID(spResourceCustomization.getModelCustomizationUUID());
+       
+               configCustomizationResource.setConfigurationResource(configResource);
+               configResourceCustomizationSet.add(configCustomizationResource);
+
+               configResource.setConfigurationResourceCustomization(configResourceCustomizationSet);   
+               return configCustomizationResource;
+       }
+       
+       
+       protected Optional<ConfigurationResourceCustomization> getVnrNodeTemplate(List<NodeTemplate> configurationNodeTemplatesList,  
+                       ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization) {
+               Optional<ConfigurationResourceCustomization> configurationResourceCust = Optional.empty();
+               for (NodeTemplate nodeTemplate : configurationNodeTemplatesList) {
+                       StatefulEntityType entityType = nodeTemplate.getTypeDefinition();
+                       String type = entityType.getType();
+                       
+                       if(VLAN_NETWORK_RECEPTOR.equals(type)) {
+                               configurationResourceCust= Optional.of(getConfigurationResourceCustomization(nodeTemplate, 
+                                               toscaResourceStructure,spResourceCustomization));
+                               break;
+                       }
+               }
+               
+               return configurationResourceCust;
+       }
                
        protected void processServiceProxyAndConfiguration(ToscaResourceStructure toscaResourceStruct, Service service) {
                
@@ -544,16 +598,16 @@ public class ToscaResourceInstaller {
                
                if (serviceProxyResourceList != null) {
                        for (NodeTemplate spNode : serviceProxyResourceList) {
-                               serviceProxy = createServiceProxy(spNode, service, toscaResourceStruct);
-                                                               
+                               serviceProxy = createServiceProxy(spNode, service, toscaResourceStruct);                                                                
                                serviceProxyList.add(serviceProxy);
-
+                               Optional<ConfigurationResourceCustomization> vnrResourceCustomization = getVnrNodeTemplate(configurationNodeTemplatesList,toscaResourceStruct,serviceProxy);
+                               
                                for (NodeTemplate configNode : configurationNodeTemplatesList) {
                                                                                
                                                List<RequirementAssignment> requirementsList = toscaResourceStruct.getSdcCsarHelper().getRequirementsOf(configNode).getAll();
                                                for (RequirementAssignment requirement :  requirementsList) {
                                                        if (requirement.getNodeTemplateName().equals(spNode.getName())) {
-                                                               ConfigurationResourceCustomization configurationResource = createConfiguration(configNode, toscaResourceStruct, serviceProxy);
+                                                               ConfigurationResourceCustomization configurationResource = createConfiguration(configNode, toscaResourceStruct, serviceProxy, vnrResourceCustomization);
                                                                
                                                                Optional<ConfigurationResourceCustomization> matchingObject = configurationResourceList.stream()
                                                                            .filter(configurationResourceCustomization -> configNode.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID).equals(configurationResource.getModelCustomizationUUID()))
@@ -701,10 +755,17 @@ public class ToscaResourceInstaller {
                                distributionNotification, consumerId);
                watchdogModVerIdLookupRepository.saveAndFlush(modVerIdLookup);
                
-               WatchdogDistributionStatus distributionStatus = new WatchdogDistributionStatus(distributionId);
-               watchdogDistributionStatusRepository.saveAndFlush(distributionStatus);
+               try{
+               
+                       WatchdogDistributionStatus distributionStatus = new WatchdogDistributionStatus(distributionId);
+                       watchdogDistributionStatusRepository.saveAndFlush(distributionStatus);
+                       
+               } catch(ObjectOptimisticLockingFailureException e){
+                       logger.debug("ObjectOptimisticLockingFailureException in processWatchdog : " + e.toString());
+                       throw e;
+               }
        }
-
+       
        protected void extractHeatInformation(ToscaResourceStructure toscaResourceStruct,
                        VfResourceStructure vfResourceStructure) {
                for (VfModuleArtifact vfModuleArtifact : vfResourceStructure.getArtifactsMapByUUID().values()) {
@@ -730,10 +791,9 @@ public class ToscaResourceInstaller {
                                break;
                        case ASDCConfiguration.HEAT_NET:
                        case ASDCConfiguration.OTHER:
-                               logger.warn(MessageEnum.ASDC_ARTIFACT_TYPE_NOT_SUPPORT,
-                                               vfModuleArtifact.getArtifactInfo().getArtifactType() + "(Artifact Name:"
-                                                               + vfModuleArtifact.getArtifactInfo().getArtifactName() + ")",
-                                               "", "", MsoLogger.ErrorCode.DataError, "Artifact type not supported");
+                               logger.warn("{} {} {} {}", MessageEnum.ASDC_ARTIFACT_TYPE_NOT_SUPPORT.toString(),
+                                       vfModuleArtifact.getArtifactInfo().getArtifactType() + "(Artifact Name:" + vfModuleArtifact.getArtifactInfo()
+                                               .getArtifactName() + ")", ErrorCode.DataError.getValue(), "Artifact type not supported");
                                break;
                        default:
                                break;
@@ -881,8 +941,6 @@ public class ToscaResourceInstaller {
        protected Service createService(ToscaResourceStructure toscaResourceStructure,
                        VfResourceStructure vfResourceStructure) {
 
-               toscaResourceStructure.getServiceMetadata();
-
                Metadata serviceMetadata = toscaResourceStructure.getServiceMetadata();
 
                Service service = new Service();
@@ -945,32 +1003,26 @@ public class ToscaResourceInstaller {
                return spCustomizationResource;
        }
        
-       protected ConfigurationResourceCustomization createConfiguration(NodeTemplate nodeTemplate, ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization) {
+       protected ConfigurationResourceCustomization createConfiguration(NodeTemplate nodeTemplate, 
+                       ToscaResourceStructure toscaResourceStructure, ServiceProxyResourceCustomization spResourceCustomization,
+                       Optional<ConfigurationResourceCustomization> vnrResourceCustomization) {
 
-               Metadata metadata = nodeTemplate.getMetaData();
-               
-               ConfigurationResource configResource = new ConfigurationResource();
-               
-               configResource.setModelName(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
-               configResource.setModelInvariantUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
-               configResource.setModelUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
-               configResource.setModelVersion(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_VERSION));
-               configResource.setDescription(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION));
-               configResource.setToscaNodeType(nodeTemplate.getType());
+               ConfigurationResourceCustomization configCustomizationResource = getConfigurationResourceCustomization(nodeTemplate, 
+                               toscaResourceStructure,spResourceCustomization);
                
-               ConfigurationResourceCustomization configCustomizationResource = new ConfigurationResourceCustomization();
+               ConfigurationResource configResource = getConfigurationResource(nodeTemplate);
                
                Set<ConfigurationResourceCustomization> configResourceCustomizationSet = new HashSet<>();
                
-               configCustomizationResource.setModelCustomizationUUID(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
-               configCustomizationResource.setModelInstanceName(nodeTemplate.getName());
-               
-               configCustomizationResource.setNfFunction(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION));
-               configCustomizationResource.setNfRole(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFROLE));
-               configCustomizationResource.setNfType(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(nodeTemplate, SdcPropertyNames.PROPERTY_NAME_NFTYPE));
-               configCustomizationResource.setServiceProxyResourceCustomizationUUID(spResourceCustomization.getModelCustomizationUUID());
-               configCustomizationResource.setConfigResourceCustomization(configCustomizationResource);
+               StatefulEntityType entityType = nodeTemplate.getTypeDefinition();
+               String type = entityType.getType();
+               
+               if(NODES_VRF_ENTRY.equals(type)) {
+                       configCustomizationResource.setConfigResourceCustomization(vnrResourceCustomization.orElse(null));
+               }
+                       
                configCustomizationResource.setConfigurationResource(configResource);
+               
                configResourceCustomizationSet.add(configCustomizationResource);
 
                configResource.setConfigurationResourceCustomization(configResourceCustomizationSet);   
@@ -1060,7 +1112,17 @@ public class ToscaResourceInstaller {
                
                }
 
-               if(networkResourceCustomization==null || !networkUUIDsMatch){
+               if (networkResourceCustomization!=null && !networkUUIDsMatch){
+                       
+                       NetworkResource networkResource = createNetworkResource(networkNodeTemplate, toscaResourceStructure, heatTemplate,
+                                       aicMax, aicMin);
+                       
+                       networkResourceCustomization.setNetworkResource(networkResource);                       
+                                       
+                       networkCustomizationRepo.saveAndFlush(networkResourceCustomization);
+                       
+               }
+               else if(networkResourceCustomization==null){
                        networkResourceCustomization = createNetworkResourceCustomization(networkNodeTemplate,
                                        toscaResourceStructure);
                                        
@@ -1421,15 +1483,12 @@ public class ToscaResourceInstaller {
                        vfModuleMemberName = node.getName();
                }
                
-
                // Extract CVFC lists
                List<NodeTemplate> cvfcList = toscaResourceStructure.getSdcCsarHelper().getNodeTemplateBySdcType(vfTemplate, SdcTypes.CVFC);
                                                
                for(NodeTemplate cvfcTemplate : cvfcList) {
-                                                                                               
-                       CvnfcCustomization existingCvnfcCustomization = findExistingCvfc(existingCvnfcSet, cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
                        
-                       if(existingCvnfcCustomization == null && (vfModuleMemberName != null && vfModuleMemberName.equalsIgnoreCase(cvfcTemplate.getName()))){
+                       if(vfModuleMemberName != null && vfModuleMemberName.equalsIgnoreCase(cvfcTemplate.getName())){
                        
                        //Extract associated VFC - Should always be just one
                        List<NodeTemplate> vfcList = toscaResourceStructure.getSdcCsarHelper().getNodeTemplateBySdcType(cvfcTemplate, SdcTypes.VFC);
@@ -1440,6 +1499,12 @@ public class ToscaResourceInstaller {
                                VnfcCustomization existingVnfcCustomization = null;
                                
                                existingVnfcCustomization = findExistingVfc(existingVnfcSet, vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
+                               
+                               if(existingVnfcCustomization == null){
+                                       vnfcCustomization = new VnfcCustomization();
+                               } else {
+                                       vnfcCustomization = existingVnfcCustomization;
+                               }
                                        
                                // Only Add Abstract VNFC's to our DB, ignore all others
                                if(existingVnfcCustomization == null && vfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_SUBCATEGORY).equalsIgnoreCase("Abstract")){
@@ -1462,32 +1527,34 @@ public class ToscaResourceInstaller {
                        // This check is needed incase the VFC subcategory is something other than Abstract.  In that case we want to skip adding that record to our DB.
                        if(vnfcCustomization.getModelCustomizationUUID() != null){
                                
-                               CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
-                               cvnfcCustomization.setModelCustomizationUUID(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
-                               cvnfcCustomization.setModelInstanceName(cvfcTemplate.getName());
-                               cvnfcCustomization.setModelInvariantUUID(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
-                               cvnfcCustomization.setModelName(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
-                               cvnfcCustomization.setModelUUID(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+                                       CvnfcCustomization cvnfcCustomization = new CvnfcCustomization();
        
-                               cvnfcCustomization.setModelVersion(
-                                               testNull(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
-                               cvnfcCustomization.setDescription(
-                                               testNull(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
-                               cvnfcCustomization.setToscaNodeType(testNull(cvfcTemplate.getType()));
-                               
-                               if(existingVnfcCustomization != null){
-                                       cvnfcCustomization.setVnfcCustomization(existingVnfcCustomization);
-                               }else{
-                                       cvnfcCustomization.setVnfcCustomization(vnfcCustomization);
-                               }
-                               
-                               cvnfcCustomization.setNfcFunction(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfTemplate, SdcPropertyNames.PROPERTY_NAME_NFFUNCTION));
-                               cvnfcCustomization.setNfcNamingCode(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(vfTemplate, "nf_naming_code"));
-                               cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization);
-                               cvnfcCustomization.setVnfResourceCustomization(vnfResource);
-
-                               cvnfcCustomizations.add(cvnfcCustomization);
-                               existingCvnfcSet.add(cvnfcCustomization);
+                                       cvnfcCustomization = new CvnfcCustomization();
+                                       cvnfcCustomization.setModelCustomizationUUID(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID));
+                                       cvnfcCustomization.setModelInstanceName(cvfcTemplate.getName());
+                                       cvnfcCustomization.setModelInvariantUUID(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID));
+                                       cvnfcCustomization.setModelName(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_NAME));
+                                       cvnfcCustomization.setModelUUID(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID));
+               
+                                       cvnfcCustomization.setModelVersion(
+                                                       testNull(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_VERSION)));
+                                       cvnfcCustomization.setDescription(
+                                                       testNull(cvfcTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
+                                       cvnfcCustomization.setToscaNodeType(testNull(cvfcTemplate.getType()));
+                                       
+                                       if(existingVnfcCustomization != null){
+                                               cvnfcCustomization.setVnfcCustomization(existingVnfcCustomization);
+                                       }else{
+                                               cvnfcCustomization.setVnfcCustomization(vnfcCustomization);
+                                       }
+                                       
+                                       cvnfcCustomization.setNfcFunction(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(cvfcTemplate, "nfc_function"));
+                                       cvnfcCustomization.setNfcNamingCode(toscaResourceStructure.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(cvfcTemplate, "nfc_naming_code"));
+                                       cvnfcCustomization.setVfModuleCustomization(vfModuleCustomization);
+                                       cvnfcCustomization.setVnfResourceCustomization(vnfResource);
+       
+                                       cvnfcCustomizations.add(cvnfcCustomization);
+                                       existingCvnfcSet.add(cvnfcCustomization);                               
                        
                        //*****************************************************************************************************************************************
                        //* Extract Fabric Configuration
@@ -1510,19 +1577,16 @@ public class ToscaResourceInstaller {
                                }                               
                                
                                VnfVfmoduleCvnfcConfigurationCustomization vnfVfmoduleCvnfcConfigurationCustomization = createVfCnvfConfigCustomization(fabricTemplate, toscaResourceStructure, 
-                                                                                                                                                          vnfResource, vfModuleCustomization, cvnfcCustomization, fabricConfig, vfTemplate);
-                               
+                                                                                                                                                          vnfResource, vfModuleCustomization, cvnfcCustomization, fabricConfig, vfTemplate, vfModuleMemberName);
                                vnfVfmoduleCvnfcConfigurationCustomizations.add(vnfVfmoduleCvnfcConfigurationCustomization);
                        }
-                       
+                       cvnfcCustomization.setVnfVfmoduleCvnfcConfigurationCustomization(vnfVfmoduleCvnfcConfigurationCustomizations);
                        }
                        
                   }
                        
                  }
-                       
                } 
-               
                vfModuleCustomization.setCvnfcCustomization(cvnfcCustomizations);
                vfModuleCustomization.setVnfVfmoduleCvnfcConfigurationCustomization(vnfVfmoduleCvnfcConfigurationCustomizations);
                
@@ -1531,11 +1595,10 @@ public class ToscaResourceInstaller {
        
        protected VnfVfmoduleCvnfcConfigurationCustomization createVfCnvfConfigCustomization(NodeTemplate fabricTemplate, ToscaResourceStructure toscaResourceStruct, 
             VnfResourceCustomization vnfResource, VfModuleCustomization vfModuleCustomization, CvnfcCustomization cvnfcCustomization,
-            ConfigurationResource configResource, NodeTemplate vfTemplate) {
+            ConfigurationResource configResource, NodeTemplate vfTemplate, String vfModuleMemberName) {
 
-               Metadata fabricMetadata = fabricTemplate.getMetaData();
-               
-               
+               Metadata fabricMetadata = fabricTemplate.getMetaData(); 
+                               
                VnfVfmoduleCvnfcConfigurationCustomization vfModuleToCvnfc = new VnfVfmoduleCvnfcConfigurationCustomization();
                
                vfModuleToCvnfc.setConfigurationResource(configResource);
@@ -1550,14 +1613,20 @@ public class ToscaResourceInstaller {
                if(policyList != null){
                        for(Policy policy : policyList){
                                
-                               Map<String, Object> propMap = policy.getPolicyProperties();
+                               for(String policyCvfcTarget : policy.getTargets()){
+                                       
+                                       if(policyCvfcTarget.equalsIgnoreCase(vfModuleMemberName)){
+                               
+                                               Map<String, Object> propMap = policy.getPolicyProperties();
 
-                               if(propMap.get("type").toString().equalsIgnoreCase("Fabric Policy")){
-                                       vfModuleToCvnfc.setPolicyName(propMap.get("name").toString());
-                               }
-                       }
-               }                       
-                                                                       
+                                               if(propMap.get("type").toString().equalsIgnoreCase("Fabric Policy")){
+                                                       vfModuleToCvnfc.setPolicyName(propMap.get("name").toString());
+                                               }
+                                       }
+                           }
+                   }                   
+               }
+               
                vfModuleToCvnfc.setConfigurationFunction(toscaResourceStruct.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(fabricTemplate, "function"));
                vfModuleToCvnfc.setConfigurationRole(toscaResourceStruct.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(fabricTemplate, "role"));
                vfModuleToCvnfc.setConfigurationType(toscaResourceStruct.getSdcCsarHelper().getNodeTemplatePropertyLeafValue(fabricTemplate, "type"));