Removing service templates without node templates 83/12383/1
authortalio <tali.orenbach@amdocs.com>
Thu, 14 Sep 2017 07:54:21 +0000 (10:54 +0300)
committertalio <tali.orenbach@amdocs.com>
Thu, 14 Sep 2017 07:54:21 +0000 (10:54 +0300)
Bugfix for cases where we have substitution service templates without node templates

Issue - ID : SDC-330

Change-Id: Ia9f33ce90fe0dbcc8ca2596ca63da704a48c7e67
Signed-off-by: talio <tali.orenbach@amdocs.com>
29 files changed:
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/datatypes/heattotosca/TranslationContext.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationNestedImpl.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/main/java/org/openecomp/sdc/translator/services/heattotosca/impl/resourcetranslation/ResourceTranslationResourceGroupImpl.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/java/org/openecomp/sdc/translator/impl/heattotosca/nested/single/TranslateHeatNestedSingle.java
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/GlobalSubstitutionTypesServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/MainServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_1_perimeta_swmu_a_childServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_1_perimeta_swmu_b_childServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_2_perimeta_sw_a_childServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_2_perimeta_sw_b_childServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/MANIFEST.json [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/base_perimeta_deployment_create.env [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/base_perimeta_deployment_create.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/custom.ini [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_a.env [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_a.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_b.env [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_b.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_swmu_a_child.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_swmu_b_child.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_a.env [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_a.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_b.env [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_b.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_sw_a_child.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_sw_b_child.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/vlan_subinterface_dual.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/services/heattotosca/getAttrDynamicParamEmptyMap/expectedoutputfiles/MainServiceTemplate.yaml
openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/services/DataModelUtil.java

index f5ad2a1..a0034a3 100644 (file)
@@ -587,6 +587,15 @@ public class TranslationContext {
 
   }
 
+  public Set<String> getServiceTemplatesWithoutNodeTemplateSection() {
+    return serviceTemplatesWithoutNodeTemplateSection;
+  }
+
+  public void setServiceTemplatesWithoutNodeTemplateSection(
+      Set<String> serviceTemplatesWithoutNodeTemplateSection) {
+    this.serviceTemplatesWithoutNodeTemplateSection = serviceTemplatesWithoutNodeTemplateSection;
+  }
+
   public void addServiceTemplateWithoutNodeTemplates(String serviceTemplateName){
     this.serviceTemplatesWithoutNodeTemplateSection.add(serviceTemplateName);
   }
index 843d9fa..c29409f 100644 (file)
@@ -20,6 +20,7 @@
 
 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
 
+import org.apache.commons.collections4.MapUtils;
 import org.openecomp.core.utilities.file.FileUtils;
 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
 import org.openecomp.sdc.logging.api.Logger;
@@ -31,12 +32,15 @@ import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
 import org.openecomp.sdc.tosca.services.DataModelUtil;
 import org.openecomp.sdc.tosca.services.ToscaUtil;
 import org.openecomp.sdc.tosca.services.impl.ToscaAnalyzerServiceImpl;
+import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
 import org.openecomp.sdc.translator.datatypes.heattotosca.to.TranslateTo;
 import org.openecomp.sdc.translator.services.heattotosca.ConsolidationDataUtil;
 import org.openecomp.sdc.translator.services.heattotosca.Constants;
 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
 import org.openecomp.sdc.translator.services.heattotosca.TranslationService;
 
+import java.util.Objects;
+
 public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
 
   protected static Logger logger =
@@ -46,8 +50,9 @@ public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
   public void translate(TranslateTo translateTo) {
     mdcDataDebugMessage.debugEntryMessage(null, null);
 
+    TranslationContext context = translateTo.getContext();
     FileData nestedFileData =
-        HeatToToscaUtil.getFileData(translateTo.getResource().getType(), translateTo.getContext());
+        HeatToToscaUtil.getFileData(translateTo.getResource().getType(), context);
     if (nestedFileData == null) {
       logger.warn("Nested File '" + translateTo.getResource().getType()
           + "' is not exist, therefore, the nested resource with the ID '"
@@ -58,7 +63,7 @@ public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
     String substitutionNodeTypeKey = ToscaNodeType.ABSTRACT_NODE_TYPE_PREFIX + "heat."
         + templateName;
 
-    if (!translateTo.getContext().getTranslatedServiceTemplates()
+    if (!context.getTranslatedServiceTemplates()
         .containsKey(translateTo.getResource().getType())) {
 
       //substitution service template
@@ -68,7 +73,7 @@ public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
       //global substitution service template
       ServiceTemplate globalSubstitutionServiceTemplate = new HeatToToscaUtil()
           .fetchGlobalSubstitutionServiceTemplate(translateTo.getServiceTemplate(),
-              translateTo.getContext());
+              context);
 
       //substitution node type
       NodeType substitutionNodeType = new ToscaAnalyzerServiceImpl()
@@ -78,14 +83,22 @@ public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
           substitutionNodeType);
       //substitution mapping
       HeatToToscaUtil
-          .handleSubstitutionMapping(translateTo.getContext(), substitutionNodeTypeKey,
+          .handleSubstitutionMapping(context, substitutionNodeTypeKey,
               nestedSubstitutionServiceTemplate, substitutionNodeType);
 
       //add new nested service template
-      translateTo.getContext().getTranslatedServiceTemplates()
+      context.getTranslatedServiceTemplates()
           .put(translateTo.getResource().getType(), nestedSubstitutionServiceTemplate);
     }
 
+    ServiceTemplate substitutionServiceTemplate = context.getTranslatedServiceTemplates()
+        .get(translateTo.getResource().getType());
+
+    if(DataModelUtil.isNodeTemplateSectionMissingFromServiceTemplate(substitutionServiceTemplate)){
+      handleSubstitutionServiceTemplateWithoutNodeTemplates(translateTo, context, templateName);
+      mdcDataDebugMessage.debugExitMessage(null, null);
+      return;
+    }
     NodeTemplate substitutionNodeTemplate =
         HeatToToscaUtil.createAbstractSubstitutionNodeTemplate(translateTo, templateName,
             substitutionNodeTypeKey);
@@ -100,6 +113,13 @@ public class ResourceTranslationNestedImpl extends ResourceTranslationBase {
     mdcDataDebugMessage.debugExitMessage(null, null);
   }
 
+  private void handleSubstitutionServiceTemplateWithoutNodeTemplates(TranslateTo translateTo,
+                                                                     TranslationContext context,
+                                                                     String templateName) {
+    context.addServiceTemplateWithoutNodeTemplates(templateName);
+    context.getTranslatedServiceTemplates().remove(translateTo.getResource().getType());
+  }
+
   private ServiceTemplate createSubstitutionServiceTemplate(TranslateTo translateTo,
                                                             FileData nestedFileData,
                                                             String templateName) {
index 5d25c7e..bd672e3 100644 (file)
@@ -45,6 +45,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 
 public class ResourceTranslationResourceGroupImpl extends ResourceTranslationBase {
@@ -72,7 +73,7 @@ public class ResourceTranslationResourceGroupImpl extends ResourceTranslationBas
       logger.warn("Resource '" + translateTo.getResourceId() + "' of type'"
           + HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource()
           + "' with resourceDef which is not pointing to nested heat file is not supported and "
-               + "will be ignored in the translation ");
+          + "will be ignored in the translation ");
 
       mdcDataDebugMessage.debugExitMessage(null, null);
       return;
@@ -88,17 +89,19 @@ public class ResourceTranslationResourceGroupImpl extends ResourceTranslationBas
                 translateTo.getHeatOrchestrationTemplate(), nestedResource,
                 translateTo.getResourceId(), translateTo.getContext());
     if (substitutionNodeTemplateId.isPresent()) {
-      NodeTemplate substitutionNodeTemplate = DataModelUtil
-          .getNodeTemplate(translateTo.getServiceTemplate(), substitutionNodeTemplateId.get());
-      Map serviceTemplateFilter = (Map<String, Object>) substitutionNodeTemplate.getProperties()
-          .get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME);
-
-      populateServiceTemplateFilterProperties(translateTo, substitutionNodeTemplate,
-          serviceTemplateFilter);
-      handlingIndexVar(translateTo, substitutionNodeTemplate);
-      DataModelUtil
-          .addNodeTemplate(translateTo.getServiceTemplate(), substitutionNodeTemplateId.get(),
-              substitutionNodeTemplate);
+      NodeTemplate substitutionNodeTemplate =
+          DataModelUtil.getNodeTemplate(translateTo.getServiceTemplate(), substitutionNodeTemplateId.get());
+      if(!Objects.isNull(substitutionNodeTemplate)) {
+        Map serviceTemplateFilter = (Map<String, Object>) substitutionNodeTemplate.getProperties()
+            .get(ToscaConstants.SERVICE_TEMPLATE_FILTER_PROPERTY_NAME);
+
+        populateServiceTemplateFilterProperties(translateTo, substitutionNodeTemplate,
+            serviceTemplateFilter);
+        handlingIndexVar(translateTo, substitutionNodeTemplate);
+        DataModelUtil
+            .addNodeTemplate(translateTo.getServiceTemplate(), substitutionNodeTemplateId.get(),
+                substitutionNodeTemplate);
+      }
     }
 
     mdcDataDebugMessage.debugExitMessage(null, null);
index f81da11..38df156 100644 (file)
 
 package org.openecomp.sdc.translator.impl.heattotosca.nested.single;
 
+import org.junit.Before;
 import org.junit.Test;
 import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil;
 import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.TestConstants;
 import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseResourceTranslationTest;
 
+import java.io.IOException;
+
 public class TranslateHeatNestedSingle extends BaseResourceTranslationTest {
 
-  {
-    inputFilesPath = "/mock/heat/nested/single/inputs";
-    outputFilesPath = "/mock/heat/nested/single/expectedoutputfiles";
+  @Override
+  @Before
+  public void setUp() throws IOException {
+    // do not delete this function. it prevents the superclass setup from running
   }
 
+
   @Test
   public void testTranslate() throws Exception {
+    inputFilesPath = "/mock/heat/nested/single/inputs";
+    outputFilesPath = "/mock/heat/nested/single/expectedoutputfiles";
+
+    initTranslatorAndTranslate();
     testTranslation();
     validateNestedTemplateConsolidationData(TestConstants.TEST_SINGLE_NESTED_RESOURCE);
   }
+
+  @Test
+  public void testTranslateNestedWithoutNodeTemplates() throws IOException {
+    inputFilesPath = "/mock/heat/nested/nestedwithoutNodeTemplates/inputs";
+    outputFilesPath = "/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles";
+
+    initTranslatorAndTranslate();
+    testTranslation();
+  }
 }
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/GlobalSubstitutionTypesServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/GlobalSubstitutionTypesServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..306576b
--- /dev/null
@@ -0,0 +1,3462 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: GlobalSubstitutionTypes
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+node_types:
+  org.openecomp.resource.abstract.nodes.heat.module_1_perimeta_swmu_a_child:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      vf_module_id:
+        type: string
+        description: Unique ID for this VF Module instance
+        required: true
+        status: SUPPORTED
+      ssc_a_name_0:
+        type: string
+        description: Name of Perimeta VM A instance
+        required: true
+        status: SUPPORTED
+      int_ha_network_plen:
+        type: float
+        description: Prefix length of subnet associated with internal HA network
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 31
+      unused_port_net_id:
+        type: string
+        description: Service network unused port network UUID
+        required: true
+        status: SUPPORTED
+      perimeta_server_group:
+        type: string
+        description: Server group to use for these VMs
+        required: true
+        status: SUPPORTED
+      perimeta_config:
+        type: string
+        description: JSON orchestration template configuration for instance.
+        required: true
+        status: SUPPORTED
+      ssc_a_int_ha_ip_0:
+        type: string
+        description: Fixed IP address to use as HA IP of A instance.
+        required: true
+        status: SUPPORTED
+      vnf_name:
+        type: string
+        description: Unique name for this VNF instance
+        required: true
+        status: SUPPORTED
+      perimeta_untrusted_vlan_ids:
+        type: list
+        description: List of VLAN IDs to use on the untrusted/access network
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      int_ha_net_id:
+        type: string
+        description: HA network id
+        required: true
+        status: SUPPORTED
+      ssc_b_int_ha_ip_0:
+        type: string
+        description: Fixed IP address to use as HA IPs of B instance.
+        required: true
+        status: SUPPORTED
+      ssc_mgmt_vip_0:
+        type: string
+        description: Management virtual IP address.
+        required: true
+        status: SUPPORTED
+      ssc_a_trusted_ip_0:
+        type: string
+        description: Fixed IP address to use as Trusted/core fixed IPs of A instance.
+        required: true
+        status: SUPPORTED
+      perimeta_keypair:
+        type: string
+        description: Keypair to use for accessing this Perimeta instance
+        required: true
+        status: SUPPORTED
+      vnf_id:
+        type: string
+        description: VNF ID of this deployment
+        required: true
+        status: SUPPORTED
+      availability_zone_0:
+        type: string
+        description: Availability zone for A instances.
+        required: true
+        status: SUPPORTED
+      ssc_trusted_vip_0:
+        type: string
+        description: Trusted/core virtual IP address.
+        required: true
+        status: SUPPORTED
+      ssc_untrusted_vip_0:
+        type: string
+        description: Untrusted/access virtual IP address
+        required: true
+        status: SUPPORTED
+      perimeta_sec_groups:
+        type: list
+        description: List of security groups to add on trusted interfaces.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      ssc_a_untrusted_v6_ip_0:
+        type: string
+        description: Fixed IP address to use as Untrusted/access alternate fixed IP of A instance.
+        required: true
+        status: SUPPORTED
+      perimeta_untrusted_num_vlans:
+        type: float
+        description: number of VLANs to connect to the untrusted/access interface
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 1
+          - 1001
+      ssc_rf_vip_0:
+        type: string
+        description: RF virtual IP address to use for SSC.
+        required: true
+        status: SUPPORTED
+      ssc_a_mgmt_ip_0:
+        type: string
+        description: Fixed IP address to use as management IP of A instance.
+        required: true
+        status: SUPPORTED
+      trusted_net_id:
+        type: string
+        description: Trusted/core network UUID
+        required: true
+        status: SUPPORTED
+      ssc_untrusted_parent_vip_0:
+        type: string
+        description: Untrusted/access parent virtual IP address
+        required: true
+        status: SUPPORTED
+      ssc_untrusted_v6_vip_0:
+        type: string
+        description: Untrusted/access alternate virtual IP address
+        required: true
+        status: SUPPORTED
+      ssc_a_rf_ip_0:
+        type: string
+        description: RF fixed IP address to use for SSC A.
+        required: true
+        status: SUPPORTED
+      vm_role:
+        type: string
+        description: Role of these VMs
+        required: true
+        status: SUPPORTED
+      ssc_a_untrusted_parent_ip_0:
+        type: string
+        description: Fixed IP address to use as Untrusted/access fixed IP of A parent instance.
+        required: true
+        status: SUPPORTED
+      perimeta_untrusted_vlan_networks:
+        type: list
+        description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      ssc_a_untrusted_ip_0:
+        type: string
+        description: Fixed IP address to use as Untrusted/access fixed IP of A instance.
+        required: true
+        status: SUPPORTED
+      perimeta_image_name:
+        type: string
+        description: Glance image for Perimeta instance
+        required: true
+        status: SUPPORTED
+      mgmt_net_id:
+        type: string
+        description: Management network id
+        required: true
+        status: SUPPORTED
+      int_untrusted_parent_net_id:
+        type: string
+        description: internal Untrusted/access parent network id
+        required: true
+        status: SUPPORTED
+      perimeta_flavor_name:
+        type: string
+        description: Flavor to use for creating VM instances
+        required: true
+        status: SUPPORTED
+    requirements:
+    - dependency_perimeta_ssc_a_ha_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_a_ha_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_a_untrusted_parent_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_a_untrusted_parent_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_a_mgmt_1_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_a_mgmt_1_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_a_trusted_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_a_trusted_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_a_unused_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_a_unused_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_a_mgmt_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_a_mgmt_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_a_server_0:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - local_storage_perimeta_ssc_a_server_0:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    capabilities:
+      disk.ephemeral.size_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      instance_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_a_mgmt_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_a_mgmt_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_perimeta_ssc_a_server_0:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.usage_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests.rate_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_a_mgmt_1_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_a_mgmt_1_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes.rate_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests.rate_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_a_server_0:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.iops_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_a_mgmt_1_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_a_trusted_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.capacity_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_perimeta_ssc_a_server_0:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes.rate_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_util_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_a_untrusted_parent_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.allocation_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_a_unused_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_a_trusted_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.latency_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_a_server_0:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.requests_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_a_ha_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      scalable_perimeta_ssc_a_server_0:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.usage_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_a_untrusted_parent_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_a_ha_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu.delta_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.usage_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.iops_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_a_trusted_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes.rate_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_a_untrusted_parent_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      disk.root.size_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.allocation_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests.rate_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_a_unused_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes.rate_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_a_unused_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      host_perimeta_ssc_a_server_0:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_a_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_a_mgmt_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.capacity_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_a_ha_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      vcpus_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_a_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.latency_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.resident_perimeta_ssc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+  org.openecomp.resource.abstract.nodes.heat.module_1_perimeta_swmu_b_child:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      vf_module_id:
+        type: string
+        description: Unique ID for this VF Module instance
+        required: true
+        status: SUPPORTED
+      int_ha_network_plen:
+        type: float
+        description: Prefix length of subnet associated with internal HA network
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 31
+      unused_port_net_id:
+        type: string
+        description: Service network unused port network UUID
+        required: true
+        status: SUPPORTED
+      perimeta_server_group:
+        type: string
+        description: Server group to use for these VMs
+        required: true
+        status: SUPPORTED
+      ssc_b_name_0:
+        type: string
+        description: Name of Perimeta VM B instance
+        required: true
+        status: SUPPORTED
+      ssc_a_int_ha_ip_0:
+        type: string
+        description: Fixed IP address to use as HA IPs of A instance.
+        required: true
+        status: SUPPORTED
+      ssc_b_untrusted_ip_0:
+        type: string
+        description: Fixed IP address to use as Untrusted/access fixed IP of B instance.
+        required: true
+        status: SUPPORTED
+      ssc_b_mgmt_ip_0:
+        type: string
+        description: Fixed IP address to use as management IP of B instance.
+        required: true
+        status: SUPPORTED
+      ssc_b_untrusted_parent_ip_0:
+        type: string
+        description: Fixed IP address to use as Untrusted/access fixed IP of B parent instance.
+        required: true
+        status: SUPPORTED
+      vnf_name:
+        type: string
+        description: Unique name for this VNF instance
+        required: true
+        status: SUPPORTED
+      perimeta_untrusted_vlan_ids:
+        type: list
+        description: List of VLAN IDs to use on the untrusted/access network
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      int_ha_net_id:
+        type: string
+        description: HA network id
+        required: true
+        status: SUPPORTED
+      ssc_b_int_ha_ip_0:
+        type: string
+        description: Fixed IP address to use as HA IP of B instance.
+        required: true
+        status: SUPPORTED
+      ssc_mgmt_vip_0:
+        type: string
+        description: Management virtual IP address.
+        required: true
+        status: SUPPORTED
+      perimeta_keypair:
+        type: string
+        description: Keypair to use for accessing this Perimeta instance
+        required: true
+        status: SUPPORTED
+      vnf_id:
+        type: string
+        description: VNF ID of this deployment
+        required: true
+        status: SUPPORTED
+      availability_zone_1:
+        type: string
+        description: Availability zone for B instances.  May be the same as A instance.
+        required: true
+        status: SUPPORTED
+      ssc_trusted_vip_0:
+        type: string
+        description: Trusted/core virtual IP address.
+        required: true
+        status: SUPPORTED
+      ssc_untrusted_vip_0:
+        type: string
+        description: Untrusted/access virtual IP address
+        required: true
+        status: SUPPORTED
+      perimeta_sec_groups:
+        type: list
+        description: List of security groups to add on trusted interfaces.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_untrusted_num_vlans:
+        type: float
+        description: number of VLANs to connect to the untrusted/access interface
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 1
+          - 1001
+      ssc_rf_vip_0:
+        type: string
+        description: RF virtual IP address to use for SSC.
+        required: true
+        status: SUPPORTED
+      ssc_b_trusted_ip_0:
+        type: string
+        description: Fixed IP address to use as Trusted/core fixed IPs of B instance.
+        required: true
+        status: SUPPORTED
+      trusted_net_id:
+        type: string
+        description: Trusted/core network UUID
+        required: true
+        status: SUPPORTED
+      ssc_untrusted_parent_vip_0:
+        type: string
+        description: Untrusted/access parent virtual IP address
+        required: true
+        status: SUPPORTED
+      ssc_untrusted_v6_vip_0:
+        type: string
+        description: Untrusted/access alternate virtual IP address
+        required: true
+        status: SUPPORTED
+      ssc_b_untrusted_v6_ip_0:
+        type: string
+        description: Fixed IP address to use as Untrusted/access alternate fixed IP of B instance.
+        required: true
+        status: SUPPORTED
+      vm_role:
+        type: string
+        description: Role of these VMs
+        required: true
+        status: SUPPORTED
+      perimeta_untrusted_vlan_networks:
+        type: list
+        description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_image_name:
+        type: string
+        description: Glance image for Perimeta instance
+        required: true
+        status: SUPPORTED
+      ssc_b_rf_ip_0:
+        type: string
+        description: RF fixed IP address to use for SSC B.
+        required: true
+        status: SUPPORTED
+      mgmt_net_id:
+        type: string
+        description: Management network id
+        required: true
+        status: SUPPORTED
+      int_untrusted_parent_net_id:
+        type: string
+        description: internal Untrusted/access parent network id
+        required: true
+        status: SUPPORTED
+      perimeta_flavor_name:
+        type: string
+        description: Flavor to use for creating VM instances
+        required: true
+        status: SUPPORTED
+    requirements:
+    - dependency_perimeta_ssc_b_trusted_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_b_trusted_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_b_untrusted_parent_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_b_untrusted_parent_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_b_mgmt_1_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_b_mgmt_1_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_b_unused_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_b_unused_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_b_server_0:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - local_storage_perimeta_ssc_b_server_0:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - dependency_perimeta_ssc_b_mgmt_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_b_mgmt_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_ssc_b_ha_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_ssc_b_ha_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    capabilities:
+      host_perimeta_ssc_b_server_0:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      vcpus_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_b_mgmt_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_perimeta_ssc_b_server_0:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes.rate_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.allocation_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests.rate_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_b_trusted_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      disk.device.iops_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.usage_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_b_mgmt_1_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_b_unused_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_perimeta_ssc_b_server_0:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_b_server_0:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_b_mgmt_1_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu.delta_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.root.size_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.resident_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.ephemeral.size_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      instance_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_b_untrusted_parent_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_b_trusted_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_b_mgmt_1_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.latency_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_b_unused_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_b_ha_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.capacity_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_b_ha_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_b_untrusted_parent_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      binding_perimeta_ssc_b_server_0:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      scalable_perimeta_ssc_b_server_0:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.latency_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes.rate_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.requests_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_b_untrusted_parent_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.usage_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_b_ha_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_b_trusted_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.allocation_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.iops_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests.rate_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.usage_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_b_unused_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_ssc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_util_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes.rate_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.capacity_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_ssc_b_mgmt_1_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_ssc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes.rate_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests.rate_perimeta_ssc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_ssc_b_mgmt_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_ssc_b_mgmt_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_ssc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_ssc_b_unused_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+  org.openecomp.resource.abstract.nodes.heat.module_2_perimeta_sw_a_child:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      vf_module_id:
+        type: string
+        description: Unique ID for this VF Module instance
+        required: true
+        status: SUPPORTED
+      int_ha_network_plen:
+        type: float
+        description: Prefix length of subnet associated with internal HA network
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 31
+      perimeta_config:
+        type: string
+        description: JSON orchestration template configuration for instance.
+        required: true
+        status: SUPPORTED
+      vnf_name:
+        type: string
+        description: Unique name for this VNF instance
+        required: true
+        status: SUPPORTED
+      perimeta_untrusted_vlan_ids:
+        type: list
+        description: List of VLAN IDs to use on the untrusted/access network
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      int_ha_net_id:
+        type: string
+        description: HA network id
+        required: true
+        status: SUPPORTED
+      perimeta_instance_index:
+        type: float
+        description: Index of instance among multiple instances.  Use to retrieve correct parameter for this instance when passed all parameters for all instances.
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 19
+      perimeta_keypair:
+        type: string
+        description: Keypair to use for accessing this Perimeta instance
+        required: true
+        status: SUPPORTED
+      perimeta_server_groups:
+        type: list
+        description: Server groups to use for these VMs
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      vnf_id:
+        type: string
+        description: VNF ID of this deployment
+        required: true
+        status: SUPPORTED
+      availability_zone_0:
+        type: string
+        description: Availability zone for A instances.
+        required: true
+        status: SUPPORTED
+      rtp_msc_mgmt_vips:
+        type: list
+        description: List of management virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_sec_groups:
+        type: list
+        description: List of security groups to add on trusted interfaces.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_untrusted_parent_vips:
+        type: list
+        description: List of Untrusted/access parent virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_untrusted_num_vlans:
+        type: float
+        description: number of VLANs to connect to the untrusted/access interface
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 1
+          - 1001
+      rtp_msc_a_int_ha_ips:
+        type: list
+        description: List of fixed IP addresses to use as HA IPs of A instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_a_untrusted_parent_ips:
+        type: list
+        description: List of fixed IP addresses to use as Untrusted/access parent fixed IPs of A instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_a_trusted_ips:
+        type: list
+        description: List of fixed IP addresses to use as Trusted/core fixed IPs of A instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_untrusted_vips:
+        type: list
+        description: List of Untrusted/access virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      trusted_net_id:
+        type: string
+        description: Trusted/core network UUID
+        required: true
+        status: SUPPORTED
+      rtp_msc_b_int_ha_ips:
+        type: list
+        description: List of fixed IP addresses to use as HA IPs of B instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_a_mgmt_ips:
+        type: list
+        description: List of fixed IP addresses to use as management IPs of A instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_a_untrusted_ips:
+        type: list
+        description: List of fixed IP addresses to use as Untrusted/access fixed IPs of A instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      vm_role:
+        type: string
+        description: Role of these VMs
+        required: true
+        status: SUPPORTED
+      rtp_msc_untrusted_v6_vips:
+        type: list
+        description: List of Untrusted/access alternate virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_untrusted_vlan_networks:
+        type: list
+        description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_a_untrusted_v6_ips:
+        type: list
+        description: List of fixed IP addresses to use as Untrusted/access alternate fixed IPs of A instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_image_name:
+        type: string
+        description: Glance image for Perimeta instance
+        required: true
+        status: SUPPORTED
+      mgmt_net_id:
+        type: string
+        description: Management network id
+        required: true
+        status: SUPPORTED
+      int_untrusted_parent_net_id:
+        type: string
+        description: internal Untrusted/access parent network id
+        required: true
+        status: SUPPORTED
+      rtp_msc_a_names:
+        type: list
+        description: List of names of Perimeta VM A instances, indexed by perimeta_instance_index
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_flavor_name:
+        type: string
+        description: Flavor to use for creating VM instances
+        required: true
+        status: SUPPORTED
+      rtp_msc_trusted_vips:
+        type: list
+        description: List of Trusted/core virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+    requirements:
+    - dependency_perimeta_rtp_msc_a_trusted_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_a_trusted_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_rtp_msc_a_ha_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_a_ha_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_rtp_msc_a_server_0:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - local_storage_perimeta_rtp_msc_a_server_0:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - dependency_perimeta_rtp_msc_a_mgmt_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_a_mgmt_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    capabilities:
+      attachment_perimeta_rtp_msc_a_ha_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_rtp_msc_a_mgmt_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_a_trusted_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.latency_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      vcpus_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.resident_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.capacity_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_perimeta_rtp_msc_a_server_0:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_a_ha_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.allocation_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests.rate_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.iops_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_a_mgmt_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.usage_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_rtp_msc_a_trusted_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.usage_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_a_ha_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      disk.iops_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.allocation_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes.rate_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.capacity_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.ephemeral.size_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_util_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      scalable_perimeta_rtp_msc_a_server_0:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      host_perimeta_rtp_msc_a_server_0:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests.rate_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.root.size_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes.rate_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_perimeta_rtp_msc_a_server_0:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_a_server_0:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_a_server_0:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests.rate_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_a_trusted_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      instance_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes.rate_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_a_mgmt_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      disk.latency_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_a_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.requests_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes.rate_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_a_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu.delta_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.usage_perimeta_rtp_msc_a_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+  org.openecomp.resource.abstract.nodes.heat.vlan_subinterface_dual:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      perimeta_parent_interface:
+        type: string
+        description: Parent Contrail interface
+        required: true
+        status: SUPPORTED
+      perimeta_v6_vip_0:
+        type: string
+        description: virtual IPv6 address associated with subinterfaces
+        required: true
+        status: SUPPORTED
+      perimeta_subinterface_name_prefix:
+        type: string
+        description: Combined with subinterface_instance_index, this is used as the name of the subinterface resource
+        required: true
+        status: SUPPORTED
+      perimeta_vlan_networks:
+        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
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_subinterface_instance_index:
+        type: float
+        description: Index of instance among multiple instances.  Use to retrieve correct parameter for this instance when passed all parameters for all instances.
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 1
+          - 1001
+      perimeta_ip_0:
+        type: string
+        description: IPv4 address associated with subinterfaces
+        required: true
+        status: SUPPORTED
+      perimeta_vip_0:
+        type: string
+        description: virtual IPv4 address associated with subinterfaces
+        required: true
+        status: SUPPORTED
+      perimeta_vlan_ids:
+        type: list
+        description: List of VLAN IDs to use for subinterfaces
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_mac_address:
+        type: string
+        description: MAC address to use for subinterface
+        required: true
+        status: SUPPORTED
+      perimeta_v6_ip_0:
+        type: string
+        description: IPv6 address associated with subinterfaces
+        required: true
+        status: SUPPORTED
+  org.openecomp.resource.abstract.nodes.heat.module_2_perimeta_sw_b_child:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      vf_module_id:
+        type: string
+        description: Unique ID for this VF Module instance
+        required: true
+        status: SUPPORTED
+      int_ha_network_plen:
+        type: float
+        description: Prefix length of subnet associated with internal HA network
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 31
+      rtp_msc_b_untrusted_v6_ips:
+        type: list
+        description: List of fixed IP addresses to use as Untrusted/access alternate fixed IPs of B instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_b_mgmt_ips:
+        type: list
+        description: List of fixed IP addresses to use as management IPs of B instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      vnf_name:
+        type: string
+        description: Unique name for this VNF instance
+        required: true
+        status: SUPPORTED
+      perimeta_untrusted_vlan_ids:
+        type: list
+        description: List of VLAN IDs to use on the untrusted/access network
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_b_names:
+        type: list
+        description: List of names of Perimeta VM B instances, indexed by perimeta_instance_index
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_b_untrusted_ips:
+        type: list
+        description: List of fixed IP addresses to use as Untrusted/access fixed IPs of B instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      int_ha_net_id:
+        type: string
+        description: HA network id
+        required: true
+        status: SUPPORTED
+      perimeta_instance_index:
+        type: float
+        description: Index of instance among multiple instances.  Use to retrieve correct parameter for this instance when passed all parameters for all instances.
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 0
+          - 19
+      perimeta_keypair:
+        type: string
+        description: Keypair to use for accessing this Perimeta instance
+        required: true
+        status: SUPPORTED
+      perimeta_server_groups:
+        type: list
+        description: Server groups to use for these VMs
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      vnf_id:
+        type: string
+        description: VNF ID of this deployment
+        required: true
+        status: SUPPORTED
+      availability_zone_1:
+        type: string
+        description: Availability zone for B instances.  May be the same as A instance.
+        required: true
+        status: SUPPORTED
+      rtp_msc_mgmt_vips:
+        type: list
+        description: List of management virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_sec_groups:
+        type: list
+        description: List of security groups to add on trusted interfaces.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_untrusted_parent_vips:
+        type: list
+        description: List of Untrusted/access parent virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_untrusted_num_vlans:
+        type: float
+        description: number of VLANs to connect to the untrusted/access interface
+        required: true
+        status: SUPPORTED
+        constraints:
+        - in_range:
+          - 1
+          - 1001
+      rtp_msc_a_int_ha_ips:
+        type: list
+        description: List of fixed IP addresses to use as HA IPs of A instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_b_trusted_ips:
+        type: list
+        description: List of fixed IP addresses to use as Trusted/core fixed IPs of B instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      rtp_msc_untrusted_vips:
+        type: list
+        description: List of Untrusted/access virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      trusted_net_id:
+        type: string
+        description: Trusted/core network UUID
+        required: true
+        status: SUPPORTED
+      rtp_msc_b_int_ha_ips:
+        type: list
+        description: List of fixed IP addresses to use as HA IPs of B instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      vm_role:
+        type: string
+        description: Role of these VMs
+        required: true
+        status: SUPPORTED
+      rtp_msc_untrusted_v6_vips:
+        type: list
+        description: List of Untrusted/access alternate virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_untrusted_vlan_networks:
+        type: list
+        description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      perimeta_image_name:
+        type: string
+        description: Glance image for Perimeta instance
+        required: true
+        status: SUPPORTED
+      rtp_msc_b_untrusted_parent_ips:
+        type: list
+        description: List of fixed IP addresses to use as Untrusted/access parent fixed IPs of B instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      mgmt_net_id:
+        type: string
+        description: Management network id
+        required: true
+        status: SUPPORTED
+      int_untrusted_parent_net_id:
+        type: string
+        description: internal Untrusted/access parent network id
+        required: true
+        status: SUPPORTED
+      perimeta_flavor_name:
+        type: string
+        description: Flavor to use for creating VM instances
+        required: true
+        status: SUPPORTED
+      rtp_msc_trusted_vips:
+        type: list
+        description: List of Trusted/core virtual IP addresses for all instances.
+        required: true
+        status: SUPPORTED
+        entry_schema:
+          type: string
+    requirements:
+    - dependency_perimeta_rtp_msc_b_trusted_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_b_trusted_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_rtp_msc_b_mgmt_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_b_mgmt_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_rtp_msc_b_server_0:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - local_storage_perimeta_rtp_msc_b_server_0:
+        capability: tosca.capabilities.Attachment
+        node: tosca.nodes.BlockStorage
+        relationship: tosca.relationships.AttachesTo
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - dependency_perimeta_rtp_msc_b_ha_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_b_ha_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    - dependency_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        capability: tosca.capabilities.Node
+        node: tosca.nodes.Root
+        relationship: tosca.relationships.DependsOn
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - link_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+        occurrences:
+        - 1
+        - 1
+    capabilities:
+      attachment_perimeta_rtp_msc_b_mgmt_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.requests_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_rtp_msc_b_trusted_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests.rate_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.latency_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes.rate_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_b_server_0:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.ephemeral.size_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_rtp_msc_b_ha_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.capacity_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.capacity_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_b_ha_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      disk.device.usage_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.allocation_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests.rate_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.root.size_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_util_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.latency_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      attachment_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      os_perimeta_rtp_msc_b_server_0:
+        type: tosca.capabilities.OperatingSystem
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes.rate_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.iops_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      instance_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests.rate_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      vcpus_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.resident_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_b_mgmt_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      endpoint_perimeta_rtp_msc_b_server_0:
+        type: tosca.capabilities.Endpoint.Admin
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes.rate_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.usage_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      scalable_perimeta_rtp_msc_b_server_0:
+        type: tosca.capabilities.Scalable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu.delta_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.allocation_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.usage_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_b_mgmt_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      host_perimeta_rtp_msc_b_server_0:
+        type: tosca.capabilities.Container
+        valid_source_types:
+        - tosca.nodes.SoftwareComponent
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_b_trusted_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_b_trusted_0_port:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_mgmt_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_ha_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.iops_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      feature_perimeta_rtp_msc_b_ha_0_port:
+        type: tosca.capabilities.Node
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding_perimeta_rtp_msc_b_server_0:
+        type: tosca.capabilities.network.Bindable
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_trusted_0_port:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes.rate_perimeta_rtp_msc_b_server_0:
+        type: org.openecomp.capabilities.metric.Ceilometer
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        occurrences:
+        - 1
+        - UNBOUNDED
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/MainServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/MainServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..1993eea
--- /dev/null
@@ -0,0 +1,1302 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Main
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+topology_template:
+  inputs:
+    ssc_a_name_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of VM A of SSC
+      constraints:
+      - pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,29}$'
+    mgmt_net_plen:
+      hidden: false
+      immutable: false
+      type: float
+      description: Management network prefix length
+      constraints:
+      - in_range:
+        - 0
+        - 32
+    ssc_b_name_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of VM B of SSC
+      constraints:
+      - pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,29}$'
+    ssc_b_untrusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv4 address on Untrusted/access network for SSC B.
+    ssc_b_untrusted_parent_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv4 address on Untrusted/access parent network for SSC B.
+    perimeta_untrusted_vlan_ids:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of VLAN IDs to use on the untrusted/access network
+      entry_schema:
+        type: string
+    ssc_json_radius_servername:
+      hidden: false
+      immutable: false
+      type: string
+      description: IP Address or hostname of RADIUS server
+    ssc_mgmt_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management virtual IP address to use for SSC.
+    rtp_msc_json_use_radius_authentication:
+      hidden: false
+      immutable: false
+      type: string
+      description: Json prefix, used to indicate if user account authentication is done externally through Radius
+      constraints:
+      - valid_values:
+        - ' '
+        - '// not using Radius '
+    ssc_trusted_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Virtual IPv4 address on Trusted/core network for SSC.
+    ssc_untrusted_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Virtual IPv4 address on Untrusted/access network for SSC.
+    perimeta_untrusted_num_vlans:
+      hidden: false
+      immutable: false
+      type: float
+      description: number of VLANs to connect to the untrusted/access interface
+      constraints:
+      - in_range:
+        - 1
+        - 1001
+    rtp_msc_mgmt_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of management virtual IP addresses to use for RTP MSC.
+      entry_schema:
+        type: string
+    ssc_a_json_prefix:
+      hidden: false
+      immutable: false
+      type: string
+      description: Json prefix, used to create the correct json file depending on the operation being performed
+      default: ' '
+      constraints:
+      - valid_values:
+        - ' '
+        - '// healing, not required '
+    rtp_msc_a_untrusted_parent_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv4 addresses on Untrusted/access parent network for RTP MSC A.
+      entry_schema:
+        type: string
+    ssc_b_trusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv4 address on Trusted/core network for SSC B.
+    shared_perimeta_ssc_server_group:
+      hidden: false
+      immutable: false
+      type: string
+      description: Server group to use for these VMs
+    ssc_json_radius_timeout:
+      hidden: false
+      immutable: false
+      type: float
+      description: Timeout for connect requests to RADIUS server
+      constraints:
+      - in_range:
+        - 1
+        - 60
+    rtp_msc_untrusted_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of virtual IPv4 addresses on Untrusted/access network for RTP MSC.
+      entry_schema:
+        type: string
+    rtp_msc_json_radius_servername:
+      hidden: false
+      immutable: false
+      type: string
+      description: IP Address or hostname of RADIUS server
+    rtp_msc_vnfcnames:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of vnfc names of the RTP MSC. This is the name associated with the perimeta pair and corresponds to the VIP
+      entry_schema:
+        type: string
+    ssc_image_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Glance image to use for launching SSC Perimeta instances.
+      default: ISBC_SBC_v4.0.40_SU12.qcow2
+      constraints: [
+        ]
+    perimeta_max_rtp_msc_count:
+      hidden: false
+      immutable: false
+      type: float
+      description: Max number of RTP MSCs in a site.
+      default: 8
+      constraints:
+      - in_range:
+        - 0
+        - 20
+    trusted_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Network ID of Trusted/core network.
+      constraints: [
+        ]
+    ntp_server_ip_addrs:
+      hidden: false
+      immutable: false
+      type: string
+      description: NTP server IPv4 addresses, separated by commas.  These must be accessible from the management network
+      constraints:
+      - pattern: ((?:\d{1,3}\.){3}\d{1,3},)*((?:\d{1,3}\.){3}\d{1,3})
+    rtp_msc_json_radius_default:
+      hidden: false
+      immutable: false
+      type: string
+      description: Default authentication level for RADIUS users
+      constraints:
+      - valid_values:
+        - no-access
+        - read-only
+        - support
+        - restricted-admin
+        - admin
+    rtp_msc_a_vnfcnames:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of vnfc names of the A of RTP MSC
+      entry_schema:
+        type: string
+    ssc_b_untrusted_v6_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv6 address on Untrusted/access network for SSC B.
+    rtp_msc_b_index:
+      hidden: false
+      immutable: false
+      type: float
+      description: Index of RTP MSC to instantiate / heal.
+      constraints:
+      - in_range:
+        - 0
+        - 19
+    rtp_msc_untrusted_v6_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of virtual IPv6 addresses on Untrusted/access network for RTP MSC.
+      entry_schema:
+        type: string
+    shared_ssc_unused_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unused network ID
+    ssc_b_rf_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: RF fixed IP address to use for SSC B.
+    rtp_msc_b_untrusted_parent_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv4 addresses on Untrusted/access parent network for RTP MSC B.
+      entry_schema:
+        type: string
+    ssc_flavor_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for creating SSC VM instance
+      default: gv.c8r16d160
+      constraints: [
+        ]
+    mgmt_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management network ID
+      constraints: [
+        ]
+    ssc_json_radius_secret:
+      hidden: false
+      immutable: false
+      type: string
+      description: Shared secret to use for the RADIUS Server
+    rtp_msc_a_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of names of VM A of RTP MSC
+      entry_schema:
+        type: string
+    shared_int_ha_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: HA network id
+      constraints: [
+        ]
+    ssc_vnfcname_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of vnfc of SSC. This is the name associated with the perimeta pair and corresponds to the VIP
+      constraints:
+      - pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$'
+    rtp_msc_trusted_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of virtual IPv4 addresses on Trusted/core network for RTP MSC.
+      entry_schema:
+        type: string
+    rtp_msc_json_radius_port:
+      hidden: false
+      immutable: false
+      type: float
+      description: Port to use to connect to RADIUS server
+      constraints:
+      - in_range:
+        - 0
+        - 65535
+    vf_module_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique ID for this VF Module instance
+    ssc_json_radius_port:
+      hidden: false
+      immutable: false
+      type: float
+      description: Port to use to connect to RADIUS server
+      constraints:
+      - in_range:
+        - 0
+        - 65535
+    rtp_msc_b_untrusted_v6_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv6 addresses on Untrusted/access network for RTP MSC B.
+      entry_schema:
+        type: string
+    rtp_msc_b_mgmt_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of management fixed IP addresses to use for RTP MSC B.
+      entry_schema:
+        type: string
+    ssc_a_int_ha_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: HA fixed IP address to use for SSC A.
+    ssc_b_mgmt_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management fixed IP address to use for SSC B.
+    vnf_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique name for this VNF instance
+    rtp_msc_flavor_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for creating RTP MSC VM instance
+      default: gv.c8r16d160
+      constraints: [
+        ]
+    perimeta_int_ha_net_prefix_v4:
+      hidden: false
+      immutable: false
+      type: string
+      description: IPv4 subnet prefix for internal HA network
+      default: 172.26.1.4
+    rtp_msc_b_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of names of VM B of RTP MSC
+      entry_schema:
+        type: string
+    rtp_msc_b_untrusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv4 addresses on Untrusted/access network for RTP MSC B.
+      entry_schema:
+        type: string
+    perimeta_ssh_key:
+      hidden: false
+      immutable: false
+      type: string
+      description: SSH public key
+      default: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXvSadEWp+nsz3gEAAAAAAAAAAbggQ3t06mqFIauHfUYMiKZ3EUX3jDFf/uGQoNsIZU6SNE/gl3tY4fFvO8Yzj8OY/vstHHvEadbY5aXNE6kd39ik20uRNbeZLT+pRllBwVKBSVnFqG3kBDvNWmBIenlPZzu3Ay0LYT/aDq6fZaz8Mqy8hzhpAAAAAAAAAAEmS/ESYY4UMs/aF2fVGmCLqudSjLpSsyD8lXag2dmeiT7cTdwRkgtDNTULXCPVucolVZwZF9BxXPNK++B+fL/ZY4MrXHXgZYGEElrMCFYkQFb3jQv3XQtxZ6gVByrzgGc9eiU7tkCgY2cVfb22iIs9n Generated-by-Nova
+    rtp_msc_a_index:
+      hidden: false
+      immutable: false
+      type: float
+      description: Index of RTP MSC to instantiate / heal.
+      constraints:
+      - in_range:
+        - 0
+        - 19
+    rtp_msc_json_v41:
+      hidden: false
+      immutable: false
+      type: string
+      description: Json prefix, used to ensure that the json tags will be recognised by the server loading them
+      default: ' '
+      constraints:
+      - valid_values:
+        - ' '
+        - '// older perimeta, parameter not required '
+    shared_perimeta_rtp_msc_server_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: Server group to use for these VMs
+      entry_schema:
+        type: string
+    rtp_msc_a_json_prefix:
+      hidden: false
+      immutable: false
+      type: string
+      description: Json prefix, used to create the correct json file depending on the operation being performed
+      default: ' '
+      constraints:
+      - valid_values:
+        - ' '
+        - '// healing, not required '
+    ssc_b_int_ha_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: HA fixed IP address to use for SSC B.
+    rtp_msc_b_vnfcnames:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of vnfc names of VM B of RTP MSC
+      entry_schema:
+        type: string
+    ssc_a_trusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv4 address on Trusted/core network for SSC A.
+    vnf_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: ID of VNF
+    availability_zone_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Availability zone for A instances.
+    availability_zone_1:
+      hidden: false
+      immutable: false
+      type: string
+      description: Availability zone for B instances.
+    perimeta_int_ha_net_prefix_len_v4:
+      hidden: false
+      immutable: false
+      type: float
+      description: Prefix length of subnet associated with internal HA network
+      default: 26
+      constraints:
+      - in_range:
+        - 0
+        - 31
+    ssc_a_untrusted_v6_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv6 address on Untrusted/access network for SSC A.
+    rtp_msc_untrusted_parent_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of virtual IPv4 addresses on Untrusted/access parent network for RTP MSC.
+      entry_schema:
+        type: string
+    shared_int_ha_net_prefix_len_v4:
+      hidden: false
+      immutable: false
+      type: float
+      description: Prefix length of subnet associated with internal HA network
+      constraints:
+      - in_range:
+        - 0
+        - 31
+    ssc_rf_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: RF virtual IP address to use for SSC.
+    rtp_msc_a_int_ha_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of HA fixed IP addresses to use for RTP MSC A.
+      entry_schema:
+        type: string
+    shared_perimeta_keypair:
+      hidden: false
+      immutable: false
+      type: string
+      description: Keypair to use for accessing this Perimeta instance
+    shared_int_untrusted_parent_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: untrusted parent network id
+    ssc_a_vnfcname_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: vnfc name of VM A of SSC
+      constraints:
+      - pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$'
+    rtp_msc_json_radius_secret:
+      hidden: false
+      immutable: false
+      type: string
+      description: Shared secret to use for the RADIUS Server
+    rtp_msc_b_trusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv4 addresses on Trusted/core network for RTP MSC B.
+      entry_schema:
+        type: string
+    rtp_msc_a_trusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv4 addresses on Trusted/core network for RTP MSC A.
+      entry_schema:
+        type: string
+    rtp_msc_image_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Glance image to use for launching RTP MSC Perimeta instances.
+      default: ISBC_SBC_v4.0.40_SU12.qcow2
+      constraints: [
+        ]
+    ssc_a_mgmt_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management fixed IP address to use for SSC A.
+    ssc_untrusted_parent_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Virtual IPv4 address on Untrusted/access parent network for SSC.
+    rtp_msc_b_int_ha_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of HA fixed IP addresses to use for RTP MSC B.
+      entry_schema:
+        type: string
+    ssc_untrusted_v6_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Virtual IPv6 address on Untrusted/access network for SSC.
+    rtp_msc_a_mgmt_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of management fixed IP addresses to use for RTP MSC A.
+      entry_schema:
+        type: string
+    rtp_msc_a_untrusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv4 addresses on Untrusted/access network for RTP MSC A.
+      entry_schema:
+        type: string
+    ssc_a_rf_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: RF fixed IP address to use for SSC A.
+    ssc_json_use_radius_authentication:
+      hidden: false
+      immutable: false
+      type: string
+      description: Json prefix, used to indicate if user account authentication is done externally through Radius
+      constraints:
+      - valid_values:
+        - ' '
+        - '// not using Radius '
+    ssc_a_untrusted_parent_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv4 address on Untrusted/access parent network for SSC A.
+    perimeta_untrusted_vlan_networks:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+      entry_schema:
+        type: string
+    ssc_a_untrusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IPv4 address on Untrusted/access network for SSC A.
+    rtp_msc_a_untrusted_v6_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IPv6 addresses on Untrusted/access network for RTP MSC A.
+      entry_schema:
+        type: string
+    mgmt_net_default_gateway:
+      hidden: false
+      immutable: false
+      type: string
+      description: Default gateway for management network
+    rtp_msc_json_radius_timeout:
+      hidden: false
+      immutable: false
+      type: float
+      description: Timeout for connect requests to RADIUS server
+      constraints:
+      - in_range:
+        - 1
+        - 60
+    ssc_b_vnfcname_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: vnfc name of VM B of SSC
+      constraints:
+      - pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$'
+    ssc_json_v41:
+      hidden: false
+      immutable: false
+      type: string
+      description: Json prefix, used to ensure that the json tags will be recognised by the server loading them
+      default: ' '
+      constraints:
+      - valid_values:
+        - ' '
+        - '// older perimeta, parameter not required '
+    ssc_json_radius_default:
+      hidden: false
+      immutable: false
+      type: string
+      description: Default authentication level for RADIUS users
+      constraints:
+      - valid_values:
+        - no-access
+        - read-only
+        - support
+        - restricted-admin
+        - admin
+    shared_perimeta_sec_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of security groups to add on all interfaces.
+      entry_schema:
+        type: string
+  node_templates:
+    perimeta_rtp_msc_a:
+      type: org.openecomp.resource.abstract.nodes.heat.module_2_perimeta_sw_a_child
+      directives:
+      - substitutable
+      properties:
+        vf_module_id:
+          get_input: vf_module_id
+        int_ha_network_plen:
+          get_input: shared_int_ha_net_prefix_len_v4
+        perimeta_config:
+          str_replace:
+            template:
+              get_artifact:
+              - SELF
+              - rtp_msc_a_template
+            params:
+              $RADIUS_SERVERNAME:
+                get_input: rtp_msc_json_radius_servername
+              $REMOTE_MGMT_IP_ADDR:
+                get_input:
+                - rtp_msc_b_mgmt_ips
+                - get_input: rtp_msc_a_index
+              $VIRT_MGMT_IP_ADDR:
+                get_input:
+                - rtp_msc_mgmt_vips
+                - get_input: rtp_msc_a_index
+              $LOCAL_MGMT_IP_ADDR:
+                get_input:
+                - rtp_msc_a_mgmt_ips
+                - get_input: rtp_msc_a_index
+              $MGMT_NETWORK_DEFAULT_GATEWAY:
+                get_input: mgmt_net_default_gateway
+              $RADIUS_DEFAULT:
+                get_input: rtp_msc_json_radius_default
+              $COMPLETION_PARAMS: ''
+              $RADIUS_PORT:
+                get_input: rtp_msc_json_radius_port
+              $NTP_SERVER_IP_ADDRS:
+                get_input: ntp_server_ip_addrs
+              $HEALING_OR_INSTANTIATION:
+                get_input: rtp_msc_a_json_prefix
+              $RADIUS_SECRET:
+                get_input: rtp_msc_json_radius_secret
+              $RADIUS_TIMEOUT:
+                get_input: rtp_msc_json_radius_timeout
+              $41ORABOVE:
+                get_input: rtp_msc_json_v41
+              $SYSTEM_NAME:
+                get_input:
+                - rtp_msc_vnfcnames
+                - get_input: rtp_msc_a_index
+              $USERADIUSAUTH:
+                get_input: rtp_msc_json_use_radius_authentication
+              $MGMT_NETWORK_PLEN:
+                get_input: mgmt_net_plen
+              $VM_NAME_A:
+                get_input:
+                - rtp_msc_a_vnfcnames
+                - get_input: rtp_msc_a_index
+              $VM_NAME_B:
+                get_input:
+                - rtp_msc_b_vnfcnames
+                - get_input: rtp_msc_a_index
+        vnf_name:
+          get_input: vnf_name
+        perimeta_untrusted_vlan_ids:
+          get_input: perimeta_untrusted_vlan_ids
+        int_ha_net_id:
+          get_input: shared_int_ha_net_id
+        perimeta_instance_index:
+          get_input: rtp_msc_a_index
+        service_template_filter:
+          substitute_service_template: module_2_perimeta_sw_a_childServiceTemplate.yaml
+        perimeta_keypair:
+          get_input: shared_perimeta_keypair
+        perimeta_server_groups:
+          get_input: shared_perimeta_rtp_msc_server_groups
+        vnf_id:
+          get_input: vnf_id
+        availability_zone_0:
+          get_input: availability_zone_0
+        rtp_msc_mgmt_vips:
+          get_input: rtp_msc_mgmt_vips
+        perimeta_sec_groups:
+          get_input: shared_perimeta_sec_groups
+        rtp_msc_untrusted_parent_vips:
+          get_input: rtp_msc_untrusted_parent_vips
+        perimeta_untrusted_num_vlans:
+          get_input: perimeta_untrusted_num_vlans
+        rtp_msc_a_int_ha_ips:
+          get_input: rtp_msc_a_int_ha_ips
+        rtp_msc_a_untrusted_parent_ips:
+          get_input: rtp_msc_a_untrusted_parent_ips
+        rtp_msc_a_trusted_ips:
+          get_input: rtp_msc_a_trusted_ips
+        rtp_msc_untrusted_vips:
+          get_input: rtp_msc_untrusted_vips
+        trusted_net_id:
+          get_input: trusted_net_id
+        rtp_msc_b_int_ha_ips:
+          get_input: rtp_msc_b_int_ha_ips
+        rtp_msc_a_mgmt_ips:
+          get_input: rtp_msc_a_mgmt_ips
+        rtp_msc_a_untrusted_ips:
+          get_input: rtp_msc_a_untrusted_ips
+        vm_role: msc
+        rtp_msc_untrusted_v6_vips:
+          get_input: rtp_msc_untrusted_v6_vips
+        perimeta_untrusted_vlan_networks:
+          get_input: perimeta_untrusted_vlan_networks
+        rtp_msc_a_untrusted_v6_ips:
+          get_input: rtp_msc_a_untrusted_v6_ips
+        perimeta_image_name:
+          get_input: rtp_msc_image_name
+        mgmt_net_id:
+          get_input: mgmt_net_id
+        int_untrusted_parent_net_id:
+          get_input: shared_int_untrusted_parent_net_id
+        rtp_msc_a_names:
+          get_input: rtp_msc_a_names
+        perimeta_flavor_name:
+          get_input: rtp_msc_flavor_name
+        rtp_msc_trusted_vips:
+          get_input: rtp_msc_trusted_vips
+      requirements:
+      - link_perimeta_rtp_msc_a_ha_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_internal_ha_net_0
+          relationship: tosca.relationships.network.LinksTo
+      - link_perimeta_rtp_msc_a_untrusted_parent_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_int_untrusted_parent_net_0
+          relationship: tosca.relationships.network.LinksTo
+      artifacts:
+        rtp_msc_a_template:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/rtp_msc_a_template.json
+    shared_perimeta_internal_ha_net_0:
+      type: org.openecomp.resource.vl.nodes.heat.network.contrailV2.VirtualNetwork
+      properties:
+        network_ipam_refs_data:
+        - network_ipam_refs_data_ipam_subnets:
+          - network_ipam_refs_data_ipam_subnets_enable_dhcp: false
+            network_ipam_refs_data_ipam_subnets_subnet:
+              network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len:
+                get_input: perimeta_int_ha_net_prefix_len_v4
+              network_ipam_refs_data_ipam_subnets_subnet_ip_prefix:
+                get_input: perimeta_int_ha_net_prefix_v4
+        network_name:
+          str_replace:
+            template: $VF_NAME_int_ha_net_0
+            params:
+              $VF_NAME:
+                get_input: vnf_name
+        network_ipam_refs:
+        - UNSUPPORTED_RESOURCE_perimeta_internal_ha_ipam_net_0
+    perimeta_rtp_msc_b:
+      type: org.openecomp.resource.abstract.nodes.heat.module_2_perimeta_sw_b_child
+      directives:
+      - substitutable
+      properties:
+        vf_module_id:
+          get_input: vf_module_id
+        int_ha_network_plen:
+          get_input: shared_int_ha_net_prefix_len_v4
+        rtp_msc_b_untrusted_v6_ips:
+          get_input: rtp_msc_b_untrusted_v6_ips
+        rtp_msc_b_mgmt_ips:
+          get_input: rtp_msc_b_mgmt_ips
+        vnf_name:
+          get_input: vnf_name
+        perimeta_untrusted_vlan_ids:
+          get_input: perimeta_untrusted_vlan_ids
+        rtp_msc_b_names:
+          get_input: rtp_msc_b_names
+        rtp_msc_b_untrusted_ips:
+          get_input: rtp_msc_b_untrusted_ips
+        int_ha_net_id:
+          get_input: shared_int_ha_net_id
+        perimeta_instance_index:
+          get_input: rtp_msc_b_index
+        service_template_filter:
+          substitute_service_template: module_2_perimeta_sw_b_childServiceTemplate.yaml
+        perimeta_keypair:
+          get_input: shared_perimeta_keypair
+        perimeta_server_groups:
+          get_input: shared_perimeta_rtp_msc_server_groups
+        vnf_id:
+          get_input: vnf_id
+        availability_zone_1:
+          get_input: availability_zone_1
+        rtp_msc_mgmt_vips:
+          get_input: rtp_msc_mgmt_vips
+        perimeta_sec_groups:
+          get_input: shared_perimeta_sec_groups
+        rtp_msc_untrusted_parent_vips:
+          get_input: rtp_msc_untrusted_parent_vips
+        perimeta_untrusted_num_vlans:
+          get_input: perimeta_untrusted_num_vlans
+        rtp_msc_a_int_ha_ips:
+          get_input: rtp_msc_a_int_ha_ips
+        rtp_msc_b_trusted_ips:
+          get_input: rtp_msc_b_trusted_ips
+        rtp_msc_untrusted_vips:
+          get_input: rtp_msc_untrusted_vips
+        trusted_net_id:
+          get_input: trusted_net_id
+        rtp_msc_b_int_ha_ips:
+          get_input: rtp_msc_b_int_ha_ips
+        vm_role: msc
+        rtp_msc_untrusted_v6_vips:
+          get_input: rtp_msc_untrusted_v6_vips
+        perimeta_untrusted_vlan_networks:
+          get_input: perimeta_untrusted_vlan_networks
+        perimeta_image_name:
+          get_input: rtp_msc_image_name
+        rtp_msc_b_untrusted_parent_ips:
+          get_input: rtp_msc_b_untrusted_parent_ips
+        mgmt_net_id:
+          get_input: mgmt_net_id
+        int_untrusted_parent_net_id:
+          get_input: shared_int_untrusted_parent_net_id
+        perimeta_flavor_name:
+          get_input: rtp_msc_flavor_name
+        rtp_msc_trusted_vips:
+          get_input: rtp_msc_trusted_vips
+      requirements:
+      - link_perimeta_rtp_msc_b_ha_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_internal_ha_net_0
+          relationship: tosca.relationships.network.LinksTo
+      - link_perimeta_rtp_msc_b_untrusted_parent_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_int_untrusted_parent_net_0
+          relationship: tosca.relationships.network.LinksTo
+    perimeta_ssc_a:
+      type: org.openecomp.resource.abstract.nodes.heat.module_1_perimeta_swmu_a_child
+      directives:
+      - substitutable
+      properties:
+        vf_module_id:
+          get_input: vf_module_id
+        ssc_a_name_0:
+          get_input: ssc_a_name_0
+        int_ha_network_plen:
+          get_input: shared_int_ha_net_prefix_len_v4
+        perimeta_server_group:
+          get_input: shared_perimeta_ssc_server_group
+        unused_port_net_id:
+          get_input: shared_ssc_unused_net_id
+        perimeta_config:
+          str_replace:
+            template:
+              get_artifact:
+              - SELF
+              - ssc_a_template
+            params:
+              $RADIUS_SERVERNAME:
+                get_input: ssc_json_radius_servername
+              $REMOTE_MGMT_IP_ADDR:
+                get_input: ssc_b_mgmt_ip_0
+              $VIRT_MGMT_IP_ADDR:
+                get_input: ssc_mgmt_vip_0
+              $LOCAL_MGMT_IP_ADDR:
+                get_input: ssc_a_mgmt_ip_0
+              $MGMT_NETWORK_DEFAULT_GATEWAY:
+                get_input: mgmt_net_default_gateway
+              $RADIUS_DEFAULT:
+                get_input: ssc_json_radius_default
+              $COMPLETION_PARAMS: ''
+              $RADIUS_PORT:
+                get_input: ssc_json_radius_port
+              $NTP_SERVER_IP_ADDRS:
+                get_input: ntp_server_ip_addrs
+              $HEALING_OR_INSTANTIATION:
+                get_input: ssc_a_json_prefix
+              $RADIUS_SECRET:
+                get_input: ssc_json_radius_secret
+              $RADIUS_TIMEOUT:
+                get_input: ssc_json_radius_timeout
+              $41ORABOVE:
+                get_input: ssc_json_v41
+              $SYSTEM_NAME:
+                get_input: ssc_vnfcname_0
+              $USERADIUSAUTH:
+                get_input: ssc_json_use_radius_authentication
+              $MGMT_NETWORK_PLEN:
+                get_input: mgmt_net_plen
+              $VM_NAME_A:
+                get_input: ssc_a_vnfcname_0
+              $VM_NAME_B:
+                get_input: ssc_b_vnfcname_0
+        ssc_a_int_ha_ip_0:
+          get_input: ssc_a_int_ha_ip_0
+        vnf_name:
+          get_input: vnf_name
+        perimeta_untrusted_vlan_ids:
+          get_input: perimeta_untrusted_vlan_ids
+        int_ha_net_id:
+          get_input: shared_int_ha_net_id
+        ssc_b_int_ha_ip_0:
+          get_input: ssc_b_int_ha_ip_0
+        ssc_mgmt_vip_0:
+          get_input: ssc_mgmt_vip_0
+        service_template_filter:
+          substitute_service_template: module_1_perimeta_swmu_a_childServiceTemplate.yaml
+        ssc_a_trusted_ip_0:
+          get_input: ssc_a_trusted_ip_0
+        perimeta_keypair:
+          get_input: shared_perimeta_keypair
+        vnf_id:
+          get_input: vnf_id
+        availability_zone_0:
+          get_input: availability_zone_0
+        ssc_trusted_vip_0:
+          get_input: ssc_trusted_vip_0
+        ssc_untrusted_vip_0:
+          get_input: ssc_untrusted_vip_0
+        perimeta_sec_groups:
+          get_input: shared_perimeta_sec_groups
+        ssc_a_untrusted_v6_ip_0:
+          get_input: ssc_a_untrusted_v6_ip_0
+        perimeta_untrusted_num_vlans:
+          get_input: perimeta_untrusted_num_vlans
+        ssc_rf_vip_0:
+          get_input: ssc_rf_vip_0
+        ssc_a_mgmt_ip_0:
+          get_input: ssc_a_mgmt_ip_0
+        trusted_net_id:
+          get_input: trusted_net_id
+        ssc_untrusted_parent_vip_0:
+          get_input: ssc_untrusted_parent_vip_0
+        ssc_untrusted_v6_vip_0:
+          get_input: ssc_untrusted_v6_vip_0
+        ssc_a_rf_ip_0:
+          get_input: ssc_a_rf_ip_0
+        vm_role: ssc
+        ssc_a_untrusted_parent_ip_0:
+          get_input: ssc_a_untrusted_parent_ip_0
+        perimeta_untrusted_vlan_networks:
+          get_input: perimeta_untrusted_vlan_networks
+        ssc_a_untrusted_ip_0:
+          get_input: ssc_a_untrusted_ip_0
+        perimeta_image_name:
+          get_input: ssc_image_name
+        mgmt_net_id:
+          get_input: mgmt_net_id
+        int_untrusted_parent_net_id:
+          get_input: shared_int_untrusted_parent_net_id
+        perimeta_flavor_name:
+          get_input: ssc_flavor_name
+      requirements:
+      - link_perimeta_ssc_a_ha_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_internal_ha_net_0
+          relationship: tosca.relationships.network.LinksTo
+      - link_perimeta_ssc_a_untrusted_parent_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_int_untrusted_parent_net_0
+          relationship: tosca.relationships.network.LinksTo
+      - link_perimeta_ssc_a_unused_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_unused_net_0
+          relationship: tosca.relationships.network.LinksTo
+      artifacts:
+        ssc_a_template:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/ssc_a_template.json
+    shared_perimeta_rsg:
+      type: org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules
+      properties:
+        name:
+          str_replace:
+            template: $VNF_NAME_shared_perimeta_RSG
+            params:
+              $VNF_NAME:
+                get_input: vnf_name
+        description: Security Group for Perimeta networks
+        rules:
+        - protocol: tcp
+          ethertype: IPv4
+          remote_ip_prefix: 0.0.0.0/0
+          port_range_max: 65535
+          direction: egress
+          port_range_min: 1
+        - protocol: udp
+          ethertype: IPv4
+          remote_ip_prefix: 0.0.0.0/0
+          port_range_max: 65535
+          direction: egress
+          port_range_min: 1
+        - protocol: icmp
+          ethertype: IPv4
+          remote_ip_prefix: 0.0.0.0/0
+          direction: egress
+        - protocol: icmp
+          ethertype: IPv6
+          remote_ip_prefix: ::/0
+          direction: egress
+        - protocol: tcp
+          ethertype: IPv6
+          remote_ip_prefix: ::/0
+          port_range_max: 65535
+          direction: egress
+          port_range_min: 1
+        - protocol: udp
+          ethertype: IPv6
+          remote_ip_prefix: ::/0
+          port_range_max: 65535
+          direction: egress
+          port_range_min: 1
+        - protocol: tcp
+          ethertype: IPv4
+          remote_ip_prefix: 0.0.0.0/0
+          port_range_max: 65535
+          direction: ingress
+          port_range_min: 1
+        - protocol: udp
+          ethertype: IPv4
+          remote_ip_prefix: 0.0.0.0/0
+          port_range_max: 65535
+          direction: ingress
+          port_range_min: 1
+        - protocol: icmp
+          ethertype: IPv4
+          remote_ip_prefix: 0.0.0.0/0
+          direction: ingress
+        - protocol: icmp
+          ethertype: IPv6
+          remote_ip_prefix: ::/0
+          direction: ingress
+        - protocol: tcp
+          ethertype: IPv6
+          remote_ip_prefix: ::/0
+          port_range_max: 65535
+          direction: ingress
+          port_range_min: 1
+        - protocol: udp
+          ethertype: IPv6
+          remote_ip_prefix: ::/0
+          port_range_max: 65535
+          direction: ingress
+          port_range_min: 1
+    shared_perimeta_unused_net_0:
+      type: org.openecomp.resource.vl.nodes.heat.network.neutron.Net
+      properties:
+        dhcp_enabled: false
+        ip_version: 4
+        network_name:
+          str_replace:
+            template: $VF_NAME_int_unused_net
+            params:
+              $VF_NAME:
+                get_input: vnf_name
+        subnets:
+          shared_perimeta_unused_net_0_subnet:
+            enable_dhcp: false
+            ip_version: 4
+            cidr: 10.0.0.0/29
+            gateway_ip: ''
+      requirements:
+      - dependency:
+          capability: tosca.capabilities.Node
+          node: shared_perimeta_unused_net_0
+          relationship: tosca.relationships.DependsOn
+    perimeta_ssc_b:
+      type: org.openecomp.resource.abstract.nodes.heat.module_1_perimeta_swmu_b_child
+      directives:
+      - substitutable
+      properties:
+        vf_module_id:
+          get_input: vf_module_id
+        int_ha_network_plen:
+          get_input: shared_int_ha_net_prefix_len_v4
+        perimeta_server_group:
+          get_input: shared_perimeta_ssc_server_group
+        unused_port_net_id:
+          get_input: shared_ssc_unused_net_id
+        ssc_b_name_0:
+          get_input: ssc_b_name_0
+        ssc_a_int_ha_ip_0:
+          get_input: ssc_a_int_ha_ip_0
+        ssc_b_untrusted_ip_0:
+          get_input: ssc_b_untrusted_ip_0
+        ssc_b_mgmt_ip_0:
+          get_input: ssc_b_mgmt_ip_0
+        ssc_b_untrusted_parent_ip_0:
+          get_input: ssc_b_untrusted_parent_ip_0
+        vnf_name:
+          get_input: vnf_name
+        perimeta_untrusted_vlan_ids:
+          get_input: perimeta_untrusted_vlan_ids
+        int_ha_net_id:
+          get_input: shared_int_ha_net_id
+        ssc_b_int_ha_ip_0:
+          get_input: ssc_b_int_ha_ip_0
+        ssc_mgmt_vip_0:
+          get_input: ssc_mgmt_vip_0
+        service_template_filter:
+          substitute_service_template: module_1_perimeta_swmu_b_childServiceTemplate.yaml
+        perimeta_keypair:
+          get_input: shared_perimeta_keypair
+        vnf_id:
+          get_input: vnf_id
+        availability_zone_1:
+          get_input: availability_zone_1
+        ssc_trusted_vip_0:
+          get_input: ssc_trusted_vip_0
+        ssc_untrusted_vip_0:
+          get_input: ssc_untrusted_vip_0
+        perimeta_sec_groups:
+          get_input: shared_perimeta_sec_groups
+        perimeta_untrusted_num_vlans:
+          get_input: perimeta_untrusted_num_vlans
+        ssc_rf_vip_0:
+          get_input: ssc_rf_vip_0
+        ssc_b_trusted_ip_0:
+          get_input: ssc_b_trusted_ip_0
+        trusted_net_id:
+          get_input: trusted_net_id
+        ssc_untrusted_parent_vip_0:
+          get_input: ssc_untrusted_parent_vip_0
+        ssc_untrusted_v6_vip_0:
+          get_input: ssc_untrusted_v6_vip_0
+        ssc_b_untrusted_v6_ip_0:
+          get_input: ssc_b_untrusted_v6_ip_0
+        vm_role: ssc
+        perimeta_untrusted_vlan_networks:
+          get_input: perimeta_untrusted_vlan_networks
+        perimeta_image_name:
+          get_input: ssc_image_name
+        ssc_b_rf_ip_0:
+          get_input: ssc_b_rf_ip_0
+        mgmt_net_id:
+          get_input: mgmt_net_id
+        int_untrusted_parent_net_id:
+          get_input: shared_int_untrusted_parent_net_id
+        perimeta_flavor_name:
+          get_input: ssc_flavor_name
+      requirements:
+      - link_perimeta_ssc_b_untrusted_parent_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_int_untrusted_parent_net_0
+          relationship: tosca.relationships.network.LinksTo
+      - link_perimeta_ssc_b_unused_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_unused_net_0
+          relationship: tosca.relationships.network.LinksTo
+      - link_perimeta_ssc_b_ha_0_port:
+          capability: tosca.capabilities.network.Linkable
+          node: shared_perimeta_internal_ha_net_0
+          relationship: tosca.relationships.network.LinksTo
+    shared_perimeta_int_untrusted_parent_net_0:
+      type: org.openecomp.resource.vl.nodes.heat.network.neutron.Net
+      properties:
+        dhcp_enabled: false
+        ip_version: 4
+        network_name:
+          str_replace:
+            template: $VF_NAME_int_untrusted_parent_net
+            params:
+              $VF_NAME:
+                get_input: vnf_name
+        subnets:
+          shared_perimeta_int_untrusted_parent_net_0_subnet:
+            enable_dhcp: false
+            ip_version: 4
+            cidr: 11.0.0.0/24
+            gateway_ip: ''
+      requirements:
+      - dependency:
+          capability: tosca.capabilities.Node
+          node: shared_perimeta_int_untrusted_parent_net_0
+          relationship: tosca.relationships.DependsOn
+  groups:
+    base_perimeta_deployment_create_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/base_perimeta_deployment_create.yaml
+        description: |
+          HOT template to instantiate base shared resources for a Perimeta deployment
+      members:
+      - shared_perimeta_internal_ha_net_0
+      - shared_perimeta_rsg
+      - shared_perimeta_unused_net_0
+      - shared_perimeta_int_untrusted_parent_net_0
+    module_2_perimeta_rtp_msc_a_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_2_perimeta_rtp_msc_a.yaml
+        description: |
+          HOT template to instantiate an A side Perimeta RTP MSC and optionally partner it with the corresponding B side
+      members:
+      - perimeta_rtp_msc_a
+    module_1_perimeta_ssc_b_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_1_perimeta_ssc_b.yaml
+        description: "HOT template to instantiate an B side Perimeta SSC \n"
+      members:
+      - perimeta_ssc_b
+    shared_perimeta_ssc_server_gp_group:
+      type: tosca.groups.Root
+      members: [
+        ]
+    module_2_perimeta_rtp_msc_b_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_2_perimeta_rtp_msc_b.yaml
+        description: "HOT template to instantiate an B side Perimeta RTP MSC \n"
+      members:
+      - perimeta_rtp_msc_b
+    module_1_perimeta_ssc_a_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_1_perimeta_ssc_a.yaml
+        description: |
+          HOT template to instantiate an A side Perimeta SSC and optionally partner it with the corresponding B side
+      members:
+      - perimeta_ssc_a
+  outputs:
+    shared_int_ha_net_prefix_len_v4:
+      description: HA internal network IPv4 prefix length
+      value:
+        get_input: perimeta_int_ha_net_prefix_len_v4
+    shared_perimeta_keypair:
+      description: SSH keypair for deployment
+      value: UNSUPPORTED_RESOURCE_shared_perimeta_keypair
+    shared_perimeta_rtp_msc_server_groups:
+      description: Perimeta RTP MSC Server groups
+      value:
+        list_join:
+        - ','
+        - get_attr:
+          - shared_perimeta_rtp_msc_server_gps
+          - refs
+  policies:
+    shared_perimeta_ssc_server_gp_policy:
+      type: org.openecomp.policies.placement.Antilocate
+      properties:
+        name:
+          str_replace:
+            template: $VNF_NAME_shared_ssc_RSG_name_0
+            params:
+              $VNF_NAME:
+                get_input: vnf_name
+        container_type: host
+      targets:
+      - shared_perimeta_ssc_server_gp_group
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_1_perimeta_swmu_a_childServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_1_perimeta_swmu_a_childServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..8f8aae3
--- /dev/null
@@ -0,0 +1,831 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: module_1_perimeta_swmu_a_child
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.ssc_a:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    vf_module_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique ID for this VF Module instance
+    ssc_a_name_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of Perimeta VM A instance
+    int_ha_network_plen:
+      hidden: false
+      immutable: false
+      type: float
+      description: Prefix length of subnet associated with internal HA network
+      constraints:
+      - in_range:
+        - 0
+        - 31
+    unused_port_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Service network unused port network UUID
+    perimeta_server_group:
+      hidden: false
+      immutable: false
+      type: string
+      description: Server group to use for these VMs
+    perimeta_config:
+      hidden: false
+      immutable: false
+      type: string
+      description: JSON orchestration template configuration for instance.
+    ssc_a_int_ha_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as HA IP of A instance.
+    vnf_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique name for this VNF instance
+    perimeta_untrusted_vlan_ids:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of VLAN IDs to use on the untrusted/access network
+      entry_schema:
+        type: string
+    int_ha_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: HA network id
+    ssc_b_int_ha_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as HA IPs of B instance.
+    ssc_mgmt_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management virtual IP address.
+    ssc_a_trusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Trusted/core fixed IPs of A instance.
+    perimeta_keypair:
+      hidden: false
+      immutable: false
+      type: string
+      description: Keypair to use for accessing this Perimeta instance
+    vnf_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: VNF ID of this deployment
+    availability_zone_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Availability zone for A instances.
+    ssc_trusted_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Trusted/core virtual IP address.
+    ssc_untrusted_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Untrusted/access virtual IP address
+    perimeta_sec_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of security groups to add on trusted interfaces.
+      entry_schema:
+        type: string
+    ssc_a_untrusted_v6_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Untrusted/access alternate fixed IP of A instance.
+    perimeta_untrusted_num_vlans:
+      hidden: false
+      immutable: false
+      type: float
+      description: number of VLANs to connect to the untrusted/access interface
+      constraints:
+      - in_range:
+        - 1
+        - 1001
+    ssc_rf_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: RF virtual IP address to use for SSC.
+    ssc_a_mgmt_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as management IP of A instance.
+    trusted_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Trusted/core network UUID
+    ssc_untrusted_parent_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Untrusted/access parent virtual IP address
+    ssc_untrusted_v6_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Untrusted/access alternate virtual IP address
+    ssc_a_rf_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: RF fixed IP address to use for SSC A.
+    vm_role:
+      hidden: false
+      immutable: false
+      type: string
+      description: Role of these VMs
+    ssc_a_untrusted_parent_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Untrusted/access fixed IP of A parent instance.
+    perimeta_untrusted_vlan_networks:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+      entry_schema:
+        type: string
+    ssc_a_untrusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Untrusted/access fixed IP of A instance.
+    perimeta_image_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Glance image for Perimeta instance
+    mgmt_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management network id
+    int_untrusted_parent_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: internal Untrusted/access parent network id
+    perimeta_flavor_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for creating VM instances
+  node_templates:
+    perimeta_ssc_a_ha_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_a_int_ha_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_ha_port
+            params:
+              $VM:
+                get_input: ssc_a_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_ha
+        network:
+          get_input: int_ha_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_a_untrusted_parent_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_a_untrusted_parent_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_untrusted_parent_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_untrusted_parent_port
+            params:
+              $VM:
+                get_input: ssc_a_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_untrusted_parent
+        network:
+          get_input: int_untrusted_parent_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_a_mgmt_1_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_a_rf_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_rf_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_mgmt_1_port
+            params:
+              $VM:
+                get_input: ssc_a_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: mgmt
+        network:
+          get_input: mgmt_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_a_trusted_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_a_trusted_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_trusted_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_trusted_port
+            params:
+              $VM:
+                get_input: ssc_a_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: trusted
+        network:
+          get_input: trusted_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_a_unused_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: false
+          floating_ip_count_required:
+            is_required: false
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_unused_port
+            params:
+              $VM:
+                get_input: ssc_a_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: unused_port
+        network:
+          get_input: unused_port_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_a_mgmt_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_a_mgmt_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_mgmt_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_mgmt_0_port
+            params:
+              $VM:
+                get_input: ssc_a_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: mgmt
+        network:
+          get_input: mgmt_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_a_server_0:
+      type: org.openecomp.resource.vfc.nodes.heat.ssc_a
+      properties:
+        flavor:
+          get_input: perimeta_flavor_name
+        key_name:
+          get_input: perimeta_keypair
+        availability_zone:
+          get_input: availability_zone_0
+        image:
+          get_input: perimeta_image_name
+        metadata:
+          vf_module_id:
+            get_input: vf_module_id
+          vm_role:
+            str_replace:
+              template: $ROLE_a
+              params:
+                $ROLE:
+                  get_input: vm_role
+          vnf_id:
+            get_input: vnf_id
+          vnf_name:
+            get_input: vnf_name
+          msw_template_version: 17.07.04 - 2017-09-01
+        config_drive: true
+        personality:
+          /opt/MetaSwitch/init/custom.ini:
+            get_artifact:
+            - SELF
+            - custom
+        user_data_format: RAW
+        name:
+          get_input: ssc_a_name_0
+        scheduler_hints:
+          group:
+            get_input: perimeta_server_group
+      artifacts:
+        custom:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/custom.ini
+  groups:
+    module_1_perimeta_swmu_a_child_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_1_perimeta_swmu_a_child.yaml
+        description: |
+          HOT template to instantiate an A side Perimeta SSC instance with 6 vNICs as part of a nested template
+      members:
+      - perimeta_ssc_a_ha_0_port
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - perimeta_ssc_a_mgmt_1_port
+      - perimeta_ssc_a_trusted_0_port
+      - perimeta_ssc_a_unused_0_port
+      - perimeta_ssc_a_mgmt_0_port
+      - perimeta_ssc_a_server_0
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.heat.module_1_perimeta_swmu_a_child
+    capabilities:
+      disk.ephemeral.size_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.ephemeral.size
+      network.outgoing.packets.rate_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.outgoing.packets.rate
+      network.incoming.bytes.rate_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.incoming.bytes.rate
+      network.outgoing.bytes.rate_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.outgoing.bytes.rate
+      network.incoming.bytes.rate_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.incoming.bytes.rate
+      network.incoming.packets_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.incoming.packets
+      instance_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - instance
+      network.incoming.packets_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.incoming.packets
+      network.outgoing.packets.rate_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.outgoing.packets.rate
+      feature_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - feature
+      binding_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - binding
+      network.outpoing.packets_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.outpoing.packets
+      network.incoming.packets_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.incoming.packets
+      endpoint_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - endpoint
+      network.outgoing.bytes_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.outgoing.bytes
+      memory.usage_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - memory.usage
+      network.incoming.packets.rate_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.incoming.packets.rate
+      disk.device.read.requests.rate_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.read.requests.rate
+      network.incoming.bytes_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.incoming.bytes
+      network.outgoing.bytes.rate_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.outgoing.bytes.rate
+      network.outgoing.packets.rate_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.outgoing.packets.rate
+      feature_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - feature
+      disk.read.bytes_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.read.bytes
+      network.outpoing.packets_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.outpoing.packets
+      attachment_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - attachment
+      disk.write.bytes.rate_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.write.bytes.rate
+      disk.device.write.requests.rate_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.write.requests.rate
+      network.incoming.packets_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.incoming.packets
+      memory_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - memory
+      network.outgoing.packets.rate_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.outgoing.packets.rate
+      feature_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - feature
+      disk.device.iops_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.iops
+      binding_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - binding
+      network.outgoing.bytes_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.outgoing.bytes
+      attachment_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - attachment
+      network.outgoing.bytes.rate_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.outgoing.bytes.rate
+      network.outgoing.bytes_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.outgoing.bytes
+      disk.write.requests_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.write.requests
+      network.outgoing.bytes_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.outgoing.bytes
+      disk.capacity_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.capacity
+      os_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - os
+      disk.read.bytes.rate_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.read.bytes.rate
+      network.outgoing.bytes.rate_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.outgoing.bytes.rate
+      network.incoming.bytes.rate_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.incoming.bytes.rate
+      network.outgoing.bytes.rate_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.outgoing.bytes.rate
+      network.outgoing.bytes_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.outgoing.bytes
+      network.outpoing.packets_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - network.outpoing.packets
+      cpu_util_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - cpu_util
+      attachment_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - attachment
+      network.outgoing.bytes.rate_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.outgoing.bytes.rate
+      disk.allocation_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.allocation
+      disk.write.bytes_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.write.bytes
+      attachment_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - attachment
+      feature_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - feature
+      network.outpoing.packets_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.outpoing.packets
+      network.incoming.bytes_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.incoming.bytes
+      network.incoming.packets_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.incoming.packets
+      disk.device.latency_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.latency
+      network.incoming.bytes.rate_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.incoming.bytes.rate
+      binding_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - binding
+      disk.read.requests_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.read.requests
+      attachment_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - attachment
+      scalable_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - scalable
+      disk.usage_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.usage
+      feature_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - feature
+      network.incoming.packets.rate_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.incoming.packets.rate
+      feature_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - feature
+      cpu.delta_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - cpu.delta
+      disk.device.usage_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.usage
+      disk.iops_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.iops
+      binding_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - binding
+      network.incoming.bytes_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.incoming.bytes
+      network.incoming.packets_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.incoming.packets
+      disk.device.read.bytes.rate_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.read.bytes.rate
+      network.incoming.packets.rate_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.incoming.packets.rate
+      binding_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - binding
+      disk.root.size_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.root.size
+      network.incoming.bytes_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.incoming.bytes
+      network.incoming.packets.rate_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.incoming.packets.rate
+      disk.device.allocation_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.allocation
+      disk.device.write.requests_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.write.requests
+      disk.device.write.bytes_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.write.bytes
+      disk.write.requests.rate_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.write.requests.rate
+      network.outpoing.packets_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.outpoing.packets
+      disk.device.read.bytes_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.read.bytes
+      network.outgoing.bytes_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.outgoing.bytes
+      network.incoming.bytes_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.incoming.bytes
+      cpu_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - cpu
+      binding_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - binding
+      network.outgoing.packets.rate_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - network.outgoing.packets.rate
+      disk.device.read.requests_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.read.requests
+      network.outgoing.packets.rate_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.outgoing.packets.rate
+      disk.device.write.bytes.rate_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.write.bytes.rate
+      feature_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - feature
+      host_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - host
+      network.incoming.packets.rate_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.incoming.packets.rate
+      network.outpoing.packets_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.outpoing.packets
+      network.incoming.packets.rate_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - network.incoming.packets.rate
+      attachment_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - attachment
+      disk.device.capacity_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.device.capacity
+      binding_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - binding
+      vcpus_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - vcpus
+      network.incoming.bytes_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - network.incoming.bytes
+      network.incoming.bytes.rate_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - network.incoming.bytes.rate
+      disk.latency_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - disk.latency
+      memory.resident_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - memory.resident
+      network.incoming.bytes.rate_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - network.incoming.bytes.rate
+    requirements:
+      dependency_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - dependency
+      dependency_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - dependency
+      dependency_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - dependency
+      link_perimeta_ssc_a_mgmt_1_port:
+      - perimeta_ssc_a_mgmt_1_port
+      - link
+      local_storage_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - local_storage
+      link_perimeta_ssc_a_untrusted_parent_0_port:
+      - perimeta_ssc_a_untrusted_parent_0_port
+      - link
+      dependency_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - dependency
+      dependency_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - dependency
+      link_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - link
+      link_perimeta_ssc_a_trusted_0_port:
+      - perimeta_ssc_a_trusted_0_port
+      - link
+      link_perimeta_ssc_a_ha_0_port:
+      - perimeta_ssc_a_ha_0_port
+      - link
+      link_perimeta_ssc_a_unused_0_port:
+      - perimeta_ssc_a_unused_0_port
+      - link
+      dependency_perimeta_ssc_a_mgmt_0_port:
+      - perimeta_ssc_a_mgmt_0_port
+      - dependency
+      dependency_perimeta_ssc_a_server_0:
+      - perimeta_ssc_a_server_0
+      - dependency
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_1_perimeta_swmu_b_childServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_1_perimeta_swmu_b_childServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..99285a3
--- /dev/null
@@ -0,0 +1,817 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: module_1_perimeta_swmu_b_child
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.ssc_b:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    vf_module_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique ID for this VF Module instance
+    int_ha_network_plen:
+      hidden: false
+      immutable: false
+      type: float
+      description: Prefix length of subnet associated with internal HA network
+      constraints:
+      - in_range:
+        - 0
+        - 31
+    unused_port_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Service network unused port network UUID
+    perimeta_server_group:
+      hidden: false
+      immutable: false
+      type: string
+      description: Server group to use for these VMs
+    ssc_b_name_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Name of Perimeta VM B instance
+    ssc_a_int_ha_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as HA IPs of A instance.
+    ssc_b_untrusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Untrusted/access fixed IP of B instance.
+    ssc_b_mgmt_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as management IP of B instance.
+    ssc_b_untrusted_parent_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Untrusted/access fixed IP of B parent instance.
+    vnf_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique name for this VNF instance
+    perimeta_untrusted_vlan_ids:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of VLAN IDs to use on the untrusted/access network
+      entry_schema:
+        type: string
+    int_ha_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: HA network id
+    ssc_b_int_ha_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as HA IP of B instance.
+    ssc_mgmt_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management virtual IP address.
+    perimeta_keypair:
+      hidden: false
+      immutable: false
+      type: string
+      description: Keypair to use for accessing this Perimeta instance
+    vnf_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: VNF ID of this deployment
+    availability_zone_1:
+      hidden: false
+      immutable: false
+      type: string
+      description: Availability zone for B instances.  May be the same as A instance.
+    ssc_trusted_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Trusted/core virtual IP address.
+    ssc_untrusted_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Untrusted/access virtual IP address
+    perimeta_sec_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of security groups to add on trusted interfaces.
+      entry_schema:
+        type: string
+    perimeta_untrusted_num_vlans:
+      hidden: false
+      immutable: false
+      type: float
+      description: number of VLANs to connect to the untrusted/access interface
+      constraints:
+      - in_range:
+        - 1
+        - 1001
+    ssc_rf_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: RF virtual IP address to use for SSC.
+    ssc_b_trusted_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Trusted/core fixed IPs of B instance.
+    trusted_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Trusted/core network UUID
+    ssc_untrusted_parent_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Untrusted/access parent virtual IP address
+    ssc_untrusted_v6_vip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Untrusted/access alternate virtual IP address
+    ssc_b_untrusted_v6_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Fixed IP address to use as Untrusted/access alternate fixed IP of B instance.
+    vm_role:
+      hidden: false
+      immutable: false
+      type: string
+      description: Role of these VMs
+    perimeta_untrusted_vlan_networks:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+      entry_schema:
+        type: string
+    perimeta_image_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Glance image for Perimeta instance
+    ssc_b_rf_ip_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: RF fixed IP address to use for SSC B.
+    mgmt_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management network id
+    int_untrusted_parent_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: internal Untrusted/access parent network id
+    perimeta_flavor_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for creating VM instances
+  node_templates:
+    perimeta_ssc_b_trusted_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_b_trusted_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_trusted_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_trusted_port
+            params:
+              $VM:
+                get_input: ssc_b_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: trusted
+        network:
+          get_input: trusted_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_b_untrusted_parent_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_b_untrusted_parent_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_untrusted_parent_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_untrusted_parent_port
+            params:
+              $VM:
+                get_input: ssc_b_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_untrusted_parent
+        network:
+          get_input: int_untrusted_parent_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_b_mgmt_1_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_b_rf_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_rf_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_mgmt_1_port
+            params:
+              $VM:
+                get_input: ssc_b_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: mgmt
+        network:
+          get_input: mgmt_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_b_unused_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: false
+          floating_ip_count_required:
+            is_required: false
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_unused_port
+            params:
+              $VM:
+                get_input: ssc_b_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: unused_port
+        network:
+          get_input: unused_port_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_b_server_0:
+      type: org.openecomp.resource.vfc.nodes.heat.ssc_b
+      properties:
+        flavor:
+          get_input: perimeta_flavor_name
+        key_name:
+          get_input: perimeta_keypair
+        availability_zone:
+          get_input: availability_zone_1
+        image:
+          get_input: perimeta_image_name
+        metadata:
+          vf_module_id:
+            get_input: vf_module_id
+          vm_role:
+            str_replace:
+              template: $ROLE_b
+              params:
+                $ROLE:
+                  get_input: vm_role
+          vnf_id:
+            get_input: vnf_id
+          vnf_name:
+            get_input: vnf_name
+          msw_template_version: 17.07.04 - 2017-09-01
+        config_drive: true
+        user_data_format: RAW
+        name:
+          get_input: ssc_b_name_0
+        scheduler_hints:
+          group:
+            get_input: perimeta_server_group
+    perimeta_ssc_b_mgmt_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: true
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_b_mgmt_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input: ssc_mgmt_vip_0
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_mgmt_0_port
+            params:
+              $VM:
+                get_input: ssc_b_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: mgmt
+        network:
+          get_input: mgmt_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_ssc_b_ha_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input: ssc_b_int_ha_ip_0
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_ha_port
+            params:
+              $VM:
+                get_input: ssc_b_name_0
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_ha
+        network:
+          get_input: int_ha_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_ssc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+  groups:
+    module_1_perimeta_swmu_b_child_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_1_perimeta_swmu_b_child.yaml
+        description: |
+          HOT template to instantiate an B side Perimeta SSC instance with 6 vNICs as part of a nested template
+      members:
+      - perimeta_ssc_b_trusted_0_port
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - perimeta_ssc_b_mgmt_1_port
+      - perimeta_ssc_b_unused_0_port
+      - perimeta_ssc_b_server_0
+      - perimeta_ssc_b_mgmt_0_port
+      - perimeta_ssc_b_ha_0_port
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.heat.module_1_perimeta_swmu_b_child
+    capabilities:
+      host_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - host
+      network.outgoing.packets.rate_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.outgoing.packets.rate
+      vcpus_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - vcpus
+      binding_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - binding
+      network.incoming.bytes_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.incoming.bytes
+      network.outpoing.packets_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.outpoing.packets
+      disk.write.requests_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.write.requests
+      os_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - os
+      memory_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - memory
+      disk.device.write.bytes.rate_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.write.bytes.rate
+      network.outgoing.bytes.rate_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.outgoing.bytes.rate
+      disk.read.bytes_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.read.bytes
+      network.outpoing.packets_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.outpoing.packets
+      network.outgoing.packets.rate_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.outgoing.packets.rate
+      disk.device.allocation_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.allocation
+      network.outgoing.packets.rate_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.outgoing.packets.rate
+      disk.write.requests.rate_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.write.requests.rate
+      network.incoming.bytes.rate_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.incoming.bytes.rate
+      binding_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - binding
+      disk.device.iops_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.iops
+      network.outgoing.packets.rate_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.outgoing.packets.rate
+      disk.device.usage_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.usage
+      cpu_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - cpu
+      feature_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - feature
+      network.outgoing.bytes.rate_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.outgoing.bytes.rate
+      feature_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - feature
+      endpoint_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - endpoint
+      feature_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - feature
+      disk.device.read.requests_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.read.requests
+      attachment_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - attachment
+      cpu.delta_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - cpu.delta
+      network.incoming.packets_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.incoming.packets
+      disk.device.write.requests_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.write.requests
+      disk.device.write.bytes_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.write.bytes
+      disk.root.size_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.root.size
+      network.incoming.bytes.rate_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.incoming.bytes.rate
+      memory.resident_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - memory.resident
+      network.incoming.packets.rate_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.incoming.packets.rate
+      disk.ephemeral.size_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.ephemeral.size
+      network.incoming.packets_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.incoming.packets
+      instance_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - instance
+      attachment_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - attachment
+      network.incoming.bytes_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.incoming.bytes
+      network.incoming.bytes_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.incoming.bytes
+      network.incoming.packets_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.incoming.packets
+      feature_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - feature
+      binding_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - binding
+      network.outpoing.packets_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.outpoing.packets
+      disk.device.read.bytes_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.read.bytes
+      network.outgoing.bytes.rate_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.outgoing.bytes.rate
+      disk.latency_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.latency
+      network.outgoing.bytes_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.outgoing.bytes
+      attachment_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - attachment
+      binding_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - binding
+      network.outgoing.bytes.rate_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.outgoing.bytes.rate
+      network.outgoing.bytes_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.outgoing.bytes
+      network.incoming.packets.rate_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.incoming.packets.rate
+      disk.device.capacity_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.capacity
+      feature_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - feature
+      network.incoming.bytes.rate_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.incoming.bytes.rate
+      binding_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - binding
+      binding_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - binding
+      scalable_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - scalable
+      disk.device.latency_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.latency
+      network.incoming.packets_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.incoming.packets
+      disk.write.bytes.rate_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.write.bytes.rate
+      disk.read.requests_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.read.requests
+      feature_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - feature
+      disk.usage_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.usage
+      attachment_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - attachment
+      attachment_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - attachment
+      network.outgoing.bytes.rate_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.outgoing.bytes.rate
+      disk.allocation_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.allocation
+      network.incoming.bytes.rate_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.incoming.bytes.rate
+      network.outgoing.bytes_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.outgoing.bytes
+      disk.iops_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.iops
+      disk.write.bytes_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.write.bytes
+      network.outpoing.packets_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.outpoing.packets
+      network.incoming.bytes_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.incoming.bytes
+      network.incoming.packets_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.incoming.packets
+      disk.device.read.requests.rate_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.read.requests.rate
+      network.incoming.packets.rate_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.incoming.packets.rate
+      network.incoming.packets_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.incoming.packets
+      network.outpoing.packets_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.outpoing.packets
+      network.outgoing.bytes_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.outgoing.bytes
+      network.incoming.bytes_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.incoming.bytes
+      network.incoming.packets.rate_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - network.incoming.packets.rate
+      memory.usage_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - memory.usage
+      network.incoming.bytes.rate_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.incoming.bytes.rate
+      network.incoming.packets.rate_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.incoming.packets.rate
+      network.outgoing.packets.rate_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.outgoing.packets.rate
+      network.incoming.bytes_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.incoming.bytes
+      network.outgoing.bytes_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - network.outgoing.bytes
+      network.outgoing.bytes.rate_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - network.outgoing.bytes.rate
+      network.outgoing.packets.rate_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.outgoing.packets.rate
+      cpu_util_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - cpu_util
+      disk.device.read.bytes.rate_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.read.bytes.rate
+      disk.capacity_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.capacity
+      network.incoming.packets.rate_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - network.incoming.packets.rate
+      network.outgoing.bytes_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.outgoing.bytes
+      network.outpoing.packets_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - network.outpoing.packets
+      disk.read.bytes.rate_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.read.bytes.rate
+      disk.device.write.requests.rate_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - disk.device.write.requests.rate
+      attachment_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - attachment
+      feature_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - feature
+      network.incoming.bytes.rate_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - network.incoming.bytes.rate
+      binding_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - binding
+    requirements:
+      link_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - link
+      dependency_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - dependency
+      dependency_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - dependency
+      dependency_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - dependency
+      local_storage_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - local_storage
+      link_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - link
+      dependency_perimeta_ssc_b_trusted_0_port:
+      - perimeta_ssc_b_trusted_0_port
+      - dependency
+      dependency_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - dependency
+      link_perimeta_ssc_b_mgmt_1_port:
+      - perimeta_ssc_b_mgmt_1_port
+      - link
+      link_perimeta_ssc_b_untrusted_parent_0_port:
+      - perimeta_ssc_b_untrusted_parent_0_port
+      - link
+      dependency_perimeta_ssc_b_server_0:
+      - perimeta_ssc_b_server_0
+      - dependency
+      link_perimeta_ssc_b_unused_0_port:
+      - perimeta_ssc_b_unused_0_port
+      - link
+      dependency_perimeta_ssc_b_mgmt_0_port:
+      - perimeta_ssc_b_mgmt_0_port
+      - dependency
+      link_perimeta_ssc_b_ha_0_port:
+      - perimeta_ssc_b_ha_0_port
+      - link
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_2_perimeta_sw_a_childServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_2_perimeta_sw_a_childServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..e1c87c0
--- /dev/null
@@ -0,0 +1,735 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: module_2_perimeta_sw_a_child
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.rtp_msc_a:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    vf_module_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique ID for this VF Module instance
+    int_ha_network_plen:
+      hidden: false
+      immutable: false
+      type: float
+      description: Prefix length of subnet associated with internal HA network
+      constraints:
+      - in_range:
+        - 0
+        - 31
+    perimeta_config:
+      hidden: false
+      immutable: false
+      type: string
+      description: JSON orchestration template configuration for instance.
+    vnf_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique name for this VNF instance
+    perimeta_untrusted_vlan_ids:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of VLAN IDs to use on the untrusted/access network
+      entry_schema:
+        type: string
+    int_ha_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: HA network id
+    perimeta_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:
+        - 0
+        - 19
+    perimeta_keypair:
+      hidden: false
+      immutable: false
+      type: string
+      description: Keypair to use for accessing this Perimeta instance
+    perimeta_server_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: Server groups to use for these VMs
+      entry_schema:
+        type: string
+    vnf_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: VNF ID of this deployment
+    availability_zone_0:
+      hidden: false
+      immutable: false
+      type: string
+      description: Availability zone for A instances.
+    rtp_msc_mgmt_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of management virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    perimeta_sec_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of security groups to add on trusted interfaces.
+      entry_schema:
+        type: string
+    rtp_msc_untrusted_parent_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Untrusted/access parent virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    perimeta_untrusted_num_vlans:
+      hidden: false
+      immutable: false
+      type: float
+      description: number of VLANs to connect to the untrusted/access interface
+      constraints:
+      - in_range:
+        - 1
+        - 1001
+    rtp_msc_a_int_ha_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as HA IPs of A instances.
+      entry_schema:
+        type: string
+    rtp_msc_a_untrusted_parent_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Untrusted/access parent fixed IPs of A instances.
+      entry_schema:
+        type: string
+    rtp_msc_a_trusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Trusted/core fixed IPs of A instances.
+      entry_schema:
+        type: string
+    rtp_msc_untrusted_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Untrusted/access virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    trusted_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Trusted/core network UUID
+    rtp_msc_b_int_ha_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as HA IPs of B instances.
+      entry_schema:
+        type: string
+    rtp_msc_a_mgmt_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as management IPs of A instances.
+      entry_schema:
+        type: string
+    rtp_msc_a_untrusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Untrusted/access fixed IPs of A instances.
+      entry_schema:
+        type: string
+    vm_role:
+      hidden: false
+      immutable: false
+      type: string
+      description: Role of these VMs
+    rtp_msc_untrusted_v6_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Untrusted/access alternate virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    perimeta_untrusted_vlan_networks:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+      entry_schema:
+        type: string
+    rtp_msc_a_untrusted_v6_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Untrusted/access alternate fixed IPs of A instances.
+      entry_schema:
+        type: string
+    perimeta_image_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Glance image for Perimeta instance
+    mgmt_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management network id
+    int_untrusted_parent_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: internal Untrusted/access parent network id
+    rtp_msc_a_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of names of Perimeta VM A instances, indexed by perimeta_instance_index
+      entry_schema:
+        type: string
+    perimeta_flavor_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for creating VM instances
+    rtp_msc_trusted_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Trusted/core virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+  node_templates:
+    perimeta_rtp_msc_a_trusted_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_a_trusted_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input:
+            - rtp_msc_trusted_vips
+            - get_input: perimeta_instance_index
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_trusted_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_a_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: trusted
+        network:
+          get_input: trusted_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_rtp_msc_a_ha_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_a_int_ha_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_ha_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_a_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_ha
+        network:
+          get_input: int_ha_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_rtp_msc_a_untrusted_parent_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_a_untrusted_parent_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input:
+            - rtp_msc_untrusted_parent_vips
+            - get_input: perimeta_instance_index
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_untrusted_parent_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_a_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_untrusted_parent
+        network:
+          get_input: int_untrusted_parent_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_rtp_msc_a_server_0:
+      type: org.openecomp.resource.vfc.nodes.heat.rtp_msc_a
+      properties:
+        flavor:
+          get_input: perimeta_flavor_name
+        key_name:
+          get_input: perimeta_keypair
+        availability_zone:
+          get_input: availability_zone_0
+        image:
+          get_input: perimeta_image_name
+        metadata:
+          vf_module_id:
+            get_input: vf_module_id
+          vm_role:
+            str_replace:
+              template: $ROLE_a
+              params:
+                $ROLE:
+                  get_input: vm_role
+          vnf_id:
+            get_input: vnf_id
+          vnf_name:
+            get_input: vnf_name
+          msw_template_version: 17.07.04 - 2017-09-01
+        config_drive: true
+        personality:
+          /opt/MetaSwitch/init/custom.ini:
+            get_artifact:
+            - SELF
+            - custom
+        user_data_format: RAW
+        name:
+          get_input:
+          - rtp_msc_a_names
+          - get_input: perimeta_instance_index
+        scheduler_hints:
+          group:
+            get_input:
+            - perimeta_server_groups
+            - get_input: perimeta_instance_index
+      artifacts:
+        custom:
+          type: tosca.artifacts.Deployment
+          file: ../Artifacts/custom.ini
+    perimeta_rtp_msc_a_mgmt_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_a_mgmt_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input:
+            - rtp_msc_mgmt_vips
+            - get_input: perimeta_instance_index
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_mgmt_0_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_a_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: mgmt
+        network:
+          get_input: mgmt_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_a_server_0
+          relationship: tosca.relationships.network.BindsTo
+  groups:
+    module_2_perimeta_sw_a_child_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_2_perimeta_sw_a_child.yaml
+        description: |
+          HOT template to instantiate an A side Perimeta RTP MSC instance with 4 vNICs as part of a nested template
+      members:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - perimeta_rtp_msc_a_ha_0_port
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - perimeta_rtp_msc_a_server_0
+      - perimeta_rtp_msc_a_mgmt_0_port
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.heat.module_2_perimeta_sw_a_child
+    capabilities:
+      attachment_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - attachment
+      disk.device.read.requests_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.read.requests
+      attachment_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - attachment
+      feature_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - feature
+      disk.device.latency_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.latency
+      vcpus_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - vcpus
+      memory.resident_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - memory.resident
+      binding_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - binding
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.outgoing.packets.rate
+      network.incoming.bytes_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.incoming.bytes
+      attachment_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - attachment
+      cpu_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - cpu
+      disk.capacity_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.capacity
+      network.outgoing.bytes_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.outgoing.bytes
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.outgoing.bytes.rate
+      disk.read.bytes_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.read.bytes
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.outgoing.bytes.rate
+      network.outpoing.packets_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.outpoing.packets
+      os_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - os
+      feature_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - feature
+      network.incoming.packets_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.incoming.packets
+      disk.device.allocation_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.allocation
+      disk.write.requests.rate_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.write.requests.rate
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.incoming.bytes.rate
+      network.incoming.bytes_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.incoming.bytes
+      disk.device.iops_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.iops
+      feature_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - feature
+      network.incoming.bytes_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.incoming.bytes
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.incoming.bytes.rate
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.incoming.bytes.rate
+      disk.device.usage_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.usage
+      disk.write.bytes_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.write.bytes
+      attachment_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - attachment
+      network.outgoing.bytes_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.outgoing.bytes
+      feature_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - feature
+      disk.usage_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.usage
+      binding_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - binding
+      disk.iops_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.iops
+      disk.allocation_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.allocation
+      disk.device.write.bytes.rate_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.write.bytes.rate
+      disk.device.capacity_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.capacity
+      network.outpoing.packets_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.outpoing.packets
+      disk.ephemeral.size_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.ephemeral.size
+      network.incoming.packets_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.incoming.packets
+      cpu_util_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - cpu_util
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.outgoing.bytes.rate
+      network.outgoing.bytes.rate_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.outgoing.bytes.rate
+      network.incoming.packets_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.incoming.packets
+      scalable_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - scalable
+      host_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - host
+      disk.device.read.requests.rate_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.read.requests.rate
+      network.incoming.packets.rate_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.incoming.packets.rate
+      network.incoming.packets.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.incoming.packets.rate
+      network.outgoing.bytes_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.outgoing.bytes
+      network.outpoing.packets_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.outpoing.packets
+      network.outpoing.packets_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.outpoing.packets
+      network.incoming.bytes_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.incoming.bytes
+      disk.root.size_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.root.size
+      network.incoming.packets.rate_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.incoming.packets.rate
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.outgoing.packets.rate
+      disk.write.bytes.rate_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.write.bytes.rate
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.outgoing.packets.rate
+      endpoint_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - endpoint
+      feature_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - feature
+      network.incoming.packets_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.incoming.packets
+      binding_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - binding
+      disk.device.write.requests.rate_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.write.requests.rate
+      binding_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - binding
+      instance_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - instance
+      disk.read.bytes.rate_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.read.bytes.rate
+      binding_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - binding
+      disk.latency_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.latency
+      network.incoming.packets.rate_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - network.incoming.packets.rate
+      disk.device.read.bytes_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.read.bytes
+      network.outgoing.packets.rate_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - network.outgoing.packets.rate
+      disk.read.requests_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.read.requests
+      disk.device.read.bytes.rate_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.read.bytes.rate
+      disk.device.write.bytes_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.write.bytes
+      network.incoming.bytes.rate_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - network.incoming.bytes.rate
+      memory_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - memory
+      network.outgoing.bytes_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - network.outgoing.bytes
+      disk.device.write.requests_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.device.write.requests
+      disk.write.requests_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - disk.write.requests
+      cpu.delta_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - cpu.delta
+      memory.usage_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - memory.usage
+    requirements:
+      link_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - link
+      local_storage_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - local_storage
+      dependency_perimeta_rtp_msc_a_server_0:
+      - perimeta_rtp_msc_a_server_0
+      - dependency
+      dependency_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - dependency
+      dependency_perimeta_rtp_msc_a_trusted_0_port:
+      - perimeta_rtp_msc_a_trusted_0_port
+      - dependency
+      dependency_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - dependency
+      link_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - link
+      link_perimeta_rtp_msc_a_ha_0_port:
+      - perimeta_rtp_msc_a_ha_0_port
+      - link
+      link_perimeta_rtp_msc_a_untrusted_parent_0_port:
+      - perimeta_rtp_msc_a_untrusted_parent_0_port
+      - link
+      dependency_perimeta_rtp_msc_a_mgmt_0_port:
+      - perimeta_rtp_msc_a_mgmt_0_port
+      - dependency
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_2_perimeta_sw_b_childServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/expectedoutputfiles/module_2_perimeta_sw_b_childServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..ce9748e
--- /dev/null
@@ -0,0 +1,721 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: module_2_perimeta_sw_b_child
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.rtp_msc_b:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    vf_module_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique ID for this VF Module instance
+    int_ha_network_plen:
+      hidden: false
+      immutable: false
+      type: float
+      description: Prefix length of subnet associated with internal HA network
+      constraints:
+      - in_range:
+        - 0
+        - 31
+    rtp_msc_b_untrusted_v6_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Untrusted/access alternate fixed IPs of B instances.
+      entry_schema:
+        type: string
+    rtp_msc_b_mgmt_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as management IPs of B instances.
+      entry_schema:
+        type: string
+    vnf_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Unique name for this VNF instance
+    perimeta_untrusted_vlan_ids:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of VLAN IDs to use on the untrusted/access network
+      entry_schema:
+        type: string
+    rtp_msc_b_names:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of names of Perimeta VM B instances, indexed by perimeta_instance_index
+      entry_schema:
+        type: string
+    rtp_msc_b_untrusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Untrusted/access fixed IPs of B instances.
+      entry_schema:
+        type: string
+    int_ha_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: HA network id
+    perimeta_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:
+        - 0
+        - 19
+    perimeta_keypair:
+      hidden: false
+      immutable: false
+      type: string
+      description: Keypair to use for accessing this Perimeta instance
+    perimeta_server_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: Server groups to use for these VMs
+      entry_schema:
+        type: string
+    vnf_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: VNF ID of this deployment
+    availability_zone_1:
+      hidden: false
+      immutable: false
+      type: string
+      description: Availability zone for B instances.  May be the same as A instance.
+    rtp_msc_mgmt_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of management virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    perimeta_sec_groups:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of security groups to add on trusted interfaces.
+      entry_schema:
+        type: string
+    rtp_msc_untrusted_parent_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Untrusted/access parent virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    perimeta_untrusted_num_vlans:
+      hidden: false
+      immutable: false
+      type: float
+      description: number of VLANs to connect to the untrusted/access interface
+      constraints:
+      - in_range:
+        - 1
+        - 1001
+    rtp_msc_a_int_ha_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as HA IPs of A instances.
+      entry_schema:
+        type: string
+    rtp_msc_b_trusted_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Trusted/core fixed IPs of B instances.
+      entry_schema:
+        type: string
+    rtp_msc_untrusted_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Untrusted/access virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    trusted_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Trusted/core network UUID
+    rtp_msc_b_int_ha_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as HA IPs of B instances.
+      entry_schema:
+        type: string
+    vm_role:
+      hidden: false
+      immutable: false
+      type: string
+      description: Role of these VMs
+    rtp_msc_untrusted_v6_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Untrusted/access alternate virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+    perimeta_untrusted_vlan_networks:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+      entry_schema:
+        type: string
+    perimeta_image_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Glance image for Perimeta instance
+    rtp_msc_b_untrusted_parent_ips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of fixed IP addresses to use as Untrusted/access parent fixed IPs of B instances.
+      entry_schema:
+        type: string
+    mgmt_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: Management network id
+    int_untrusted_parent_net_id:
+      hidden: false
+      immutable: false
+      type: string
+      description: internal Untrusted/access parent network id
+    perimeta_flavor_name:
+      hidden: false
+      immutable: false
+      type: string
+      description: Flavor to use for creating VM instances
+    rtp_msc_trusted_vips:
+      hidden: false
+      immutable: false
+      type: list
+      description: List of Trusted/core virtual IP addresses for all instances.
+      entry_schema:
+        type: string
+  node_templates:
+    perimeta_rtp_msc_b_trusted_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_b_trusted_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input:
+            - rtp_msc_trusted_vips
+            - get_input: perimeta_instance_index
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_trusted_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_b_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: trusted
+        network:
+          get_input: trusted_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_rtp_msc_b_mgmt_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_b_mgmt_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input:
+            - rtp_msc_mgmt_vips
+            - get_input: perimeta_instance_index
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_mgmt_0_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_b_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: mgmt
+        network:
+          get_input: mgmt_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_rtp_msc_b_server_0:
+      type: org.openecomp.resource.vfc.nodes.heat.rtp_msc_b
+      properties:
+        flavor:
+          get_input: perimeta_flavor_name
+        key_name:
+          get_input: perimeta_keypair
+        availability_zone:
+          get_input: availability_zone_1
+        image:
+          get_input: perimeta_image_name
+        metadata:
+          vf_module_id:
+            get_input: vf_module_id
+          vm_role:
+            str_replace:
+              template: $ROLE_b
+              params:
+                $ROLE:
+                  get_input: vm_role
+          vnf_id:
+            get_input: vnf_id
+          vnf_name:
+            get_input: vnf_name
+          msw_template_version: 17.07.04 - 2017-09-01
+        config_drive: true
+        user_data_format: RAW
+        name:
+          get_input:
+          - rtp_msc_b_names
+          - get_input: perimeta_instance_index
+        scheduler_hints:
+          group:
+            get_input:
+            - perimeta_server_groups
+            - get_input: perimeta_instance_index
+    perimeta_rtp_msc_b_ha_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_b_int_ha_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_ha_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_b_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_ha
+        network:
+          get_input: int_ha_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+    perimeta_rtp_msc_b_untrusted_parent_0_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        ip_requirements:
+        - ip_version: 4
+          ip_count_required:
+            is_required: true
+          floating_ip_count_required:
+            is_required: false
+        security_groups:
+          get_input: perimeta_sec_groups
+        fixed_ips:
+        - ip_address:
+            get_input:
+            - rtp_msc_b_untrusted_parent_ips
+            - get_input: perimeta_instance_index
+        mac_requirements:
+          mac_count_required:
+            is_required: false
+        allowed_address_pairs:
+        - ip_address:
+            get_input:
+            - rtp_msc_untrusted_parent_vips
+            - get_input: perimeta_instance_index
+        name:
+          str_replace:
+            template: $VNF_NAME_$VM_untrusted_parent_port
+            params:
+              $VM:
+                get_input:
+                - rtp_msc_b_names
+                - get_input: perimeta_instance_index
+              $VNF_NAME:
+                get_input: vnf_name
+        network_role_tag: int_untrusted_parent
+        network:
+          get_input: int_untrusted_parent_net_id
+      requirements:
+      - binding:
+          capability: tosca.capabilities.network.Bindable
+          node: perimeta_rtp_msc_b_server_0
+          relationship: tosca.relationships.network.BindsTo
+  groups:
+    module_2_perimeta_sw_b_child_group:
+      type: org.openecomp.groups.heat.HeatStack
+      properties:
+        heat_file: ../Artifacts/module_2_perimeta_sw_b_child.yaml
+        description: |
+          HOT template to instantiate an B side Perimeta RTP MSC instance with 4 vNICs as part of a nested template
+      members:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - perimeta_rtp_msc_b_server_0
+      - perimeta_rtp_msc_b_ha_0_port
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.heat.module_2_perimeta_sw_b_child
+    capabilities:
+      attachment_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - attachment
+      disk.read.requests_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.read.requests
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.incoming.bytes.rate
+      network.incoming.packets_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.incoming.packets
+      attachment_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - attachment
+      disk.device.read.requests.rate_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.read.requests.rate
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.outgoing.packets.rate
+      network.incoming.bytes_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.incoming.bytes
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.incoming.bytes.rate
+      disk.latency_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.latency
+      network.incoming.packets.rate_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.incoming.packets.rate
+      disk.device.write.requests_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.write.requests
+      disk.device.read.bytes.rate_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.read.bytes.rate
+      memory_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - memory
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.outgoing.bytes.rate
+      feature_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - feature
+      network.incoming.packets_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.incoming.packets
+      disk.ephemeral.size_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.ephemeral.size
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.outgoing.bytes.rate
+      attachment_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - attachment
+      disk.capacity_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.capacity
+      network.incoming.bytes_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.incoming.bytes
+      cpu_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - cpu
+      disk.device.capacity_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.capacity
+      binding_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - binding
+      disk.device.usage_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.usage
+      disk.device.allocation_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.allocation
+      disk.write.requests.rate_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.write.requests.rate
+      network.outpoing.packets_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.outpoing.packets
+      disk.root.size_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.root.size
+      cpu_util_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - cpu_util
+      disk.device.latency_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.latency
+      attachment_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - attachment
+      os_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - os
+      disk.device.write.bytes.rate_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.write.bytes.rate
+      network.outgoing.bytes_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.outgoing.bytes
+      disk.device.read.bytes_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.read.bytes
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.outgoing.packets.rate
+      network.incoming.packets_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.incoming.packets
+      disk.device.iops_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.iops
+      network.incoming.packets.rate_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.incoming.packets.rate
+      network.incoming.packets_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.incoming.packets
+      disk.write.bytes_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.write.bytes
+      network.incoming.bytes_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.incoming.bytes
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.outgoing.bytes.rate
+      network.outgoing.bytes_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.outgoing.bytes
+      instance_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - instance
+      disk.device.write.requests.rate_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.write.requests.rate
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.outgoing.packets.rate
+      network.incoming.bytes_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.incoming.bytes
+      network.outgoing.bytes_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.outgoing.bytes
+      vcpus_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - vcpus
+      memory.resident_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - memory.resident
+      network.outgoing.bytes_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.outgoing.bytes
+      feature_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - feature
+      endpoint_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - endpoint
+      network.outpoing.packets_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.outpoing.packets
+      disk.write.requests_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.write.requests
+      network.incoming.packets.rate_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.incoming.packets.rate
+      disk.read.bytes_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.read.bytes
+      disk.write.bytes.rate_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.write.bytes.rate
+      network.incoming.packets.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.incoming.packets.rate
+      memory.usage_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - memory.usage
+      binding_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - binding
+      scalable_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - scalable
+      cpu.delta_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - cpu.delta
+      disk.device.write.bytes_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.write.bytes
+      network.outpoing.packets_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.outpoing.packets
+      disk.allocation_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.allocation
+      feature_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - feature
+      disk.usage_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.usage
+      binding_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - binding
+      host_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - host
+      network.outpoing.packets_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.outpoing.packets
+      feature_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - feature
+      binding_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - binding
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - network.incoming.bytes.rate
+      network.outgoing.bytes.rate_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - network.outgoing.bytes.rate
+      disk.iops_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.iops
+      disk.device.read.requests_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.device.read.requests
+      network.incoming.bytes.rate_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - network.incoming.bytes.rate
+      feature_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - feature
+      binding_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - binding
+      network.outgoing.packets.rate_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - network.outgoing.packets.rate
+      disk.read.bytes.rate_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - disk.read.bytes.rate
+    requirements:
+      link_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - link
+      dependency_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - dependency
+      link_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - link
+      dependency_perimeta_rtp_msc_b_trusted_0_port:
+      - perimeta_rtp_msc_b_trusted_0_port
+      - dependency
+      dependency_perimeta_rtp_msc_b_ha_0_port:
+      - perimeta_rtp_msc_b_ha_0_port
+      - dependency
+      dependency_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - dependency
+      dependency_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - dependency
+      local_storage_perimeta_rtp_msc_b_server_0:
+      - perimeta_rtp_msc_b_server_0
+      - local_storage
+      link_perimeta_rtp_msc_b_mgmt_0_port:
+      - perimeta_rtp_msc_b_mgmt_0_port
+      - link
+      link_perimeta_rtp_msc_b_untrusted_parent_0_port:
+      - perimeta_rtp_msc_b_untrusted_parent_0_port
+      - link
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/MANIFEST.json b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/MANIFEST.json
new file mode 100644 (file)
index 0000000..95370a2
--- /dev/null
@@ -0,0 +1,86 @@
+{
+  "name": "xbi test TSBC 0905",
+  "description": "test",
+  "version": "0.1",
+  "data": [
+    {
+      "isBase": false,
+      "file": "module_2_perimeta_rtp_msc_b.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "module_2_perimeta_rtp_msc_b.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "isBase": false,
+      "file": "module_2_perimeta_rtp_msc_a.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "module_2_perimeta_rtp_msc_a.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "isBase": false,
+      "file": "module_1_perimeta_ssc_b.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "module_1_perimeta_ssc_b.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "isBase": false,
+      "file": "module_1_perimeta_ssc_a.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "module_1_perimeta_ssc_a.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "isBase": true,
+      "file": "base_perimeta_deployment_create.yaml",
+      "type": "HEAT",
+      "data": [
+        {
+          "file": "base_perimeta_deployment_create.env",
+          "type": "HEAT_ENV"
+        }
+      ]
+    },
+    {
+      "file": "module_2_perimeta_sw_b_child.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "vlan_subinterface_dual.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "module_2_perimeta_sw_a_child.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "module_1_perimeta_swmu_b_child.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "module_1_perimeta_swmu_a_child.yaml",
+      "type": "HEAT"
+    },
+    {
+      "file": "custom.ini",
+      "type": "OTHER"
+    }
+  ]
+}
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/base_perimeta_deployment_create.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/base_perimeta_deployment_create.env
new file mode 100644 (file)
index 0000000..03aa1ae
--- /dev/null
@@ -0,0 +1,34 @@
+# Environment file for heat template which instantiates base resources for a
+# Perimeta deployment
+#
+parameters:
+  #
+  # General ECOMP VNF parameters
+  #
+
+  # Unique VNF name
+ #vnf_name: tsbc0002
+
+  #
+  # General deployment parameters.
+  #
+
+  # SSH public key to upload to Perimeta instances for ssh access.
+  perimeta_ssh_key: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDXvSadEWp+nsz3gEAAAAAAAAAAbggQ3t06mqFIauHfUYMiKZ3EUX3jDFf/uGQoNsIZU6SNE/gl3tY4fFvO8Yzj8OY/vstHHvEadbY5aXNE6kd39ik20uRNbeZLT+pRllBwVKBSVnFqG3kBDvNWmBIenlPZzu3Ay0LYT/aDq6fZaz8Mqy8hzhpAAAAAAAAAAEmS/ESYY4UMs/aF2fVGmCLqudSjLpSsyD8lXag2dmeiT7cTdwRkgtDNTULXCPVucolVZwZF9BxXPNK++B+fL/ZY4MrXHXgZYGEElrMCFYkQFb3jQv3XQtxZ6gVByrzgGc9eiU7tkCgY2cVfb22iIs9n Generated-by-Nova"
+
+
+  # Max number of RTP MSC pair in the site. This is used to create the correct
+  # number of MSRP specific server groups. These are used by the appropriate
+  # module_2 yaml files to associate the server group with the particular
+  # perimeta RTP VF pair
+  perimeta_max_rtp_msc_count: 8
+
+  #
+  # Shared internal HA network related parameters
+  #
+
+  # IPv4 network prefix for internal HA network
+  perimeta_int_ha_net_prefix_v4: 172.26.1.4
+
+  # IPv4 network prefix length for internal HA network
+  perimeta_int_ha_net_prefix_len_v4: 26
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/base_perimeta_deployment_create.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/base_perimeta_deployment_create.yaml
new file mode 100644 (file)
index 0000000..4b97d04
--- /dev/null
@@ -0,0 +1,222 @@
+# Heat template which instantiates base resources for a Perimeta deployment,
+# namely.
+#  - keypair
+#  - security group
+#  - SSC server group
+#  - RTP MSC server group
+#  - Internal HA network
+#  - Internal unused network
+#  - Internal parent network for the untrusted VLANs
+#
+#  Template version 17.07.04 - 2017-09-01
+#
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate base shared resources for a Perimeta deployment
+
+parameters:
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  perimeta_ssh_key:
+    type: string
+    description: SSH public key
+  # Deployment scaling parameters
+  perimeta_max_rtp_msc_count:
+    type: number
+    description: Max number of RTP MSCs in a site.
+    constraints:
+    - range: { min: 0, max: 20 }
+      description: perimeta_max_rtp_msc_count must be between 0 and 20
+  # Internal high availability network parameters
+  perimeta_int_ha_net_prefix_v4:
+    type: string
+    description: IPv4 subnet prefix for internal HA network
+  perimeta_int_ha_net_prefix_len_v4:
+    type: number
+    description: Prefix length of subnet associated with internal HA network
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: int_ha_net_plen must be between 0 and 31
+
+resources:
+  # Resource Security Group
+  shared_perimeta_rsg:
+    type: OS::Neutron::SecurityGroup
+    properties:
+      description: Security Group for Perimeta networks
+      name:
+        str_replace:
+            template:  $VNF_NAME_shared_perimeta_RSG
+            params:
+              $VNF_NAME:  { get_param: vnf_name }
+      rules:
+        - {"direction": "egress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "tcp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 1}
+        - {"direction": "egress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "udp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 1}
+        - {"direction": "egress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "icmp", "ethertype": "IPv4"}
+        - {"direction": "egress", "remote_ip_prefix": "::/0", "protocol": "icmp", "ethertype": "IPv6"}
+        - {"direction": "egress", "remote_ip_prefix": "::/0", "protocol": "tcp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 1}
+        - {"direction": "egress", "remote_ip_prefix": "::/0", "protocol": "udp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 1}
+        - {"direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "tcp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 1}
+        - {"direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "udp", "ethertype": "IPv4", "port_range_max": 65535, "port_range_min": 1}
+        - {"direction": "ingress", "remote_ip_prefix": "0.0.0.0/0", "protocol": "icmp", "ethertype": "IPv4"}
+        - {"direction": "ingress", "remote_ip_prefix": "::/0", "protocol": "icmp", "ethertype": "IPv6"}
+        - {"direction": "ingress", "remote_ip_prefix": "::/0", "protocol": "tcp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 1}
+        - {"direction": "ingress", "remote_ip_prefix": "::/0", "protocol": "udp", "ethertype": "IPv6", "port_range_max": 65535, "port_range_min": 1}
+
+  # Keypair for use by Perimeta instances.
+  shared_perimeta_keypair:
+    type: OS::Nova::KeyPair
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_key_pair
+          params:
+            $VNF_NAME: { get_param: vnf_name }
+      public_key: {get_param: perimeta_ssh_key}
+      save_private_key: false
+
+  # Create the server groups. We need one per pair of perimeta VFs in the site
+  # We only have one SSC
+  # We can have multiple RTP MSCs
+
+  shared_perimeta_ssc_server_gp:
+    type: OS::Nova::ServerGroup
+    properties:
+      name:
+        str_replace:
+            template:  $VNF_NAME_shared_ssc_RSG_name_0
+            params:
+              $VNF_NAME:  { get_param: vnf_name }
+      policies: ['anti-affinity']
+
+
+  shared_perimeta_rtp_msc_server_gps:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: { get_param: perimeta_max_rtp_msc_count }
+      resource_def:
+        type: OS::Nova::ServerGroup
+        properties:
+          name:
+            str_replace:
+                template:  $VNF_NAME_shared_rtp_msc_RSG_name_"%index%"
+                params:
+                  $VNF_NAME:  { get_param: vnf_name }
+          policies: ['anti-affinity']
+
+  # Internal HA network for deployment.
+  #   This is a private network with all instances on the same isolated L2
+  #   L2 subnet.  There is no requirement for routing in an IP sense which 
+  #   means that there is no need for a default gateway  
+  perimeta_internal_ha_ipam_net_0:
+    type: OS::ContrailV2::NetworkIpam
+    properties:
+      name:
+        str_replace:
+          template: $VF_NAME_int_ha_ipam_net_0
+          params:
+            $VF_NAME: { get_param: vnf_name }
+
+  shared_perimeta_internal_ha_net_0:
+    type: OS::ContrailV2::VirtualNetwork
+    depends_on: [ perimeta_internal_ha_ipam_net_0 ]
+    properties:
+      name:
+        str_replace:
+          template: $VF_NAME_int_ha_net_0
+          params:
+            $VF_NAME: { get_param: vnf_name }
+      virtual_network_properties:
+        virtual_network_properties_rpf: enable
+      is_shared: false
+      flood_unknown_unicast: true
+      network_ipam_refs:
+        - get_resource: perimeta_internal_ha_ipam_net_0
+      network_ipam_refs_data:
+        - network_ipam_refs_data_ipam_subnets:
+            - network_ipam_refs_data_ipam_subnets_subnet:
+                network_ipam_refs_data_ipam_subnets_subnet_ip_prefix: { get_param: perimeta_int_ha_net_prefix_v4 }
+                network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len: { get_param: perimeta_int_ha_net_prefix_len_v4 }
+              network_ipam_refs_data_ipam_subnets_enable_dhcp: false
+
+  # Internal unused network - required for unused ports on SSC.
+  shared_perimeta_unused_net_0:
+    type: OS::Neutron::Net
+    properties:
+      name:
+        str_replace:
+          template: $VF_NAME_int_unused_net
+          params:
+            $VF_NAME: { get_param: vnf_name }
+
+  # A subnet is required for unused network but we just use arbitrary IP addresses
+  # as these will never be used.
+  shared_perimeta_unused_net_0_subnet:
+    type: OS::Neutron::Subnet
+    depends_on: [ shared_perimeta_unused_net_0 ]
+    properties:
+      network: { get_resource: shared_perimeta_unused_net_0 }
+      cidr: "10.0.0.0/29"
+      ip_version: 4
+      enable_dhcp: false
+      gateway_ip: ""
+
+  # Internal parent network - required for untrusted network to anchor the VLANs
+  shared_perimeta_int_untrusted_parent_net_0:
+    type: OS::Neutron::Net
+    properties:
+      name:
+        str_replace:
+          template: $VF_NAME_int_untrusted_parent_net
+          params:
+            $VF_NAME: { get_param: vnf_name }
+
+  # A subnet is required for untrusted parent network but we just use arbitrary IP addresses
+  # as these will never be used to route traffic.
+  shared_perimeta_int_untrusted_parent_net_0_subnet:
+    type: OS::Neutron::Subnet
+    depends_on: [ shared_perimeta_int_untrusted_parent_net_0 ]
+    properties:
+      network: { get_resource: shared_perimeta_int_untrusted_parent_net_0 }
+      cidr: "11.0.0.0/24"
+      ip_version: 4
+      enable_dhcp: false
+      gateway_ip: ""
+
+outputs:
+
+  shared_perimeta_ssc_server_group:
+    description: Perimeta SSC Server group
+    value: { get_resource: shared_perimeta_ssc_server_gp}
+
+
+  shared_perimeta_rtp_msc_server_groups:
+    description: Perimeta RTP MSC Server groups
+    value: { list_join: [ ',' , { get_attr: [shared_perimeta_rtp_msc_server_gps, refs ] } ] }
+
+  shared_perimeta_keypair:
+    description: SSH keypair for deployment
+    value: { get_resource: shared_perimeta_keypair }
+
+  shared_perimeta_sec_groups:
+    description: List of security groups to use for all network interfaces
+    value: { get_resource: shared_perimeta_rsg }
+
+  shared_int_ha_net_id:
+    description: HA internal network for deployment
+    value: { get_resource: shared_perimeta_internal_ha_net_0 }
+
+  shared_int_ha_net_prefix_len_v4:
+    description: HA internal network IPv4 prefix length
+    value: { get_param: perimeta_int_ha_net_prefix_len_v4 }
+
+  shared_ssc_unused_net_id:
+    description: Unused internal network for deployment
+    value: { get_resource: shared_perimeta_unused_net_0 }
+
+  shared_int_untrusted_parent_net_id:
+    description: Internal untrusted parent network for deployment
+    value: { get_resource: shared_perimeta_int_untrusted_parent_net_0 }
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/custom.ini b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/custom.ini
new file mode 100644 (file)
index 0000000..1d18c70
--- /dev/null
@@ -0,0 +1,21 @@
+;******************************************************************************
+;* Perimeta Custom Initialization File.                                       *
+;*                                                                            *
+;*                       *****  IMPORTANT *****                               *
+;*                                                                            *
+;* Background:                                                                *
+;*  - This file is maintained across Software Upgrade.                        *
+;*  - The format is similar to nbase.ini but it is only for parameters that   *
+;*    are read by NBB_GET_CUSTOM_INT_INT/STRING().                            *
+;*  - Comments begin with the character ';'                                   *
+;*                                                                            *
+;* To make a change to this file:                                             *
+;*  - Edit only the copy in /opt/MetaSwitch/init.                             *
+;*  - After editing, run mslu_config_change to backup this file.              *
+;*  - Repeat the above two bullets on the other controller.                   *
+;*                                                                            *
+;******************************************************************************
+; Set max_dlow_pairs to limit the number of flowpairs supported by an MSC or 
+; ISC. This actually counts in unidirectional flows, so to limit to say 
+; 100 flowpairs, then you would set the limit to 200
+mpf_max_flow_pairs=10000
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_a.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_a.env
new file mode 100644 (file)
index 0000000..9c0153e
--- /dev/null
@@ -0,0 +1,208 @@
+# Environment file for instantiating
+#  - 1 x HA SSC pair - A instance
+#
+# During initial instantiation, the Perimeta A instance is configured with
+# minimal configuration, commissioned as an SSC and started.  In addition, it
+# will attempt partnering with the B instance when it becomes availble.
+#
+# During healing, the Perimeta A instance is only configured with sufficient
+# configuration to allow partnering from the B instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+
+parameters:
+  #
+  # General VNF parameters
+  #
+  # Unique VNF name
+ #vnf_name: tsbc0002
+  # ID of VNF
+ #vnf_id: ibcx0002
+  # Unique ID for this VF Module instance
+ #vf_module_id: ibcx
+  # Availability zone for A instances.
+ #availability_zone_0: DPA3_D2_AZ1
+  #
+  # Shared parameters from base template
+  #
+  # Internal HA network UUID
+ #shared_int_ha_net_id: "c8994bb0-9dbd-43e7-a8f9-658c54e35d23"
+  # Internal HA network IPv4 prefix length
+ #shared_int_ha_net_prefix_len_v4: 26
+  # Keypair UUID
+ #shared_perimeta_keypair: "atttest_key_pair"
+  # List of security groups to use for all interfaces
+ #shared_perimeta_sec_groups: [ "2412dd6a-d784-40a5-a195-7a7da2349178" ]
+  # Anti-affinity server groups to use for SSCs
+ #shared_perimeta_ssc_server_group: "308e8e5b-fac5-4964-b86c-47d8b439fe44"
+  # Unused network parameters
+ #shared_ssc_unused_net_id: "dd410626-5658-445c-8f97-1142e2d521ab"
+
+  #
+  # SSC parameters
+  #
+  # Flavor to use for creating SSC VM instance
+  ssc_flavor_name: gv.c8r16d160
+  # Glance image to use for launching SSC Perimeta instances.
+  ssc_image_name: ISBC_SBC_v4.0.40_SU12.qcow2
+
+
+  # VNFC of the SSC VIP
+ #ssc_vnfcname_0: ibcx0002vm001ssc001pair
+  # VNFCs of the servers
+ #ssc_a_vnfcname_0: ibcx0002vm001ssc001
+ #ssc_b_vnfcname_0: ibcx0002vm002ssc001
+
+  # Name of VM A of SSC
+ #ssc_a_name_0: ibcx0002vm001
+
+  #
+  # HA network parameters
+  #
+  # HA fixed IPv4 address to use for SSC A.
+ #ssc_a_int_ha_ip_0: 172.26.1.4
+  # HA fixed IPv4 address to use for SSC B.
+ #ssc_b_int_ha_ip_0: 172.26.1.5
+
+  #
+  # Management network parameters
+  #
+  # Management network ID
+ #mgmt_net_id: 4b5621b0-4ca4-4ea0-8511-860318c4fc3b
+  # Management network prefix length
+ #mgmt_net_plen: 26
+  # Default gateway for management network
+ #mgmt_net_default_gateway: 135.144.188.131
+  # Management virtual IPv4 address to use for SSC.
+ #ssc_mgmt_vip_0: 135.144.188.133
+  # Management fixed IPv4 address to use for SSC A.
+ #ssc_a_mgmt_ip_0: 135.144.188.132
+  # Management fixed IPv4 address to use for SSC B.
+ #ssc_b_mgmt_ip_0: 135.144.188.136
+
+  #
+  # Trusted/core network parameters
+  #
+  # Network ID of Trusted/core network.
+ #trusted_net_id: 3d584971-4ec6-408c-92fe-3073666fbcb9
+  # Virtual IPv4 address on Trusted/core network for SSC.
+ #ssc_trusted_vip_0: 10.1.1.5
+  # Fixed IPv4 address on Trusted/core network for SSC A.
+ #ssc_a_trusted_ip_0: 10.1.1.4
+
+  #
+  # Untrusted/access network parameters
+  #
+  # Using VLANs on Untrusted/access
+ #shared_int_untrusted_parent_net_id: a0ddd409-f6a7-465a-a091-827a12402252
+  # Virtual IPv4 address on Untrusted/access parent network for SSC.
+ #ssc_untrusted_parent_vip_0: 11.0.0.6
+  # Fixed IPv4 address on Untrusted/access parent network for SSC A.
+ #ssc_a_untrusted_parent_ip_0: 11.0.0.4
+
+ #perimeta_untrusted_num_vlans: 5
+ #perimeta_untrusted_vlan_ids: ["81", "1001", "1002", "1003", "1004"] 
+ #perimeta_untrusted_vlan_networks: [95c74fbb-0650-4ac2-bd4f-7b4fb50b4b5d,aa1a5096-61fd-421b-a74b-0b4a72c47856,ced72584-9c09-4d67-9b9f-8faf4c081c45,6311c9db-c4ba-41f5-85e5-4a3cc85d7f55,79391429-9c52-44f5-b9a9-4547fec0e9d4]
+
+
+
+  # Virtual IPv4 address on Untrusted/access network for SSC.
+ #ssc_untrusted_vip_0: 12.121.106.133
+  # Virtual IPv6 address on Untrusted/access network for SSC.
+ #ssc_untrusted_v6_vip_0: 2001:1890:1001:2B38::2D:2
+  # Fixed IPv4 address on Untrusted/access network for SSC A.
+ #ssc_a_untrusted_ip_0: 12.121.106.132
+  # Fixed IPv6 address on Untrusted/access network for SSC A.
+ #ssc_a_untrusted_v6_ip_0: 2001:1890:1001:2B38::2D:1
+
+  #
+  # management/Rf network parameters
+  #
+  # Virtual IPv4 address on management/Rf network for SSC. 
+ #ssc_rf_vip_0: 135.144.188.135
+  # Fixed IPv4 address on management/Rf network for SSC A. 
+ #ssc_a_rf_ip_0: 135.144.188.134
+
+  # 
+  # A side healing / instantiation parameters
+  #
+  #
+  # Healing or instantiation? This is used to ensure that the json file passed
+  # to the VF is correct for the operation being carried out.
+  # This parameter must be set to one of the following values
+  # - single whitespace character
+  # - the string // not required for healing
+  # Simply uncomment the required value from the pair below
+  #
+  # Note that we need to do this because we cannot parmeterize the file name
+  # passed to get_file (which would be the more obvious way to do this)
+  #
+  # Uncomment for instantiation, comment for healing
+  ssc_a_json_prefix: " "
+  # Uncomment for healing, comment for instantiation
+  # ssc_a_json_prefix: "// healing, not required "
+
+  # Orchestrating a perimeta version 41 or above. Used to ensure that the
+  # tags in the json file are supported by the version of perimeta that is
+  # being instantiated.
+  # This parameter must be set to one of the following values
+  # - single whitespace character
+  # - the string // older perimeta, parameter not required
+  # Simply uncomment the required value from the pair below
+  #
+  # Note that we need to do this because we cannot parmeterize the file name
+  # passed to get_file (which would be the more obvious way to do this)
+  #
+  #
+  # Uncomment for V4.1.00 or above, comment for V4.0.40
+  ssc_json_v41: " "
+  # Uncomment for V4.0.40, comment for V4.1.00 or above
+  # ssc_json_v41: "// older perimeta, parameter not required "
+
+  # Using Radius for user account authentication? Used to ensure that the json
+  # file is configured correctly depending on whether we are using Radius or
+  # local authentication
+  #
+  # This parameter must be set to one of the following values
+  # - single whitespace character
+  # - the string // older perimeta, parameter not required
+  # Simply uncomment the required value from the pair below
+  #
+  # Note that we need to do this because we cannot parmeterize the file name
+  # passed to get_file (which would be the more obvious way to do this)
+  #
+  # Uncomment for Local authentication
+ #ssc_json_use_radius_authentication: "// not using Radius "
+  # Uncomment for Radius authentication
+ ## ssc_json_use_radius_authentication: " "
+
+  # 
+  # Radius server parameters
+  #
+  #
+  # IP Address or hostname of RADIUS Server.
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #ssc_json_radius_servername: "192.0.0.1"
+  # Radius Server port configuration - value between 0 and 65535
+  # Normal Radius Server port is 1812
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #ssc_json_radius_port: 1812
+  # Radius Server shared secret
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #ssc_json_radius_secret: "TopSecret"
+  # Radius Server connection timeout - value between 1 and 60
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #ssc_json_radius_timeout: 3
+  # Radius Server default user authentication level.
+  # must be set to one of 'no-access', 'read-only', 'support', 'restricted-admin' or 'admin'
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #ssc_json_radius_default: "no-access"
+
+  # 
+  # NTP server IPv4 addresses, separated by commas.  These must be accessible from the management network
+  # 
+ #ntp_server_ip_addrs: 132.201.84.13,155.179.58.11,155.179.59.249,155.179.82.25
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_a.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_a.yaml
new file mode 100644 (file)
index 0000000..ace080e
--- /dev/null
@@ -0,0 +1,322 @@
+# Template for instantiating
+#  - 1 x HA SSC pair - A instance
+#
+# During initial instantiation, the Perimeta A instance is configured with
+# minimal configuration, commissioned as an SSC and started.  In addition, it
+# will attempt partnering with the B instance when it becomes availble.
+#
+# During healing, the Perimeta A instance is only configured with sufficient
+# configuration to allow partnering from the B instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an A side Perimeta SSC and optionally partner it with the corresponding B side
+
+parameters:
+  # General VNF parameters
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: ID of VNF
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  # Availability zones
+  availability_zone_0:
+    type: string
+    description: Availability zone for A instances.
+  shared_perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  shared_perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on all interfaces.
+  shared_perimeta_ssc_server_group:
+    type: string
+    description: Server group to use for these VMs
+  # Internal network parameters
+  shared_int_ha_net_id:
+    type: string
+    description: HA network id
+    constraints:
+    - custom_constraint: neutron.network
+
+  # Constraint below is copied from base module 
+  shared_int_ha_net_prefix_len_v4:
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: shared_int_ha_net_prefix_len_v4 must be between 0 and 31
+  # Unused network parameters
+  #
+  # This is used for connecting the unused 4th SSC service interface.
+  shared_ssc_unused_net_id:
+    type: string
+    description: Unused network ID
+  # Management network parameters
+  mgmt_net_id:
+    type: string
+    description: Management network ID
+    constraints:
+    - custom_constraint: neutron.network
+  mgmt_net_plen:
+    type: number
+    description: Management network prefix length
+    constraints:
+    - range: { min: 0, max: 32 }
+      description: mgmt_net_plen must be between 0 and 32
+  mgmt_net_default_gateway:
+    type: string
+    description: Default gateway for management network
+  # Trusted/core network parameters
+  trusted_net_id:
+    type: string
+    description: Network ID of Trusted/core network.
+    constraints:
+    - custom_constraint: neutron.network
+  # untrusted parent network parameters
+  shared_int_untrusted_parent_net_id:
+    type: string
+    description: untrusted parent network id
+  # SSC IP addresses on Untrusted/access parent network
+  ssc_untrusted_parent_vip_0:
+    type: string
+    description: Virtual IPv4 address on Untrusted/access parent network for SSC.
+  ssc_a_untrusted_parent_ip_0:
+    type: string
+    description: Fixed IPv4 address on Untrusted/access parent network for SSC A.
+  perimeta_untrusted_num_vlans:
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  # SSC parameters
+  ssc_flavor_name:
+    type: string
+    description: Flavor to use for creating SSC VM instance
+    constraints:
+    - custom_constraint: nova.flavor
+  ssc_image_name:
+    type: string
+    description: Glance image to use for launching SSC Perimeta instances.
+    constraints:
+    - custom_constraint: glance.image
+  # Hostames of the VIP and servers
+  ssc_vnfcname_0:
+    type: string
+    description: Name of vnfc of SSC. This is the name associated with the perimeta pair and corresponds to the VIP
+    constraints:
+    - allowed_pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$'
+      description: vnfc name must be 32 characters or less and a valid hostname.  Only alphanumeric characters plus hyphen are allowed.
+  ssc_a_vnfcname_0:
+    type: string
+    description: vnfc name of VM A of SSC
+    constraints:
+    - allowed_pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$'
+      description: vnfc name must be 32 characters or less and a valid hostname.  Only alphanumeric characters plus hyphen are allowed.
+  ssc_b_vnfcname_0:
+    type: string
+    description: vnfc name of VM B of SSC
+    constraints:
+    - allowed_pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,31}$'
+      description: vnfc name must be 32 characters or less and a valid hostname.  Only alphanumeric characters plus hyphen are allowed.
+  # SSC names of the physical A instance
+  ssc_a_name_0:
+    type: string
+    description: Name of VM A of SSC
+    constraints:
+    - allowed_pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,29}$'
+      description: VM name must be 30 characters or less.  Only alphanumeric characters plus hyphen are allowed.
+  # SSC IP addresses on management network
+  ssc_mgmt_vip_0:
+    type: string
+    description: Management virtual IP address to use for SSC.
+  ssc_a_mgmt_ip_0:
+    type: string
+    description: Management fixed IP address to use for SSC A.
+  ssc_b_mgmt_ip_0:
+    type: string
+    description: Management fixed IP address to use for SSC B.
+  # SSC IP addresses on internal HA network
+  ssc_a_int_ha_ip_0:
+    type: string
+    description: HA fixed IP address to use for SSC A.
+  ssc_b_int_ha_ip_0:
+    type: string
+    description: HA fixed IP address to use for SSC B.
+  # SSC IP addresses on Trusted/core network
+  ssc_trusted_vip_0:
+    type: string
+    description: Virtual IPv4 address on Trusted/core network for SSC.
+  ssc_a_trusted_ip_0:
+    type: string
+    description: Fixed IPv4 address on Trusted/core network for SSC A.
+  # SSC IP addresses on Untrusted/access network
+  ssc_untrusted_vip_0:
+    type: string
+    description: Virtual IPv4 address on Untrusted/access network for SSC.
+  ssc_untrusted_v6_vip_0:
+    type: string
+    description: Virtual IPv6 address on Untrusted/access network for SSC.
+  ssc_a_untrusted_ip_0:
+    type: string
+    description: Fixed IPv4 address on Untrusted/access network for SSC A.
+  ssc_a_untrusted_v6_ip_0:
+    type: string
+    description: Fixed IPv6 address on Untrusted/access network for SSC A.
+  #
+  # RF virtual IPv4 address on management/Rf network for SSC.  
+  #
+  ssc_rf_vip_0:
+    type: string
+    description: RF virtual IP address to use for SSC.
+
+  ssc_a_rf_ip_0:
+    type: string
+    description: RF fixed IP address to use for SSC A.
+  ntp_server_ip_addrs:
+    type: string
+    description: NTP server IPv4 addresses, separated by commas.  These must be accessible from the management network
+    constraints:
+    - allowed_pattern: "((?:\\d{1,3}\\.){3}\\d{1,3},)*((?:\\d{1,3}\\.){3}\\d{1,3})"
+      description: ntp_server_ip_addrs must be a comma separated list of IPv4 addresses (with no spaces)
+  # Healing or instantiating? Used to build the correct json file
+  ssc_a_json_prefix:
+    type: string
+    description: Json prefix, used to create the correct json file depending on the operation being performed
+    constraints:
+    - allowed_values:
+      - " "
+      - "// healing, not required "
+      description: ssc_a_json_prefix must be set to ' ' or '// healing, not required '
+  # Running V4.1 perimeta or greater. Used to ensure that newer json tags are
+  # not included if the server will not recognize them
+  ssc_json_v41:
+    type: string
+    description: Json prefix, used to ensure that the json tags will be recognised by the server loading them
+    constraints:
+    - allowed_values:
+      - " "
+      - "// older perimeta, parameter not required "
+      description: ssc_json_v41 must be set to ' ' or '//  older perimeta, parameter not required '
+  # Use Radius for user account authentication.
+  ssc_json_use_radius_authentication:
+    type: string
+    description: Json prefix, used to indicate if user account authentication is done externally through Radius
+    constraints:
+    - allowed_values:
+      - " "
+      - "// not using Radius "
+      description: ssc_json_use_radius_authentication must be set to ' ' or '//  not using Radius '
+  # Radius Server address configuration
+  ssc_json_radius_servername:
+    type: string
+    description: IP Address or hostname of RADIUS server
+  # Radius Server port configuration
+  ssc_json_radius_port:
+    type: number
+    description: Port to use to connect to RADIUS server
+    constraints:
+    - range: { min: 0, max: 65535 }
+      description: ssc_json_radius_port must be between 0 and 65535
+  # Radius Server shared secret
+  ssc_json_radius_secret:
+    type: string
+    description: Shared secret to use for the RADIUS Server
+  # Radius Server connection timeout
+  ssc_json_radius_timeout:
+    type: number
+    description: Timeout for connect requests to RADIUS server
+    constraints:
+    - range: { min: 1, max: 60 }
+      description: ssc_json_timeout must be between 1 and 60
+  # Radius Server default user authentication level
+  ssc_json_radius_default:
+    type: string
+    description: Default authentication level for RADIUS users
+    constraints:
+    - allowed_values:
+      - "no-access"
+      - "read-only"
+      - "support"
+      - "restricted-admin"
+      - "admin"
+      description: ssc_json_radius_default must be set to one of 'no-access', 'read-only', 'support', 'restricted-admin' or 'admin'
+
+resources:
+  # Perimeta SSC
+  perimeta_ssc_a:
+    type: module_1_perimeta_swmu_a_child.yaml
+    properties:
+      vnf_name: { get_param: vnf_name }
+      vnf_id: { get_param: vnf_id }
+      vm_role: 'ssc'
+      vf_module_id: { get_param: vf_module_id }
+      ssc_a_name_0: { get_param: ssc_a_name_0 }
+      perimeta_image_name: { get_param: ssc_image_name }
+      perimeta_flavor_name: { get_param: ssc_flavor_name }
+      perimeta_keypair: { get_param: shared_perimeta_keypair }
+      availability_zone_0: { get_param: availability_zone_0 }
+      mgmt_net_id: { get_param: mgmt_net_id }
+      ssc_mgmt_vip_0: { get_param: ssc_mgmt_vip_0 }
+      ssc_a_mgmt_ip_0: { get_param: ssc_a_mgmt_ip_0 }
+      perimeta_sec_groups: { get_param: shared_perimeta_sec_groups }
+      int_ha_net_id: { get_param: shared_int_ha_net_id }
+      int_ha_network_plen: { get_param: shared_int_ha_net_prefix_len_v4 }
+      ssc_a_int_ha_ip_0: { get_param: ssc_a_int_ha_ip_0 }
+      ssc_b_int_ha_ip_0: { get_param: ssc_b_int_ha_ip_0 }
+      trusted_net_id: { get_param: trusted_net_id }
+      ssc_trusted_vip_0: { get_param: ssc_trusted_vip_0 }
+      ssc_a_trusted_ip_0: { get_param: ssc_a_trusted_ip_0 }
+      ssc_untrusted_vip_0: { get_param: ssc_untrusted_vip_0 }
+      ssc_untrusted_v6_vip_0: { get_param: ssc_untrusted_v6_vip_0 }
+      ssc_a_untrusted_ip_0: { get_param: ssc_a_untrusted_ip_0 }
+      ssc_a_untrusted_v6_ip_0: { get_param: ssc_a_untrusted_v6_ip_0 }
+      int_untrusted_parent_net_id: { get_param: shared_int_untrusted_parent_net_id }
+      ssc_untrusted_parent_vip_0: { get_param: ssc_untrusted_parent_vip_0 }
+      ssc_a_untrusted_parent_ip_0: { get_param: ssc_a_untrusted_parent_ip_0 }
+      perimeta_untrusted_num_vlans: { get_param: perimeta_untrusted_num_vlans }
+      perimeta_untrusted_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+      perimeta_untrusted_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+      perimeta_server_group: { get_param: shared_perimeta_ssc_server_group }
+      ssc_rf_vip_0: { get_param: ssc_rf_vip_0 }
+      ssc_a_rf_ip_0: { get_param: ssc_a_rf_ip_0 }
+      unused_port_net_id: { get_param: shared_ssc_unused_net_id }
+      perimeta_config:
+        str_replace:
+          template: {get_file: ssc_a_template.json}
+          params:
+                $HEALING_OR_INSTANTIATION: { get_param: ssc_a_json_prefix }
+                $NTP_SERVER_IP_ADDRS: { get_param: ntp_server_ip_addrs }
+                $41ORABOVE: { get_param: ssc_json_v41 }
+                $USERADIUSAUTH: { get_param: ssc_json_use_radius_authentication }
+                $RADIUS_SERVERNAME: { get_param: ssc_json_radius_servername }
+                $RADIUS_PORT: { get_param: ssc_json_radius_port }
+                $RADIUS_SECRET: { get_param: ssc_json_radius_secret }
+                $RADIUS_TIMEOUT: { get_param: ssc_json_radius_timeout }
+                $RADIUS_DEFAULT: { get_param: ssc_json_radius_default }
+                $LOCAL_MGMT_IP_ADDR: { get_param: ssc_a_mgmt_ip_0 }
+                $REMOTE_MGMT_IP_ADDR: { get_param: ssc_b_mgmt_ip_0 }
+                $MGMT_NETWORK_PLEN: { get_param: mgmt_net_plen }
+                $MGMT_NETWORK_DEFAULT_GATEWAY: { get_param: mgmt_net_default_gateway }
+                $VIRT_MGMT_IP_ADDR: { get_param: ssc_mgmt_vip_0 }
+                $VM_NAME_A: { get_param: ssc_a_vnfcname_0 }
+                $VM_NAME_B: { get_param: ssc_b_vnfcname_0 }
+                $SYSTEM_NAME: { get_param: ssc_vnfcname_0 }
+                $COMPLETION_PARAMS: ''
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_b.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_b.env
new file mode 100644 (file)
index 0000000..7806bd1
--- /dev/null
@@ -0,0 +1,115 @@
+# Environment file for instantiating
+#  - 1 x HA SSC pair - B instance
+#
+# The Perimeta B instance is only configured with sufficient
+# configuration to allow partnering from the A instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+
+parameters:
+  #
+  # General VNF parameters
+  #
+  # Unique VNF name
+ #vnf_name: tsbc0002
+  # ID of VNF
+ #vnf_id: ibcx0002
+  # Unique ID for this VF Module instance
+ #vf_module_id: ibcx
+  # Availability zone for B instances.
+ #availability_zone_1: DPA3_D2_AZ2
+
+  #
+  # Shared parameters from base template
+  #
+  # Internal HA network UUID
+ #shared_int_ha_net_id: "c8994bb0-9dbd-43e7-a8f9-658c54e35d23"
+  # Internal HA network IPv4 prefix length
+ #shared_int_ha_net_prefix_len_v4: 26
+  # Keypair UUID
+ #shared_perimeta_keypair: "atttest_key_pair"
+  # List of security groups to use for all interfaces
+ #shared_perimeta_sec_groups: [ "2412dd6a-d784-40a5-a195-7a7da2349178" ]
+  # Anti-affinity server groups to use for SSCs
+ #shared_perimeta_ssc_server_group: "308e8e5b-fac5-4964-b86c-47d8b439fe44"
+  # Unused network parameters
+ #shared_ssc_unused_net_id: "dd410626-5658-445c-8f97-1142e2d521ab"
+
+  #
+  # SSC parameters
+  #
+  # Flavor to use for creating SSC VM instance
+  ssc_flavor_name: gv.c8r16d160
+  # Glance image to use for launching SSC Perimeta instances.
+  ssc_image_name: ISBC_SBC_v4.0.40_SU12.qcow2
+
+
+
+  # Name of VM B of SSC
+ #ssc_b_name_0: ibcx0002vm002
+
+  #
+  # HA network parameters
+  #
+  # HA fixed IPv4 address to use for SSC B.
+ #ssc_b_int_ha_ip_0: 172.26.1.5
+  # HA fixed IPv4 address to use for SSC A.
+ #ssc_a_int_ha_ip_0: 172.26.1.4
+
+  #
+  # Management network parameters
+  #
+  # Management network ID
+ #mgmt_net_id: 4b5621b0-4ca4-4ea0-8511-860318c4fc3b
+  # Management virtual IPv4 address to use for SSC.
+ #ssc_mgmt_vip_0: 135.144.188.133
+  # Management fixed IPv4 address to use for SSC B.
+ #ssc_b_mgmt_ip_0: 135.144.188.136
+
+  #
+  # Trusted/core network parameters
+  #
+  # Network ID of Trusted/core network.
+ #trusted_net_id: 3d584971-4ec6-408c-92fe-3073666fbcb9
+  # Virtual IPv4 address on Trusted/core network for SSC.
+ #ssc_trusted_vip_0: 10.1.1.5
+  # Fixed IPv4 address on Trusted/core network for SSC B.
+ #ssc_b_trusted_ip_0: 10.1.1.6
+
+  #
+  # Untrusted/access network parameters
+  #
+  # Using VLANs on Untrusted/access
+ #shared_int_untrusted_parent_net_id: a0ddd409-f6a7-465a-a091-827a12402252
+  # Virtual IPv4 address on Untrusted/access parent network for SSC.
+ #ssc_untrusted_parent_vip_0: 11.0.0.6
+  # Fixed IPv4 address on Untrusted/access parent network for SSC B.
+ #ssc_b_untrusted_parent_ip_0: 11.0.0.5
+
+ #perimeta_untrusted_num_vlans: 5
+ #perimeta_untrusted_vlan_ids: ["81", "1001", "1002", "1003", "1004"] 
+ #perimeta_untrusted_vlan_networks: [95c74fbb-0650-4ac2-bd4f-7b4fb50b4b5d,aa1a5096-61fd-421b-a74b-0b4a72c47856,ced72584-9c09-4d67-9b9f-8faf4c081c45,6311c9db-c4ba-41f5-85e5-4a3cc85d7f55,79391429-9c52-44f5-b9a9-4547fec0e9d4]
+
+
+
+  # Virtual IPv4 address on Untrusted/access network for SSC.
+ #ssc_untrusted_vip_0: 12.121.106.133
+  # Virtual IPv6 address on Untrusted/access network for SSC.
+ #ssc_untrusted_v6_vip_0: 2001:1890:1001:2B38::2D:2
+  # Fixed IPv4 address on Untrusted/access network for SSC B.
+ #ssc_b_untrusted_ip_0: 12.121.106.134
+  # Fixed IPv6 address on Untrusted/access network for SSC B.
+ #ssc_b_untrusted_v6_ip_0: 2001:1890:1001:2B38::2D:3
+
+  #
+  # management/Rf network parameters
+  #
+  # Virtual IPv4 address on management/Rf network for SSC. 
+ #ssc_rf_vip_0: 135.144.188.135
+  # Fixed IPv4 address on management/Rf network for SSC B. 
+ #ssc_b_rf_ip_0: 135.144.188.136
+
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_b.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_ssc_b.yaml
new file mode 100644 (file)
index 0000000..ba2407e
--- /dev/null
@@ -0,0 +1,197 @@
+# Template for instantiating
+#  - 1 x HA SSC pair - B instance
+#
+# The Perimeta B instance is only configured with sufficient
+# configuration to allow partnering from the A instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an B side Perimeta SSC 
+
+parameters:
+  # General VNF parameters
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: ID of VNF
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  # Availability zones
+  availability_zone_1:
+    type: string
+    description: Availability zone for B instances.
+  shared_perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  shared_perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on all interfaces.
+  shared_perimeta_ssc_server_group:
+    type: string
+    description: Server group to use for these VMs
+  # Internal network parameters
+  shared_int_ha_net_id:
+    type: string
+    description: HA network id
+    constraints:
+    - custom_constraint: neutron.network
+
+  # Constraint below is copied from base module 
+  shared_int_ha_net_prefix_len_v4:
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: shared_int_ha_net_prefix_len_v4 must be between 0 and 31
+  # Unused network parameters
+  #
+  # This is used for connecting the unused 4th SSC service interface.
+  shared_ssc_unused_net_id:
+    type: string
+    description: Unused network ID
+  # Management network parameters
+  mgmt_net_id:
+    type: string
+    description: Management network ID
+    constraints:
+    - custom_constraint: neutron.network
+  # Trusted/core network parameters
+  trusted_net_id:
+    type: string
+    description: Network ID of Trusted/core network.
+    constraints:
+    - custom_constraint: neutron.network
+  # untrusted parent network parameters
+  shared_int_untrusted_parent_net_id:
+    type: string
+    description: untrusted parent network id
+  # SSC IP addresses on Untrusted/access parent network
+  ssc_untrusted_parent_vip_0:
+    type: string
+    description: Virtual IPv4 address on Untrusted/access parent network for SSC.
+  ssc_b_untrusted_parent_ip_0:
+    type: string
+    description: Fixed IPv4 address on Untrusted/access parent network for SSC B.
+  perimeta_untrusted_num_vlans:
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  # SSC parameters
+  ssc_flavor_name:
+    type: string
+    description: Flavor to use for creating SSC VM instance
+    constraints:
+    - custom_constraint: nova.flavor
+  ssc_image_name:
+    type: string
+    description: Glance image to use for launching SSC Perimeta instances.
+    constraints:
+    - custom_constraint: glance.image
+  # SSC names of the physical B instance
+  ssc_b_name_0:
+    type: string
+    description: Name of VM B of SSC
+    constraints:
+    - allowed_pattern: '[a-zA-Z0-9][a-zA-Z0-9-]{0,29}$'
+      description: VM name must be 30 characters or less.  Only alphanumeric characters plus hyphen are allowed.
+  # SSC IP addresses on management network
+  ssc_mgmt_vip_0:
+    type: string
+    description: Management virtual IP address to use for SSC.
+  ssc_b_mgmt_ip_0:
+    type: string
+    description: Management fixed IP address to use for SSC B.
+  # SSC IP addresses on internal HA network
+  ssc_b_int_ha_ip_0:
+    type: string
+    description: HA fixed IP address to use for SSC B.
+  ssc_a_int_ha_ip_0:
+    type: string
+    description: HA fixed IP address to use for SSC A.
+  # SSC IP addresses on Trusted/core network
+  ssc_trusted_vip_0:
+    type: string
+    description: Virtual IPv4 address on Trusted/core network for SSC.
+  ssc_b_trusted_ip_0:
+    type: string
+    description: Fixed IPv4 address on Trusted/core network for SSC B.
+  # SSC IP addresses on Untrusted/access network
+  ssc_untrusted_vip_0:
+    type: string
+    description: Virtual IPv4 address on Untrusted/access network for SSC.
+  ssc_untrusted_v6_vip_0:
+    type: string
+    description: Virtual IPv6 address on Untrusted/access network for SSC.
+  ssc_b_untrusted_ip_0:
+    type: string
+    description: Fixed IPv4 address on Untrusted/access network for SSC B.
+  ssc_b_untrusted_v6_ip_0:
+    type: string
+    description: Fixed IPv6 address on Untrusted/access network for SSC B.
+  #
+  # RF virtual IPv4 address on management/Rf network for SSC.  
+  #
+  ssc_rf_vip_0:
+    type: string
+    description: RF virtual IP address to use for SSC.
+
+  ssc_b_rf_ip_0:
+    type: string
+    description: RF fixed IP address to use for SSC B.
+
+resources:
+  # Perimeta SSC
+  perimeta_ssc_b:
+    type: module_1_perimeta_swmu_b_child.yaml
+    properties:
+      vnf_name: { get_param: vnf_name }
+      vnf_id: { get_param: vnf_id }
+      vm_role: 'ssc'
+      vf_module_id: { get_param: vf_module_id }
+      ssc_b_name_0: { get_param: ssc_b_name_0 }
+      perimeta_image_name: { get_param: ssc_image_name }
+      perimeta_flavor_name: { get_param: ssc_flavor_name }
+      perimeta_keypair: { get_param: shared_perimeta_keypair }
+      availability_zone_1: { get_param: availability_zone_1 }
+      mgmt_net_id: { get_param: mgmt_net_id }
+      ssc_mgmt_vip_0: { get_param: ssc_mgmt_vip_0 }
+      ssc_b_mgmt_ip_0: { get_param: ssc_b_mgmt_ip_0 }
+      perimeta_sec_groups: { get_param: shared_perimeta_sec_groups }
+      int_ha_net_id: { get_param: shared_int_ha_net_id }
+      int_ha_network_plen: { get_param: shared_int_ha_net_prefix_len_v4 }
+      ssc_b_int_ha_ip_0: { get_param: ssc_b_int_ha_ip_0 }
+      ssc_a_int_ha_ip_0: { get_param: ssc_a_int_ha_ip_0 }
+      trusted_net_id: { get_param: trusted_net_id }
+      ssc_trusted_vip_0: { get_param: ssc_trusted_vip_0 }
+      ssc_b_trusted_ip_0: { get_param: ssc_b_trusted_ip_0 }
+      ssc_untrusted_vip_0: { get_param: ssc_untrusted_vip_0 }
+      ssc_untrusted_v6_vip_0: { get_param: ssc_untrusted_v6_vip_0 }
+      ssc_b_untrusted_ip_0: { get_param: ssc_b_untrusted_ip_0 }
+      ssc_b_untrusted_v6_ip_0: { get_param: ssc_b_untrusted_v6_ip_0 }
+      int_untrusted_parent_net_id: { get_param: shared_int_untrusted_parent_net_id }
+      ssc_untrusted_parent_vip_0: { get_param: ssc_untrusted_parent_vip_0 }
+      ssc_b_untrusted_parent_ip_0: { get_param: ssc_b_untrusted_parent_ip_0 }
+      perimeta_untrusted_num_vlans: { get_param: perimeta_untrusted_num_vlans }
+      perimeta_untrusted_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+      perimeta_untrusted_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+      perimeta_server_group: { get_param: shared_perimeta_ssc_server_group }
+      ssc_rf_vip_0: { get_param: ssc_rf_vip_0 }
+      ssc_b_rf_ip_0: { get_param: ssc_b_rf_ip_0 }
+      unused_port_net_id: { get_param: shared_ssc_unused_net_id }
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_swmu_a_child.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_swmu_a_child.yaml
new file mode 100644 (file)
index 0000000..8be774c
--- /dev/null
@@ -0,0 +1,313 @@
+# Heat template which intstantiates an A side Perimeta SSC instance with
+# 6 vNICs. 
+#
+# This is designed to be included in a higher level template.
+#
+# This template puts the Perimeta configuration in place using userdata
+# injected via OpenStack's ConfigDrive mechanism.
+#
+# Host anti-affinity is achieved using different availability zones for
+# the Perimeta instance or server group anti-affinity if they are in the
+# same availability zone.
+#
+# Template requires Juno or above and has been tested on Kilo.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an A side Perimeta SSC instance with 6 vNICs as part of a nested template
+
+parameters:
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: VNF ID of this deployment
+  vm_role:
+    type: string
+    description: Role of these VMs
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  ssc_a_name_0:
+    type: string
+    description: Name of Perimeta VM A instance 
+  perimeta_image_name:
+    type: string
+    description: Glance image for Perimeta instance
+  perimeta_flavor_name:
+    type: string
+    description: Flavor to use for creating VM instances
+  perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  availability_zone_0:
+    # Can be commented out along with references if always using a single availability zone
+    type: string
+    description: Availability zone for A instances.
+  mgmt_net_id:
+    type: string
+    description: Management network id
+  ssc_mgmt_vip_0:
+    type: string
+    description: Management virtual IP address.
+  ssc_a_mgmt_ip_0:
+    type: string
+    description: Fixed IP address to use as management IP of A instance.
+  int_ha_net_id:
+    type: string
+    description: HA network id
+  int_ha_network_plen:
+  # Constraint copied from base module 
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: int_ha_network_plen must be between 0 and 31
+  ssc_a_int_ha_ip_0:
+    type: string
+    description: Fixed IP address to use as HA IP of A instance.
+  ssc_b_int_ha_ip_0:
+    type: string
+    description: Fixed IP address to use as HA IPs of B instance.
+  trusted_net_id:
+    type: string
+    description: Trusted/core network UUID
+  ssc_trusted_vip_0:
+    type: string
+    description: Trusted/core virtual IP address.
+  ssc_a_trusted_ip_0:
+    type: string
+    description: Fixed IP address to use as Trusted/core fixed IPs of A instance.
+  perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on trusted interfaces.
+  ssc_untrusted_vip_0:
+    type: string
+    description: Untrusted/access virtual IP address
+  ssc_untrusted_v6_vip_0:
+    type: string
+    description: Untrusted/access alternate virtual IP address
+  ssc_a_untrusted_ip_0:
+    type: string
+    description: Fixed IP address to use as Untrusted/access fixed IP of A instance.
+  ssc_a_untrusted_v6_ip_0:
+    type: string
+    description: Fixed IP address to use as Untrusted/access alternate fixed IP of A instance.
+  int_untrusted_parent_net_id:
+    type: string
+    description: internal Untrusted/access parent network id
+  ssc_untrusted_parent_vip_0:
+    type: string
+    description: Untrusted/access parent virtual IP address
+  ssc_a_untrusted_parent_ip_0:
+    type: string
+    description: Fixed IP address to use as Untrusted/access fixed IP of A parent instance.
+  perimeta_untrusted_num_vlans:
+    # constraint copied from parent module
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  unused_port_net_id:
+    type: string
+    description: Service network unused port network UUID
+  ssc_rf_vip_0:
+    type: string
+    description: RF virtual IP address to use for SSC.
+  ssc_a_rf_ip_0:
+    type: string
+    description: RF fixed IP address to use for SSC A.
+  perimeta_server_group:
+    type: string
+    description: Server group to use for these VMs
+  perimeta_config:
+    type: string
+    description: JSON orchestration template configuration for instance.
+
+resources:
+  # Perimeta management ports
+  perimeta_ssc_a_mgmt_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_mgmt_0_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_a_name_0 }
+      network: { get_param: mgmt_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_a_mgmt_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_mgmt_vip_0 }
+
+  # Perimeta HA ports
+  perimeta_ssc_a_ha_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_ha_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_a_name_0 }
+      network: { get_param: int_ha_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_a_int_ha_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+
+  # Perimeta Trusted/core service network ports
+  #
+  # Dual stack core network 
+  # - if only IPv4 required comment out second entry in fixed_ips and allowed_addess_pairs parameters.
+  # - if only IPv6 required comment out first entry in fixed_ips and allowed_addess_pairs parameters.
+  perimeta_ssc_a_trusted_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_trusted_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_a_name_0 }
+      network: { get_param: trusted_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_a_trusted_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_trusted_vip_0 }
+
+  # Perimeta Untrusted/access service network ports
+  # VLAN being used on this service interface.  
+  # The parent network port is used to anchor the VLANs and is not used to 
+  # route actual traffic for the service interface. This means that we can  
+  # create a dummy network in the base module and use that instead of the  
+  # real untrusted network 
+
+  perimeta_ssc_a_untrusted_parent_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_untrusted_parent_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_a_name_0 }
+      network: { get_param: int_untrusted_parent_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_a_untrusted_parent_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_untrusted_parent_vip_0 }
+
+
+  # Contrail VLAN subinterfaces
+  perimeta_ssc_a_untrusted_0_vlan_ports:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: { get_param: perimeta_untrusted_num_vlans }
+      resource_def:
+        type: vlan_subinterface_dual.yaml
+        properties:
+          perimeta_subinterface_instance_index: "%index%"
+          perimeta_subinterface_name_prefix:
+            str_replace:
+              template: $VNF_NAME_$VM_untrusted_port_vlan
+              params:
+                $VNF_NAME : { get_param: vnf_name }               
+                $VM: { get_param: ssc_a_name_0 }
+          perimeta_parent_interface: { get_resource: perimeta_ssc_a_untrusted_parent_0_port }
+          perimeta_mac_address: { get_attr: [ perimeta_ssc_a_untrusted_parent_0_port, mac_address ] }
+          perimeta_ip_0: { get_param: ssc_a_untrusted_ip_0 }
+          perimeta_v6_ip_0: { get_param: ssc_a_untrusted_v6_ip_0 }
+          perimeta_vip_0: { get_param: ssc_untrusted_vip_0 }
+          perimeta_v6_vip_0: { get_param: ssc_untrusted_v6_vip_0 }
+          perimeta_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+          perimeta_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+
+  # Perimeta Rf service network ports
+  #
+  # This uses the management network and is IPv4 only
+  perimeta_ssc_a_mgmt_1_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_mgmt_1_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_a_name_0 }
+      network: { get_param: mgmt_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_a_rf_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_rf_vip_0 }
+
+  # need the unused port to balance out the NICs
+  perimeta_ssc_a_unused_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_unused_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_a_name_0 }
+      network: { get_param: unused_port_net_id }
+
+  # Add any additional service ports here.
+
+  perimeta_ssc_a_server_0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: ssc_a_name_0 }
+      image: { get_param: perimeta_image_name }
+      flavor: { get_param: perimeta_flavor_name }
+      key_name: { get_param: perimeta_keypair }
+      scheduler_hints: { group: { get_param: perimeta_server_group } }
+      metadata:
+        'vnf_name': { get_param: vnf_name }
+        'vnf_id': { get_param: vnf_id }
+        'vm_role':
+            str_replace:
+              template: $ROLE_a
+              params:
+                $ROLE: { get_param: vm_role }
+        'vf_module_id': { get_param: vf_module_id }
+        'msw_template_version': '17.07.04 - 2017-09-01'
+      personality:
+        '/opt/MetaSwitch/init/custom.ini': { get_file: custom.ini }
+      networks:
+        - port: { get_resource: perimeta_ssc_a_mgmt_0_port }
+        - port: { get_resource: perimeta_ssc_a_ha_0_port }
+        - port: { get_resource: perimeta_ssc_a_trusted_0_port }
+        - port: { get_resource: perimeta_ssc_a_untrusted_parent_0_port }
+        - port: { get_resource: perimeta_ssc_a_mgmt_1_port }
+        - port: { get_resource: perimeta_ssc_a_unused_0_port }
+      availability_zone: { get_param: availability_zone_0 }
+      config_drive: True
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          template: { get_param: perimeta_config }
+          params:
+            $MGMT_MACADDR: { get_attr: [perimeta_ssc_a_mgmt_0_port, mac_address] }
+            $HA_MACADDR: { get_attr: [perimeta_ssc_a_ha_0_port, mac_address] }
+            $TRUSTED_MACADDR: { get_attr: [perimeta_ssc_a_trusted_0_port, mac_address] }
+            $UNTRUSTED_MACADDR: { get_attr: [perimeta_ssc_a_untrusted_parent_0_port, mac_address] } 
+            $SERV3_MACADDR: { get_attr: [perimeta_ssc_a_mgmt_1_port, mac_address] }
+            $SERV4_MACADDR: { get_attr: [perimeta_ssc_a_unused_0_port, mac_address] }
+            $LOCAL_HA_IP_ADDR: { get_param: ssc_a_int_ha_ip_0 }
+            $REMOTE_HA_IP_ADDR: { get_param: ssc_b_int_ha_ip_0 }
+            $HA_NETWORK_PLEN: { get_param: int_ha_network_plen }
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_swmu_b_child.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_1_perimeta_swmu_b_child.yaml
new file mode 100644 (file)
index 0000000..a0ac2fe
--- /dev/null
@@ -0,0 +1,321 @@
+# Heat template which intstantiates an B side Perimeta SSC instance with
+# 6 vNICs. 
+#
+# This is designed to be included in a higher level template.
+#
+# This template puts the Perimeta configuration in place using userdata
+# injected via OpenStack's ConfigDrive mechanism.
+#
+# Host anti-affinity is achieved using different availability zones for
+# the Perimeta instance or server group anti-affinity if they are in the
+# same availability zone.
+#
+# Template requires Juno or above and has been tested on Kilo.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an B side Perimeta SSC instance with 6 vNICs as part of a nested template
+
+parameters:
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: VNF ID of this deployment
+  vm_role:
+    type: string
+    description: Role of these VMs
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  ssc_b_name_0:
+    type: string
+    description: Name of Perimeta VM B instance 
+  perimeta_image_name:
+    type: string
+    description: Glance image for Perimeta instance
+  perimeta_flavor_name:
+    type: string
+    description: Flavor to use for creating VM instances
+  perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  availability_zone_1:
+    # Can be commented out along with references if always using a single availability zone
+    type: string
+    description: Availability zone for B instances.  May be the same as A instance.
+  mgmt_net_id:
+    type: string
+    description: Management network id
+  ssc_mgmt_vip_0:
+    type: string
+    description: Management virtual IP address.
+  ssc_b_mgmt_ip_0:
+    type: string
+    description: Fixed IP address to use as management IP of B instance.
+  int_ha_net_id:
+    type: string
+    description: HA network id
+  int_ha_network_plen:
+  # Constraint copied from base module 
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: int_ha_network_plen must be between 0 and 31
+  ssc_b_int_ha_ip_0:
+    type: string
+    description: Fixed IP address to use as HA IP of B instance.
+  ssc_a_int_ha_ip_0:
+    type: string
+    description: Fixed IP address to use as HA IPs of A instance.
+  trusted_net_id:
+    type: string
+    description: Trusted/core network UUID
+  ssc_trusted_vip_0:
+    type: string
+    description: Trusted/core virtual IP address.
+  ssc_b_trusted_ip_0:
+    type: string
+    description: Fixed IP address to use as Trusted/core fixed IPs of B instance.
+  perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on trusted interfaces.
+  ssc_untrusted_vip_0:
+    type: string
+    description: Untrusted/access virtual IP address
+  ssc_untrusted_v6_vip_0:
+    type: string
+    description: Untrusted/access alternate virtual IP address
+  ssc_b_untrusted_ip_0:
+    type: string
+    description: Fixed IP address to use as Untrusted/access fixed IP of B instance.
+  ssc_b_untrusted_v6_ip_0:
+    type: string
+    description: Fixed IP address to use as Untrusted/access alternate fixed IP of B instance.
+  int_untrusted_parent_net_id:
+    type: string
+    description: internal Untrusted/access parent network id
+  ssc_untrusted_parent_vip_0:
+    type: string
+    description: Untrusted/access parent virtual IP address
+  ssc_b_untrusted_parent_ip_0:
+    type: string
+    description: Fixed IP address to use as Untrusted/access fixed IP of B parent instance.
+  perimeta_untrusted_num_vlans:
+    # constraint copied from parent module
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  unused_port_net_id:
+    type: string
+    description: Service network unused port network UUID
+  ssc_rf_vip_0:
+    type: string
+    description: RF virtual IP address to use for SSC.
+  ssc_b_rf_ip_0:
+    type: string
+    description: RF fixed IP address to use for SSC B.
+  perimeta_server_group:
+    type: string
+    description: Server group to use for these VMs
+
+resources:
+  # Perimeta management ports
+  perimeta_ssc_b_mgmt_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_mgmt_0_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_b_name_0 }
+      network: { get_param: mgmt_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_b_mgmt_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_mgmt_vip_0 }
+
+  # Perimeta HA ports
+  perimeta_ssc_b_ha_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_ha_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_b_name_0 }
+      network: { get_param: int_ha_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_b_int_ha_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+
+  # Perimeta Trusted/core service network ports
+  #
+  # Dual stack core network 
+  # - if only IPv4 required comment out second entry in fixed_ips and allowed_addess_pairs parameters.
+  # - if only IPv6 required comment out first entry in fixed_ips and allowed_addess_pairs parameters.
+  perimeta_ssc_b_trusted_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_trusted_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_b_name_0 }
+      network: { get_param: trusted_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_b_trusted_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_trusted_vip_0 }
+
+  # Perimeta Untrusted/access service network ports
+  # VLAN being used on this service interface.  
+  # The parent network port is used to anchor the VLANs and is not used to 
+  # route actual traffic for the service interface. This means that we can  
+  # create a dummy network in the base module and use that instead of the  
+  # real untrusted network 
+
+  perimeta_ssc_b_untrusted_parent_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_untrusted_parent_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_b_name_0 }
+      network: { get_param: int_untrusted_parent_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_b_untrusted_parent_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_untrusted_parent_vip_0 }
+
+
+  # Contrail VLAN subinterfaces
+  perimeta_ssc_b_untrusted_0_vlan_ports:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: { get_param: perimeta_untrusted_num_vlans }
+      resource_def:
+        type: vlan_subinterface_dual.yaml
+        properties:
+          perimeta_subinterface_instance_index: "%index%"
+          perimeta_subinterface_name_prefix:
+            str_replace:
+              template: $VNF_NAME_$VM_untrusted_port_vlan
+              params:
+                $VNF_NAME : { get_param: vnf_name }               
+                $VM: { get_param: ssc_b_name_0 }
+          perimeta_parent_interface: { get_resource: perimeta_ssc_b_untrusted_parent_0_port }
+          perimeta_mac_address: { get_attr: [ perimeta_ssc_b_untrusted_parent_0_port, mac_address ] }
+          perimeta_ip_0: { get_param: ssc_b_untrusted_ip_0 }
+          perimeta_v6_ip_0: { get_param: ssc_b_untrusted_v6_ip_0 }
+          perimeta_vip_0: { get_param: ssc_untrusted_vip_0 }
+          perimeta_v6_vip_0: { get_param: ssc_untrusted_v6_vip_0 }
+          perimeta_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+          perimeta_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+
+  # Perimeta Rf service network ports
+  #
+  # This uses the management network and is IPv4 only
+  perimeta_ssc_b_mgmt_1_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_mgmt_1_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_b_name_0 }
+      network: { get_param: mgmt_net_id }
+      fixed_ips:
+        - ip_address: { get_param: ssc_b_rf_ip_0 }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: ssc_rf_vip_0 }
+
+  # need the unused port to balance out the NICs
+  perimeta_ssc_b_unused_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_unused_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: ssc_b_name_0 }
+      network: { get_param: unused_port_net_id }
+
+  # Add any additional service ports here.
+
+  perimeta_ssc_b_server_0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: ssc_b_name_0 }
+      image: { get_param: perimeta_image_name }
+      flavor: { get_param: perimeta_flavor_name }
+      key_name: { get_param: perimeta_keypair }
+      scheduler_hints: { group: { get_param: perimeta_server_group } }
+      metadata:
+        'vnf_name': { get_param: vnf_name }
+        'vnf_id': { get_param: vnf_id }
+        'vm_role':
+            str_replace:
+              template: $ROLE_b
+              params:
+                $ROLE: { get_param: vm_role }
+        'vf_module_id': { get_param: vf_module_id }
+        'msw_template_version': '17.07.04 - 2017-09-01'
+      networks:
+        - port: { get_resource: perimeta_ssc_b_mgmt_0_port }
+        - port: { get_resource: perimeta_ssc_b_ha_0_port }
+        - port: { get_resource: perimeta_ssc_b_trusted_0_port }
+        - port: { get_resource: perimeta_ssc_b_untrusted_parent_0_port }
+        - port: { get_resource: perimeta_ssc_b_mgmt_1_port }
+        - port: { get_resource: perimeta_ssc_b_unused_0_port }
+      availability_zone: { get_param: availability_zone_1 }
+      config_drive: True
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          template: |
+            {
+              "vnic_assignment": {
+               "IBG1mgmt": {"mac": "$MGMT_MACADDR"},
+               "IPG1": {"mac": "$HA_MACADDR"},
+               "RPG1": {"mac": "$TRUSTED_MACADDR"},
+               "RPG2": {"mac": "$UNTRUSTED_MACADDR"},
+               "RPG3": {"mac": "$SERV3_MACADDR"},
+               "RPG4": {"mac": "$SERV4_MACADDR"}
+             },
+             "ip_ha_local": "$LOCAL_HA_IP_ADDR",
+             "ip_ha_remote": "$REMOTE_HA_IP_ADDR",
+             "ip_ha_plen": "$HA_NETWORK_PLEN"
+            }
+          params:
+            $MGMT_MACADDR: { get_attr: [perimeta_ssc_b_mgmt_0_port, mac_address] }
+            $HA_MACADDR: { get_attr: [perimeta_ssc_b_ha_0_port, mac_address] }
+            $TRUSTED_MACADDR: { get_attr: [perimeta_ssc_b_trusted_0_port, mac_address] }
+            $UNTRUSTED_MACADDR: { get_attr: [perimeta_ssc_b_untrusted_parent_0_port, mac_address] } 
+            $SERV3_MACADDR: { get_attr: [perimeta_ssc_b_mgmt_1_port, mac_address] }
+            $SERV4_MACADDR: { get_attr: [perimeta_ssc_b_unused_0_port, mac_address] }
+            $LOCAL_HA_IP_ADDR: { get_param: ssc_b_int_ha_ip_0 }
+            $REMOTE_HA_IP_ADDR: { get_param: ssc_a_int_ha_ip_0 }
+            $HA_NETWORK_PLEN: { get_param: int_ha_network_plen }
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_a.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_a.env
new file mode 100644 (file)
index 0000000..015a95f
--- /dev/null
@@ -0,0 +1,206 @@
+# Environment file for instantiating
+#  - 1 x HA RTP MSC pair - A instance
+#
+# During initial instantiation, the Perimeta A instance is configured with
+# minimal configuration, commissioned as an RTP MSC and started.  In addition, it
+# will attempt partnering with the B instance when it becomes availble.
+#
+# During healing, the Perimeta A instance is only configured with sufficient
+# configuration to allow partnering from the B instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+# A perimeta deployment can support one or more RTP MSCs. The parameter
+# rtp_msc_a_index is used to make sure that the appropriate settings for this
+# RTP MSC are extracted from the various address and server group arrays.
+#
+
+parameters:
+  #
+  # General VNF parameters
+  #
+  # Unique VNF name
+ #vnf_name: tsbc0002
+  # ID of VNF
+ #vnf_id: ibcx0002
+  # Unique ID for this VF Module instance
+ #vf_module_id: ibcx
+  # Availability zone for A instances.
+ #availability_zone_0: DPA3_D2_AZ1
+  #
+  # Shared parameters from base template
+  #
+  # Internal HA network UUID
+ #shared_int_ha_net_id: "c8994bb0-9dbd-43e7-a8f9-658c54e35d23"
+  # Internal HA network IPv4 prefix length
+ #shared_int_ha_net_prefix_len_v4: 26
+  # Keypair UUID
+ #shared_perimeta_keypair: "atttest_key_pair"
+  # List of security groups to use for all interfaces
+ #shared_perimeta_sec_groups: [ "2412dd6a-d784-40a5-a195-7a7da2349178" ]
+  # Anti-affinity server groups to use for RTP MSCs
+ #shared_perimeta_rtp_msc_server_groups: ["be4b3fa9-112d-454e-952f-146e45202130","bcdd96eb-b3fc-42ee-9ae8-e13ad0a4f0b8","b293e29f-c101-4b4e-80d6-7a1b4173e4e2","fd791679-6b71-4c3a-b8b7-1d586559976e","98171a69-8956-4ce6-b303-1a15444ee47b","a35ba80b-c0c2-4c29-a9ae-4df26d33323f","2192327a-6a31-43b6-84c4-49abc597b4e6","b2843fa5-9f25-49b0-9dc6-5c1c0472e8d4"]
+
+  #
+  # RTP MSC parameters
+  #
+  # Index of RTP MSC to instantiate / heal. This is used as the index into the
+  # various address and service group arrays to get the information associated
+  # with that specific instance
+ #rtp_msc_a_index: 0
+  # Flavor to use for creating RTP MSC VM instance
+  rtp_msc_flavor_name: gv.c8r16d160
+  # Glance image to use for launching RTP MSC Perimeta instances.
+  rtp_msc_image_name: ISBC_SBC_v4.0.40_SU12.qcow2
+
+
+  # VNFC of the RTP MSC VIP
+ #rtp_msc_vnfcnames: ["ibcx0002vm003msc001pair","ibcx0002vm005msc001pair","ibcx0002vm007msc001pair","ibcx0002vm009msc001pair","ibcx0002vm011msc001pair","ibcx0002vm013msc001pair","ibcx0002vm015msc001pair","ibcx0002vm017msc001pair"]
+  # VNFCs of the servers
+ #rtp_msc_a_vnfcnames: ["ibcx0002vm003msc001","ibcx0002vm005msc001","ibcx0002vm007msc001","ibcx0002vm009msc001","ibcx0002vm011msc001","ibcx0002vm013msc001","ibcx0002vm015msc001","ibcx0002vm017msc001"]
+ #rtp_msc_b_vnfcnames: ["ibcx0002vm004msc001","ibcx0002vm006msc001","ibcx0002vm008msc001","ibcx0002vm010msc001","ibcx0002vm012msc001","ibcx0002vm014msc001","ibcx0002vm016msc001","ibcx0002vm018msc001"]
+
+  # Name of VM A of RTP MSC
+ #rtp_msc_a_names: ["ibcx0002vm003","ibcx0002vm005","ibcx0002vm007","ibcx0002vm009","ibcx0002vm011","ibcx0002vm013","ibcx0002vm015","ibcx0002vm017"]
+
+  #
+  # HA network parameters
+  #
+  # HA fixed IPv4 address to use for RTP MSC A.
+ #rtp_msc_a_int_ha_ips: ["172.26.1.6","172.26.1.8","172.26.1.10","172.26.1.12","172.26.1.14","172.26.1.16","172.26.1.18","172.26.1.20"]
+  # HA fixed IPv4 address to use for RTP MSC B.
+ #rtp_msc_b_int_ha_ips: ["172.26.1.7","172.26.1.9","172.26.1.11","172.26.1.13","172.26.1.15","172.26.1.17","172.26.1.19","172.26.1.21"]
+
+  #
+  # Management network parameters
+  #
+  # Management network ID
+ #mgmt_net_id: 4b5621b0-4ca4-4ea0-8511-860318c4fc3b
+  # Management network prefix length
+ #mgmt_net_plen: 26
+  # Default gateway for management network
+ #mgmt_net_default_gateway: 135.144.188.131
+  # Management virtual IPv4 address to use for RTP MSC.
+ #rtp_msc_mgmt_vips: ["135.144.188.139","135.144.188.142","135.144.188.145","135.144.188.148","135.144.188.151","135.144.188.154","135.144.188.157","135.144.188.160"]
+  # Management fixed IPv4 address to use for RTP MSC A.
+ #rtp_msc_a_mgmt_ips: ["135.144.188.138","135.144.188.141","135.144.188.144","135.144.188.147","135.144.188.150","135.144.188.153","135.144.188.156","135.144.188.159"]
+  # Management fixed IPv4 address to use for RTP MSC B.
+ #rtp_msc_b_mgmt_ips: ["135.144.188.140","135.144.188.143","135.144.188.146","135.144.188.149","135.144.188.152","135.144.188.155","135.144.188.158","135.144.188.161"]
+
+  #
+  # Trusted/core network parameters
+  #
+  # Network ID of Trusted/core network.
+ #trusted_net_id: 3d584971-4ec6-408c-92fe-3073666fbcb9
+  # Virtual IPv4 address on Trusted/core network for RTP MSC.
+ #rtp_msc_trusted_vips: ["10.1.1.8","10.1.1.11","10.1.1.14","10.1.1.17","10.1.1.20","10.1.1.23","10.1.1.26","10.1.1.29"]
+  # Fixed IPv4 address on Trusted/core network for RTP MSC A.
+ #rtp_msc_a_trusted_ips: ["10.1.1.7","10.1.1.10","10.1.1.13","10.1.1.16","10.1.1.19","10.1.1.22","10.1.1.25","10.1.1.28"]
+
+  #
+  # Untrusted/access network parameters
+  #
+  # Using VLANs on Untrusted/access
+ #shared_int_untrusted_parent_net_id: a0ddd409-f6a7-465a-a091-827a12402252
+  # Virtual IPv4 address on Untrusted/access parent network for RTP MSC.
+ #rtp_msc_untrusted_parent_vips: ["11.0.0.9","11.0.0.12","11.0.0.15","11.0.0.18","11.0.0.21","11.0.0.24","11.0.0.27","11.0.0.30"]
+  # Fixed IPv4 address on Untrusted/access parent network for RTP MSC A.
+ #rtp_msc_a_untrusted_parent_ips: ["11.0.0.7","11.0.0.10","11.0.0.13","11.0.0.16","11.0.0.19","11.0.0.22","11.0.0.25","11.0.0.28"]
+
+ #perimeta_untrusted_num_vlans: 5
+ #perimeta_untrusted_vlan_ids: ["81", "1001", "1002", "1003", "1004"] 
+ #perimeta_untrusted_vlan_networks: [95c74fbb-0650-4ac2-bd4f-7b4fb50b4b5d,aa1a5096-61fd-421b-a74b-0b4a72c47856,ced72584-9c09-4d67-9b9f-8faf4c081c45,6311c9db-c4ba-41f5-85e5-4a3cc85d7f55,79391429-9c52-44f5-b9a9-4547fec0e9d4]
+
+
+
+  # Virtual IPv4 address on Untrusted/access network for RTP MSC.
+ #rtp_msc_untrusted_vips: ["12.121.106.136","12.121.106.139","12.121.106.142","12.121.106.145","12.121.106.148","12.121.106.151","12.121.106.154","12.121.106.157"]
+  # Virtual IPv6 address on Untrusted/access network for RTP MSC.
+ #rtp_msc_untrusted_v6_vips: ["2001:1890:1001:2B38::2D:5","2001:1890:1001:2B38::2D:8","2001:1890:1001:2B38::2D:B","2001:1890:1001:2B38::2D:E","2001:1890:1001:2B38::2D:11","2001:1890:1001:2B38::2D:14","2001:1890:1001:2B38::2D:17","2001:1890:1001:2B38::2D:1A"]
+  # Fixed IPv4 address on Untrusted/access network for RTP MSC A.
+ #rtp_msc_a_untrusted_ips: ["12.121.106.135","12.121.106.138","12.121.106.141","12.121.106.144","12.121.106.147","12.121.106.150","12.121.106.153","12.121.106.156"]
+  # Fixed IPv6 address on Untrusted/access network for RTP MSC A.
+ #rtp_msc_a_untrusted_v6_ips: ["2001:1890:1001:2B38::2D:4","2001:1890:1001:2B38::2D:7","2001:1890:1001:2B38::2D:A","2001:1890:1001:2B38::2D:D","2001:1890:1001:2B38::2D:10","2001:1890:1001:2B38::2D:13","2001:1890:1001:2B38::2D:16","2001:1890:1001:2B38::2D:19"]
+
+  # 
+  # A side healing / instantiation parameters
+  #
+  #
+  # Healing or instantiation? This is used to ensure that the json file passed
+  # to the VF is correct for the operation being carried out.
+  # This parameter must be set to one of the following values
+  # - single whitespace character
+  # - the string // not required for healing
+  # Simply uncomment the required value from the pair below
+  #
+  # Note that we need to do this because we cannot parmeterize the file name
+  # passed to get_file (which would be the more obvious way to do this)
+  #
+  # Uncomment for instantiation, comment for healing
+  rtp_msc_a_json_prefix: " "
+  # Uncomment for healing, comment for instantiation
+  # rtp_msc_a_json_prefix: "// healing, not required "
+
+  # Orchestrating a perimeta version 41 or above. Used to ensure that the
+  # tags in the json file are supported by the version of perimeta that is
+  # being instantiated.
+  # This parameter must be set to one of the following values
+  # - single whitespace character
+  # - the string // older perimeta, parameter not required
+  # Simply uncomment the required value from the pair below
+  #
+  # Note that we need to do this because we cannot parmeterize the file name
+  # passed to get_file (which would be the more obvious way to do this)
+  #
+  #
+  # Uncomment for V4.1.00 or above, comment for V4.0.40
+  rtp_msc_json_v41: " "
+  # Uncomment for V4.0.40, comment for V4.1.00 or above
+  # rtp_msc_json_v41: "// older perimeta, parameter not required "
+
+  # Using Radius for user account authentication? Used to ensure that the json
+  # file is configured correctly depending on whether we are using Radius or
+  # local authentication
+  #
+  # This parameter must be set to one of the following values
+  # - single whitespace character
+  # - the string // older perimeta, parameter not required
+  # Simply uncomment the required value from the pair below
+  #
+  # Note that we need to do this because we cannot parmeterize the file name
+  # passed to get_file (which would be the more obvious way to do this)
+  #
+  # Uncomment for Local authentication
+ #rtp_msc_json_use_radius_authentication: "// not using Radius "
+  # Uncomment for Radius authentication
+ ## rtp_msc_json_use_radius_authentication: " "
+
+  # 
+  # Radius server parameters
+  #
+  #
+  # IP Address or hostname of RADIUS Server.
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #rtp_msc_json_radius_servername: "192.0.0.1"
+  # Radius Server port configuration - value between 0 and 65535
+  # Normal Radius Server port is 1812
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #rtp_msc_json_radius_port: 1812
+  # Radius Server shared secret
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #rtp_msc_json_radius_secret: "TopSecret"
+  # Radius Server connection timeout - value between 1 and 60
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #rtp_msc_json_radius_timeout: 3
+  # Radius Server default user authentication level.
+  # must be set to one of 'no-access', 'read-only', 'support', 'restricted-admin' or 'admin'
+  # Value is ignored if RADIUS is not being used but it still must be set
+ #rtp_msc_json_radius_default: "no-access"
+
+  # 
+  # NTP server IPv4 addresses, separated by commas.  These must be accessible from the management network
+  # 
+ #ntp_server_ip_addrs: 132.201.84.13,155.179.58.11,155.179.59.249,155.179.82.25
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_a.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_a.yaml
new file mode 100644 (file)
index 0000000..fbadb47
--- /dev/null
@@ -0,0 +1,313 @@
+# Template for instantiating
+#  - 1 x HA RTP MSC pair - A instance
+#
+# During initial instantiation, the Perimeta A instance is configured with
+# minimal configuration, commissioned as an RTP MSC and started.  In addition, it
+# will attempt partnering with the B instance when it becomes availble.
+#
+# During healing, the Perimeta A instance is only configured with sufficient
+# configuration to allow partnering from the B instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+# A perimeta deployment can support one or more RTP MSCs. The parameter
+# rtp_msc_a_index is used to make sure that the appropriate settings for this
+# RTP MSC are extracted from the various address and server group arrays.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an A side Perimeta RTP MSC and optionally partner it with the corresponding B side
+
+parameters:
+  # General VNF parameters
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: ID of VNF
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  # Availability zones
+  availability_zone_0:
+    type: string
+    description: Availability zone for A instances.
+  shared_perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  shared_perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on all interfaces.
+  shared_perimeta_rtp_msc_server_groups:
+    type: comma_delimited_list
+    description: Server group to use for these VMs
+  # Internal network parameters
+  shared_int_ha_net_id:
+    type: string
+    description: HA network id
+    constraints:
+    - custom_constraint: neutron.network
+
+  # Constraint below is copied from base module 
+  shared_int_ha_net_prefix_len_v4:
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: shared_int_ha_net_prefix_len_v4 must be between 0 and 31
+  # Management network parameters
+  mgmt_net_id:
+    type: string
+    description: Management network ID
+    constraints:
+    - custom_constraint: neutron.network
+  mgmt_net_plen:
+    type: number
+    description: Management network prefix length
+    constraints:
+    - range: { min: 0, max: 32 }
+      description: mgmt_net_plen must be between 0 and 32
+  mgmt_net_default_gateway:
+    type: string
+    description: Default gateway for management network
+  # Trusted/core network parameters
+  trusted_net_id:
+    type: string
+    description: Network ID of Trusted/core network.
+    constraints:
+    - custom_constraint: neutron.network
+  # untrusted parent network parameters
+  shared_int_untrusted_parent_net_id:
+    type: string
+    description: untrusted parent network id
+  # RTP MSC IP addresses on Untrusted/access parent network
+  rtp_msc_untrusted_parent_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv4 addresses on Untrusted/access parent network for RTP MSC.
+  rtp_msc_a_untrusted_parent_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv4 addresses on Untrusted/access parent network for RTP MSC A.
+  perimeta_untrusted_num_vlans:
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  # RTP MSC parameters
+  rtp_msc_flavor_name:
+    type: string
+    description: Flavor to use for creating RTP MSC VM instance
+    constraints:
+    - custom_constraint: nova.flavor
+  rtp_msc_image_name:
+    type: string
+    description: Glance image to use for launching RTP MSC Perimeta instances.
+    constraints:
+    - custom_constraint: glance.image
+  # Index of the instance to instantiate / heal. This is used to access the
+  # various address / name / server group arrays to extract the information
+  # specific to this server.
+  #
+  # The constraints need to be co-ordinated with the parameter
+  # perimeta_max_rtp_msc_count in the base template. Unfortunately we cannot
+  # use a get_param call to get a constraint so it has to be a number.
+  #
+  # We also need to account for the fact that arrays start at zero and we are
+  # specifying the index in this parameter so the maximum constraint is 1 less
+  # than the maximum in the base template
+  rtp_msc_a_index:
+    type: number
+    description: Index of RTP MSC to instantiate / heal.
+    constraints:
+    - range: { min: 0, max: 19 }
+      description: rtp_msc_a_index must be between 0 and 19
+  # Hostames of the VIP and servers
+  rtp_msc_vnfcnames:
+    type: comma_delimited_list
+    description: List of vnfc names of the RTP MSC. This is the name associated with the perimeta pair and corresponds to the VIP
+  rtp_msc_a_vnfcnames:
+    type: comma_delimited_list
+    description: List of vnfc names of the A of RTP MSC
+  rtp_msc_b_vnfcnames:
+    type: comma_delimited_list
+    description: List of vnfc names of VM B of RTP MSC
+  # RTP MSC names of the physical A instance
+  rtp_msc_a_names:
+    type: comma_delimited_list
+    description: List of names of VM A of RTP MSC
+  # RTP MSC IP addresses on management network
+  rtp_msc_mgmt_vips:
+    type: comma_delimited_list
+    description: List of management virtual IP addresses to use for RTP MSC.
+  rtp_msc_a_mgmt_ips:
+    type: comma_delimited_list
+    description: List of management fixed IP addresses to use for RTP MSC A.
+  rtp_msc_b_mgmt_ips:
+    type: comma_delimited_list
+    description: List of management fixed IP addresses to use for RTP MSC B.
+  # RTP MSC IP addresses on internal HA network
+  rtp_msc_a_int_ha_ips:
+    type: comma_delimited_list
+    description: List of HA fixed IP addresses to use for RTP MSC A.
+  rtp_msc_b_int_ha_ips:
+    type: comma_delimited_list
+    description: List of HA fixed IP addresses to use for RTP MSC B.
+  # RTP MSC IP addresses on Trusted/core network
+  rtp_msc_trusted_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv4 addresses on Trusted/core network for RTP MSC.
+  rtp_msc_a_trusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv4 addresses on Trusted/core network for RTP MSC A.
+  # RTP MSC IP addresses on Untrusted/access network
+  rtp_msc_untrusted_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv4 addresses on Untrusted/access network for RTP MSC.
+  rtp_msc_untrusted_v6_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv6 addresses on Untrusted/access network for RTP MSC.
+  rtp_msc_a_untrusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv4 addresses on Untrusted/access network for RTP MSC A.
+  rtp_msc_a_untrusted_v6_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv6 addresses on Untrusted/access network for RTP MSC A.
+  ntp_server_ip_addrs:
+    type: string
+    description: NTP server IPv4 addresses, separated by commas.  These must be accessible from the management network
+    constraints:
+    - allowed_pattern: "((?:\\d{1,3}\\.){3}\\d{1,3},)*((?:\\d{1,3}\\.){3}\\d{1,3})"
+      description: ntp_server_ip_addrs must be a comma separated list of IPv4 addresses (with no spaces)
+  # Healing or instantiating? Used to build the correct json file
+  rtp_msc_a_json_prefix:
+    type: string
+    description: Json prefix, used to create the correct json file depending on the operation being performed
+    constraints:
+    - allowed_values:
+      - " "
+      - "// healing, not required "
+      description: rtp_msc_a_json_prefix must be set to ' ' or '// healing, not required '
+  # Running V4.1 perimeta or greater. Used to ensure that newer json tags are
+  # not included if the server will not recognize them
+  rtp_msc_json_v41:
+    type: string
+    description: Json prefix, used to ensure that the json tags will be recognised by the server loading them
+    constraints:
+    - allowed_values:
+      - " "
+      - "// older perimeta, parameter not required "
+      description: rtp_msc_json_v41 must be set to ' ' or '//  older perimeta, parameter not required '
+  # Use Radius for user account authentication.
+  rtp_msc_json_use_radius_authentication:
+    type: string
+    description: Json prefix, used to indicate if user account authentication is done externally through Radius
+    constraints:
+    - allowed_values:
+      - " "
+      - "// not using Radius "
+      description: rtp_msc_json_use_radius_authentication must be set to ' ' or '//  not using Radius '
+  # Radius Server address configuration
+  rtp_msc_json_radius_servername:
+    type: string
+    description: IP Address or hostname of RADIUS server
+  # Radius Server port configuration
+  rtp_msc_json_radius_port:
+    type: number
+    description: Port to use to connect to RADIUS server
+    constraints:
+    - range: { min: 0, max: 65535 }
+      description: rtp_msc_json_radius_port must be between 0 and 65535
+  # Radius Server shared secret
+  rtp_msc_json_radius_secret:
+    type: string
+    description: Shared secret to use for the RADIUS Server
+  # Radius Server connection timeout
+  rtp_msc_json_radius_timeout:
+    type: number
+    description: Timeout for connect requests to RADIUS server
+    constraints:
+    - range: { min: 1, max: 60 }
+      description: rtp_msc_json_timeout must be between 1 and 60
+  # Radius Server default user authentication level
+  rtp_msc_json_radius_default:
+    type: string
+    description: Default authentication level for RADIUS users
+    constraints:
+    - allowed_values:
+      - "no-access"
+      - "read-only"
+      - "support"
+      - "restricted-admin"
+      - "admin"
+      description: rtp_msc_json_radius_default must be set to one of 'no-access', 'read-only', 'support', 'restricted-admin' or 'admin'
+
+resources:
+  # Perimeta RTP MSC
+  perimeta_rtp_msc_a:
+    type: module_2_perimeta_sw_a_child.yaml
+    properties:
+      vnf_name: { get_param: vnf_name }
+      vnf_id: { get_param: vnf_id }
+      vm_role: 'msc'
+      vf_module_id: { get_param: vf_module_id }
+      rtp_msc_a_names: { get_param: rtp_msc_a_names }
+      perimeta_instance_index: { get_param: rtp_msc_a_index }
+      perimeta_image_name: { get_param: rtp_msc_image_name }
+      perimeta_flavor_name: { get_param: rtp_msc_flavor_name }
+      perimeta_keypair: { get_param: shared_perimeta_keypair }
+      availability_zone_0: { get_param: availability_zone_0 }
+      mgmt_net_id: { get_param: mgmt_net_id }
+      rtp_msc_mgmt_vips: { get_param: rtp_msc_mgmt_vips }
+      rtp_msc_a_mgmt_ips: { get_param: rtp_msc_a_mgmt_ips }
+      perimeta_sec_groups: { get_param: shared_perimeta_sec_groups }
+      int_ha_net_id: { get_param: shared_int_ha_net_id }
+      int_ha_network_plen: { get_param: shared_int_ha_net_prefix_len_v4 }
+      rtp_msc_a_int_ha_ips: { get_param: rtp_msc_a_int_ha_ips }
+      rtp_msc_b_int_ha_ips: { get_param: rtp_msc_b_int_ha_ips }
+      trusted_net_id: { get_param: trusted_net_id }
+      rtp_msc_trusted_vips: { get_param: rtp_msc_trusted_vips }
+      rtp_msc_a_trusted_ips: { get_param: rtp_msc_a_trusted_ips }
+      rtp_msc_untrusted_vips: { get_param: rtp_msc_untrusted_vips }
+      rtp_msc_untrusted_v6_vips: { get_param: rtp_msc_untrusted_v6_vips }
+      rtp_msc_a_untrusted_ips: { get_param: rtp_msc_a_untrusted_ips }
+      rtp_msc_a_untrusted_v6_ips: { get_param: rtp_msc_a_untrusted_v6_ips }
+      int_untrusted_parent_net_id: { get_param: shared_int_untrusted_parent_net_id }
+      rtp_msc_untrusted_parent_vips: { get_param: rtp_msc_untrusted_parent_vips }
+      rtp_msc_a_untrusted_parent_ips: { get_param: rtp_msc_a_untrusted_parent_ips }
+      perimeta_untrusted_num_vlans: { get_param: perimeta_untrusted_num_vlans }
+      perimeta_untrusted_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+      perimeta_untrusted_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+      perimeta_server_groups: { get_param: shared_perimeta_rtp_msc_server_groups }
+      perimeta_config:
+        str_replace:
+          template: {get_file: rtp_msc_a_template.json}
+          params:
+                $HEALING_OR_INSTANTIATION: { get_param: rtp_msc_a_json_prefix }
+                $NTP_SERVER_IP_ADDRS: { get_param: ntp_server_ip_addrs }
+                $41ORABOVE: { get_param: rtp_msc_json_v41 }
+                $USERADIUSAUTH: { get_param: rtp_msc_json_use_radius_authentication }
+                $RADIUS_SERVERNAME: { get_param: rtp_msc_json_radius_servername }
+                $RADIUS_PORT: { get_param: rtp_msc_json_radius_port }
+                $RADIUS_SECRET: { get_param: rtp_msc_json_radius_secret }
+                $RADIUS_TIMEOUT: { get_param: rtp_msc_json_radius_timeout }
+                $RADIUS_DEFAULT: { get_param: rtp_msc_json_radius_default }
+                $LOCAL_MGMT_IP_ADDR: { get_param: [ rtp_msc_a_mgmt_ips, { get_param: rtp_msc_a_index } ] }
+                $REMOTE_MGMT_IP_ADDR: { get_param: [ rtp_msc_b_mgmt_ips, { get_param: rtp_msc_a_index } ] }
+                $MGMT_NETWORK_PLEN: { get_param: mgmt_net_plen }
+                $MGMT_NETWORK_DEFAULT_GATEWAY: { get_param: mgmt_net_default_gateway }
+                $VIRT_MGMT_IP_ADDR: { get_param: [ rtp_msc_mgmt_vips, { get_param: rtp_msc_a_index } ] }
+                $VM_NAME_A: { get_param: [ rtp_msc_a_vnfcnames, { get_param: rtp_msc_a_index } ] }
+                $VM_NAME_B: { get_param: [ rtp_msc_b_vnfcnames, { get_param: rtp_msc_a_index } ] }
+                $SYSTEM_NAME: { get_param: [ rtp_msc_vnfcnames, { get_param: rtp_msc_a_index } ] }
+                $COMPLETION_PARAMS: ''
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_b.env b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_b.env
new file mode 100644 (file)
index 0000000..0a98f80
--- /dev/null
@@ -0,0 +1,113 @@
+# Environment file for instantiating
+#  - 1 x HA RTP MSC pair - B instance
+#
+# The Perimeta B instance is only configured with sufficient
+# configuration to allow partnering from the A instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+# A perimeta deployment can support one or more RTP MSCs. The parameter
+# rtp_msc_b_index is used to make sure that the appropriate settings for this
+# RTP MSC are extracted from the various address and server group arrays.
+#
+
+parameters:
+  #
+  # General VNF parameters
+  #
+  # Unique VNF name
+ #vnf_name: tsbc0002
+  # ID of VNF
+ #vnf_id: ibcx0002
+  # Unique ID for this VF Module instance
+ #vf_module_id: ibcx
+  # Availability zone for B instances.
+ #availability_zone_1: DPA3_D2_AZ2
+
+  #
+  # Shared parameters from base template
+  #
+  # Internal HA network UUID
+ #shared_int_ha_net_id: "c8994bb0-9dbd-43e7-a8f9-658c54e35d23"
+  # Internal HA network IPv4 prefix length
+ #shared_int_ha_net_prefix_len_v4: 26
+  # Keypair UUID
+ #shared_perimeta_keypair: "atttest_key_pair"
+  # List of security groups to use for all interfaces
+ #shared_perimeta_sec_groups: [ "2412dd6a-d784-40a5-a195-7a7da2349178" ]
+  # Anti-affinity server groups to use for RTP MSCs
+ #shared_perimeta_rtp_msc_server_groups: ["be4b3fa9-112d-454e-952f-146e45202130","bcdd96eb-b3fc-42ee-9ae8-e13ad0a4f0b8","b293e29f-c101-4b4e-80d6-7a1b4173e4e2","fd791679-6b71-4c3a-b8b7-1d586559976e","98171a69-8956-4ce6-b303-1a15444ee47b","a35ba80b-c0c2-4c29-a9ae-4df26d33323f","2192327a-6a31-43b6-84c4-49abc597b4e6","b2843fa5-9f25-49b0-9dc6-5c1c0472e8d4"]
+
+  #
+  # RTP MSC parameters
+  #
+  # Index of RTP MSC to instantiate / heal. This is used as the index into the
+  # various address and service group arrays to get the information associated
+  # with that specific instance
+ #rtp_msc_b_index: 0
+  # Flavor to use for creating RTP MSC VM instance
+  rtp_msc_flavor_name: gv.c8r16d160
+  # Glance image to use for launching RTP MSC Perimeta instances.
+  rtp_msc_image_name: ISBC_SBC_v4.0.40_SU12.qcow2
+
+
+
+  # Name of VM B of RTP MSC
+ #rtp_msc_b_names: ["ibcx0002vm004","ibcx0002vm006","ibcx0002vm008","ibcx0002vm010","ibcx0002vm012","ibcx0002vm014","ibcx0002vm016","ibcx0002vm018"]
+
+  #
+  # HA network parameters
+  #
+  # HA fixed IPv4 address to use for RTP MSC B.
+ #rtp_msc_b_int_ha_ips: ["172.26.1.7","172.26.1.9","172.26.1.11","172.26.1.13","172.26.1.15","172.26.1.17","172.26.1.19","172.26.1.21"]
+  # HA fixed IPv4 address to use for RTP MSC A.
+ #rtp_msc_a_int_ha_ips: ["172.26.1.6","172.26.1.8","172.26.1.10","172.26.1.12","172.26.1.14","172.26.1.16","172.26.1.18","172.26.1.20"]
+
+  #
+  # Management network parameters
+  #
+  # Management network ID
+ #mgmt_net_id: 4b5621b0-4ca4-4ea0-8511-860318c4fc3b
+  # Management virtual IPv4 address to use for RTP MSC.
+ #rtp_msc_mgmt_vips: ["135.144.188.139","135.144.188.142","135.144.188.145","135.144.188.148","135.144.188.151","135.144.188.154","135.144.188.157","135.144.188.160"]
+  # Management fixed IPv4 address to use for RTP MSC B.
+ #rtp_msc_b_mgmt_ips: ["135.144.188.140","135.144.188.143","135.144.188.146","135.144.188.149","135.144.188.152","135.144.188.155","135.144.188.158","135.144.188.161"]
+
+  #
+  # Trusted/core network parameters
+  #
+  # Network ID of Trusted/core network.
+ #trusted_net_id: 3d584971-4ec6-408c-92fe-3073666fbcb9
+  # Virtual IPv4 address on Trusted/core network for RTP MSC.
+ #rtp_msc_trusted_vips: ["10.1.1.8","10.1.1.11","10.1.1.14","10.1.1.17","10.1.1.20","10.1.1.23","10.1.1.26","10.1.1.29"]
+  # Fixed IPv4 address on Trusted/core network for RTP MSC B.
+ #rtp_msc_b_trusted_ips: ["10.1.1.9","10.1.1.12","10.1.1.15","10.1.1.18","10.1.1.21","10.1.1.24","10.1.1.27","10.1.1.30"]
+
+  #
+  # Untrusted/access network parameters
+  #
+  # Using VLANs on Untrusted/access
+ #shared_int_untrusted_parent_net_id: a0ddd409-f6a7-465a-a091-827a12402252
+  # Virtual IPv4 address on Untrusted/access parent network for RTP MSC.
+ #rtp_msc_untrusted_parent_vips: ["11.0.0.9","11.0.0.12","11.0.0.15","11.0.0.18","11.0.0.21","11.0.0.24","11.0.0.27","11.0.0.30"]
+  # Fixed IPv4 address on Untrusted/access parent network for RTP MSC B.
+ #rtp_msc_b_untrusted_parent_ips: ["11.0.0.8","11.0.0.11","11.0.0.14","11.0.0.17","11.0.0.20","11.0.0.23","11.0.0.26","11.0.0.29"]
+
+ #perimeta_untrusted_num_vlans: 5
+ #perimeta_untrusted_vlan_ids: ["81", "1001", "1002", "1003", "1004"] 
+ #perimeta_untrusted_vlan_networks: [95c74fbb-0650-4ac2-bd4f-7b4fb50b4b5d,aa1a5096-61fd-421b-a74b-0b4a72c47856,ced72584-9c09-4d67-9b9f-8faf4c081c45,6311c9db-c4ba-41f5-85e5-4a3cc85d7f55,79391429-9c52-44f5-b9a9-4547fec0e9d4]
+
+
+
+  # Virtual IPv4 address on Untrusted/access network for RTP MSC.
+ #rtp_msc_untrusted_vips: ["12.121.106.136","12.121.106.139","12.121.106.142","12.121.106.145","12.121.106.148","12.121.106.151","12.121.106.154","12.121.106.157"]
+  # Virtual IPv6 address on Untrusted/access network for RTP MSC.
+ #rtp_msc_untrusted_v6_vips: ["2001:1890:1001:2B38::2D:5","2001:1890:1001:2B38::2D:8","2001:1890:1001:2B38::2D:B","2001:1890:1001:2B38::2D:E","2001:1890:1001:2B38::2D:11","2001:1890:1001:2B38::2D:14","2001:1890:1001:2B38::2D:17","2001:1890:1001:2B38::2D:1A"]
+  # Fixed IPv4 address on Untrusted/access network for RTP MSC B.
+ #rtp_msc_b_untrusted_ips: ["12.121.106.137","12.121.106.140","12.121.106.143","12.121.106.146","12.121.106.149","12.121.106.152","12.121.106.155","12.121.106.158"]
+  # Fixed IPv6 address on Untrusted/access network for RTP MSC B.
+ #rtp_msc_b_untrusted_v6_ips: ["2001:1890:1001:2B38::2D:6","2001:1890:1001:2B38::2D:9","2001:1890:1001:2B38::2D:C","2001:1890:1001:2B38::2D:F","2001:1890:1001:2B38::2D:12","2001:1890:1001:2B38::2D:15","2001:1890:1001:2B38::2D:18","2001:1890:1001:2B38::2D:1B"]
+
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_b.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_rtp_msc_b.yaml
new file mode 100644 (file)
index 0000000..d3866bf
--- /dev/null
@@ -0,0 +1,197 @@
+# Template for instantiating
+#  - 1 x HA RTP MSC pair - B instance
+#
+# The Perimeta B instance is only configured with sufficient
+# configuration to allow partnering from the A instance (which will complete
+# the configuration).
+#
+# This template assumes that a base template stack has previously been
+# created so that deployment wide resources such as server-groups have been
+# defined.
+#
+# A perimeta deployment can support one or more RTP MSCs. The parameter
+# rtp_msc_b_index is used to make sure that the appropriate settings for this
+# RTP MSC are extracted from the various address and server group arrays.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an B side Perimeta RTP MSC 
+
+parameters:
+  # General VNF parameters
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: ID of VNF
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  # Availability zones
+  availability_zone_1:
+    type: string
+    description: Availability zone for B instances.
+  shared_perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  shared_perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on all interfaces.
+  shared_perimeta_rtp_msc_server_groups:
+    type: comma_delimited_list
+    description: Server group to use for these VMs
+  # Internal network parameters
+  shared_int_ha_net_id:
+    type: string
+    description: HA network id
+    constraints:
+    - custom_constraint: neutron.network
+
+  # Constraint below is copied from base module 
+  shared_int_ha_net_prefix_len_v4:
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: shared_int_ha_net_prefix_len_v4 must be between 0 and 31
+  # Management network parameters
+  mgmt_net_id:
+    type: string
+    description: Management network ID
+    constraints:
+    - custom_constraint: neutron.network
+  # Trusted/core network parameters
+  trusted_net_id:
+    type: string
+    description: Network ID of Trusted/core network.
+    constraints:
+    - custom_constraint: neutron.network
+  # untrusted parent network parameters
+  shared_int_untrusted_parent_net_id:
+    type: string
+    description: untrusted parent network id
+  # RTP MSC IP addresses on Untrusted/access parent network
+  rtp_msc_untrusted_parent_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv4 addresses on Untrusted/access parent network for RTP MSC.
+  rtp_msc_b_untrusted_parent_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv4 addresses on Untrusted/access parent network for RTP MSC B.
+  perimeta_untrusted_num_vlans:
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  # RTP MSC parameters
+  rtp_msc_flavor_name:
+    type: string
+    description: Flavor to use for creating RTP MSC VM instance
+    constraints:
+    - custom_constraint: nova.flavor
+  rtp_msc_image_name:
+    type: string
+    description: Glance image to use for launching RTP MSC Perimeta instances.
+    constraints:
+    - custom_constraint: glance.image
+  # Index of the instance to instantiate / heal. This is used to access the
+  # various address / name / server group arrays to extract the information
+  # specific to this server.
+  #
+  # The constraints need to be co-ordinated with the parameter
+  # perimeta_max_rtp_msc_count in the base template. Unfortunately we cannot
+  # use a get_param call to get a constraint so it has to be a number.
+  #
+  # We also need to account for the fact that arrays start at zero and we are
+  # specifying the index in this parameter so the maximum constraint is 1 less
+  # than the maximum in the base template
+  rtp_msc_b_index:
+    type: number
+    description: Index of RTP MSC to instantiate / heal.
+    constraints:
+    - range: { min: 0, max: 19 }
+      description: rtp_msc_b_index must be between 0 and 19
+  # RTP MSC names of the physical B instance
+  rtp_msc_b_names:
+    type: comma_delimited_list
+    description: List of names of VM B of RTP MSC
+  # RTP MSC IP addresses on management network
+  rtp_msc_mgmt_vips:
+    type: comma_delimited_list
+    description: List of management virtual IP addresses to use for RTP MSC.
+  rtp_msc_b_mgmt_ips:
+    type: comma_delimited_list
+    description: List of management fixed IP addresses to use for RTP MSC B.
+  # RTP MSC IP addresses on internal HA network
+  rtp_msc_b_int_ha_ips:
+    type: comma_delimited_list
+    description: List of HA fixed IP addresses to use for RTP MSC B.
+  rtp_msc_a_int_ha_ips:
+    type: comma_delimited_list
+    description: List of HA fixed IP addresses to use for RTP MSC A.
+  # RTP MSC IP addresses on Trusted/core network
+  rtp_msc_trusted_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv4 addresses on Trusted/core network for RTP MSC.
+  rtp_msc_b_trusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv4 addresses on Trusted/core network for RTP MSC B.
+  # RTP MSC IP addresses on Untrusted/access network
+  rtp_msc_untrusted_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv4 addresses on Untrusted/access network for RTP MSC.
+  rtp_msc_untrusted_v6_vips:
+    type: comma_delimited_list
+    description: List of virtual IPv6 addresses on Untrusted/access network for RTP MSC.
+  rtp_msc_b_untrusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv4 addresses on Untrusted/access network for RTP MSC B.
+  rtp_msc_b_untrusted_v6_ips:
+    type: comma_delimited_list
+    description: List of fixed IPv6 addresses on Untrusted/access network for RTP MSC B.
+
+resources:
+  # Perimeta RTP MSC
+  perimeta_rtp_msc_b:
+    type: module_2_perimeta_sw_b_child.yaml
+    properties:
+      vnf_name: { get_param: vnf_name }
+      vnf_id: { get_param: vnf_id }
+      vm_role: 'msc'
+      vf_module_id: { get_param: vf_module_id }
+      rtp_msc_b_names: { get_param: rtp_msc_b_names }
+      perimeta_instance_index: { get_param: rtp_msc_b_index }
+      perimeta_image_name: { get_param: rtp_msc_image_name }
+      perimeta_flavor_name: { get_param: rtp_msc_flavor_name }
+      perimeta_keypair: { get_param: shared_perimeta_keypair }
+      availability_zone_1: { get_param: availability_zone_1 }
+      mgmt_net_id: { get_param: mgmt_net_id }
+      rtp_msc_mgmt_vips: { get_param: rtp_msc_mgmt_vips }
+      rtp_msc_b_mgmt_ips: { get_param: rtp_msc_b_mgmt_ips }
+      perimeta_sec_groups: { get_param: shared_perimeta_sec_groups }
+      int_ha_net_id: { get_param: shared_int_ha_net_id }
+      int_ha_network_plen: { get_param: shared_int_ha_net_prefix_len_v4 }
+      rtp_msc_b_int_ha_ips: { get_param: rtp_msc_b_int_ha_ips }
+      rtp_msc_a_int_ha_ips: { get_param: rtp_msc_a_int_ha_ips }
+      trusted_net_id: { get_param: trusted_net_id }
+      rtp_msc_trusted_vips: { get_param: rtp_msc_trusted_vips }
+      rtp_msc_b_trusted_ips: { get_param: rtp_msc_b_trusted_ips }
+      rtp_msc_untrusted_vips: { get_param: rtp_msc_untrusted_vips }
+      rtp_msc_untrusted_v6_vips: { get_param: rtp_msc_untrusted_v6_vips }
+      rtp_msc_b_untrusted_ips: { get_param: rtp_msc_b_untrusted_ips }
+      rtp_msc_b_untrusted_v6_ips: { get_param: rtp_msc_b_untrusted_v6_ips }
+      int_untrusted_parent_net_id: { get_param: shared_int_untrusted_parent_net_id }
+      rtp_msc_untrusted_parent_vips: { get_param: rtp_msc_untrusted_parent_vips }
+      rtp_msc_b_untrusted_parent_ips: { get_param: rtp_msc_b_untrusted_parent_ips }
+      perimeta_untrusted_num_vlans: { get_param: perimeta_untrusted_num_vlans }
+      perimeta_untrusted_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+      perimeta_untrusted_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+      perimeta_server_groups: { get_param: shared_perimeta_rtp_msc_server_groups }
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_sw_a_child.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_sw_a_child.yaml
new file mode 100644 (file)
index 0000000..fdf5b2a
--- /dev/null
@@ -0,0 +1,286 @@
+# Heat template which intstantiates an A side Perimeta RTP MSC instance with
+# 4 vNICs. 
+#
+# This is designed to be included in a higher level template.
+#
+# This template puts the Perimeta configuration in place using userdata
+# injected via OpenStack's ConfigDrive mechanism.
+#
+# Host anti-affinity is achieved using different availability zones for
+# the Perimeta instance or server group anti-affinity if they are in the
+# same availability zone.
+#
+# Template requires Juno or above and has been tested on Kilo.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an A side Perimeta RTP MSC instance with 4 vNICs as part of a nested template
+
+parameters:
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: VNF ID of this deployment
+  vm_role:
+    type: string
+    description: Role of these VMs
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  # Index of the instance to instantiate / heal. This is used to access the
+  # various address / name / server group arrays to extract the information
+  # specific to this server.
+  #
+  # The constraints need to be co-ordinated with the parameter
+  # perimeta_max_rtp_msc_count in the base template. Unfortunately we cannot
+  # use a get_param call to get a constraint so it has to be a number.
+  #
+  # We also need to account for the fact that arrays start at zero and we are
+  # specifying the index in this parameter so the maximum constraint is 1 less
+  # than the maximum in the base template
+  perimeta_instance_index:
+    type: number
+    description: Index of instance among multiple instances.  Use to retrieve correct parameter for this instance when passed all parameters for all instances.
+    constraints:
+    - range: { min: 0, max: 19 }
+      description: perimeta_instance_index must be between 0 and 19
+  rtp_msc_a_names:
+    type: comma_delimited_list
+    description: List of names of Perimeta VM A instances, indexed by perimeta_instance_index
+  perimeta_image_name:
+    type: string
+    description: Glance image for Perimeta instance
+  perimeta_flavor_name:
+    type: string
+    description: Flavor to use for creating VM instances
+  perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  availability_zone_0:
+    # Can be commented out along with references if always using a single availability zone
+    type: string
+    description: Availability zone for A instances.
+  mgmt_net_id:
+    type: string
+    description: Management network id
+  rtp_msc_mgmt_vips:
+    type: comma_delimited_list
+    description: List of management virtual IP addresses for all instances.
+  rtp_msc_a_mgmt_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as management IPs of A instances.
+  int_ha_net_id:
+    type: string
+    description: HA network id
+  int_ha_network_plen:
+  # Constraint copied from base module 
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: int_ha_network_plen must be between 0 and 31
+  rtp_msc_a_int_ha_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as HA IPs of A instances.
+  rtp_msc_b_int_ha_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as HA IPs of B instances.
+  trusted_net_id:
+    type: string
+    description: Trusted/core network UUID
+  rtp_msc_trusted_vips:
+    type: comma_delimited_list
+    description: List of Trusted/core virtual IP addresses for all instances.
+  rtp_msc_a_trusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Trusted/core fixed IPs of A instances.
+  perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on trusted interfaces.
+  rtp_msc_untrusted_vips:
+    type: comma_delimited_list
+    description: List of Untrusted/access virtual IP addresses for all instances.
+  rtp_msc_untrusted_v6_vips:
+    type: comma_delimited_list
+    description: List of Untrusted/access alternate virtual IP addresses for all instances.
+  rtp_msc_a_untrusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Untrusted/access fixed IPs of A instances.
+  rtp_msc_a_untrusted_v6_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Untrusted/access alternate fixed IPs of A instances.
+  int_untrusted_parent_net_id:
+    type: string
+    description: internal Untrusted/access parent network id
+  rtp_msc_untrusted_parent_vips:
+    type: comma_delimited_list
+    description: List of Untrusted/access parent virtual IP addresses for all instances.
+  rtp_msc_a_untrusted_parent_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Untrusted/access parent fixed IPs of A instances.
+  perimeta_untrusted_num_vlans:
+    # constraint copied from parent module
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  perimeta_server_groups:
+    type: comma_delimited_list
+    description: Server groups to use for these VMs
+  perimeta_config:
+    type: string
+    description: JSON orchestration template configuration for instance.
+
+resources:
+  # Perimeta management ports
+  perimeta_rtp_msc_a_mgmt_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_mgmt_0_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_a_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: mgmt_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_a_mgmt_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: [ rtp_msc_mgmt_vips, { get_param: perimeta_instance_index } ] }
+
+  # Perimeta HA ports
+  perimeta_rtp_msc_a_ha_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_ha_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_a_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: int_ha_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_a_int_ha_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+
+  # Perimeta Trusted/core service network ports
+  #
+  # Dual stack core network 
+  # - if only IPv4 required comment out second entry in fixed_ips and allowed_addess_pairs parameters.
+  # - if only IPv6 required comment out first entry in fixed_ips and allowed_addess_pairs parameters.
+  perimeta_rtp_msc_a_trusted_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_trusted_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_a_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: trusted_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_a_trusted_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: [ rtp_msc_trusted_vips, { get_param: perimeta_instance_index } ] }
+
+  # Perimeta Untrusted/access service network ports
+  # VLAN being used on this service interface.  
+  # The parent network port is used to anchor the VLANs and is not used to 
+  # route actual traffic for the service interface. This means that we can  
+  # create a dummy network in the base module and use that instead of the  
+  # real untrusted network 
+
+  perimeta_rtp_msc_a_untrusted_parent_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_untrusted_parent_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_a_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: int_untrusted_parent_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_a_untrusted_parent_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: [ rtp_msc_untrusted_parent_vips, { get_param: perimeta_instance_index } ] }
+
+
+  # Contrail VLAN subinterfaces
+  perimeta_rtp_msc_a_untrusted_0_vlan_ports:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: { get_param: perimeta_untrusted_num_vlans }
+      resource_def:
+        type: vlan_subinterface_dual.yaml
+        properties:
+          perimeta_subinterface_instance_index: "%index%"
+          perimeta_subinterface_name_prefix:
+            str_replace:
+              template: $VNF_NAME_$VM_untrusted_port_vlan
+              params:
+                $VNF_NAME : { get_param: vnf_name }               
+                $VM: { get_param: [ rtp_msc_a_names, { get_param: perimeta_instance_index } ] }
+          perimeta_parent_interface: { get_resource: perimeta_rtp_msc_a_untrusted_parent_0_port }
+          perimeta_mac_address: { get_attr: [ perimeta_rtp_msc_a_untrusted_parent_0_port, mac_address ] }
+          perimeta_ip_0: { get_param: [ rtp_msc_a_untrusted_ips, { get_param: perimeta_instance_index } ] }
+          perimeta_v6_ip_0: { get_param: [ rtp_msc_a_untrusted_v6_ips, { get_param: perimeta_instance_index } ] }
+          perimeta_vip_0: { get_param: [ rtp_msc_untrusted_vips, { get_param: perimeta_instance_index } ] }
+          perimeta_v6_vip_0: { get_param: [ rtp_msc_untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
+          perimeta_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+          perimeta_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+
+  # Add any additional service ports here.
+
+  perimeta_rtp_msc_a_server_0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [ rtp_msc_a_names, { get_param: perimeta_instance_index } ] }
+      image: { get_param: perimeta_image_name }
+      flavor: { get_param: perimeta_flavor_name }
+      key_name: { get_param: perimeta_keypair }
+      scheduler_hints: { group: { get_param: [ perimeta_server_groups,  { get_param: perimeta_instance_index } ] } }
+      metadata:
+        'vnf_name': { get_param: vnf_name }
+        'vnf_id': { get_param: vnf_id }
+        'vm_role':
+            str_replace:
+              template: $ROLE_a
+              params:
+                $ROLE: { get_param: vm_role }
+        'vf_module_id': { get_param: vf_module_id }
+        'msw_template_version': '17.07.04 - 2017-09-01'
+      personality:
+        '/opt/MetaSwitch/init/custom.ini': { get_file: custom.ini }
+      networks:
+        - port: { get_resource: perimeta_rtp_msc_a_mgmt_0_port }
+        - port: { get_resource: perimeta_rtp_msc_a_ha_0_port }
+        - port: { get_resource: perimeta_rtp_msc_a_trusted_0_port }
+        - port: { get_resource: perimeta_rtp_msc_a_untrusted_parent_0_port }
+      availability_zone: { get_param: availability_zone_0 }
+      config_drive: True
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          template: { get_param: perimeta_config }
+          params:
+            $MGMT_MACADDR: { get_attr: [perimeta_rtp_msc_a_mgmt_0_port, mac_address] }
+            $HA_MACADDR: { get_attr: [perimeta_rtp_msc_a_ha_0_port, mac_address] }
+            $TRUSTED_MACADDR: { get_attr: [perimeta_rtp_msc_a_trusted_0_port, mac_address] }
+            $UNTRUSTED_MACADDR: { get_attr: [perimeta_rtp_msc_a_untrusted_parent_0_port, mac_address] } 
+            $LOCAL_HA_IP_ADDR: { get_param: [ rtp_msc_a_int_ha_ips, { get_param: perimeta_instance_index } ] }
+            $REMOTE_HA_IP_ADDR: { get_param: [ rtp_msc_b_int_ha_ips, { get_param: perimeta_instance_index } ] }
+            $HA_NETWORK_PLEN: { get_param: int_ha_network_plen }
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_sw_b_child.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/module_2_perimeta_sw_b_child.yaml
new file mode 100644 (file)
index 0000000..3aa1a66
--- /dev/null
@@ -0,0 +1,292 @@
+# Heat template which intstantiates an B side Perimeta RTP MSC instance with
+# 4 vNICs. 
+#
+# This is designed to be included in a higher level template.
+#
+# This template puts the Perimeta configuration in place using userdata
+# injected via OpenStack's ConfigDrive mechanism.
+#
+# Host anti-affinity is achieved using different availability zones for
+# the Perimeta instance or server group anti-affinity if they are in the
+# same availability zone.
+#
+# Template requires Juno or above and has been tested on Kilo.
+#
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate an B side Perimeta RTP MSC instance with 4 vNICs as part of a nested template
+
+parameters:
+  vnf_name:
+    type: string
+    description: Unique name for this VNF instance
+  vnf_id:
+    type: string
+    description: VNF ID of this deployment
+  vm_role:
+    type: string
+    description: Role of these VMs
+  vf_module_id:
+    type: string
+    description: Unique ID for this VF Module instance
+  # Index of the instance to instantiate / heal. This is used to access the
+  # various address / name / server group arrays to extract the information
+  # specific to this server.
+  #
+  # The constraints need to be co-ordinated with the parameter
+  # perimeta_max_rtp_msc_count in the base template. Unfortunately we cannot
+  # use a get_param call to get a constraint so it has to be a number.
+  #
+  # We also need to account for the fact that arrays start at zero and we are
+  # specifying the index in this parameter so the maximum constraint is 1 less
+  # than the maximum in the base template
+  perimeta_instance_index:
+    type: number
+    description: Index of instance among multiple instances.  Use to retrieve correct parameter for this instance when passed all parameters for all instances.
+    constraints:
+    - range: { min: 0, max: 19 }
+      description: perimeta_instance_index must be between 0 and 19
+  rtp_msc_b_names:
+    type: comma_delimited_list
+    description: List of names of Perimeta VM B instances, indexed by perimeta_instance_index
+  perimeta_image_name:
+    type: string
+    description: Glance image for Perimeta instance
+  perimeta_flavor_name:
+    type: string
+    description: Flavor to use for creating VM instances
+  perimeta_keypair:
+    type: string
+    description: Keypair to use for accessing this Perimeta instance
+  availability_zone_1:
+    # Can be commented out along with references if always using a single availability zone
+    type: string
+    description: Availability zone for B instances.  May be the same as A instance.
+  mgmt_net_id:
+    type: string
+    description: Management network id
+  rtp_msc_mgmt_vips:
+    type: comma_delimited_list
+    description: List of management virtual IP addresses for all instances.
+  rtp_msc_b_mgmt_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as management IPs of B instances.
+  int_ha_net_id:
+    type: string
+    description: HA network id
+  int_ha_network_plen:
+  # Constraint copied from base module 
+    type: number
+    description: Prefix length of subnet associated with internal HA network 
+    constraints:
+    - range: { min: 0, max: 31 }
+      description: int_ha_network_plen must be between 0 and 31
+  rtp_msc_b_int_ha_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as HA IPs of B instances.
+  rtp_msc_a_int_ha_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as HA IPs of A instances.
+  trusted_net_id:
+    type: string
+    description: Trusted/core network UUID
+  rtp_msc_trusted_vips:
+    type: comma_delimited_list
+    description: List of Trusted/core virtual IP addresses for all instances.
+  rtp_msc_b_trusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Trusted/core fixed IPs of B instances.
+  perimeta_sec_groups:
+    type: comma_delimited_list
+    description: List of security groups to add on trusted interfaces.
+  rtp_msc_untrusted_vips:
+    type: comma_delimited_list
+    description: List of Untrusted/access virtual IP addresses for all instances.
+  rtp_msc_untrusted_v6_vips:
+    type: comma_delimited_list
+    description: List of Untrusted/access alternate virtual IP addresses for all instances.
+  rtp_msc_b_untrusted_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Untrusted/access fixed IPs of B instances.
+  rtp_msc_b_untrusted_v6_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Untrusted/access alternate fixed IPs of B instances.
+  int_untrusted_parent_net_id:
+    type: string
+    description: internal Untrusted/access parent network id
+  rtp_msc_untrusted_parent_vips:
+    type: comma_delimited_list
+    description: List of Untrusted/access parent virtual IP addresses for all instances.
+  rtp_msc_b_untrusted_parent_ips:
+    type: comma_delimited_list
+    description: List of fixed IP addresses to use as Untrusted/access parent fixed IPs of B instances.
+  perimeta_untrusted_num_vlans:
+    # constraint copied from parent module
+    type: number
+    description: number of VLANs to connect to the untrusted/access interface
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_untrusted_num_vlans (number of VLANs to connect to the untrusted/access interface) must be between 1 and 1001
+  perimeta_untrusted_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use on the untrusted/access network
+  perimeta_untrusted_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use on the untrusted/access network.   The order and number of these must match the VLAN ID list.
+  perimeta_server_groups:
+    type: comma_delimited_list
+    description: Server groups to use for these VMs
+
+resources:
+  # Perimeta management ports
+  perimeta_rtp_msc_b_mgmt_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_mgmt_0_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_b_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: mgmt_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_b_mgmt_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: [ rtp_msc_mgmt_vips, { get_param: perimeta_instance_index } ] }
+
+  # Perimeta HA ports
+  perimeta_rtp_msc_b_ha_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_ha_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_b_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: int_ha_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_b_int_ha_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+
+  # Perimeta Trusted/core service network ports
+  #
+  # Dual stack core network 
+  # - if only IPv4 required comment out second entry in fixed_ips and allowed_addess_pairs parameters.
+  # - if only IPv6 required comment out first entry in fixed_ips and allowed_addess_pairs parameters.
+  perimeta_rtp_msc_b_trusted_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_trusted_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_b_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: trusted_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_b_trusted_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: [ rtp_msc_trusted_vips, { get_param: perimeta_instance_index } ] }
+
+  # Perimeta Untrusted/access service network ports
+  # VLAN being used on this service interface.  
+  # The parent network port is used to anchor the VLANs and is not used to 
+  # route actual traffic for the service interface. This means that we can  
+  # create a dummy network in the base module and use that instead of the  
+  # real untrusted network 
+
+  perimeta_rtp_msc_b_untrusted_parent_0_port:
+    type: OS::Neutron::Port
+    properties:
+      name:
+        str_replace:
+          template: $VNF_NAME_$VM_untrusted_parent_port
+          params:
+            $VNF_NAME : { get_param: vnf_name }               
+            $VM: { get_param: [ rtp_msc_b_names, { get_param: perimeta_instance_index } ] }
+      network: { get_param: int_untrusted_parent_net_id }
+      fixed_ips:
+        - ip_address: { get_param: [ rtp_msc_b_untrusted_parent_ips, { get_param: perimeta_instance_index } ] }
+      security_groups: { get_param: perimeta_sec_groups }
+      allowed_address_pairs:
+        - ip_address: { get_param: [ rtp_msc_untrusted_parent_vips, { get_param: perimeta_instance_index } ] }
+
+
+  # Contrail VLAN subinterfaces
+  perimeta_rtp_msc_b_untrusted_0_vlan_ports:
+    type: OS::Heat::ResourceGroup
+    properties:
+      count: { get_param: perimeta_untrusted_num_vlans }
+      resource_def:
+        type: vlan_subinterface_dual.yaml
+        properties:
+          perimeta_subinterface_instance_index: "%index%"
+          perimeta_subinterface_name_prefix:
+            str_replace:
+              template: $VNF_NAME_$VM_untrusted_port_vlan
+              params:
+                $VNF_NAME : { get_param: vnf_name }               
+                $VM: { get_param: [ rtp_msc_b_names, { get_param: perimeta_instance_index } ] }
+          perimeta_parent_interface: { get_resource: perimeta_rtp_msc_b_untrusted_parent_0_port }
+          perimeta_mac_address: { get_attr: [ perimeta_rtp_msc_b_untrusted_parent_0_port, mac_address ] }
+          perimeta_ip_0: { get_param: [ rtp_msc_b_untrusted_ips, { get_param: perimeta_instance_index } ] }
+          perimeta_v6_ip_0: { get_param: [ rtp_msc_b_untrusted_v6_ips, { get_param: perimeta_instance_index } ] }
+          perimeta_vip_0: { get_param: [ rtp_msc_untrusted_vips, { get_param: perimeta_instance_index } ] }
+          perimeta_v6_vip_0: { get_param: [ rtp_msc_untrusted_v6_vips, { get_param: perimeta_instance_index } ] }
+          perimeta_vlan_ids: { get_param: perimeta_untrusted_vlan_ids }
+          perimeta_vlan_networks: { get_param: perimeta_untrusted_vlan_networks }
+
+  # Add any additional service ports here.
+
+  perimeta_rtp_msc_b_server_0:
+    type: OS::Nova::Server
+    properties:
+      name: { get_param: [ rtp_msc_b_names, { get_param: perimeta_instance_index } ] }
+      image: { get_param: perimeta_image_name }
+      flavor: { get_param: perimeta_flavor_name }
+      key_name: { get_param: perimeta_keypair }
+      scheduler_hints: { group: { get_param: [ perimeta_server_groups,  { get_param: perimeta_instance_index } ] } }
+      metadata:
+        'vnf_name': { get_param: vnf_name }
+        'vnf_id': { get_param: vnf_id }
+        'vm_role':
+            str_replace:
+              template: $ROLE_b
+              params:
+                $ROLE: { get_param: vm_role }
+        'vf_module_id': { get_param: vf_module_id }
+        'msw_template_version': '17.07.04 - 2017-09-01'
+      networks:
+        - port: { get_resource: perimeta_rtp_msc_b_mgmt_0_port }
+        - port: { get_resource: perimeta_rtp_msc_b_ha_0_port }
+        - port: { get_resource: perimeta_rtp_msc_b_trusted_0_port }
+        - port: { get_resource: perimeta_rtp_msc_b_untrusted_parent_0_port }
+      availability_zone: { get_param: availability_zone_1 }
+      config_drive: True
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          template: |
+            {
+              "vnic_assignment": {
+               "IBG1mgmt": {"mac": "$MGMT_MACADDR"},
+               "IPG1": {"mac": "$HA_MACADDR"},
+               "RPG1": {"mac": "$TRUSTED_MACADDR"},
+               "RPG2": {"mac": "$UNTRUSTED_MACADDR"}
+             },
+             "ip_ha_local": "$LOCAL_HA_IP_ADDR",
+             "ip_ha_remote": "$REMOTE_HA_IP_ADDR",
+             "ip_ha_plen": "$HA_NETWORK_PLEN"
+            }
+          params:
+            $MGMT_MACADDR: { get_attr: [perimeta_rtp_msc_b_mgmt_0_port, mac_address] }
+            $HA_MACADDR: { get_attr: [perimeta_rtp_msc_b_ha_0_port, mac_address] }
+            $TRUSTED_MACADDR: { get_attr: [perimeta_rtp_msc_b_trusted_0_port, mac_address] }
+            $UNTRUSTED_MACADDR: { get_attr: [perimeta_rtp_msc_b_untrusted_parent_0_port, mac_address] } 
+            $LOCAL_HA_IP_ADDR: { get_param: [ rtp_msc_b_int_ha_ips, { get_param: perimeta_instance_index } ] }
+            $REMOTE_HA_IP_ADDR: { get_param: [ rtp_msc_a_int_ha_ips, { get_param: perimeta_instance_index } ] }
+            $HA_NETWORK_PLEN: { get_param: int_ha_network_plen }
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/vlan_subinterface_dual.yaml b/openecomp-be/lib/openecomp-sdc-translator-lib/openecomp-sdc-translator-core/src/test/resources/mock/heat/nested/nestedwithoutNodeTemplates/inputs/vlan_subinterface_dual.yaml
new file mode 100644 (file)
index 0000000..8ee34a1
--- /dev/null
@@ -0,0 +1,102 @@
+heat_template_version: 2014-10-16
+
+description: >
+  HOT template to instantiate a single Contrail VLAN sub-interface with associated instance IP addresses and allowed address pairs
+
+parameters:
+  perimeta_subinterface_instance_index:
+    # constraint copied from parent module
+    type: number
+    description: Index of instance among multiple instances.  Use to retrieve correct parameter for this instance when passed all parameters for all instances.
+    constraints:
+    - range: { min: 1, max: 1001 }
+      description: perimeta_subinterface_instance_index must be between 1 and 1001
+  perimeta_subinterface_name_prefix:
+    type: string
+    description: Combined with subinterface_instance_index, this is used as the name of the subinterface resource
+  perimeta_parent_interface:
+    type: string
+    description: Parent Contrail interface
+  perimeta_mac_address:
+    type: string
+    description: MAC address to use for subinterface
+  perimeta_ip_0:
+    type: string
+    description: IPv4 address associated with subinterfaces
+  perimeta_v6_ip_0:
+    type: string
+    description: IPv6 address associated with subinterfaces
+  perimeta_vip_0:
+    type: string
+    description: virtual IPv4 address associated with subinterfaces
+  perimeta_v6_vip_0:
+    type: string
+    description: virtual IPv6 address associated with subinterfaces
+  perimeta_vlan_ids:
+    type: comma_delimited_list
+    description: List of VLAN IDs to use for subinterfaces
+  perimeta_vlan_networks:
+    type: comma_delimited_list
+    description: List of Contrail VLAN networks to use for the subinterfaces.   The order and number of these must match the VLAN ID list
+
+resources:
+  contrail_vmi_subinterface:
+    type: OS::ContrailV2::VirtualMachineInterface
+    properties:
+      name:
+        str_replace:
+          template: $NAME_$VLAN
+          params:
+            $NAME: { get_param: perimeta_subinterface_name_prefix }
+            $VLAN: { get_param: [ perimeta_vlan_ids, { get_param: perimeta_subinterface_instance_index } ] }
+      virtual_machine_interface_properties:
+        {
+          virtual_machine_interface_properties_sub_interface_vlan_tag: { get_param: [ perimeta_vlan_ids, { get_param: perimeta_subinterface_instance_index } ] }
+        }
+      virtual_machine_interface_mac_addresses:
+        {
+        virtual_machine_interface_mac_addresses_mac_address: [{ get_param: perimeta_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: perimeta_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: perimeta_vip_0 },
+                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: perimeta_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: perimeta_v6_vip_0 },
+                virtual_machine_interface_allowed_address_pairs_allowed_address_pair_ip_ip_prefix_len: 128
+              }
+            }
+          ]
+        }
+      virtual_network_refs: [{ get_param: [ perimeta_vlan_networks, { get_param: perimeta_subinterface_instance_index } ] }]
+      virtual_machine_interface_refs: [{ get_param: perimeta_parent_interface }]
+
+  contrail_vmi_ip:
+    type: OS::ContrailV2::InstanceIp
+    depends_on: [ contrail_vmi_subinterface ]
+    properties:
+      virtual_machine_interface_refs: [{ get_resource: contrail_vmi_subinterface }]
+      virtual_network_refs: [{ get_param: [ perimeta_vlan_networks, { get_param: perimeta_subinterface_instance_index } ] }]
+      instance_ip_address: { get_param:  perimeta_ip_0 }
+      instance_ip_family: v4
+
+  contrail_vmi_ipv6:
+    type: OS::ContrailV2::InstanceIp
+    depends_on: [ contrail_vmi_subinterface ]
+    properties:
+      virtual_machine_interface_refs: [{ get_resource: contrail_vmi_subinterface }]
+      virtual_network_refs: [{ get_param: [ perimeta_vlan_networks, { get_param: perimeta_subinterface_instance_index } ] }]
+      instance_ip_address: { get_param:  perimeta_v6_ip_0 }
+      instance_ip_family: v6
index 6e2aebc..4744837 100644 (file)
@@ -508,152 +508,6 @@ topology_template:
           capability: tosca.capabilities.Node
           node: NOKIA-LCP-Base
           relationship: tosca.relationships.DependsOn
