import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
/**
fileNameContentMap.getFileList().stream()
.filter(fileName -> !(fileName.equals(SdcCommon.MANIFEST_NAME))).forEach(
- fileName -> heatToToscaTranslator
- .addFile(fileName, FileUtils.toByteArray
- (fileNameContentMap.getFileContent(fileName))));
+ fileName -> heatToToscaTranslator
+ .addFile(fileName, FileUtils.toByteArray
+ (fileNameContentMap.getFileContent(fileName))));
Map<String, List<ErrorMessage>> errors = heatToToscaTranslator.validate();
if (MapUtils.isNotEmpty(MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, errors))) {
}
private static boolean isNestedVlanResource(String nestedHeatFileName,
- TranslationContext translationContext) {
+ TranslationContext translationContext) {
HeatOrchestrationTemplate nestedHeatOrchestrationTemplate = new YamlUtil()
.yamlToObject(translationContext.getFileContent(nestedHeatFileName),
HeatOrchestrationTemplate.class);
public static String getSubInterfaceResourceType(Resource resource) {
if (!HeatToToscaUtil.isYamlFile(resource.getType())) {
- return ((Map) resource.getProperties()
+ return ((Map) resource.getProperties()
.get(HeatConstants.RESOURCE_DEF_PROPERTY_NAME))
.get(HeatConstants.RESOURCE_DEF_TYPE_PROPERTY_NAME)
.toString();
Map<String, String> parentPortPropertyValue = (Map) parentPortObj;
if (parentPortPropertyValue.keySet().contains(ResourceReferenceFunctions
.GET_RESOURCE.getFunction())) {
- return ResourceTranslationBase.getResourceTranslatedId(subInterfaceTo.getHeatFileName(),
- subInterfaceTo.getHeatOrchestrationTemplate(),
- parentPortPropertyValue.get(ResourceReferenceFunctions.GET_RESOURCE.getFunction()),
- subInterfaceTo.getContext());
+ return ResourceTranslationBase.getResourceTranslatedId(subInterfaceTo.getHeatFileName(),
+ subInterfaceTo.getHeatOrchestrationTemplate(),
+ parentPortPropertyValue.get(ResourceReferenceFunctions.GET_RESOURCE.getFunction()),
+ subInterfaceTo.getContext());
}
}
}
//set substitution node type requirements
exposedRequirementsDefinition =
toscaAnalyzerService.calculateExposedRequirements(nodeTypeRequirementsDefinition,
- nodeTemplateRequirementsAssignment);
+ nodeTemplateRequirementsAssignment);
DataModelUtil
.addSubstitutionNodeTypeRequirements(substitutionNodeType, exposedRequirementsDefinition,
- nodeTemplateId);
+ nodeTemplateId);
//get capabilities
addNodeTypeCapabilitiesToSubMapping(nodeTypeCapabilitiesDefinition,
exposedCapabilitiesDefinition =
toscaAnalyzerService.calculateExposedCapabilities(nodeTypeCapabilitiesDefinition,
- fullFilledRequirementsDefinition);
+ fullFilledRequirementsDefinition);
DataModelUtil.addNodeTypeCapabilitiesDef(substitutionNodeType, exposedCapabilitiesDefinition);
return substitutionMapping;
}
.stream()
.forEach(capabilityNodeEntry ->
addCapabilityToSubMapping(
- templateName, capabilityNodeEntry, nodeTypeCapabilitiesDefinition, capabilitySubstitutionMapping));
+ templateName, capabilityNodeEntry, nodeTypeCapabilitiesDefinition, capabilitySubstitutionMapping));
}
}
//Method evaluate the network role from sub interface node template id, designed considering
// only single sub interface present in nested file else it will return null
public static Optional<String> getNetworkRoleFromResource(Resource resource,
- TranslationContext translationContext) {
+ TranslationContext translationContext) {
Optional<String> networkRole = Optional.empty();
Optional<String> nestedHeatFileName = HeatToToscaUtil.getNestedHeatFileName(resource);
if (MapUtils.isNotEmpty(nestedHeatOrchestrationTemplate.getResources())) {
ContrailV2VirtualMachineInterfaceHelper contrailV2VirtualMachineInterfaceHelper =
new ContrailV2VirtualMachineInterfaceHelper();
- Optional<Map.Entry<String, Resource>> vlanSubinterfaceResource = nestedHeatOrchestrationTemplate
+ Optional<Map.Entry<String, Resource>> vlanSubInterfaceResource = nestedHeatOrchestrationTemplate
.getResources().entrySet().stream()
.filter(resourceEntry -> contrailV2VirtualMachineInterfaceHelper
.isVlanSubInterfaceResource(resourceEntry.getValue()))
.findFirst();
- if (vlanSubinterfaceResource.isPresent()) {
- Map.Entry<String, Resource> vlanSubinterfaceResourceEntry = vlanSubinterfaceResource.get();
- networkRole = evaluateNetworkRoleFromResourceId(vlanSubinterfaceResourceEntry.getKey(),
- vlanSubinterfaceResourceEntry.getValue().getType());
+ if (vlanSubInterfaceResource.isPresent()) {
+ Map.Entry<String, Resource> vlanSubInterfaceResourceEntry = vlanSubInterfaceResource.get();
+ networkRole = evaluateNetworkRoleFromResourceId(vlanSubInterfaceResourceEntry.getKey(),
+ vlanSubInterfaceResourceEntry.getValue().getType());
}
}
return networkRole;
}
public static Optional<String> evaluateNetworkRoleFromResourceId(String resourceId, String resourceType) {
- String[] splitStr = resourceId.toLowerCase().split(UNDERSCORE);
- List<String> splitList = Arrays.asList(splitStr);
-
if (resourceType.equals(HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource())) {
- if (splitList.contains(VMI)) {
- return Optional.of(splitList.get(splitList.indexOf(VMI) - 1));
- }
+ return Optional.ofNullable(extractNetworkRoleFromContrailPortId(resourceId));
}
if (resourceType.equals(HeatResourcesTypes.NEUTRON_PORT_RESOURCE_TYPE.getHeatResource())) {
- if (splitList.contains(NEUTRON_PORT_IDENTIFIER)) {
- return Optional.of(splitList.get(splitList.indexOf(NEUTRON_PORT_IDENTIFIER) - 1));
- }
+ return Optional.ofNullable(extractNetworkRoleFromNeutronPortId(resourceId));
}
return Optional.empty();
}
+
+ private static String extractNetworkRoleFromContrailPortId(String portResourceId) {
+ String vmiResourceIdRegex = "(\\w+)(_\\d+){0,1}_(\\w+)_vmi(_\\d+){0,1}";
+ String vmiIntResourceIdRegex = "(\\w+)(_\\d+){0,1}_int_(\\w+)_vmi(_\\d+){0,1}";
+
+ String portNetworkRole = getPortNetworkRole(portResourceId, vmiResourceIdRegex);
+ String portIntNetworkRole = getPortNetworkRole(portResourceId, vmiIntResourceIdRegex);
+
+ return Objects.nonNull(portNetworkRole) ? portNetworkRole : portIntNetworkRole;
+ }
+
+
+ private static String extractNetworkRoleFromNeutronPortId(String portResourceId) {
+ String portResourceIdRegex = "(\\w+)(_\\d+){0,1}_(\\w+)_port(_\\d+){0,1}";
+ String portIntResourceIdRegex = "(\\w+)(_\\d+){0,1}_int_(\\w+)_port(_\\d+){0,1}";
+
+ String portNetworkRole = getPortNetworkRole(portResourceId, portResourceIdRegex);
+ String portIntNetworkRole = getPortNetworkRole(portResourceId, portIntResourceIdRegex);
+
+ return Objects.nonNull(portNetworkRole) ? portNetworkRole : portIntNetworkRole;
+ }
+
+ private static String getPortNetworkRole(String portResourceId, String portIdRegex) {
+ Pattern pattern = Pattern.compile(portIdRegex);
+ Matcher matcher = pattern.matcher(portResourceId);
+ if (matcher.matches()) {
+ String networkRole = matcher.group(3);
+ //Assuming network role will not contain ONLY digits
+ if (!networkRole.matches("\\d+")) {
+ return matcher.group(3);
+ }
+ }
+ return null;
+ }
+
}
package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.ListMultimap;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
.getFilePortConsolidationData(MAIN_SERVICE_TEMPLATE_YAML)
.getPortTemplateConsolidationData(PORT_NODE_TEMPLATE_ID_FOR_ATTR_TEST));
+ PortTemplateConsolidationData portTemplateConsolidationData =
+ this.translationContext.getConsolidationData().getPortConsolidationData()
+ .getFilePortConsolidationData(MAIN_SERVICE_TEMPLATE_YAML)
+ .getPortTemplateConsolidationData(PORT_NODE_TEMPLATE_ID_FOR_ATTR_TEST);
+ ListMultimap<String, SubInterfaceTemplateConsolidationData> subInfMap = ArrayListMultimap.create();
+ portTemplateConsolidationData.copyMappedInto(subInfMap);
List<SubInterfaceTemplateConsolidationData> subInfList =
- this.translationContext.getConsolidationData().getPortConsolidationData()
- .getFilePortConsolidationData(MAIN_SERVICE_TEMPLATE_YAML)
- .getPortTemplateConsolidationData(PORT_NODE_TEMPLATE_ID_FOR_ATTR_TEST)
- .getSubInterfaceConsolidationData("org.openecomp.resource.abstract.nodes.heat.subinterface.nested");
+ subInfMap.get("org.openecomp.resource.abstract.nodes.heat.subinterface.nested");
Assert.assertEquals(ONE, subInfList.size());
SubInterfaceTemplateConsolidationData data = subInfList.get(0);
public void testGetNetworkRoleFromResourceUtil_Port() throws Exception {
inputFilesPath = INPUT_FILE_PATH_FOR_PORT_NETWORK_ROLE;
initTranslatorAndTranslate();
- List<String> validNeutronPortTemplateIds = Arrays.asList("vdbe_0_oam_port_1", "vdbe_oam_port", "vdbe_oam_port_2");
+ List<String> validNeutronPortTemplateIds = Arrays.asList("vdbe_0_oam_port_1", "vdbe_oam_port", "vdbe_oam_port_2",
+ "vdbe_0_int_oam_port_1", "vdbe_int_oam_port", "vdbe_int_oam_port_2");
validatePortNetworkRole(validNeutronPortTemplateIds, "oam");
List<String> validVmiPortTemplateIds = Arrays.asList("vdbe_0_untr_vmi_0", "vdbe_untr_vmi");