From 3a88d01cee90090f7bf012ea33fe73576e55192a Mon Sep 17 00:00:00 2001 From: wejs Date: Wed, 7 Feb 2018 17:19:59 +0100 Subject: Heat Validation - VirtualMachineInterface Issue-ID: SDC-994 Change-Id: I0fd23862eebf65437ab0e1a1ad1d44c9a2944990 Signed-off-by: katy.rotman --- .../impl/util/HeatValidationService.java | 56 +++++- .../VirtualMachineInterfaceValidator.java | 153 +++++++++++++++++ .../VirtualMachineInterfaceValidatorTest.java | 163 ++++++++++++++++++ .../negative_both_missing/input/MANIFEST.json | 17 ++ .../negative_both_missing/input/main.yml | 102 +++++++++++ .../negative_both_missing/input/nested.yml | 72 ++++++++ .../negative_refs_missing/input/MANIFEST.json | 17 ++ .../negative_refs_missing/input/main.yml | 102 +++++++++++ .../negative_refs_missing/input/nested.yml | 73 ++++++++ .../negative_tag_missing/input/MANIFEST.json | 17 ++ .../negative_tag_missing/input/main.yml | 102 +++++++++++ .../negative_tag_missing/input/nested.yml | 75 +++++++++ .../positive_test/input/MANIFEST.json | 17 ++ .../positive_test/input/main.yml | 102 +++++++++++ .../positive_test/input/nested.yml | 75 +++++++++ .../vlan_mixed/negative_test/input/MANIFEST.json | 17 ++ .../vlan_mixed/negative_test/input/main.yml | 187 +++++++++++++++++++++ .../vlan_mixed/negative_test/input/nested.yml | 74 ++++++++ .../negative_get_resource/input/MANIFEST.json | 17 ++ .../negative_get_resource/input/main.yml | 102 +++++++++++ .../negative_get_resource/input/nested.yml | 75 +++++++++ .../negative_test/input/MANIFEST.json | 17 ++ .../negative_test/input/main.yml | 187 +++++++++++++++++++++ .../negative_test/input/nested.yml | 76 +++++++++ .../positive_test/input/MANIFEST.json | 17 ++ .../positive_test/input/main.yml | 111 ++++++++++++ .../positive_test/input/nested.yml | 75 +++++++++ 27 files changed, 2091 insertions(+), 7 deletions(-) create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidator.java create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidatorTest.java create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/nested.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/nested.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/nested.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/nested.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/nested.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/nested.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/nested.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/MANIFEST.json create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/main.yml create mode 100644 openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/nested.yml (limited to 'openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl') diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java index 469bfad3af..dbd13ed8e0 100644 --- a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/util/HeatValidationService.java @@ -26,10 +26,12 @@ import org.openecomp.sdc.heat.datatypes.model.Environment; import org.openecomp.sdc.heat.datatypes.model.HeatOrchestrationTemplate; import org.openecomp.sdc.heat.datatypes.model.Parameter; import org.openecomp.sdc.heat.datatypes.model.Resource; +import org.openecomp.sdc.heat.services.HeatStructureUtil; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; import org.openecomp.sdc.tosca.services.YamlUtil; import org.openecomp.sdc.validation.impl.validators.HeatValidator; +import org.openecomp.sdc.validation.type.HeatResourceValidationContext; import java.io.InputStream; import java.util.Collection; @@ -105,11 +107,11 @@ public class HeatValidationService { * @param nestedParameters nested parameters. * @param nestedParametersNames nested parameter names. */ - public static void checkNestedParameters(String parentFileName, String nestedFileName, - GlobalValidationContext globalContext, - Map parentParameters, - Map nestedParameters, - Set nestedParametersNames) { + private static void checkNestedParameters(String parentFileName, String nestedFileName, + GlobalValidationContext globalContext, + Map parentParameters, + Map nestedParameters, + Set nestedParametersNames) { HeatOrchestrationTemplate parentHeatOrchestrationTemplate; HeatOrchestrationTemplate nestedHeatOrchestrationTemplate; @@ -276,6 +278,10 @@ public class HeatValidationService { } return false; } + + + + private static HeatOrchestrationTemplate getNestedHeatOrchestrationTemplate( String nestedFileName, GlobalValidationContext globalContext) throws Exception { Optional fileContent = globalContext.getFileContent(nestedFileName); @@ -319,9 +325,45 @@ public class HeatValidationService { return envContent; } + /** + * + * @param fileName on which the validation is currently run + * @param globalContext gloabl validation context + * @param heatResourceValidationContext heat resource validation context + * @param propertyValue the value which is examined + * @return whether the vlan has single parent port + */ + public static boolean hasSingleParentPort(String fileName, GlobalValidationContext globalContext, + HeatResourceValidationContext heatResourceValidationContext, + Object propertyValue) { + boolean hasSingleParentPort; + if (propertyValue instanceof List && ((List) propertyValue).size() == 1) { + final Object listValue = ((List) propertyValue).get(0); + + final Set getParamValues = + HeatStructureUtil.getReferencedValuesByFunctionName(fileName, "get_param", + listValue, globalContext); + hasSingleParentPort = getParamValues.isEmpty() || (getParamValues.size() == 1) && + validateGetParamValueOfType(getParamValues, heatResourceValidationContext, + DefinedHeatParameterTypes.STRING.getType()); + } else { + hasSingleParentPort = false; + } + return hasSingleParentPort; + } + + private static boolean validateGetParamValueOfType(Set values, + HeatResourceValidationContext + heatResourceValidationContext,String type) { + Optional value = values.stream().findAny(); + boolean isString = false; + if (value.isPresent()) { + isString = + Objects.equals(heatResourceValidationContext.getHeatOrchestrationTemplate + ().getParameters().get(value.get()).getType(), type); + } - public static String getResourceGroupResourceName(String resourceCallingToResourceGroup) { - return "OS::Heat::ResourceGroup in " + resourceCallingToResourceGroup; + return isString; } } diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidator.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidator.java new file mode 100644 index 0000000000..b5fa80e381 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/main/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidator.java @@ -0,0 +1,153 @@ +/* + * Copyright © 2016-2017 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. + */ + +package org.openecomp.sdc.validation.impl.validators.heatresource; + +import org.openecomp.core.validation.ErrorMessageCode; +import org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder; +import org.openecomp.core.validation.types.GlobalValidationContext; +import org.openecomp.sdc.common.togglz.ToggleableFeature; +import org.openecomp.sdc.datatypes.error.ErrorLevel; +import org.openecomp.sdc.heat.datatypes.DefinedHeatParameterTypes; +import org.openecomp.sdc.heat.datatypes.model.Resource; +import org.openecomp.sdc.heat.services.HeatConstants; +import org.openecomp.sdc.heat.services.HeatStructureUtil; +import org.openecomp.sdc.validation.ResourceValidator; +import org.openecomp.sdc.validation.ValidationContext; +import org.openecomp.sdc.validation.impl.util.HeatValidationService; +import org.openecomp.sdc.validation.type.HeatResourceValidationContext; + +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import java.util.Set; + +public class VirtualMachineInterfaceValidator implements ResourceValidator { + private static final ErrorMessageCode ERROR_CODE_VLAN1 = new ErrorMessageCode("VLAN1"); + private static final ErrorMessageCode ERROR_CODE_VLAN2 = new ErrorMessageCode("VLAN2"); + + + @Override + public void validate(String fileName, Map.Entry resourceEntry, + GlobalValidationContext globalContext, ValidationContext validationContext) { + if (ToggleableFeature.VLAN_TAGGING.isActive()) { + HeatResourceValidationContext heatResourceValidationContext = + (HeatResourceValidationContext) validationContext; + Optional tagPropertyValue = getVlanTagPropertyValue(resourceEntry.getValue()); + + tagPropertyValue + .ifPresent(o -> validateHasSingleParentPort(fileName, resourceEntry, globalContext, + heatResourceValidationContext)); + validateHasTwoProperties(fileName, resourceEntry, globalContext); + + } + } + + + private void validateHasSingleParentPort(String fileName, + Map.Entry resourceEntry, + GlobalValidationContext globalContext, + HeatResourceValidationContext heatResourceValidationContext) { + Object refsPropertyValue = resourceEntry.getValue().getProperties() + .get(HeatConstants.VMI_REFS_PROPERTY_NAME); + if (Objects.isNull(refsPropertyValue)) { + return; + } + boolean hasSingleParentPort= HeatValidationService.hasSingleParentPort(fileName, globalContext, + heatResourceValidationContext, + refsPropertyValue); + if (!hasSingleParentPort) { + globalContext.addMessage(fileName, ErrorLevel.ERROR, ErrorMessagesFormatBuilder + .getErrorWithParameters(ERROR_CODE_VLAN1, + Messages.VLAN_SUBINTERFACE_MORE_THAN_ONE_PORT.getErrorMessage(), + resourceEntry.getKey())); + } + + + } + + + private void validateHasTwoProperties(String fileName, Map.Entry resourceEntry, + GlobalValidationContext globalContext) { + + Optional refsPropertyValue = getRefsPropertyValue(resourceEntry.getValue()); + Optional tagPropertyValue = getVlanTagPropertyValue(resourceEntry.getValue()); + + + if (refsPropertyValue.isPresent() && !tagPropertyValue.isPresent()) { + globalContext + .addMessage(fileName, ErrorLevel.WARNING, + ErrorMessagesFormatBuilder + .getErrorWithParameters( + ERROR_CODE_VLAN2, + Messages.VLAN_SUBINTERFACE_MISSING_TAG_PROPERTY.getErrorMessage(), + resourceEntry.getKey()) + ); + + } else if (!refsPropertyValue.isPresent() && tagPropertyValue.isPresent()) { + globalContext + .addMessage(fileName, ErrorLevel.WARNING, + ErrorMessagesFormatBuilder + .getErrorWithParameters( + ERROR_CODE_VLAN2, + Messages.VLAN_SUBINTERFACE_MISSING_REFS_PROPERTY.getErrorMessage(), + resourceEntry.getKey())); + + } + + } + + + private Optional getVlanTagPropertyValue(Resource resource) { + Object vmiProperties = resource.getProperties() + .get(HeatConstants.VMI_PROPERTIES_PROPERTY_NAME); + if (Objects.nonNull(vmiProperties) && vmiProperties instanceof Map) { + return Optional.ofNullable(((Map) vmiProperties) + .get(HeatConstants.VMI_SUB_INTERFACE_VLAN_TAG_PROPERTY_NAME)); + } + return Optional.empty(); + } + + private Optional getRefsPropertyValue(Resource resource) { + Object refsProperty = resource.getProperties() + .get(HeatConstants.VMI_REFS_PROPERTY_NAME); + return Optional.ofNullable(refsProperty); + + } + + + private enum Messages { + VLAN_SUBINTERFACE_MORE_THAN_ONE_PORT( + "More than one parent port found, there should be only one parent port for a VLAN sub-interface ID [%s]"), + VLAN_SUBINTERFACE_MISSING_TAG_PROPERTY("VLAN Tag property " + + "virtual_machine_interface_properties_sub_interface_vlan_tag is missing in VLAN Resource ID [%s]"), + VLAN_SUBINTERFACE_MISSING_REFS_PROPERTY("Parent port property virtual_machine_interface_refs " + + "is missing in VLAN Resource ID [%s]"); + + String getErrorMessage() { + return errorMessage; + } + + private final String errorMessage; + + Messages(String errorMessage) { + this.errorMessage = errorMessage; + } + + } + +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidatorTest.java b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidatorTest.java new file mode 100644 index 0000000000..c82271e1c7 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/java/org/openecomp/sdc/validation/impl/validators/heatresource/VirtualMachineInterfaceValidatorTest.java @@ -0,0 +1,163 @@ +package org.openecomp.sdc.validation.impl.validators.heatresource; + +import org.openecomp.core.validation.types.MessageContainer; +import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes; +import org.openecomp.sdc.validation.impl.validators.HeatResourceValidator; +import org.openecomp.sdc.validation.util.ValidationTestUtil; +import org.testng.Assert; +import org.testng.annotations.Test; + +import java.util.Map; + +/** + * @author KATYR + * @since January 22, 2018 + */ + +public class VirtualMachineInterfaceValidatorTest { + private static final String PATH = + "/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/"; + + + @Test + public void hasSingleParentPortNegative() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_multiple_parent_ports/negative_test/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 1); + + Assert.assertEquals(messages.get("nested.yml").getErrorMessageList().size(), 1); + Assert.assertEquals( + messages.get("nested.yml").getErrorMessageList().get(0).getMessage(), + "ERROR: [VLAN1]: More than one parent port found, " + + "there should be only one parent port for a VLAN sub-interface ID [template_Vlan_2]"); + } + + @Test + public void hasSingleParentPortNegativeWithGetResource() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_multiple_parent_ports/negative_get_resource/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 0); + } + + + @Test + public void hasSingleParentPortPositive() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_multiple_parent_ports/positive_test/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 0); + + + } + + + @Test + public void hasBothPropertiesMissingTagNegative() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_has_two_properties/negative_tag_missing/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 1); + + Assert.assertEquals(messages.get("nested.yml").getErrorMessageList().size(), 1); + Assert.assertEquals( + messages.get("nested.yml").getErrorMessageList().get(0).getMessage(), + "WARNING: [VLAN2]: VLAN Tag property " + + "virtual_machine_interface_properties_sub_interface_vlan_tag " + + "is missing in VLAN Resource ID [template_Vlan_2]"); + } + + @Test + public void hasBothPropertiesMissingRefsNegative() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_has_two_properties/negative_refs_missing/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 1); + + Assert.assertEquals(messages.get("nested.yml").getErrorMessageList().size(), 1); + Assert.assertEquals( + messages.get("nested.yml").getErrorMessageList().get(0).getMessage(), + "WARNING: [VLAN2]: Parent port property virtual_machine_interface_refs is " + + "missing in VLAN Resource ID [template_Vlan_2]"); + } + + @Test + public void hasBothPropertiesBothMissingPositiveNotVLAN() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_has_two_properties/negative_both_missing/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 0); + + } + + + @Test + public void hasBothPropertiesPositive() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_has_two_properties/positive_test/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 0); + + + } + + @Test + public void hasSingleParentPortNegativeHasBothPropertiesNegative() { + HeatResourceValidator baseValidator = new HeatResourceValidator(); + VirtualMachineInterfaceValidator resourceValidator = new VirtualMachineInterfaceValidator(); + Map messages = ValidationTestUtil.testValidator(baseValidator, + resourceValidator, + HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource(), + PATH + "vlan_mixed/negative_test/input"); + + Assert.assertNotNull(messages); + Assert.assertEquals(messages.size(), 1); + + + Assert.assertEquals(messages.get("nested.yml").getErrorMessageList().size(), 1); + Assert.assertEquals( + messages.get("nested.yml").getErrorMessageList().get(0).getMessage(), + "WARNING: [VLAN2]: VLAN Tag property " + + "virtual_machine_interface_properties_sub_interface_vlan_tag is missing in " + + "VLAN Resource ID [template_Vlan_2]"); + + } + + +} \ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/main.yml new file mode 100644 index 0000000000..a2d5166c84 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/main.yml @@ -0,0 +1,102 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/nested.yml new file mode 100644 index 0000000000..a426cf9569 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_both_missing/input/nested.yml @@ -0,0 +1,72 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + + template_Vlan_3_arrayParameter: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_param: [net2,1] }] + diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/main.yml new file mode 100644 index 0000000000..a2d5166c84 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/main.yml @@ -0,0 +1,102 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/nested.yml new file mode 100644 index 0000000000..5e838ec62c --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_refs_missing/input/nested.yml @@ -0,0 +1,73 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + + template_Vlan_2: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_param: net2 }] + diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/main.yml new file mode 100644 index 0000000000..a2d5166c84 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/main.yml @@ -0,0 +1,102 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/nested.yml new file mode 100644 index 0000000000..342624e090 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/negative_tag_missing/input/nested.yml @@ -0,0 +1,75 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + + template_Vlan_2: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_param: net2 }] + virtual_machine_interface_refs: [{ get_param: p2 }] + + + diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/main.yml new file mode 100644 index 0000000000..a2d5166c84 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/main.yml @@ -0,0 +1,102 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/nested.yml new file mode 100644 index 0000000000..b1a96d0228 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_has_two_properties/positive_test/input/nested.yml @@ -0,0 +1,75 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + template_Vlan_1: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_param: net1 }] + virtual_machine_interface_refs: [{ get_param: p1 }] + + + \ No newline at end of file diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/main.yml new file mode 100644 index 0000000000..8bdc627afc --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/main.yml @@ -0,0 +1,187 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + template_VMInt_OAM_lb_1: + type: OS::ContrailV2::VirtualMachineInterface + properties: + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_service_interface_type: { get_param: lb_st_interface_type_oam }, + } + virtual_network_refs: [{ get_resource: test_net1 }] + port_tuple_refs: [{ get_param: template_PortTuple_LB1 }] + security_group_refs: [{ get_param: oam_sec_group_name}] + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_Vlan1: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: vlan + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_resource: test_net1 }] + virtual_machine_interface_refs: [{ get_resource: test_Vlan2 }] + + test_Vlan2: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: vlan + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_resource: test_net1 }] + virtual_machine_interface_refs: [{ get_resource: template_VMInt_OAM_lb_1 }] + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/nested.yml new file mode 100644 index 0000000000..29f8c20209 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_mixed/negative_test/input/nested.yml @@ -0,0 +1,74 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + + template_Vlan_2: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_param: net2 },{ get_param: net1 }] + virtual_machine_interface_refs: [{ get_param: p2 }, { get_param: p1 }] + + diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/main.yml new file mode 100644 index 0000000000..a2d5166c84 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/main.yml @@ -0,0 +1,102 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/nested.yml new file mode 100644 index 0000000000..97b0aec970 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_get_resource/input/nested.yml @@ -0,0 +1,75 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + + template_Vlan_2: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_resource: template_VMInt_OAM_lb_1 }] + virtual_machine_interface_refs: [{ get_resource: template_VMInt_OAM_lb_1 }] + + diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/main.yml new file mode 100644 index 0000000000..8bdc627afc --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/main.yml @@ -0,0 +1,187 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + template_VMInt_OAM_lb_1: + type: OS::ContrailV2::VirtualMachineInterface + properties: + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_service_interface_type: { get_param: lb_st_interface_type_oam }, + } + virtual_network_refs: [{ get_resource: test_net1 }] + port_tuple_refs: [{ get_param: template_PortTuple_LB1 }] + security_group_refs: [{ get_param: oam_sec_group_name}] + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_Vlan1: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: vlan + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_resource: test_net1 }] + virtual_machine_interface_refs: [{ get_resource: test_Vlan2 }] + + test_Vlan2: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: vlan + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_resource: test_net1 }] + virtual_machine_interface_refs: [{ get_resource: template_VMInt_OAM_lb_1 }] + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/nested.yml new file mode 100644 index 0000000000..7a73014522 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/negative_test/input/nested.yml @@ -0,0 +1,76 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + + template_Vlan_2: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_param: net2 },{ get_param: net1 }] + virtual_machine_interface_refs: [{ get_param: p2 }, { get_param: p1 }] + + + diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/MANIFEST.json new file mode 100644 index 0000000000..aca75b5055 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/MANIFEST.json @@ -0,0 +1,17 @@ +{ + "name": "vMME_Small", + "description": "HOT template to create 2 cinder volume attachment", + "version": "2013-05-23", + "data": [ + { + "file": "main.yml", + "type": "HEAT", + "isBase": "true" + }, + { + "file": "nested.yml", + "type": "HEAT", + "isBase": "false" + } + ] +} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/main.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/main.yml new file mode 100644 index 0000000000..9b0c3ec0eb --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/main.yml @@ -0,0 +1,111 @@ +heat_template_version: 2013-05-23 + +description: > + Version 2.0 02-09-2016 (Authors: John Doe, user PROD) + +parameters: + jsa_net_name: + type: string + description: network name of jsa log network + security_group_name: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_names: + type: comma_delimited_list + description: CMAUI1, CMAUI2 server names + cmaui_image: + type: string + description: Image for CMAUI server + availability_zone_0: + type: string + label: availabilityzone name + description: availabilityzone name + cmaui_flavor: + type: string + description: Flavor for CMAUI server + cmaui_oam_ips: + type: string + oam_sec_group_name: + type: string + lb_st_interface_type_oam: + type: string + template_PortTuple_LB1: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string +resources: + test_net1: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + test_net2: + type: OS::Neutron::Net + properties: + name: {get_param: jsa_net_name} + shared: True + + server_cmaui_nova: + type: OS::Nova::Server + properties: + name: { get_param: [cmaui_names, 0]} + image: { get_param: cmaui_image } + availability_zone: { get_param: availability_zone_0 } + flavor: { get_param: cmaui_flavor } + networks: + - port: { get_resource: template_VMInt_OAM_lb_1 } + - port: { get_resource: cmaui_port_2 } + + + type: OS::ContrailV2::VirtualMachineInterface + properties: + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_service_interface_type: { get_param: lb_st_interface_type_oam }, + } + virtual_network_refs: [{ get_resource: test_net1 }] + port_tuple_refs: [{ get_param: template_PortTuple_LB1 }] + security_group_refs: [{ get_param: oam_sec_group_name}] + + cmaui_port_2: + type: OS::Neutron::Port + properties: + network: { get_resource: test_net1 } + fixed_ips: [{"ip_address": {get_param: [cmaui_oam_ips, 0]}}] + security_groups: [{get_param: security_group_name}] + replacement_policy: AUTO + + test_nested: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_resourceGroup: + type: OS::Heat::ResourceGroup + properties: + count: 9 + resource_def: + type: nested.yml + properties: + p1: { get_resource: template_VMInt_OAM_lb_1} + p2: { get_resource: cmaui_port_2} + net1: { get_resource: test_net1} + net2: { get_resource: test_net2} + + test_nested_invalidConnection: + type: nested.yml + properties: + p1: { get_resource: test_Vlan1} + p2: { get_resource: server_cmaui_nova} diff --git a/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/nested.yml b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/nested.yml new file mode 100644 index 0000000000..b1a96d0228 --- /dev/null +++ b/openecomp-be/lib/openecomp-sdc-validation-lib/openecomp-sdc-validation-impl/src/test/resources/org/openecomp/validation/validators/heat_validator/vlan_resource_validation/vlan_multiple_parent_ports/positive_test/input/nested.yml @@ -0,0 +1,75 @@ +heat_template_version: 2013-05-23 + +description: cmaui server template for vMMSC + +parameters: + p1: + type: string + p2: + type: string + net1: + type: string + net2: + type: string + lb_st_vlan_type_oam: + description: dummy + type: string + mac_address: + type: string + virtual_ip_address: + type: string + virtual_ipv6_address: + type: string + vlan_ids: + type: string + subinterface_name_prefix: + type: string + subinterface_instance_index: + type: number +resources: + + template_Vlan_1: + type: OS::ContrailV2::VirtualMachineInterface + properties: + name: + str_replace: + template: $NAME$VLAN + params: + $NAME: { get_param: subinterface_name_prefix } + $VLAN: { get_param: [ vlan_ids, { get_param: subinterface_instance_index } ] } + virtual_machine_interface_properties: + { + virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: lb_st_vlan_type_oam } + } + virtual_machine_interface_mac_addresses: + { + virtual_machine_interface_mac_addresses_mac_address: [{ get_param: mac_address }], + } + virtual_machine_interface_allowed_address_pairs: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair: [ + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ip_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 32 + } + }, + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_address_mode: active-standby, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_mac: { get_param: mac_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip: + { + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix: { get_param: virtual_ipv6_address }, + virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128 + } + } + ] + } + virtual_network_refs: [{ get_param: net1 }] + virtual_machine_interface_refs: [{ get_param: p1 }] + + + \ No newline at end of file -- cgit 1.2.3-korg