-    FORMATXLATE:
-      type: org.openecomp.resource.abstract.nodes.heat.LCP-OPENECOMP.template
-      directives:
-      - substitutable
-      properties:
-        net_ids:
-          ? ''
-          : null
-          access:
-            get_input: access_net_id
-          oam:
-            get_input: oam_net_id
-        flavors:
-          ? ''
-          : ''
-          oam:
-            get_input: oam_flavor_name
-          ims:
-            get_input: ims_flavor_name
-        v4_ntp_server:
-          get_input: v4_ntp_server
-        vnf_name:
-          get_input: vnf_name
-        vmtype_list:
-        - oam
-        - ims
-        name_lists:
-          ? ''
-          : [
-            ]
-          oam:
-            get_input: oam_names
-          ims:
-            get_input: ims_names
-        service_template_filter:
-          substitute_service_template: LCP-OPENECOMP.templateServiceTemplate.yaml
-        vm_counts:
-          get_input: vm_counts
-        v6_dns_server:
-          get_input: v6_dns_server
-        v6_ntp_server:
-          get_input: v6_ntp_server
-        vnf_id:
-          get_input: vnf_id
-        lcm_keypair:
-          get_input: lcm_keypair
-        subnet_ids:
-          ? ''
-          : null
-          access:
-            get_input: access_subnet_id
-          oam:
-            get_input: oam_subnet_id
-        cidrs:
-          ? ''
-          : null
-          access:
-            get_input: access_cidr
-          oam:
-            get_input: oam_cidr
-        default_gateways:
-          ? ''
-          : null
-          access:
-            get_input: access_default_gateway
-          oam:
-            get_input: oam_default_gateway
-        net_types:
-          get_input: net_types
-        ssh_access_key:
-          get_input: ssh_access_key
-        images:
-          ? ''
-          : ''
-          oam:
-            get_input: oam_image_name
-          ims:
-            get_input: ims_image_name
-        v4_enum_server:
-          get_input: v4_enum_server
-        availability_zones:
-        - get_input: availability_zone_0
-        - get_input: availability_zone_1
-        ip_lists:
-          ? ''
-          : [
-            ]
-          ims_access_ips:
-            get_input: ims_access_ips
-          oam_oam_ips:
-            get_input: oam_oam_ips
-        vnf_module_id:
-          get_input: vnf_module_id
-        backup_file:
-          get_input: backup_file
-        v6_enum_server:
-          get_input: v6_enum_server
-        default_action:
-          get_input: default_action
-        v4_dns_server:
-          get_input: v4_dns_server
-        install_config:
-          get_input: install_config
-        cloud_name_delimiter:
-          get_input: cloud_name_delimiter
-        vnf_module_name:
-          get_input: vnf_module_name
-        vm_info:
-          get_input: vm_info
-        vmtype_count: 2
-    NOKIA-LCP-Base:
-      type: org.openecomp.resource.abstract.nodes.heat.LCP-Base.template
-      directives:
-      - substitutable
-      properties:
-        default_prefix:
-          str_replace:
-            template: |
-              {"": "$stk$delimiter"}
-            params:
-              $stk:
-                get_input: OS::stack_name
-              $delimiter:
-                get_attribute:
-                - FORMATXLATE
-                - usage_info
-                - cloud_name_delimiter
-        total_vm_pairs:
-          get_attribute:
-          - FORMATXLATE
-          - total_vm_pairs
-        service_template_filter:
-          substitute_service_template: LCP-Base.templateServiceTemplate.yaml
-        ext_net_list:
-        - oam
-        - access
-        int_net_count: 2
-        ext_net_info:
-          get_attribute:
-          - FORMATXLATE
-          - ext_net_info
-      requirements:
-      - dependency:
-          capability: tosca.capabilities.Node
-          node: FORMATXLATE
-          relationship: tosca.relationships.DependsOn
     IMS_RRG:
       type: org.openecomp.resource.abstract.nodes.heat.LCP-PairGroup.template
       directives:
