import static org.openecomp.sdc.tosca.services.ToscaConstants.PORT_MIRRORING_CAPABILITY_CP_PROPERTY_NAME;
import static org.openecomp.sdc.tosca.services.ToscaConstants.PORT_MIRRORING_CAPABILITY_ID;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.HashMap;
-import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator;
public class PortMirroringEnricher {
- //Map of service template file name and map of all port node template ids, node template
- private final Map<String, Map<String, NodeTemplate>> portNodeTemplates = new HashMap<>();
- //Map of service template file name and map of external port node template ids, node template
- private final Map<String, Map<String, NodeTemplate>> externalPortNodeTemplates = new HashMap<>();
- //Map of substitution service template name and the list of ports with link requirement from the abstract
- private final Map<String, List<String>> portNodeTemplateIdsFromAbstract = new HashMap<>();
- private final Map<String, ServiceTemplate> globalTypesServiceTemplate =
- GlobalTypesGenerator.getGlobalTypesServiceTemplate(OnboardingTypesEnum.ZIP);
-
- private static final String ABSTRACT_LINK_REQUIREMENT_ID_PREFIX = ToscaConstants.LINK_REQUIREMENT_ID + "_";
- private static final int ABSTRACT_LINK_REQUIREMENT_ID_PREFIX_LENGTH = ABSTRACT_LINK_REQUIREMENT_ID_PREFIX.length();
-
- private static final Map<String, String> nodeTypeExternalNodeType =
- Collections.unmodifiableMap(initializeNodeTypeExternalNodeType());
+ private static final String ABSTRACT_LINK_REQUIREMENT_ID_PREFIX = ToscaConstants.LINK_REQUIREMENT_ID + "_";
+ private static final int ABSTRACT_LINK_REQUIREMENT_ID_PREFIX_LENGTH = ABSTRACT_LINK_REQUIREMENT_ID_PREFIX.length();
+ private static final Map<String, String> nodeTypeExternalNodeType = initializeNodeTypeExternalNodeType();
+ //Map of service template file name and map of all port node template ids, node template
+ private final Map<String, Map<String, NodeTemplate>> portNodeTemplates = new HashMap<>();
+ //Map of service template file name and map of external port node template ids, node template
+ private final Map<String, Map<String, NodeTemplate>> externalPortNodeTemplates = new HashMap<>();
+ //Map of substitution service template name and the list of ports with link requirement from the abstract
+ private final Map<String, List<String>> portNodeTemplateIdsFromAbstract = new HashMap<>();
+ private final Map<String, ServiceTemplate> globalTypesServiceTemplate =
+ GlobalTypesGenerator.getGlobalTypesServiceTemplate(OnboardingTypesEnum.ZIP);
- /**
- * Enrich tosca for port mirroring.
- *
- * @param toscaServiceModel the tosca service model
- * @return the map Error descriptor map
- */
- public Map<String, List<ErrorMessage>> enrich(ToscaServiceModel toscaServiceModel) {
- Map<String, List<ErrorMessage>> errors = new HashMap<>();
- Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
- serviceTemplates.entrySet().stream()
- //Skipping the service templates which do not contain topology template
- .filter(serviceTemplateEntry -> serviceTemplateEntry.getValue()
- .getTopology_template() != null)
- .forEach(serviceTemplateEntry ->
- //Collect all the ports across all the service templates
- collectPorts(serviceTemplateEntry.getValue()));
- //Collect External ports from the list of all ports collected above
- filterExternalPorts();
- //Handle external port changes
- handleExternalPorts(toscaServiceModel);
- return errors;
- }
+ private static ImmutableMap<String,String> initializeNodeTypeExternalNodeType() {
+ return ImmutableMap.<String, String>builder()
+ .put(ToscaNodeType.CONTRAIL_PORT, ToscaNodeType.EXTERNAL_CONTRAIL_PORT)
+ .put(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE, ToscaNodeType.EXTERNAL_VMI_PORT)
+ .put(ToscaNodeType.NEUTRON_PORT, ToscaNodeType.EXTERNAL_NEUTRON_PORT)
+ .build();
+ }
- private void collectPorts(ServiceTemplate serviceTemplate) {
- Map<String, NodeTemplate> nodeTemplates = DataModelUtil.getNodeTemplates(serviceTemplate);
- if (Objects.isNull(nodeTemplates)) {
- return;
+ /**
+ * Enrich tosca for port mirroring.
+ *
+ * @param toscaServiceModel the tosca service model
+ * @return the map Error descriptor map
+ */
+ public Map<String, List<ErrorMessage>> enrich(ToscaServiceModel toscaServiceModel) {
+ Map<String, List<ErrorMessage>> errors = new HashMap<>();
+ Map<String, ServiceTemplate> serviceTemplates = toscaServiceModel.getServiceTemplates();
+ serviceTemplates.entrySet().stream()
+ //Skipping the service templates which do not contain topology template
+ .filter(serviceTemplateEntry -> serviceTemplateEntry.getValue().getTopology_template() != null)
+ .forEach(serviceTemplateEntry ->
+ //Collect all the ports across all the service templates
+ collectPorts(serviceTemplateEntry.getValue()));
+ //Collect External ports from the list of all ports collected above
+ filterExternalPorts();
+ //Handle external port changes
+ handleExternalPorts(toscaServiceModel);
+ return errors;
}
- //Get all concrete port node templates from the service template
- Map<String, NodeTemplate> serviceTemplatePortNodeTemplates = nodeTemplates.entrySet().stream()
- .filter(nodeTemplateEntry -> (Objects.nonNull(nodeTemplateEntry.getValue()))
- && (isPortNodeTemplate(nodeTemplateEntry.getValue().getType())))
- .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
- portNodeTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplate),
- serviceTemplatePortNodeTemplates);
- //Get all linked internal ports from abstract node template link requirements
- collectLinkedInternalPorts(nodeTemplates);
- }
+ private void collectPorts(ServiceTemplate serviceTemplate) {
+ Map<String, NodeTemplate> nodeTemplates = DataModelUtil.getNodeTemplates(serviceTemplate);
+ if (Objects.isNull(nodeTemplates)) {
+ return;
+ }
+ //Get all concrete port node templates from the service template
+ Map<String, NodeTemplate> serviceTemplatePortNodeTemplates = nodeTemplates.entrySet().stream()
+ .filter(nodeTemplateEntry -> (Objects.nonNull(nodeTemplateEntry.getValue()))
+ && (isPortNodeTemplate(nodeTemplateEntry.getValue().getType())))
+ .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
- private void collectLinkedInternalPorts(Map<String, NodeTemplate> nodeTemplates) {
- List<String> abstractLinkedPortNodeTemplates = new ArrayList<>();
- for (Map.Entry<String, NodeTemplate> nodeTemplateEntry : nodeTemplates.entrySet()) {
- NodeTemplate nodeTemplate = nodeTemplateEntry.getValue();
- if (isSubstitutableNodeTemplate(nodeTemplate)) {
- handleSubstitutableNodeTemplate(abstractLinkedPortNodeTemplates, nodeTemplate);
- }
+ portNodeTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplate),
+ serviceTemplatePortNodeTemplates);
+ //Get all linked internal ports from abstract node template link requirements
+ collectLinkedInternalPorts(nodeTemplates);
}
- }
- private void handleSubstitutableNodeTemplate(List<String> abstractLinkedPortNodeTemplates,
- NodeTemplate nodeTemplate) {
- List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
- if (Objects.isNull(requirements)) {
- return;
- }
- requirements.forEach(requirement -> addInternalPortToAbstractNode(requirement, abstractLinkedPortNodeTemplates));
- if (CollectionUtils.isNotEmpty(abstractLinkedPortNodeTemplates)) {
- //Populate a map of the substitution service templates and list of internal ports
- addCollectedPortsToAbstractServiceTemplatePortMap(nodeTemplate,
- abstractLinkedPortNodeTemplates);
+ private void collectLinkedInternalPorts(Map<String, NodeTemplate> nodeTemplates) {
+ List<String> abstractLinkedPortNodeTemplates = new ArrayList<>();
+ for (Map.Entry<String, NodeTemplate> nodeTemplateEntry : nodeTemplates.entrySet()) {
+ NodeTemplate nodeTemplate = nodeTemplateEntry.getValue();
+ if (isSubstitutableNodeTemplate(nodeTemplate)) {
+ handleSubstitutableNodeTemplate(abstractLinkedPortNodeTemplates, nodeTemplate);
+ }
+ }
}
- }
- private void addInternalPortToAbstractNode(Map<String, RequirementAssignment> requirement,
- List<String> abstractLinkedPortNodeTemplates) {
- String requirementId = requirement.keySet().iterator().next();
- if (requirementId.startsWith(ABSTRACT_LINK_REQUIREMENT_ID_PREFIX)) {
- //Collect port node template ids from the link requirement ids in the abstract node template
- abstractLinkedPortNodeTemplates.add(requirementId.substring(ABSTRACT_LINK_REQUIREMENT_ID_PREFIX_LENGTH));
+ private void handleSubstitutableNodeTemplate(List<String> abstractLinkedPortNodeTemplates,
+ NodeTemplate nodeTemplate) {
+ List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
+ if (Objects.isNull(requirements)) {
+ return;
+ }
+ requirements
+ .forEach(requirement -> addInternalPortToAbstractNode(requirement, abstractLinkedPortNodeTemplates));
+ if (CollectionUtils.isNotEmpty(abstractLinkedPortNodeTemplates)) {
+ //Populate a map of the substitution service templates and list of internal ports
+ addCollectedPortsToAbstractServiceTemplatePortMap(nodeTemplate, abstractLinkedPortNodeTemplates);
+ }
}
- }
- private void addCollectedPortsToAbstractServiceTemplatePortMap(NodeTemplate nodeTemplate,
- List<String> abstractLinkedPortNodeTemplates) {
- String substitutionServiceTemplateName;
- if (Objects.isNull(nodeTemplate.getProperties())) {
- return;
- }
- Map serviceTemplateFilter = (Map<String, Object>) nodeTemplate.getProperties()
- .get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME);
- substitutionServiceTemplateName = (String)
- serviceTemplateFilter.get(ToscaConstants.SUBSTITUTE_SERVICE_TEMPLATE_PROPERTY_NAME);
- if (Objects.isNull(substitutionServiceTemplateName)) {
- return;
- }
- if (portNodeTemplateIdsFromAbstract.containsKey(substitutionServiceTemplateName)) {
- List<String> portList = portNodeTemplateIdsFromAbstract.get(substitutionServiceTemplateName);
- portList.addAll(abstractLinkedPortNodeTemplates);
- portNodeTemplateIdsFromAbstract.put(substitutionServiceTemplateName, portList);
- } else {
- portNodeTemplateIdsFromAbstract.put(substitutionServiceTemplateName, abstractLinkedPortNodeTemplates);
+ private void addInternalPortToAbstractNode(Map<String, RequirementAssignment> requirement,
+ List<String> abstractLinkedPortNodeTemplates) {
+ String requirementId = requirement.keySet().iterator().next();
+ if (requirementId.startsWith(ABSTRACT_LINK_REQUIREMENT_ID_PREFIX)) {
+ //Collect port node template ids from the link requirement ids in the abstract node template
+ abstractLinkedPortNodeTemplates.add(requirementId.substring(ABSTRACT_LINK_REQUIREMENT_ID_PREFIX_LENGTH));
+ }
}
- }
- private void filterExternalPorts() {
- for (Map.Entry<String, Map<String, NodeTemplate>> portNodeTemplateEntry : portNodeTemplates.entrySet()) {
- Map<String, NodeTemplate> externalPorts = new HashMap<>();
- String serviceTemplateFileName = portNodeTemplateEntry.getKey();
- Map<String, NodeTemplate> portNodeTemplateMap = portNodeTemplateEntry.getValue();
- for (Map.Entry<String, NodeTemplate> portNodeTemplate : portNodeTemplateMap.entrySet()) {
- String nodeTemplateId = portNodeTemplate.getKey();
- NodeTemplate nodeTemplate = portNodeTemplate.getValue();
- if (!isInternalPort(serviceTemplateFileName, nodeTemplateId, nodeTemplate)) {
- //External Port
- externalPorts.putIfAbsent(nodeTemplateId, nodeTemplate);
+ private void addCollectedPortsToAbstractServiceTemplatePortMap(NodeTemplate nodeTemplate,
+ List<String> abstractLinkedPortNodeTemplates) {
+ String substitutionServiceTemplateName;
+ if (Objects.isNull(nodeTemplate.getProperties())) {
+ return;
+ }
+ Map serviceTemplateFilter = (Map<String, Object>) nodeTemplate.getProperties()
+ .get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME);
+ substitutionServiceTemplateName = (String)
+ serviceTemplateFilter.get(ToscaConstants.SUBSTITUTE_SERVICE_TEMPLATE_PROPERTY_NAME);
+ if (Objects.isNull(substitutionServiceTemplateName)) {
+ return;
+ }
+ if (portNodeTemplateIdsFromAbstract.containsKey(substitutionServiceTemplateName)) {
+ List<String> portList = portNodeTemplateIdsFromAbstract.get(substitutionServiceTemplateName);
+ portList.addAll(abstractLinkedPortNodeTemplates);
+ portNodeTemplateIdsFromAbstract.put(substitutionServiceTemplateName, portList);
+ } else {
+ portNodeTemplateIdsFromAbstract.put(substitutionServiceTemplateName, abstractLinkedPortNodeTemplates);
}
- }
- externalPortNodeTemplates.putIfAbsent(serviceTemplateFileName, externalPorts);
}
- }
- private void updateExternalPortNodeTemplate(NodeTemplate externalPortNodeTemplate) {
- String currentPortNodeType = externalPortNodeTemplate.getType();
- if (nodeTypeExternalNodeType.containsKey(currentPortNodeType)) {
- externalPortNodeTemplate.setType(nodeTypeExternalNodeType.get(currentPortNodeType));
+ private void filterExternalPorts() {
+ for (Map.Entry<String, Map<String, NodeTemplate>> portNodeTemplateEntry : portNodeTemplates.entrySet()) {
+ Map<String, NodeTemplate> externalPorts = new HashMap<>();
+ String serviceTemplateFileName = portNodeTemplateEntry.getKey();
+ Map<String, NodeTemplate> portNodeTemplateMap = portNodeTemplateEntry.getValue();
+ for (Map.Entry<String, NodeTemplate> portNodeTemplate : portNodeTemplateMap.entrySet()) {
+ String nodeTemplateId = portNodeTemplate.getKey();
+ NodeTemplate nodeTemplate = portNodeTemplate.getValue();
+ if (!isInternalPort(serviceTemplateFileName, nodeTemplateId, nodeTemplate)) {
+ //External Port
+ externalPorts.putIfAbsent(nodeTemplateId, nodeTemplate);
+ }
+ }
+ externalPortNodeTemplates.putIfAbsent(serviceTemplateFileName, externalPorts);
+ }
}
- addPortMirroringCapability(externalPortNodeTemplate);
- }
- private void handleExternalPorts(ToscaServiceModel toscaServiceModel) {
- for (Map.Entry<String, Map<String, NodeTemplate>> entry : externalPortNodeTemplates.entrySet()) {
- ServiceTemplate serviceTemplate = toscaServiceModel.getServiceTemplates().get(entry.getKey());
- Map<String, NodeTemplate> serviceTemplateExternalPortNodeTemplates = entry.getValue();
- if (MapUtils.isEmpty(serviceTemplateExternalPortNodeTemplates)) {
- continue;
- }
- handleExternalPortNodeTemplates(serviceTemplate, serviceTemplateExternalPortNodeTemplates);
- addGlobalTypeImport(serviceTemplate);
+ private void updateExternalPortNodeTemplate(NodeTemplate externalPortNodeTemplate) {
+ String currentPortNodeType = externalPortNodeTemplate.getType();
+ if (nodeTypeExternalNodeType.containsKey(currentPortNodeType)) {
+ externalPortNodeTemplate.setType(nodeTypeExternalNodeType.get(currentPortNodeType));
+ }
+ addPortMirroringCapability(externalPortNodeTemplate);
}
- }
- private void handleExternalPortNodeTemplates(ServiceTemplate serviceTemplate,
- Map<String, NodeTemplate> externalPortNodeTemplates) {
- for (Map.Entry<String, NodeTemplate> externalNodeTemplate : externalPortNodeTemplates.entrySet()) {
- updateExternalPortNodeTemplate(externalNodeTemplate.getValue());
- if (Objects.nonNull(DataModelUtil.getSubstitutionMappings(serviceTemplate))) {
- //Add port mirroring capability to substitution mapping for external ports
- addPortMirroringSubstitutionMappingCapability(serviceTemplate, externalNodeTemplate.getKey());
- }
+ private void handleExternalPorts(ToscaServiceModel toscaServiceModel) {
+ for (Map.Entry<String, Map<String, NodeTemplate>> entry : externalPortNodeTemplates.entrySet()) {
+ ServiceTemplate serviceTemplate = toscaServiceModel.getServiceTemplates().get(entry.getKey());
+ Map<String, NodeTemplate> serviceTemplateExternalPortNodeTemplates = entry.getValue();
+ if (MapUtils.isEmpty(serviceTemplateExternalPortNodeTemplates)) {
+ continue;
+ }
+ handleExternalPortNodeTemplates(serviceTemplate, serviceTemplateExternalPortNodeTemplates);
+ addGlobalTypeImport(serviceTemplate);
+ }
}
- }
- private void addPortMirroringSubstitutionMappingCapability(ServiceTemplate serviceTemplate,
- String externalPortNodeTemplateId) {
- List<String> portMirroringCapability = new LinkedList<>();
- portMirroringCapability.add(externalPortNodeTemplateId);
- portMirroringCapability.add(PORT_MIRRORING_CAPABILITY_ID);
- String substitutionMappingCapabilityId = PORT_MIRRORING_CAPABILITY_ID + "_" + externalPortNodeTemplateId;
- DataModelUtil.addSubstitutionMappingCapability(serviceTemplate,
- substitutionMappingCapabilityId, portMirroringCapability);
- }
-
- private void addPortMirroringCapability(NodeTemplate portNodeTemplate) {
- Map<String, Object> portMirroringCapabilityProperties = new HashMap<>();
- PortMirroringConnectionPointDescription connectionPoint = new PortMirroringConnectionPointDescription();
- if (Objects.nonNull(portNodeTemplate.getProperties())) {
- setConnectionPointNetworkRole(portNodeTemplate, connectionPoint);
- }
- if (Objects.nonNull(portNodeTemplate.getRequirements())) {
- setConnectionPointNfcType(portNodeTemplate, connectionPoint);
- }
- if (!connectionPoint.isEmpty()) {
- portMirroringCapabilityProperties.put(PORT_MIRRORING_CAPABILITY_CP_PROPERTY_NAME, connectionPoint);
- DataModelUtil.addNodeTemplateCapability(portNodeTemplate,
- PORT_MIRRORING_CAPABILITY_ID, portMirroringCapabilityProperties, null);
+ private void handleExternalPortNodeTemplates(ServiceTemplate serviceTemplate,
+ Map<String, NodeTemplate> externalPortNodeTemplates) {
+ for (Map.Entry<String, NodeTemplate> externalNodeTemplate : externalPortNodeTemplates.entrySet()) {
+ updateExternalPortNodeTemplate(externalNodeTemplate.getValue());
+ if (Objects.nonNull(DataModelUtil.getSubstitutionMappings(serviceTemplate))) {
+ //Add port mirroring capability to substitution mapping for external ports
+ addPortMirroringSubstitutionMappingCapability(serviceTemplate, externalNodeTemplate.getKey());
+ }
+ }
}
- }
- private void setConnectionPointNfcType(NodeTemplate portNodeTemplate,
- PortMirroringConnectionPointDescription connectionPoint) {
- //Get NFC_Type from the binding requirement node
- Optional<List<RequirementAssignment>> requirementAssignment =
- DataModelUtil.getRequirementAssignment(portNodeTemplate.getRequirements(), ToscaConstants
- .BINDING_REQUIREMENT_ID);
- if (requirementAssignment.isPresent()) {
- RequirementAssignment bindingRequirementAssignment = requirementAssignment.get().get(0);
- String node = bindingRequirementAssignment.getNode();
- connectionPoint.setNfc_type(node);
+ private void addPortMirroringSubstitutionMappingCapability(ServiceTemplate serviceTemplate,
+ String externalPortNodeTemplateId) {
+ List<String> portMirroringCapability = new LinkedList<>();
+ portMirroringCapability.add(externalPortNodeTemplateId);
+ portMirroringCapability.add(PORT_MIRRORING_CAPABILITY_ID);
+ String substitutionMappingCapabilityId = PORT_MIRRORING_CAPABILITY_ID + "_" + externalPortNodeTemplateId;
+ DataModelUtil.addSubstitutionMappingCapability(serviceTemplate,
+ substitutionMappingCapabilityId, portMirroringCapability);
}
- }
- private void setConnectionPointNetworkRole(NodeTemplate portNodeTemplate,
- PortMirroringConnectionPointDescription connectionPoint) {
- Object networkRolePropertyValue =
- portNodeTemplate.getProperties().get(ToscaConstants.PORT_NETWORK_ROLE_PROPERTY_NAME);
- if (Objects.nonNull(networkRolePropertyValue)) {
- Object portMirroringNetworkRolePropertyVal = getClonedObject(networkRolePropertyValue);
- connectionPoint.setNetwork_role(portMirroringNetworkRolePropertyVal);
+ private void addPortMirroringCapability(NodeTemplate portNodeTemplate) {
+ Map<String, Object> portMirroringCapabilityProperties = new HashMap<>();
+ PortMirroringConnectionPointDescription connectionPoint = new PortMirroringConnectionPointDescription();
+ if (Objects.nonNull(portNodeTemplate.getProperties())) {
+ setConnectionPointNetworkRole(portNodeTemplate, connectionPoint);
+ }
+ if (Objects.nonNull(portNodeTemplate.getRequirements())) {
+ setConnectionPointNfcType(portNodeTemplate, connectionPoint);
+ }
+ if (!connectionPoint.isEmpty()) {
+ portMirroringCapabilityProperties.put(PORT_MIRRORING_CAPABILITY_CP_PROPERTY_NAME, connectionPoint);
+ DataModelUtil.addNodeTemplateCapability(portNodeTemplate,
+ PORT_MIRRORING_CAPABILITY_ID, portMirroringCapabilityProperties, null);
+ }
}
- }
- private void addGlobalTypeImport(ServiceTemplate serviceTemplate) {
- List<Map<String, Import>> imports = serviceTemplate.getImports();
- Map<String, Import> openecompIndexImport = new HashMap<>();
- openecompIndexImport.put("openecomp_index",
- HeatToToscaUtil.createServiceTemplateImport(globalTypesServiceTemplate
- .get("openecomp/_index.yml")));
- imports.add(openecompIndexImport);
- }
-
- private boolean isPortNodeTemplate(String nodeType) {
- //Check if node corresponds to a concrete port node
- Set<String> portNodeTypes = getPortNodeTypes();
- return Objects.nonNull(nodeType) && portNodeTypes.contains(nodeType);
- }
+ private void setConnectionPointNfcType(NodeTemplate portNodeTemplate,
+ PortMirroringConnectionPointDescription connectionPoint) {
+ //Get NFC_Type from the binding requirement node
+ Optional<List<RequirementAssignment>> requirementAssignment =
+ DataModelUtil.getRequirementAssignment(portNodeTemplate.getRequirements(), ToscaConstants
+ .BINDING_REQUIREMENT_ID);
+ if (requirementAssignment.isPresent()) {
+ RequirementAssignment bindingRequirementAssignment = requirementAssignment.get().get(0);
+ String node = bindingRequirementAssignment.getNode();
+ connectionPoint.setNfc_type(node);
+ }
+ }
- private Set<String> getPortNodeTypes() {
- return new HashSet<>(Arrays.asList(ToscaNodeType.NEUTRON_PORT,
- ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE,
- ToscaNodeType.CONTRAIL_PORT));
- }
+ private void setConnectionPointNetworkRole(NodeTemplate portNodeTemplate,
+ PortMirroringConnectionPointDescription connectionPoint) {
+ Object networkRolePropertyValue =
+ portNodeTemplate.getProperties().get(ToscaConstants.PORT_NETWORK_ROLE_PROPERTY_NAME);
+ if (Objects.nonNull(networkRolePropertyValue)) {
+ Object portMirroringNetworkRolePropertyVal = getClonedObject(networkRolePropertyValue);
+ connectionPoint.setNetwork_role(portMirroringNetworkRolePropertyVal);
+ }
+ }
- private boolean isSubstitutableNodeTemplate(NodeTemplate nodeTemplate) {
- return Objects.nonNull(nodeTemplate.getDirectives())
- && nodeTemplate.getDirectives()
- .contains(ToscaConstants.NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE);
- }
+ private void addGlobalTypeImport(ServiceTemplate serviceTemplate) {
+ List<Map<String, Import>> imports = serviceTemplate.getImports();
+ Map<String, Import> openecompIndexImport = new HashMap<>();
+ openecompIndexImport.put("openecomp_index",
+ HeatToToscaUtil.createServiceTemplateImport(globalTypesServiceTemplate
+ .get("openecomp/_index.yml")));
+ imports.add(openecompIndexImport);
+ }
- private boolean isInternalPort(String serviceTemplateFileName, String nodeTemplateId,
- NodeTemplate nodeTemplate) {
- return isAbstractInternalPort(serviceTemplateFileName, nodeTemplateId)
- || isConcreteInternalPort(nodeTemplate);
- }
+ private boolean isPortNodeTemplate(String nodeType) {
+ //Check if node corresponds to a concrete port node
+ Set<String> portNodeTypes = getPortNodeTypes();
+ return Objects.nonNull(nodeType) && portNodeTypes.contains(nodeType);
+ }
- private boolean isAbstractInternalPort(String serviceTemplateFileName, String nodeTemplateId) {
- //Check if port corresponds to an abstract internal port
- return portNodeTemplateIdsFromAbstract.containsKey(serviceTemplateFileName)
- && portNodeTemplateIdsFromAbstract.get(serviceTemplateFileName).contains(nodeTemplateId);
- }
+ private Set<String> getPortNodeTypes() {
+ return ImmutableSet.of(ToscaNodeType.NEUTRON_PORT,
+ ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE, ToscaNodeType.CONTRAIL_PORT);
+ }
+ private boolean isSubstitutableNodeTemplate(NodeTemplate nodeTemplate) {
+ return Objects.nonNull(nodeTemplate.getDirectives())
+ && nodeTemplate.getDirectives()
+ .contains(ToscaConstants.NODE_TEMPLATE_DIRECTIVE_SUBSTITUTABLE);
+ }
- private boolean isConcreteInternalPort(NodeTemplate nodeTemplate) {
- //Check if node template contains a link requirement
- List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
- if (Objects.isNull(requirements)) {
- return false;
+ private boolean isInternalPort(String serviceTemplateFileName, String nodeTemplateId,
+ NodeTemplate nodeTemplate) {
+ return isAbstractInternalPort(serviceTemplateFileName, nodeTemplateId)
+ || isConcreteInternalPort(nodeTemplate);
}
- for (Map<String, RequirementAssignment> requirement : requirements) {
- String requirementId = requirement.keySet().iterator().next();
- if (requirementId.equals(ToscaConstants.LINK_REQUIREMENT_ID)) {
- return true;
- }
+
+ private boolean isAbstractInternalPort(String serviceTemplateFileName, String nodeTemplateId) {
+ //Check if port corresponds to an abstract internal port
+ return portNodeTemplateIdsFromAbstract.containsKey(serviceTemplateFileName)
+ && portNodeTemplateIdsFromAbstract.get(serviceTemplateFileName).contains(nodeTemplateId);
}
- return false;
- }
- private static Map<String, String> initializeNodeTypeExternalNodeType() {
- Map<String, String> nodeTypeExternalNodeType = new HashMap<>(3);
- nodeTypeExternalNodeType.put(ToscaNodeType.CONTRAIL_PORT, ToscaNodeType.EXTERNAL_CONTRAIL_PORT);
- nodeTypeExternalNodeType.put(ToscaNodeType.CONTRAILV2_VIRTUAL_MACHINE_INTERFACE, ToscaNodeType.EXTERNAL_VMI_PORT);
- nodeTypeExternalNodeType.put(ToscaNodeType.NEUTRON_PORT, ToscaNodeType.EXTERNAL_NEUTRON_PORT);
- return nodeTypeExternalNodeType;
- }
+ private boolean isConcreteInternalPort(NodeTemplate nodeTemplate) {
+ //Check if node template contains a link requirement
+ List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
+ if (Objects.isNull(requirements)) {
+ return false;
+ }
+ for (Map<String, RequirementAssignment> requirement : requirements) {
+ String requirementId = requirement.keySet().iterator().next();
+ if (requirementId.equals(ToscaConstants.LINK_REQUIREMENT_ID)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
package org.openecomp.sdc.translator;
+import static org.junit.Assert.assertEquals;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.NotDirectoryException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Set;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.tuple.Pair;
import org.codehaus.jackson.map.ObjectMapper;
import org.junit.Assert;
-import org.openecomp.core.translator.api.HeatToToscaTranslator;
-import org.openecomp.core.utilities.file.FileUtils;
-import org.openecomp.sdc.common.utils.SdcCommon;
-import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
import org.onap.sdc.tosca.datatypes.model.GroupDefinition;
import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
import org.onap.sdc.tosca.datatypes.model.TopologyTemplate;
+import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
+import org.openecomp.core.translator.api.HeatToToscaTranslator;
+import org.openecomp.core.utilities.file.FileUtils;
+import org.openecomp.sdc.common.utils.SdcCommon;
+import org.openecomp.sdc.datatypes.error.ErrorMessage;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
import org.openecomp.sdc.tosca.services.DataModelUtil;
import org.openecomp.sdc.tosca.services.ToscaConstants;
-import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeConsolidationData;
import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
import org.openecomp.sdc.translator.services.heattotosca.globaltypes.GlobalTypesGenerator;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.file.NotDirectoryException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-
public class TestUtils {
private static final String MANIFEST_NAME = SdcCommon.MANIFEST_NAME;
private static String zipFilename = "VSP.zip";
return initServiceTemplate;
}
+ public static void compareTranslatedOutput(Set<String> expectedResultFileNameSet,
+ Map<String, byte[]> expectedResultMap,
+ ZipInputStream zis) throws IOException {
+ ZipEntry entry;
+ String name;
+ String expected;
+ String actual;
+
+ while ((entry = zis.getNextEntry()) != null) {
+
+ name = entry.getName()
+ .substring(entry.getName().lastIndexOf(File.separator) + 1, entry.getName().length());
+ if (expectedResultFileNameSet.contains(name)) {
+ expected = new String(expectedResultMap.get(name)).trim().replace("\r", "");
+ actual = new String(FileUtils.toByteArray(zis)).trim().replace("\r", "");
+ assertEquals("difference in file: " + name, expected, actual);
+
+ expectedResultFileNameSet.remove(name);
+ }
+ }
+ if (expectedResultFileNameSet.isEmpty()) {
+ expectedResultFileNameSet.forEach(System.out::println);
+ }
+ }
+
+ public static String getErrorAsString(Map<String, List<ErrorMessage>> errorMessages) {
+ StringBuilder sb = new StringBuilder();
+ errorMessages.forEach((file, errorList) -> sb.append("File:").append(file).append(System.lineSeparator())
+ .append(getErrorList(errorList)));
+
+ return sb.toString();
+ }
+
+ private static String getErrorList(List<ErrorMessage> errors) {
+ StringBuilder sb = new StringBuilder();
+ errors.forEach(error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("]")
+ .append(System.lineSeparator()));
+ return sb.toString();
+ }
}
import org.junit.Test;
import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseResourceTranslationTest;
-public class Translate_Heat_Nested_Multi extends BaseResourceTranslationTest {
+public class TranslateHeatNestedMultiTest extends BaseResourceTranslationTest {
{
inputFilesPath = "/mock/heat/nested/multi/inputs";
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- * ============LICENSE_END=========================================================
*/
+
package org.openecomp.sdc.translator.impl.heattotosca.nested.nestedvolumelocal;
import org.junit.Test;
import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseResourceTranslationTest;
-public class NestedVolumelocal extends BaseResourceTranslationTest {
+public class NestedVolumeLocalTest extends BaseResourceTranslationTest {
{
inputFilesPath = "/mock/heat/nested/nestedvolumelocal/inputs";
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- * ============LICENSE_END=========================================================
*/
+
package org.openecomp.sdc.translator.impl.heattotosca.nested.nestedvolumeseperatefile;
import org.junit.Test;
import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseResourceTranslationTest;
-public class NestedVolumeSeperateFile extends BaseResourceTranslationTest {
+public class NestedVolumeSeperateFileTest extends BaseResourceTranslationTest {
{
inputFilesPath = "/mock/heat/nested/nestedvolumeseperatefile/inputs";
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
- *
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
- * ============LICENSE_END=========================================================
*/
+
package org.openecomp.sdc.translator.impl.heattotosca.nested.reusenestedfrommultibase;
import org.junit.Test;
import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants;
import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseResourceTranslationTest;
-public class Translate_Heat_Nested_From_Multi_Base extends BaseResourceTranslationTest {
+public class TranslateHeatNestedFromMultiBaseTest extends BaseResourceTranslationTest {
{
inputFilesPath = "/mock/heat/nested/reusenestedfrommultibase/inputs";
import java.io.IOException;
-public class TranslateHeatNestedSingle extends BaseResourceTranslationTest {
+public class TranslateHeatNestedSingleTest extends BaseResourceTranslationTest {
@Override
@Before
public class TestConstants{
- public static final String MAIN_SERVICE_TEMPLATE = "MainServiceTemplate.yaml";
+ static final String MAIN_SERVICE_TEMPLATE = "MainServiceTemplate.yaml";
public static final String TEST_GROUP_POSITIVE = "TestGroupsPositive";
- public static final String TEST_GROUP_NEGATIVE = "TestGroupsNegative";
public static final String TEST_VOLUME_POSITIVE = "TestVolumePositive";
public static final String TEST_VOLUME_NEGATIVE = "TestVolumeNegative";
public static final String TEST_PORT_POSITIVE = "TestPortPositive";
- public static final String TEST_PORT_NEGATIVE = "TestPortNegative";
-
- public static final String TEST_CONNECTIVITY_POSITIVE = "TestConnectivityPositive";
- public static final String TEST_CONNECTIVITY_NEGATIVE = "TestConnectivityNegative";
public static final String TEST_DEPENDS_ON_NODES_CONNECTED_IN = "TestDependsOnNodesConnectedIn";
public static final String TEST_DEPENDS_ON_NODES_CONNECTED_OUT = "TestDependsOnNodesConnectedOut";
package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
import static org.junit.Assert.assertEquals;
+import static org.openecomp.sdc.translator.TestUtils.getErrorAsString;
-import java.io.BufferedInputStream;
-import java.io.ByteArrayInputStream;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.zip.ZipEntry;
-import java.util.zip.ZipInputStream;
import org.apache.commons.collections4.MapUtils;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.openecomp.sdc.common.errors.ErrorCode;
import org.openecomp.sdc.common.togglz.ToggleableFeature;
import org.openecomp.sdc.datatypes.error.ErrorLevel;
-import org.openecomp.sdc.datatypes.error.ErrorMessage;
import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl;
import org.openecomp.sdc.translator.TestUtils;
import org.togglz.testing.TestFeatureManager;
import org.togglz.testing.TestFeatureManagerProvider;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.zip.ZipInputStream;
-public class BaseFullTranslationTest {
- public static final String IN_POSTFIX = "/in";
- public static final String OUT_POSTFIX = "/out";
+public class BaseFullTranslationTest {
+ private static final String IN_POSTFIX = "/in";
+ private static final String OUT_POSTFIX = "/out";
protected static TestFeatureManager manager;
TestFeatureManagerProvider.setFeatureManager(manager);
}
-
- public static void disableToggleableFeatures() {
- manager.disableAll();
- manager = null;
- TestFeatureManagerProvider.setFeatureManager(null);
- }
-
protected void testTranslationWithInit(String path) throws IOException {
byte[] translatedZipFile = initTranslatorAndTranslate(path);
testTranslation(path, translatedZipFile);
}
try (ByteArrayInputStream fis = new ByteArrayInputStream(translatedZipFile);
- BufferedInputStream bis = new BufferedInputStream(fis); ZipInputStream zis = new ZipInputStream(bis)) {
- ZipEntry entry;
- String name;
- String expected;
- String actual;
-
- while ((entry = zis.getNextEntry()) != null) {
-
- name = entry.getName()
- .substring(entry.getName().lastIndexOf(File.separator) + 1, entry.getName().length());
- if (expectedResultFileNameSet.contains(name)) {
- expected = new String(expectedResultMap.get(name)).trim().replace("\r", "");
- actual = new String(FileUtils.toByteArray(zis)).trim().replace("\r", "");
- assertEquals("difference in file: " + name, expected, actual);
-
- expectedResultFileNameSet.remove(name);
- }
- }
- if (expectedResultFileNameSet.isEmpty()) {
- expectedResultFileNameSet.forEach(System.out::println);
- }
+ BufferedInputStream bis = new BufferedInputStream(fis);
+ ZipInputStream zis = new ZipInputStream(bis)) {
+ TestUtils.compareTranslatedOutput(expectedResultFileNameSet, expectedResultMap, zis);
}
assertEquals(0, expectedResultFileNameSet.size());
}
.withCategory(ErrorCategory.APPLICATION).build());
}
- byte[] data =
- new ToscaFileOutputServiceCsarImpl().createOutputFile(translatorOutput.getToscaServiceModel(), null);
-
- return data;
- }
-
- private String getErrorAsString(Map<String, List<ErrorMessage>> errorMessages) {
- StringBuilder sb = new StringBuilder();
- errorMessages.entrySet().forEach(
- entry -> sb.append("File:").append(entry.getKey()).append(System.lineSeparator())
- .append(getErrorList(entry.getValue())));
-
- return sb.toString();
- }
-
- private String getErrorList(List<ErrorMessage> errors) {
- StringBuilder sb = new StringBuilder();
- errors.forEach(error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("]")
- .append(System.lineSeparator()));
- return sb.toString();
+ return new ToscaFileOutputServiceCsarImpl().createOutputFile(translatorOutput.getToscaServiceModel(), null);
}
}
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
-import org.junit.Rule;
-import org.junit.rules.TestName;
+import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
import org.openecomp.core.translator.datatypes.TranslatorOutput;
import org.openecomp.core.utilities.file.FileUtils;
import org.openecomp.core.utilities.json.JsonUtil;
import org.openecomp.sdc.common.errors.ErrorCode;
import org.openecomp.sdc.common.togglz.ToggleableFeature;
import org.openecomp.sdc.datatypes.error.ErrorLevel;
-import org.openecomp.sdc.datatypes.error.ErrorMessage;
import org.openecomp.sdc.heat.datatypes.manifest.FileData;
import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
import org.openecomp.sdc.heat.datatypes.manifest.ManifestFile;
-import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl;
import org.openecomp.sdc.translator.TestUtils;
import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
import org.togglz.testing.TestFeatureManager;
import org.togglz.testing.TestFeatureManagerProvider;
-
-import java.io.*;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
import java.net.URL;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
protected String inputFilesPath;
protected String outputFilesPath;
- protected TranslationContext translationContext;
+ TranslationContext translationContext;
- @Rule
- public TestName name = new TestName();
-
- private String zipFilename = "VSP.zip";
private TranslationService translationService;
private byte[] translatedZipFile;
- private static File tempDir = new File(System.getProperty("java.io.tmpdir"));
-
private Map<String, byte[]> expectedResultMap = new HashMap<>();
private Set<String> expectedResultFileNameSet = new HashSet<>();
public static void enableToggleableFeatures(){
manager = new TestFeatureManager(ToggleableFeature.class);
manager.enableAll();
- }
-
- public static void disableToggleableFeatures() {
- manager.disableAll();
- manager = null;
- TestFeatureManagerProvider.setFeatureManager(null);
+ TestFeatureManagerProvider.setFeatureManager(manager);
}
@Before
}
}
- try (ByteArrayInputStream fis = new ByteArrayInputStream(translatedZipFile); BufferedInputStream bis = new BufferedInputStream(fis);
+ try (ByteArrayInputStream fis = new ByteArrayInputStream(translatedZipFile);
+ BufferedInputStream bis = new BufferedInputStream(fis);
ZipInputStream zis = new ZipInputStream(bis)) {
- ZipEntry entry;
- String name;
- String expected;
- String actual;
-
- while ((entry = zis.getNextEntry()) != null) {
-
- name = entry.getName()
- .substring(entry.getName().lastIndexOf(File.separator) + 1, entry.getName().length());
- if (expectedResultFileNameSet.contains(name)) {
- expected = new String(expectedResultMap.get(name)).trim().replace("\r", "");
- actual = new String(FileUtils.toByteArray(zis)).trim().replace("\r", "");
- assertEquals("difference in file: " + name, expected, actual);
-
- expectedResultFileNameSet.remove(name);
- }
- }
- if (expectedResultFileNameSet.isEmpty()) {
- expectedResultFileNameSet.forEach(System.out::println);
- }
+ TestUtils.compareTranslatedOutput(expectedResultFileNameSet, expectedResultMap, zis);
}
assertEquals(0, expectedResultFileNameSet.size());
}
MessageContainerUtil
.getMessageByLevel(ErrorLevel.ERROR, translatorOutput.getErrorMessages()))) {
throw new CoreException((new ErrorCode.ErrorCodeBuilder()).withMessage(
- "Error in validation " + getErrorAsString(translatorOutput.getErrorMessages()))
+ "Error in validation " + TestUtils.getErrorAsString(translatorOutput.getErrorMessages()))
.withId("Validation Error").withCategory(ErrorCategory.APPLICATION).build());
}
- byte[] data = new ToscaFileOutputServiceCsarImpl().createOutputFile(translatorOutput.getToscaServiceModel(), null);
-
- return data;
- }
-
-
- private String getErrorAsString(Map<String, List<ErrorMessage>> errorMessages) {
- StringBuilder sb = new StringBuilder();
- errorMessages.entrySet().forEach(
- entry -> sb.append("File:").append(entry.getKey()).append(System.lineSeparator())
- .append(getErrorList(entry.getValue())));
-
- return sb.toString();
+ return new ToscaFileOutputServiceCsarImpl().createOutputFile(translatorOutput.getToscaServiceModel(), null);
}
- private String getErrorList(List<ErrorMessage> errors) {
- StringBuilder sb = new StringBuilder();
- errors.forEach(
- error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("]")
- .append(System.lineSeparator()));
- return sb.toString();
- }
- public void addFilesToTranslator(TranslationContext translationContext, String path)
+ private void addFilesToTranslator(TranslationContext translationContext, String path)
throws IOException {
File manifestFile = new File(path);
File[] files = manifestFile.listFiles();
fileContent = FileUtils.toByteArray(fis);
if (file.getName().equals(MANIFEST_NAME)) {
- addManifest(translationContext, MANIFEST_NAME, fileContent);
+ addManifest(translationContext, fileContent);
} else {
String validationFilename = "validationOutput.json";
+ String zipFilename = "VSP.zip";
if (!file.getName().equals(zipFilename) && (!file.getName().equals(validationFilename))) {
addFile(translationContext, file.getName(), fileContent);
}
}
}
- public static void addManifest(TranslationContext translationContext,
- String name, byte[] content) {
+ private static void addManifest(TranslationContext translationContext,
+ byte[] content) {
ManifestContent manifestData = JsonUtil.json2Object(new String(content), ManifestContent.class);
ManifestFile manifest = new ManifestFile();
- manifest.setName(name);
+ manifest.setName(MANIFEST_NAME);
manifest.setContent(manifestData);
translationContext.setManifest(manifest);
- translationContext.addFile(name, content);
+ translationContext.addFile(MANIFEST_NAME, content);
addFilesFromManifestToTranslationContextManifestFilesMap(translationContext, manifestData
.getData());
}
- public static void addFile(TranslationContext translationContext,
- String name, byte[] content) {
+ private static void addFile(TranslationContext translationContext,
+ String name, byte[] content) {
translationContext.addFile(name, content);
}
}
}
- public void validateNodeTemplateIdInNestedConsolidationData(){
+ void validateNodeTemplateIdInNestedConsolidationData(){
ConsolidationData consolidationData = translationContext.getConsolidationData();
Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
(expectedResultMap);
validateNestedConsolidationDataNodeTemplateIds(consolidationData,expectedServiceTemplateModels);
}
- public void validateComputeTemplateConsolidationData(ConsolidationDataValidationType
- validationType,
- String testName) {
+ protected void validateComputeTemplateConsolidationData(ConsolidationDataValidationType
+ validationType,
+ String testName) {
ConsolidationData consolidationData = translationContext.getConsolidationData();
Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
(expectedResultMap);
}
}
- public void validateGetAttribute(String testName){
+ protected void validateGetAttribute(String testName){
Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
(expectedResultMap);
validateGetAttr(translationContext,expectedServiceTemplateModels,testName);
}
- public void validateNestedTemplateConsolidationData(String testName){
+ protected void validateNestedTemplateConsolidationData(String testName){
validateNestedConsolidationData(translationContext, testName);
}
- public void validatePortTemplateConsolidationData(ConsolidationDataValidationType
- validationType,
- String testName) {
+ void validatePortTemplateConsolidationData() {
ConsolidationData consolidationData = translationContext.getConsolidationData();
Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
(expectedResultMap);
for(String portNodeTemplateId : portNodeTemplateIds) {
PortTemplateConsolidationData portTemplateConsolidationData =
filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
- switch(validationType){
+ switch(ConsolidationDataValidationType.VALIDATE_CONNECTIVITY){
case VALIDATE_CONNECTIVITY:
validatePortConnectivityIn(portTemplateConsolidationData,expectedServiceTemplate);
validatePortConnectivityOut(portNodeTemplateId, portTemplateConsolidationData,
import org.junit.Before;
import org.junit.Test;
-import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataValidationType;
import java.io.IOException;
-import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_CONNECTIVITY_POSITIVE;
-
/**
* @author Avrahamg
* @since August 10, 2016
outputFilesPath = "/mock/services/heattotosca/contrailv2VMinterface/oneNet/expectedoutputfiles";
initTranslatorAndTranslate();
testTranslation();
- validatePortTemplateConsolidationData(ConsolidationDataValidationType
- .VALIDATE_CONNECTIVITY, TEST_CONNECTIVITY_POSITIVE);
+ validatePortTemplateConsolidationData();
}
@Test
"/mock/services/heattotosca/contrailv2VMinterface/listNet/expectedoutputfiles";
initTranslatorAndTranslate();
testTranslation();
- validatePortTemplateConsolidationData(ConsolidationDataValidationType
- .VALIDATE_CONNECTIVITY, TEST_CONNECTIVITY_POSITIVE);
+ validatePortTemplateConsolidationData();
}
@Test
import org.junit.Before;
import org.junit.Test;
-import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataValidationType;
import java.io.IOException;
-import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants.TEST_CONNECTIVITY_POSITIVE;
-
public class ResourceTranslationNeutronPortImplTest extends BaseResourceTranslationTest {
outputFilesPath = "/mock/services/heattotosca/neutron_port_translation/expectedoutputfiles";
initTranslatorAndTranslate();
testTranslation();
- validatePortTemplateConsolidationData(ConsolidationDataValidationType
- .VALIDATE_CONNECTIVITY, TEST_CONNECTIVITY_POSITIVE);
+ validatePortTemplateConsolidationData();
}
@Test
"/mock/services/heattotosca/neutron_security_group_translation/expectedoutputfiles";
initTranslatorAndTranslate();
testTranslation();
- validatePortTemplateConsolidationData(ConsolidationDataValidationType
- .VALIDATE_CONNECTIVITY, TEST_CONNECTIVITY_POSITIVE);
+ validatePortTemplateConsolidationData();
}
@Test
"/mock/services/heattotosca/neutron_dual_stacks/expectedoutputfiles";
initTranslatorAndTranslate();
testTranslation();
- validatePortTemplateConsolidationData(ConsolidationDataValidationType
- .VALIDATE_CONNECTIVITY, TEST_CONNECTIVITY_POSITIVE);
+ validatePortTemplateConsolidationData();
}
}
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
occurrences:\r
- 0\r
- UNBOUNDED\r
- - link_contrail_vmi_subinterface_perimeta_ssc_a_untrusted_0_vlan_ports:\r
+ - subinterface_link_contrail_vmi_subinterface_perimeta_ssc_a_untrusted_0_vlan_ports:\r
capability: tosca.capabilities.network.Linkable\r
relationship: tosca.relationships.network.LinksTo\r
occurrences:\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
occurrences:\r
- 0\r
- UNBOUNDED\r
- - link_contrail_vmi_subinterface:\r
+ - subinterface_link_contrail_vmi_subinterface:\r
capability: tosca.capabilities.network.Linkable\r
relationship: tosca.relationships.network.LinksTo\r
occurrences:\r
occurrences:\r
- 0\r
- UNBOUNDED\r
- - link_contrail_vmi_subinterface_perimeta_ssc_b_untrusted_0_vlan_ports:\r
+ - subinterface_link_contrail_vmi_subinterface_perimeta_ssc_b_untrusted_0_vlan_ports:\r
capability: tosca.capabilities.network.Linkable\r
relationship: tosca.relationships.network.LinksTo\r
occurrences:\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
occurrences:\r
- 0\r
- UNBOUNDED\r
- - link_contrail_vmi_subinterface_perimeta_rtp_msc_a_untrusted_0_vlan_ports:\r
+ - subinterface_link_contrail_vmi_subinterface_perimeta_rtp_msc_a_untrusted_0_vlan_ports:\r
capability: tosca.capabilities.network.Linkable\r
relationship: tosca.relationships.network.LinksTo\r
occurrences:\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
occurrences:\r
- 0\r
- UNBOUNDED\r
- - link_contrail_vmi_subinterface_perimeta_rtp_msc_b_untrusted_0_vlan_ports:\r
+ - subinterface_link_contrail_vmi_subinterface_perimeta_rtp_msc_b_untrusted_0_vlan_ports:\r
capability: tosca.capabilities.network.Linkable\r
relationship: tosca.relationships.network.LinksTo\r
occurrences:\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
type: tosca.capabilities.network.Bindable\r
valid_source_types:\r
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface\r
occurrences:\r
- 0\r
- UNBOUNDED\r
description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.\r
occurrences:\r
- 1\r
- - UNBOUNDED\r
+ - UNBOUNDED
\ No newline at end of file
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
dependency_perimeta_ssc_a_untrusted_parent_0_port:\r
- perimeta_ssc_a_untrusted_parent_0_port\r
- dependency\r
+ subinterface_link_contrail_vmi_subinterface_perimeta_ssc_a_untrusted_0_vlan_ports:\r
+ - perimeta_ssc_a_untrusted_0_vlan_ports\r
+ - subinterface_link_contrail_vmi_subinterface\r
link_perimeta_ssc_a_mgmt_1_port:\r
- perimeta_ssc_a_mgmt_1_port\r
- link\r
dependency_perimeta_ssc_a_ha_0_port:\r
- perimeta_ssc_a_ha_0_port\r
- dependency\r
- link_contrail_vmi_subinterface_perimeta_ssc_a_untrusted_0_vlan_ports:\r
- - perimeta_ssc_a_untrusted_0_vlan_ports\r
- - link_contrail_vmi_subinterface\r
link_perimeta_ssc_a_mgmt_0_port:\r
- perimeta_ssc_a_mgmt_0_port\r
- link\r
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
ip_count_required:\r
is_required: true\r
floating_ip_count_required:\r
- is_required: true\r
+ is_required: false\r
security_groups:\r
get_input: perimeta_sec_groups\r
fixed_ips:\r
dependency_perimeta_ssc_b_unused_0_port:\r
- perimeta_ssc_b_unused_0_port\r
- dependency\r
+ subinterface_link_contrail_vmi_subinterface_perimeta_ssc_b_untrusted_0_vlan_ports:\r
+ - perimeta_ssc_b_untrusted_0_vlan_ports\r
+ - subinterface_link_contrail_vmi_subinterface\r
dependency_contrail_vmi_subinterface_perimeta_ssc_b_untrusted_0_vlan_ports:\r
- perimeta_ssc_b_untrusted_0_vlan_ports\r
- dependency_contrail_vmi_subinterface\r
local_storage_perimeta_ssc_b_server_0:\r
- perimeta_ssc_b_server_0\r
- local_storage\r
- link_contrail_vmi_subinterface_perimeta_ssc_b_untrusted_0_vlan_ports:\r
- - perimeta_ssc_b_untrusted_0_vlan_ports\r
- - link_contrail_vmi_subinterface\r
link_perimeta_ssc_b_mgmt_0_port:\r
- perimeta_ssc_b_mgmt_0_port\r
- link\r
- dependency\r
link_perimeta_ssc_b_ha_0_port:\r
- perimeta_ssc_b_ha_0_port\r
- - link\r
+ - link
\ No newline at end of file
dependency_perimeta_rtp_msc_a_ha_0_port:\r
- perimeta_rtp_msc_a_ha_0_port\r
- dependency\r
- link_contrail_vmi_subinterface_perimeta_rtp_msc_a_untrusted_0_vlan_ports:\r
- - perimeta_rtp_msc_a_untrusted_0_vlan_ports\r
- - link_contrail_vmi_subinterface\r
link_perimeta_rtp_msc_a_untrusted_parent_0_port:\r
- perimeta_rtp_msc_a_untrusted_parent_0_port\r
- link\r
dependency_perimeta_rtp_msc_a_server_0:\r
- perimeta_rtp_msc_a_server_0\r
- dependency\r
+ subinterface_link_contrail_vmi_subinterface_perimeta_rtp_msc_a_untrusted_0_vlan_ports:\r
+ - perimeta_rtp_msc_a_untrusted_0_vlan_ports\r
+ - subinterface_link_contrail_vmi_subinterface\r
dependency_perimeta_rtp_msc_a_trusted_0_port:\r
- perimeta_rtp_msc_a_trusted_0_port\r
- dependency\r
dependency_perimeta_rtp_msc_b_mgmt_0_port:\r
- perimeta_rtp_msc_b_mgmt_0_port\r
- dependency\r
- link_contrail_vmi_subinterface_perimeta_rtp_msc_b_untrusted_0_vlan_ports:\r
- - perimeta_rtp_msc_b_untrusted_0_vlan_ports\r
- - link_contrail_vmi_subinterface\r
link_perimeta_rtp_msc_b_trusted_0_port:\r
- perimeta_rtp_msc_b_trusted_0_port\r
- link\r
dependency_perimeta_rtp_msc_b_untrusted_parent_0_port:\r
- perimeta_rtp_msc_b_untrusted_parent_0_port\r
- dependency\r
+ subinterface_link_contrail_vmi_subinterface_perimeta_rtp_msc_b_untrusted_0_vlan_ports:\r
+ - perimeta_rtp_msc_b_untrusted_0_vlan_ports\r
+ - subinterface_link_contrail_vmi_subinterface\r
link_perimeta_rtp_msc_b_ha_0_port:\r
- perimeta_rtp_msc_b_ha_0_port\r
- link\r
-tosca_definitions_version: tosca_simple_yaml_1_0_0\r
-metadata:\r
- template_name: vlan_subinterface_dual\r
-imports:\r
-- openecomp_heat_index:\r
- file: openecomp-heat/_index.yml\r
-- GlobalSubstitutionTypes:\r
- file: GlobalSubstitutionTypesServiceTemplate.yaml\r
-topology_template:\r
- inputs:\r
- perimeta_parent_interface:\r
- hidden: false\r
- immutable: false\r
- type: string\r
- description: Parent Contrail interface\r
- perimeta_v6_vip_0:\r
- hidden: false\r
- immutable: false\r
- type: string\r
- description: virtual IPv6 address associated with subinterfaces\r
- perimeta_subinterface_name_prefix:\r
- hidden: false\r
- immutable: false\r
- type: string\r
- description: Combined with subinterface_instance_index, this is used as the name of the subinterface resource\r
- perimeta_vlan_networks:\r
- hidden: false\r
- immutable: false\r
- type: list\r
- description: List of Contrail VLAN networks to use for the subinterfaces. The order and number of these must match the VLAN ID list\r
- entry_schema:\r
- type: string\r
- perimeta_subinterface_instance_index:\r
- hidden: false\r
- immutable: false\r
- type: float\r
- description: Index of instance among multiple instances. Use to retrieve correct parameter for this instance when passed all parameters for all instances.\r
- constraints:\r
- - in_range:\r
- - 1\r
- - 1001\r
- perimeta_ip_0:\r
- hidden: false\r
- immutable: false\r
- type: string\r
- description: IPv4 address associated with subinterfaces\r
- perimeta_vip_0:\r
- hidden: false\r
- immutable: false\r
- type: string\r
- description: virtual IPv4 address associated with subinterfaces\r
- perimeta_vlan_ids:\r
- hidden: false\r
- immutable: false\r
- type: list\r
- description: List of VLAN IDs to use for subinterfaces\r
- entry_schema:\r
- type: string\r
- perimeta_mac_address:\r
- hidden: false\r
- immutable: false\r
- type: string\r
- description: MAC address to use for subinterface\r
- perimeta_v6_ip_0:\r
- hidden: false\r
- immutable: false\r
- type: string\r
- description: IPv6 address associated with subinterfaces\r
- node_templates:\r
- contrail_vmi_subinterface:\r
- type: org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface\r
- properties:\r
- virtual_machine_interface_refs:\r
- - get_input: perimeta_parent_interface\r
- name:\r
- str_replace:\r
- template: $NAME_$VLAN\r
- params:\r
- $NAME:\r
- get_input: perimeta_subinterface_name_prefix\r
- $VLAN:\r
- get_input:\r
- - perimeta_vlan_ids\r
- - get_input: perimeta_subinterface_instance_index\r
- virtual_network_refs:\r
- - get_input:\r
- - perimeta_vlan_networks\r
- - get_input: perimeta_subinterface_instance_index\r
- virtual_machine_interface_properties:\r
- sub_interface_vlan_tag:\r
- get_input:\r
- - perimeta_vlan_ids\r
- - get_input: perimeta_subinterface_instance_index\r
- virtual_machine_interface_allowed_address_pairs:\r
- allowed_address_pair:\r
- - address_mode: active-standby\r
- ip:\r
- ip_prefix:\r
- get_input: perimeta_vip_0\r
- ip_prefix_len: 32\r
- mac:\r
- get_input: perimeta_mac_address\r
- - address_mode: active-standby\r
- ip:\r
- ip_prefix:\r
- get_input: perimeta_v6_vip_0\r
- ip_prefix_len: 128\r
- mac:\r
- get_input: perimeta_mac_address\r
- virtual_machine_interface_mac_addresses:\r
- mac_address:\r
- - get_input: perimeta_mac_address\r
- groups:\r
- vlan_subinterface_dual_group:\r
- type: org.openecomp.groups.heat.HeatStack\r
- properties:\r
- heat_file: ../Artifacts/vlan_subinterface_dual.yaml\r
- description: |\r
- HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs\r
- members:\r
- - contrail_vmi_subinterface\r
- substitution_mappings:\r
- node_type: org.openecomp.resource.abstract.nodes.heat.subinterface.vlan_subinterface_dual\r
- capabilities:\r
- feature_contrail_vmi_subinterface:\r
- - contrail_vmi_subinterface\r
- - feature\r
- requirements:\r
- binding_contrail_vmi_subinterface:\r
- - contrail_vmi_subinterface\r
- - binding\r
- link_contrail_vmi_subinterface:\r
- - contrail_vmi_subinterface\r
- - link\r
- dependency_contrail_vmi_subinterface:\r
- - contrail_vmi_subinterface\r
- - dependency\r
\ No newline at end of file
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+ template_name: vlan_subinterface_dual
+imports:
+- openecomp_heat_index:
+ file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+ file: GlobalSubstitutionTypesServiceTemplate.yaml
+topology_template:
+ inputs:
+ perimeta_parent_interface:
+ hidden: false
+ immutable: false
+ type: string
+ description: Parent Contrail interface
+ perimeta_v6_vip_0:
+ hidden: false
+ immutable: false
+ type: string
+ description: virtual IPv6 address associated with subinterfaces
+ perimeta_subinterface_name_prefix:
+ hidden: false
+ immutable: false
+ type: string
+ description: Combined with subinterface_instance_index, this is used as the name of the subinterface resource
+ perimeta_vlan_networks:
+ hidden: false
+ immutable: false
+ type: list
+ description: List of Contrail VLAN networks to use for the subinterfaces. The order and number of these must match the VLAN ID list
+ entry_schema:
+ type: string
+ perimeta_subinterface_instance_index:
+ hidden: false
+ immutable: false
+ type: float
+ description: Index of instance among multiple instances. Use to retrieve correct parameter for this instance when passed all parameters for all instances.
+ constraints:
+ - in_range:
+ - 1
+ - 1001
+ perimeta_ip_0:
+ hidden: false
+ immutable: false
+ type: string
+ description: IPv4 address associated with subinterfaces
+ perimeta_vip_0:
+ hidden: false
+ immutable: false
+ type: string
+ description: virtual IPv4 address associated with subinterfaces
+ perimeta_vlan_ids:
+ hidden: false
+ immutable: false
+ type: list
+ description: List of VLAN IDs to use for subinterfaces
+ entry_schema:
+ type: string
+ perimeta_mac_address:
+ hidden: false
+ immutable: false
+ type: string
+ description: MAC address to use for subinterface
+ perimeta_v6_ip_0:
+ hidden: false
+ immutable: false
+ type: string
+ description: IPv6 address associated with subinterfaces
+ node_templates:
+ contrail_vmi_subinterface:
+ type: org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
+ properties:
+ virtual_machine_interface_refs:
+ - get_input: perimeta_parent_interface
+ name:
+ str_replace:
+ template: $NAME_$VLAN
+ params:
+ $NAME:
+ get_input: perimeta_subinterface_name_prefix
+ $VLAN:
+ get_input:
+ - perimeta_vlan_ids
+ - get_input: perimeta_subinterface_instance_index
+ virtual_network_refs:
+ - get_input:
+ - perimeta_vlan_networks
+ - get_input: perimeta_subinterface_instance_index
+ virtual_machine_interface_properties:
+ sub_interface_vlan_tag:
+ get_input:
+ - perimeta_vlan_ids
+ - get_input: perimeta_subinterface_instance_index
+ virtual_machine_interface_allowed_address_pairs:
+ allowed_address_pair:
+ - address_mode: active-standby
+ ip:
+ ip_prefix:
+ get_input: perimeta_vip_0
+ ip_prefix_len: 32
+ mac:
+ get_input: perimeta_mac_address
+ - address_mode: active-standby
+ ip:
+ ip_prefix:
+ get_input: perimeta_v6_vip_0
+ ip_prefix_len: 128
+ mac:
+ get_input: perimeta_mac_address
+ virtual_machine_interface_mac_addresses:
+ mac_address:
+ - get_input: perimeta_mac_address
+ groups:
+ vlan_subinterface_dual_group:
+ type: org.openecomp.groups.heat.HeatStack
+ properties:
+ heat_file: ../Artifacts/vlan_subinterface_dual.yaml
+ description: |
+ HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs
+ members:
+ - contrail_vmi_subinterface
+ substitution_mappings:
+ node_type: org.openecomp.resource.abstract.nodes.heat.subinterface.vlan_subinterface_dual
+ capabilities:
+ feature_contrail_vmi_subinterface:
+ - contrail_vmi_subinterface
+ - feature
+ requirements:
+ binding_contrail_vmi_subinterface:
+ - contrail_vmi_subinterface
+ - binding
+ subinterface_link_contrail_vmi_subinterface:
+ - contrail_vmi_subinterface
+ - subinterface_link
+ dependency_contrail_vmi_subinterface:
+ - contrail_vmi_subinterface
+ - dependency
\ No newline at end of file
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
properties:
network_name:
get_input: cps_net_name
- requirements:
- - dependency:
- capability: tosca.capabilities.Node
- node: server_pcm_001
- relationship: tosca.relationships.DependsOn
server_pcm_003:
type: org.openecomp.resource.abstract.nodes.heat.nested-pcm_v0.1
directives:
value:
get_attribute:
- server_pcm_002
- - oam_net_ip
+ - oam_net_ip
\ No newline at end of file
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
type: tosca.capabilities.network.Bindable
valid_source_types:
- org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+ - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface
occurrences:
- 0
- UNBOUNDED
properties:
network_name:
get_input: net_name
- requirements:
- - dependency:
- capability: tosca.capabilities.Node
- node: server_pcm_001
- relationship: tosca.relationships.DependsOn
compute_port_0:
type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
properties:
value:
get_attribute:
- server_pcm_001
- - pcm_vol
+ - pcm_vol
\ No newline at end of file