@@ -828,8 +682,6 @@ topology_template:
           Example HOT file illustrating elasticity groups.
       members:
       - OAM_RRG
-      - FORMATXLATE
-      - NOKIA-LCP-Base
       - IMS_RRG
   outputs:
     oam_management_v4_address:
index d908b2c..df24593 100644 (file)
@@ -698,7 +698,7 @@ public class DataModelUtil {
    * @return the metadata
    */
   public static Map<String, String> createMetadata(String templateName, String templateVersion,
-                                        String templateAuthor) {
+                                                   String templateAuthor) {
 
 
     mdcDataDebugMessage.debugEntryMessage(null, null);
@@ -1318,7 +1318,7 @@ public class DataModelUtil {
    * @return the relationship template
    */
   public static Map<String, RelationshipTemplate> getRelationshipTemplates(ServiceTemplate
-                                                                        serviceTemplate) {
+                                                                               serviceTemplate) {
     if (serviceTemplate == null
         || serviceTemplate.getTopology_template() == null
         || serviceTemplate.getTopology_template().getRelationship_templates() == null) {
@@ -1575,4 +1575,9 @@ public class DataModelUtil {
 
     mdcDataDebugMessage.debugExitMessage(null, null);
   }
+
+  public static boolean isNodeTemplateSectionMissingFromServiceTemplate(ServiceTemplate serviceTemplate){
+    return Objects.isNull(serviceTemplate.getTopology_template() )
+        || MapUtils.isEmpty(serviceTemplate.getTopology_template().getNode_templates());
+  }
 }