forwarder test 61/23461/2
authortalio <tali.orenbach@amdocs.com>
Tue, 14 Nov 2017 14:07:58 +0000 (16:07 +0200)
committertalio <tali.orenbach@amdocs.com>
Tue, 14 Nov 2017 14:17:02 +0000 (16:17 +0200)
add unit tests for forwarder healer

Issue-Id : SDC-653

Change-Id: I06954e855aac09d16422929203926aa983269b92
Signed-off-by: talio <tali.orenbach@amdocs.com>
20 files changed:
common/openecomp-tosca-datatype/src/main/java/org/openecomp/sdc/tosca/datatypes/model/NodeTemplate.java
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/main/java/org/openecomp/sdc/healing/healers/ForwarderCapabilityHealer.java
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/java/org/openecomp/sdc/healing/healers/ForwarderCapabilityHealerTest.java [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/java/org/openecomp/sdc/healing/healers/util/TestUtil.java [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/capabilities.yml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/nodes.yml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/relationships.yml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/capabilities.yml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/nodes.yml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/relationships.yml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testNoPorts/in/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testNoPorts/out/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingContrailPort/in/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingContrailPort/out/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtContrailPort/in/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtContrailPort/out/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtNeutronPort/in/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtNeutronPort/out/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingNeutronPort/in/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]
openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingNeutronPort/out/Nested_pd_serverServiceTemplate.yaml [new file with mode: 0644]

index fabf5ea..9901ea3 100644 (file)
@@ -134,4 +134,66 @@ public class NodeTemplate implements Template {
     NodeTemplate clone = yamlUtil.yamlToObject(yamlUtil.objectToYaml(this), NodeTemplate.class);
     return clone;
   }
+
+  @Override
+  public boolean equals(Object o) {
+    if (this == o) {
+      return true;
+    }
+    if (!(o instanceof NodeTemplate)) {
+      return false;
+    }
+
+    NodeTemplate that = (NodeTemplate) o;
+
+    if (type != null ? !type.equals(that.type) : that.type != null) {
+      return false;
+    }
+    if (description != null ? !description.equals(that.description) : that.description != null) {
+      return false;
+    }
+    if (directives != null ? !directives.equals(that.directives) : that.directives != null) {
+      return false;
+    }
+    if (properties != null ? !properties.equals(that.properties) : that.properties != null) {
+      return false;
+    }
+    if (attributes != null ? !attributes.equals(that.attributes) : that.attributes != null) {
+      return false;
+    }
+    if (requirements != null ? !requirements.equals(that.requirements)
+        : that.requirements != null) {
+      return false;
+    }
+    if (capabilities != null ? !capabilities.equals(that.capabilities)
+        : that.capabilities != null) {
+      return false;
+    }
+    if (interfaces != null ? !interfaces.equals(that.interfaces) : that.interfaces != null) {
+      return false;
+    }
+    if (artifacts != null ? !artifacts.equals(that.artifacts) : that.artifacts != null) {
+      return false;
+    }
+    if (node_filter != null ? !node_filter.equals(that.node_filter) : that.node_filter != null) {
+      return false;
+    }
+    return copy != null ? copy.equals(that.copy) : that.copy == null;
+  }
+
+  @Override
+  public int hashCode() {
+    int result = type != null ? type.hashCode() : 0;
+    result = 31 * result + (description != null ? description.hashCode() : 0);
+    result = 31 * result + (directives != null ? directives.hashCode() : 0);
+    result = 31 * result + (properties != null ? properties.hashCode() : 0);
+    result = 31 * result + (attributes != null ? attributes.hashCode() : 0);
+    result = 31 * result + (requirements != null ? requirements.hashCode() : 0);
+    result = 31 * result + (capabilities != null ? capabilities.hashCode() : 0);
+    result = 31 * result + (interfaces != null ? interfaces.hashCode() : 0);
+    result = 31 * result + (artifacts != null ? artifacts.hashCode() : 0);
+    result = 31 * result + (node_filter != null ? node_filter.hashCode() : 0);
+    result = 31 * result + (copy != null ? copy.hashCode() : 0);
+    return result;
+  }
 }
index 038a0d8..c2d7c2c 100644 (file)
@@ -28,12 +28,23 @@ public class ForwarderCapabilityHealer implements Healer {
 
   private MdcDataDebugMessage mdcDataDebugMessage = new MdcDataDebugMessage();
 
-  private final ServiceModelDao<ToscaServiceModel, ServiceElement> serviceModelDao =
-      ServiceModelDaoFactory.getInstance().createInterface();
+  private final ServiceModelDao<ToscaServiceModel, ServiceElement> serviceModelDao;
   private static ToscaAnalyzerService toscaAnalyzerService = new ToscaAnalyzerServiceImpl();
   private static final String FORWARDER_CAPABILITY_ID = "Forwarder";
   private static final String UNDERSCORE = "_";
 
+  public ForwarderCapabilityHealer() {
+    this.serviceModelDao =
+        ServiceModelDaoFactory.getInstance().createInterface();
+  }
+
+  public ForwarderCapabilityHealer(ServiceModelDao<ToscaServiceModel, ServiceElement>
+                                       serviceModelDao,
+                                   ToscaAnalyzerService toscaAnalyzerService){
+    this.serviceModelDao = serviceModelDao;
+    this.toscaAnalyzerService = toscaAnalyzerService;
+  }
+
   @Override
   public Object heal(Map<String, Object> healingParams) throws Exception {
     String vspId = (String) healingParams.get(SdcCommon.VSP_ID);
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/java/org/openecomp/sdc/healing/healers/ForwarderCapabilityHealerTest.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/java/org/openecomp/sdc/healing/healers/ForwarderCapabilityHealerTest.java
new file mode 100644 (file)
index 0000000..e1d6a9d
--- /dev/null
@@ -0,0 +1,148 @@
+package org.openecomp.sdc.healing.healers;
+
+import org.junit.AfterClass;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Mockito;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.core.model.dao.ServiceModelDao;
+import org.openecomp.core.model.types.ServiceElement;
+import org.openecomp.sdc.common.togglz.ToggleableFeature;
+import org.openecomp.sdc.common.utils.SdcCommon;
+import org.openecomp.sdc.healing.healers.util.TestUtil;
+import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
+import org.openecomp.sdc.tosca.services.ToscaAnalyzerService;
+import org.openecomp.sdc.versioning.dao.types.Version;
+import org.togglz.testing.TestFeatureManager;
+import org.togglz.testing.TestFeatureManagerProvider;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyObject;
+import static org.mockito.Matchers.eq;
+
+public class ForwarderCapabilityHealerTest {
+  private static final String IN_SUFFIX = "/in";
+  private static final String OUT_SUFFIX = "/out";
+  private static final String BASE_DIRECTORY = "/mock/healers/forwarder";
+  private static final String ENTRY_DEFINITION_SERVICE_TEMPLATE = "MainServiceTemplate.yaml";
+  private static TestFeatureManager manager;
+
+  private Map<String,Object> params = new HashMap<>();
+
+  @Mock
+  private ServiceModelDao<ToscaServiceModel, ServiceElement> serviceModelDao;
+  @Mock
+  private ToscaAnalyzerService toscaAnalyzerService;
+  @InjectMocks
+  private ForwarderCapabilityHealer forwarderCapabilityHealer;
+
+  @BeforeClass
+  public static void enableForwarderFeature(){
+    manager = new TestFeatureManager(ToggleableFeature.class);
+    if (!ToggleableFeature.FORWARDER_CAPABILITY.isActive()) {
+      manager.enable(ToggleableFeature.FORWARDER_CAPABILITY);
+    }
+  }
+
+  @AfterClass
+  public static void disableForwarderFeature() {
+    manager.disable(ToggleableFeature.FORWARDER_CAPABILITY);
+    manager = null;
+    TestFeatureManagerProvider.setFeatureManager(null);
+  }
+
+  @Before
+  public void setUp() throws Exception {
+    MockitoAnnotations.initMocks(ForwarderCapabilityHealerTest.this);
+    params.put(SdcCommon.VSP_ID,"1");
+    params.put(SdcCommon.VERSION, new Version(1,1));
+  }
+
+
+  @Test
+  public void testHealingSubstitutionMappingsNeutronPort() throws Exception {
+    testForwarderHealer(
+        "/testSubMappingNeutronPort", "org.openecomp.resource.cp.nodes.heat.network.neutron.Port", true);
+  }
+
+  @Test
+  public void testHealingSubstitutionMappingsContrailPort() throws Exception {
+    testForwarderHealer(
+        "/testSubMappingContrailPort", "org.openecomp.resource.cp.nodes.heat.network.contrail.Port", true);
+  }
+
+  @Test
+  public void testHealingSubstitutionMappingsExtNeutronPort() throws Exception {
+    testForwarderHealer(
+        "/testSubMappingExtNeutronPort", "org.openecomp.resource.cp.v2.extNeutronCP", true);
+  }
+
+  @Test
+  public void testHealingSubstitutionMappingsExtContrailPort() throws Exception {
+    testForwarderHealer(
+        "/testSubMappingExtContrailPort", "org.openecomp.resource.cp.v2.extContrailCP", true);
+  }
+
+  @Test
+  public void testHealingGlobalServiceTemplates () throws Exception {
+    testForwarderHealer("/testGlobalServiceTemplates", null, false);
+  }
+
+  @Test
+  public void testHealingNoPorts() throws Exception {
+    testForwarderHealer("/testNoPorts", null, false);
+  }
+
+  private void testForwarderHealer(String testDirectory,
+                                   String portType,
+                                   boolean needToTestSubMapping) throws Exception {
+
+    ToscaServiceModel toscaServiceModel = TestUtil.loadToscaServiceModel(
+        BASE_DIRECTORY + testDirectory + IN_SUFFIX, null, ENTRY_DEFINITION_SERVICE_TEMPLATE);
+
+    Mockito.doReturn(toscaServiceModel)
+        .when(serviceModelDao).getServiceModel(any(), any());
+
+    if(needToTestSubMapping) {
+      Mockito.doReturn(true)
+          .when(toscaAnalyzerService).isTypeOf(
+          eq(getMockPortNodeTemplate(portType)),
+          eq(ToscaNodeType.NATIVE_NETWORK_PORT),
+          anyObject(), anyObject());
+    }
+
+    validateServiceModelAfterHealing(testDirectory);
+  }
+
+  private void validateServiceModelAfterHealing(String testDirectory) throws Exception {
+    Optional<ToscaServiceModel> serviceModelObject =
+        (Optional<ToscaServiceModel>) forwarderCapabilityHealer.heal(params);
+
+    Assert.assertTrue(serviceModelObject.isPresent());
+    TestUtil
+        .compareToscaServiceModels(
+            BASE_DIRECTORY + testDirectory + OUT_SUFFIX, serviceModelObject.get());
+  }
+
+  private NodeTemplate getMockPortNodeTemplate(String portType) {
+    NodeTemplate nodeTemplate = new NodeTemplate();
+    nodeTemplate.setType(portType);
+
+    Map<String, Object> properties = new HashMap<>();
+    properties.put("exCP_naming", "port_pd01_port_exCP_naming");
+    nodeTemplate.setProperties(properties);
+
+    return nodeTemplate;
+  }
+
+}
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/java/org/openecomp/sdc/healing/healers/util/TestUtil.java b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/java/org/openecomp/sdc/healing/healers/util/TestUtil.java
new file mode 100644 (file)
index 0000000..20ba5eb
--- /dev/null
@@ -0,0 +1,108 @@
+package org.openecomp.sdc.healing.healers.util;
+
+import org.openecomp.core.utilities.json.JsonUtil;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
+import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
+import org.openecomp.sdc.tosca.services.ToscaUtil;
+import org.springframework.util.Assert;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.nio.file.NotDirectoryException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+public class TestUtil {
+  private final static Logger log = (Logger) LoggerFactory.getLogger
+      (TestUtil.class.getName());
+
+  public static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
+                                                        String globalServiceTemplatesPath,
+                                                        String entryDefinitionServiceTemplate)
+      throws IOException {
+    ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
+    Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
+    if (entryDefinitionServiceTemplate == null) {
+      entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
+    }
+
+    loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
+    if (globalServiceTemplatesPath != null) {
+      loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
+    }
+
+    return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
+  }
+
+  private static void loadServiceTemplates(String serviceTemplatesPath,
+                                           ToscaExtensionYamlUtil toscaExtensionYamlUtil,
+                                           Map<String, ServiceTemplate> serviceTemplates)
+      throws IOException {
+    URL urlFile = TestUtil.class.getResource(serviceTemplatesPath);
+    if (urlFile != null) {
+      File pathFile = new File(urlFile.getFile());
+      Collection<File> files = org.apache.commons.io.FileUtils.listFiles(pathFile, null, true);
+      if (files != null) {
+        addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
+      } else {
+        throw new NotDirectoryException(serviceTemplatesPath);
+      }
+    } else {
+      throw new NotDirectoryException(serviceTemplatesPath);
+    }
+  }
+
+  private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
+                                              Collection<File> files,
+                                              ToscaExtensionYamlUtil toscaExtensionYamlUtil)
+      throws IOException {
+    for (File file : files) {
+      try (InputStream yamlFile = new FileInputStream(file)) {
+        ServiceTemplate serviceTemplateFromYaml =
+            toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
+        serviceTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplateFromYaml), serviceTemplateFromYaml);
+        try {
+          yamlFile.close();
+        } catch (IOException ignore) {
+          log.debug("",ignore);
+        }
+      } catch (FileNotFoundException exception) {
+        throw exception;
+      } catch (IOException exception) {
+        throw exception;
+      }
+    }
+  }
+
+  public static void compareToscaServiceModels(String expectedServiceModelPath,
+                                                ToscaServiceModel actualServiceModel)
+      throws IOException {
+    ToscaServiceModel expectedServiceModel =
+        loadToscaServiceModel(expectedServiceModelPath, null, null);
+
+    Map<String, ServiceTemplate> expectedServiceTemplates =
+        new HashMap<>(expectedServiceModel.getServiceTemplates());
+    Map<String, ServiceTemplate> actualServiceTemplates =
+        new HashMap<>(actualServiceModel.getServiceTemplates());
+
+    for (Map.Entry<String, ServiceTemplate> expectedServiceTemplateEntry : expectedServiceTemplates.entrySet()) {
+      String serviceTemplateName = expectedServiceTemplateEntry.getKey();
+      ServiceTemplate actualServiceTemplate =
+          actualServiceTemplates.get(serviceTemplateName);
+
+      Assert.notNull(actualServiceTemplate,
+          "Missing service template in service model : " + serviceTemplateName);
+      org.junit.Assert.assertEquals("Difference in file " + serviceTemplateName,
+          JsonUtil.object2Json(expectedServiceTemplateEntry.getValue()),
+          JsonUtil.object2Json(actualServiceTemplate));
+    }
+  }
+}
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/capabilities.yml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/capabilities.yml
new file mode 100644 (file)
index 0000000..285d6b2
--- /dev/null
@@ -0,0 +1,157 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+tosca_definitions_version: tosca_simple_openecomp_1_0
+
+metadata:
+  filename: openecomp/capabilities.yml
+  version: '1.0'
+
+imports:
+- openecomp_index:
+    file: _index.yml
+
+capability_types:
+
+  org.openecomp.capabilities.attachment.DeploymentFlavor:
+    derived_from: tosca.capabilities.Attachment
+    description: The Node capability indicates the base capabilities of a TOSCA Node Type.
+    properties:
+      DeploymentFlavor:
+        type: map
+        description: Deployment flavors instance
+        required: true
+        status: SUPPORTED
+        entry_schema:
+            type: org.openecomp.datatypes.DeploymentFlavor     
+
+  org.openecomp.capabilities.metric.SnmpTrap:
+    derived_from: org.openecomp.capabilities.Metric
+    description: A node type that includes the Metric capability indicates that it can be monitored using snmp trap.
+    properties:
+      oid:
+        description: Object Id of the metric
+        type: string
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.capabilities.AllottedResource:
+    derived_from: tosca.capabilities.Root
+
+  org.openecomp.capabilities.metric.SnmpPolling:
+    derived_from: org.openecomp.capabilities.Metric
+    description: A node type that includes the Metric capability indicates that it can be monitored using snmp polling.
+    properties:
+      oid:
+        description: Object Id of the metric
+        type: string
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.capabilities.metric.Ceilometer:
+    derived_from: org.openecomp.capabilities.Metric
+    description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+    properties:
+      name:
+        description: Ceilometer metric type name to monitor. (The name ceilometer is using)
+        type: string
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.capabilities.Metric:
+    derived_from: tosca.capabilities.Endpoint
+    description: A node type that includes the Metric capability indicates that it can be monitored.
+    properties:
+      unit:
+        description: Unit of the metric value
+        type: string
+        status: SUPPORTED
+        required: true
+      description:
+        description: Description of the metric
+        type: string
+        status: SUPPORTED
+        required: false
+      type:
+        description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc.
+        type: string
+        status: SUPPORTED
+        required: true
+      category:
+        description: Category of the metric, for an example, compute, disk, network, storage and etc.
+        type: string
+        status: SUPPORTED
+        required: false
+    attributes:
+      value:
+        description: Runtime monitored value
+        type: string
+        status: SUPPORTED
+
+  tosca.capabilities.nfv.VirtualLinkable:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.Metric:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.VirtualBindable:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.VirtualCompute:
+    derived_from: tosca.capabilities.Root
+    properties:
+      virtual_memory:
+        type: tosca.datatypes.nfv.VirtualMemory
+      requested_additional_capabilities:
+        entry_schema:
+          type: tosca.datatypes.nfv.RequestedAdditionalCapability
+        required: false
+        type: map
+      virtual_cpu:
+        type: tosca.datatypes.nfv.VirtualCpu
+
+
+  tosca.capabilities.nfv.VirtualStorage:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.Forwarder:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.ext.Compute.Container.Architecture:
+    derived_from: tosca.capabilities.Root
+    properties:
+      num_cpus:
+        required: false
+        type: string
+      flavor_extra_specs:
+        entry_schema:
+          type: string
+        required: false
+        type: map
+      mem_size:
+        required: false
+        type: string
+
+  tosca.capabilities.nfv.ext.ImageFile:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.ext.LocalAttachment:
+    derived_from: tosca.capabilities.Root
+  # New capability types for Port Mirroring
+  org.openecomp.capabilities.PortMirroring:
+    derived_from: tosca.capabilities.Root
+    properties:
+      connection_point:
+        type: org.openecomp.datatypes.PortMirroringConnectionPointDescription
+        required: true
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/nodes.yml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/nodes.yml
new file mode 100644 (file)
index 0000000..900bef2
--- /dev/null
@@ -0,0 +1,1362 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+tosca_definitions_version: tosca_simple_openecomp_1_0
+
+metadata:
+  filename: openecomp/nodes.yml
+  version: '1.0'
+  
+imports:
+- openecomp_index:
+    file: _index.yml
+
+node_types:
+
+  org.openecomp.resource.vl.nodes.network.Network:
+    derived_from: tosca.nodes.network.Network
+    properties:
+      vendor:
+        type: string
+        required: false
+      vl_name:
+        type: string
+        required: false
+    capabilities:
+      end_point:
+        type: tosca.capabilities.Endpoint
+
+  org.openecomp.resource.abstract.nodes.AbstractSubstitute:
+    derived_from: tosca.nodes.Root
+    properties:
+      service_template_filter:
+        description: Substitution Filter
+        type: org.openecomp.datatypes.substitution.SubstitutionFiltering
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.resource.vl.extVL:
+    derived_from: org.openecomp.resource.vl.nodes.network.Network
+    description: VF Tenant oam protected network
+    properties:
+      network_type:
+        description: OPENECOMP supported network types.
+        type: string
+        required: true
+      network_role:
+        description: |
+          Unique label that defines the role that this network performs.   example: vce oam network, vnat sr-iov1 network
+        type: string
+        required: true
+      network_scope:
+        description: |
+          Uniquely identifies the network scope. Valid values for the network scope   includes: VF - VF-level network. Intra-VF network which connects the VFCs (VMs) inside the VF. SERVICE - Service-level network. Intra-Service network which connects  the VFs within the service GLOBAL - Global network which can be shared by multiple services
+        type: string
+        constraints:
+        - valid_values:
+          - VF
+          - SERVICE
+          - GLOBAL
+      network_technology:
+        description: OPENECOMP supported network technology
+        type: string
+        required: true
+      network_ecomp_naming:
+        type: org.openecomp.datatypes.EcompNaming
+        required: true
+      network_homing:
+        type: org.openecomp.datatypes.EcompHoming
+        required: true
+      network_assignments:
+        type: org.openecomp.datatypes.network.NetworkAssignments
+        required: true
+      provider_network:
+        type: org.openecomp.datatypes.network.ProviderNetwork
+        required: true
+      network_flows:
+        type: org.openecomp.datatypes.network.NetworkFlows
+        required: false
+
+
+  org.openecomp.resource.vfc.nodes.Compute:
+    derived_from: tosca.nodes.Compute
+    capabilities:
+      disk.ephemeral.size:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      instance:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.iops:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu.delta:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.capacity:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.latency:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.usage:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_util:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.allocation:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.latency:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.root.size:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      vcpus:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.iops:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.usage:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.allocation:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.usage:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.capacity:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.resident:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+
+  org.openecomp.resource.abstract.nodes.DFAbstractSubstitute:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      license_feature_group_ref:
+        description: refrence to license feature group
+        type: string
+        status: SUPPORTED
+        required: true
+    requirements:
+    - deployment_flavor:
+        capability: org.openecomp.capabilities.attachment.DeploymentFlavor
+        node: org.openecomp.resource.nodes.DeploymentFlavor
+        relationship: org.openecomp.relationships.AttachesTo
+        occurrences:
+        - 1
+        - UNBOUNDED
+
+  org.openecomp.resource.abstract.nodes.ComplexVFC:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+
+  org.openecomp.resource.abstract.nodes.VFC:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      high_availablity:
+        description: high_availablity
+        type: string
+        status: SUPPORTED
+        required: false
+      vm_image_name:
+        description: Master image_name volume id
+        type: string
+        status: SUPPORTED
+        required: true
+      vm_flavor_name:
+        description: Master image_name volume id
+        type: string
+        status: SUPPORTED
+        required: true
+      nfc_naming_code:
+        description: nfc code for instance naming
+        type: string
+        status: SUPPORTED
+        required: false
+      nfc_code:
+        type: string
+        description: nfc code
+        status: SUPPORTED
+        required: false
+      nfc_function:
+        type: string
+        description: nfc function
+        status: SUPPORTED
+        required: false
+      vm_type_tag:
+        description: vm type based on naming Convention
+        type: string
+        status: SUPPORTED
+        required: false
+      vfc_naming:
+        description: vfc naming
+        type: org.openecomp.datatypes.Naming
+        status: SUPPORTED
+        default: false
+        required: false
+      min_instances:
+        description: Minimum number of VFC Instances
+        type: integer
+        status: SUPPORTED
+        default: 0
+        required: false
+        constraints:
+        - greater_or_equal: 0
+      max_instances:
+        description: Maximum number of VFC Instances
+        type: integer
+        status: SUPPORTED
+        required: false
+        constraints:
+        - greater_or_equal: 1
+
+  org.openecomp.resource.vl.ELine:
+    derived_from: org.openecomp.resource.vl.nodes.network.Network
+    capabilities:
+      linkable:
+        type: tosca.capabilities.network.Linkable
+        occurrences:
+        - 0
+        - 2
+
+  org.openecomp.resource.cp.nodes.network.SubInterface:
+    derived_from: tosca.nodes.network.Port
+
+  org.openecomp.resource.vl.internalVL:
+    derived_from: org.openecomp.resource.vl.nodes.network.Network
+    description: The AT&T internal (VF-level) Virtual Link
+
+  org.openecomp.resource.cp.nodes.network.Port:
+    derived_from: tosca.nodes.network.Port  
+    properties:
+      network_role_tag:
+        description: Must correlate to the set of defined â€œnetwork-role�? tag identifiers from the associated HEAT template
+        type: string
+        required: true
+      mac_requirements:
+        description: identifies MAC address assignments to the CP
+        type: org.openecomp.datatypes.network.MacRequirements
+        required: false
+      vlan_requirements:
+        description: identifies vlan address assignments to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.VlanRequirements
+        required: false
+      ip_requirements:
+        description: identifies IP requirements to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.IpRequirements
+        required: true
+      network_role:
+        description: identical to VL network_role
+        type: string
+        required: false
+      order:
+        description: The order of the CP on the compute instance (e.g. eth2).
+        type: integer
+        required: false
+      exCP_naming:
+        description: CP Name
+        type: org.openecomp.datatypes.Naming
+        required: false
+      subnetpoolid:
+        description: subnet pool id
+        type: string
+        required: false
+    capabilities:
+      network.incoming.packets.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+
+  org.openecomp.resource.nodes.DeploymentFlavor:
+    derived_from: tosca.nodes.Root
+    capabilities:
+      deployment_flavor:
+        description: Allowed deployment flavors of an abstract node
+        type: org.openecomp.capabilities.attachment.DeploymentFlavor
+        occurrences:
+        - 1
+        - UNBOUNDED
+
+  org.openecomp.resource.cp.extCP:
+    derived_from: tosca.nodes.Root
+    description: The AT&T Connection Point base type all other CP derive from
+    properties:
+      network_role:
+        description: identical to VL network_role
+        type: string
+        required: true
+      order:
+        description: The order of the CP on the compute instance (e.g. eth2).
+        type: integer
+        required: true
+      network_role_tag:
+        description: Must correlate to the set of defined â€œnetwork-role�? tag identifiers from the associated HEAT template
+        type: string
+        required: true
+      mac_requirements:
+        description: identifies MAC address assignments to the CP
+        type: org.openecomp.datatypes.network.MacRequirements
+        required: false
+      vlan_requirements:
+        description: identifies vlan address assignments to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.VlanRequirements
+        required: false
+      ip_requirements:
+        description: identifies IP requirements to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.IpRequirements
+        required: true
+    capabilities:
+      internal_connectionPoint:
+        type: tosca.capabilities.Node
+        valid_source_types:
+        - tosca.nodes.network.Port
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+    - virtualBinding:
+        capability: tosca.capabilities.network.Bindable
+        relationship: tosca.relationships.network.BindsTo
+    - external_virtualLink:
+        capability: tosca.capabilities.network.Linkable
+        node: org.openecomp.resource.vl.nodes.network.Network
+        relationship: tosca.relationships.network.LinksTo
+
+  org.openecomp.resource.vfc.nodes.volume:
+    derived_from: tosca.nodes.BlockStorage
+    
+  ### Node types related to Deployment Flavors
+  org.openecomp.resource.abstract.nodes.VnfConfiguration:
+    derived_from: tosca.nodes.Root
+    description: a container for the available flavors
+    properties:
+      allowed_flavors:
+        description: a collection of all available flavor valuesets
+        type: map
+        entry_schema:
+          type: org.openecomp.datatypes.flavors.DeploymentFlavor
+
+  org.openecomp.resource.abstract.nodes.MultiFlavorVFC:
+    derived_from: org.openecomp.resource.abstract.nodes.VFC
+    description: Multi flavored VFC node
+    properties:
+      images:
+        type: map
+        entry_schema:
+          type: org.openecomp.datatypes.ImageInfo
+        required: false
+
+  ## New node types for Port Mirroring
+  org.openecomp.nodes.ServiceProxy:
+    derived_from: tosca.nodes.Root
+
+  org.openecomp.nodes.PortMirroringConfiguration:
+    derived_from: tosca.nodes.Root
+    requirements:
+    - source:
+        capability: org.openecomp.capabilities.PortMirroring
+        occurrences:
+        - 1
+        - UNBOUNDED
+    - collector:
+        capability: org.openecomp.capabilities.PortMirroring
+        occurrences:
+        - 1
+        - 1
+
+  org.openecomp.resource.cp.v2.extCP:
+    derived_from: org.openecomp.resource.cp.nodes.network.Port
+    description: The SDC External Connection Point base type
+    capabilities:
+      port_mirroring:
+        type: org.openecomp.capabilities.PortMirroring
+
+  org.openecomp.resource.cp.v2.extNeutronCP:
+    derived_from: org.openecomp.resource.cp.v2.extCP
+    properties:
+      port_security_enabled:
+        type: boolean
+        description: Flag to enable/disable port security on the network
+        required: false
+        status: SUPPORTED
+      device_id:
+        type: string
+        description: Device ID of this port
+        required: false
+        status: SUPPORTED
+      qos_policy:
+        type: string
+        description: The name or ID of QoS policy to attach to this network
+        required: false
+        status: SUPPORTED
+      allowed_address_pairs:
+        type: list
+        description: Additional MAC/IP address pairs allowed to pass through the port
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.AddressPair
+      binding:vnic_type:
+        type: string
+        description: The vnic type to be bound on the neutron port
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - macvtap
+          - direct
+          - normal
+      value_specs:
+        type: map
+        description: Extra parameters to include in the request
+        required: false
+        default: {
+          }
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      device_owner:
+        type: string
+        description: Name of the network owning the port
+        required: false
+        status: SUPPORTED
+      network:
+        type: string
+        description: Network this port belongs to
+        required: false
+        status: SUPPORTED
+      replacement_policy:
+        type: string
+        description: Policy on how to respond to a stack-update for this resource
+        required: false
+        default: AUTO
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - REPLACE_ALWAYS
+          - AUTO
+      security_groups:
+        type: list
+        description: List of security group names or IDs
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      fixed_ips:
+        type: list
+        description: Desired IPs for this port
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.neutron.port.FixedIps
+      mac_address:
+        type: string
+        description: MAC address to give to this port
+        required: false
+        status: SUPPORTED
+      admin_state_up:
+        type: boolean
+        description: A boolean value specifying the administrative status of the network
+        required: false
+        default: true
+        status: SUPPORTED
+      name:
+        type: string
+        description: A symbolic name for this port
+        required: false
+        status: SUPPORTED
+    attributes:
+      tenant_id:
+        type: string
+        description: Tenant owning the port
+        status: SUPPORTED
+      network_id:
+        type: string
+        description: Unique identifier for the network owning the port
+        status: SUPPORTED
+      qos_policy_id:
+        type: string
+        description: The QoS policy ID attached to this network
+        status: SUPPORTED
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+      subnets:
+        type: list
+        description: Subnets of this network
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      status:
+        type: string
+        description: The status of the network
+        status: SUPPORTED
+    capabilities:
+      attachment:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  org.openecomp.resource.cp.v2.extContrailCP:
+    derived_from: org.openecomp.resource.cp.v2.extCP
+    properties:
+      static_routes:
+        type: list
+        description: An ordered list of static routes to be added to this interface
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.contrail.port.StaticRoute
+      virtual_network:
+        type: string
+        description: Virtual Network for this interface
+        required: true
+        status: SUPPORTED
+      static_route:
+        type: boolean
+        description: Static route enabled
+        required: false
+        default: false
+        status: SUPPORTED
+      allowed_address_pairs:
+        type: list
+        description: List of allowed address pair for this interface
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.contrail.AddressPair
+      shared_ip:
+        type: boolean
+        description: Shared ip enabled
+        required: false
+        default: false
+        status: SUPPORTED
+      ip_address:
+        type: string
+        description: IP for this interface
+        required: false
+        status: SUPPORTED
+      interface_type:
+        type: string
+        description: Interface type
+        required: true
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - management
+          - left
+          - right
+          - other
+    attributes:
+      fq_name:
+        type: string
+        description: fq_name
+        status: SUPPORTED
+  tosca.nodes.nfv.NS.vEPC_NS:
+    derived_from: tosca.nodes.nfv.NS
+    properties:
+      vendor:
+        default: ChinaMobile
+        required: false
+        type: string
+      csarVersion:
+        default: v1.0
+        required: false
+        type: string
+      name:
+        default: vEPC_NS
+        required: false
+        type: string
+      csarProvider:
+        default: ChinaMobile
+        required: false
+        type: string
+      id:
+        default: vEPC_NS
+        required: false
+        type: string
+      version:
+        default: v1.0
+        required: false
+        type: string
+      csarType:
+        default: NSAR
+        required: false
+        type: string
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.NS.vIMS_NS:
+    derived_from: tosca.nodes.nfv.NS
+    properties:
+      vendor:
+        default: ChinaMobile
+        required: false
+        type: string
+      csarVersion:
+        default: v1.0
+        required: false
+        type: string
+      name:
+        default: vIMS_NS
+        required: false
+        type: string
+      csarProvider:
+        default: ChinaMobile
+        required: false
+        type: string
+      id:
+        default: vIMS_NS
+        required: false
+        type: string
+      version:
+        default: v1.0
+        required: false
+        type: string
+      csarType:
+        default: NSAR
+        required: false
+        type: string
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.NS:
+    derived_from: tosca.nodes.Root
+    properties:
+      vendor:
+        required: false
+        type: string
+      name:
+        required: false
+        type: string
+      id:
+        required: false
+        type: string
+      version:
+        required: false
+        type: string
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.VDU.Compute:
+    attributes:
+      private_address:
+        type: string
+      public_address:
+        type: string
+      networks:
+        type: string
+      ports:
+        type: string
+    capabilities:
+      scalable:
+        type: tosca.capabilities.Scalable
+      virtual_compute:
+        type: tosca.capabilities.nfv.VirtualCompute
+      endpoint:
+        type: tosca.capabilities.Endpoint.Admin
+      os:
+        type: tosca.capabilities.OperatingSystem
+      virtual_binding:
+        type: tosca.capabilities.nfv.VirtualBindable
+      host:
+        type: tosca.capabilities.Container
+      binding:
+        type: tosca.capabilities.network.Bindable
+      monitoring_parameter:
+        type: tosca.capabilities.nfv.Metric
+    derived_from: tosca.nodes.Root
+    properties:
+      configurable_properties:
+        entry_schema:
+          type: tosca.datatypes.nfv.VnfcConfigurableProperties
+        type: map
+      name:
+        type: string
+      nfvi_constraints:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      descrption:
+        type: string
+      boot_order:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+    requirements:
+    - local_storage:
+        capability: tosca.capabilities.Attachment
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtual_storage:
+        capability: tosca.capabilities.nfv.VirtualStorage
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.VDU.VirtualStorage:
+    capabilities:
+      virtual_storage:
+        type: tosca.capabilities.nfv.VirtualStorage
+    derived_from: tosca.nodes.Root
+    properties:
+      id:
+        type: string
+      size_of_storage:
+        type: string
+      rdma_enabled:
+        required: false
+        type: boolean
+      type_of_storage:
+        type: string
+
+  tosca.nodes.nfv.VduCpd:
+    derived_from: tosca.nodes.Root
+    properties:
+      virtual_network_interface_requirements:
+        entry_schema:
+          type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements
+        required: false
+        type: list
+      role:
+        constraints:
+        - valid_values:
+          - root
+          - leaf
+        required: false
+        type: string
+      bitrate_requirement:
+        required: false
+        type: integer
+      description:
+        required: false
+        type: string
+      layer_protocol:
+        constraints:
+        - valid_values:
+          - ethernet
+          - mpls
+          - odu2
+          - ipv4
+          - ipv6
+          - pseudo_wire
+        type: string
+      address_data:
+        entry_schema:
+          type: tosca.datatype.nfv.AddressData
+        required: false
+        type: list
+    requirements:
+    - virtual_binding:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtual_link:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+  tosca.nodes.nfv.ext.ImageFile:
+    capabilities:
+      guest_os:
+        type: tosca.capabilities.nfv.ext.GuestOs
+      image_fle:
+        type: tosca.capabilities.nfv.ext.ImageFile
+    derived_from: tosca.nodes.Root
+    properties:
+      file_url:
+        required: false
+        type: string
+      container_type:
+        required: false
+        type: string
+      name:
+        required: false
+        type: string
+      disk_format:
+        required: false
+        type: string
+      version:
+        required: false
+        type: string
+  tosca.nodes.nfv.ext.LocalStorage:
+    capabilities:
+      local_attachment:
+        type: tosca.capabilities.nfv.ext.LocalAttachment
+    derived_from: tosca.nodes.Root
+    properties:
+      size:
+        required: false
+        type: string
+      disk_type:
+        required: false
+        type: string
+  tosca.nodes.nfv.ext.zte.CP:
+    capabilities:
+      forwarder:
+        type: tosca.capabilities.nfv.Forwarder
+    derived_from: tosca.nodes.Root
+    properties:
+      guest_os_mtu:
+        required: false
+        type: integer
+      bandwidth:
+        required: false
+        type: integer
+      interface_name:
+        required: false
+        type: string
+      allowed_address_pairs:
+        entry_schema:
+          type: tosca.datatypes.nfv.ext.AddressPairs
+        required: false
+        type: list
+      ip_address:
+        required: false
+        type: string
+      bond:
+        required: false
+        type: string
+      proxiedVNFs:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      sfc_encapsulation:
+        required: false
+        type: string
+      floating_ip_address:
+        required: false
+        type: tosca.datatypes.nfv.ext.FloatingIP
+      service_ip_address:
+        required: false
+        type: string
+      mac_address:
+        required: false
+        type: string
+      proxiedVNFtype:
+        required: false
+        type: string
+      macbond:
+        required: false
+        type: string
+      vnic_type:
+        required: false
+        type: string
+      direction:
+        required: false
+        type: string
+      order:
+        required: false
+        type: integer
+    requirements:
+    - forwarder:
+        capability: tosca.capabilities.nfv.Forwarder
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtualbinding:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+  tosca.nodes.nfv.ext.zte.VDU:
+    capabilities:
+      scalable:
+        type: tosca.capabilities.Scalable
+      monitoring_parameter:
+        type: tosca.capabilities.nfv.Metric
+      nfv_compute:
+        type: tosca.capabilities.nfv.ext.Compute.Container.Architecture
+      virtualbinding:
+        type: tosca.capabilities.nfv.VirtualBindable
+    derived_from: tosca.nodes.Root
+    properties:
+      manual_scale_select_vim:
+        required: false
+        type: boolean
+      vdu_type:
+        required: false
+        type: string
+      watchdog:
+        required: false
+        type: tosca.datatypes.nfv.ext.zte.WatchDog
+      name:
+        required: false
+        type: string
+      local_affinity_antiaffinity_rule:
+        required: false
+        type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule
+      support_scaling:
+        required: false
+        type: boolean
+      storage_policy:
+        required: false
+        type: string
+      key_vdu:
+        required: false
+        type: boolean
+      location_info:
+        required: false
+        type: tosca.datatypes.nfv.ext.LocationInfo
+      inject_data_list:
+        entry_schema:
+          type: tosca.datatypes.nfv.ext.InjectData
+        required: false
+        type: list
+    requirements:
+    - guest_os:
+        capability: tosca.capabilities.nfv.ext.GuestOs
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - local_storage:
+        capability: tosca.capabilities.nfv.ext.LocalAttachment
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - volume_storage:
+        capability: tosca.capabilities.Attachment
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - dependency:
+        capability: tosca.capabilities.Node
+        occurrences:
+        - 0
+        - UNBOUNDED
+  tosca.nodes.nfv.ext.zte.VL:
+    capabilities:
+      virtual_linkable:
+        type: tosca.capabilities.nfv.VirtualLinkable
+    derived_from: tosca.nodes.Root
+    properties:
+      segmentation_id:
+        required: false
+        type: string
+      network_name:
+        required: false
+        type: string
+      is_predefined:
+        required: false
+        type: boolean
+      mtu:
+        required: false
+        type: integer
+      dns_nameservers:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      physical_network:
+        required: false
+        type: string
+      dhcp_enabled:
+        required: false
+        type: boolean
+      network_id:
+        required: false
+        type: string
+      host_routes:
+        entry_schema:
+          type: tosca.datatypes.nfv.ext.HostRouteInfo
+        required: false
+        type: list
+      ip_version:
+        required: false
+        type: integer
+      vendor:
+        required: false
+        type: string
+      name:
+        required: false
+        type: string
+      start_ip:
+        required: false
+        type: string
+      vlan_transparent:
+        required: false
+        type: boolean
+      cidr:
+        required: false
+        type: string
+      gateway_ip:
+        required: false
+        type: string
+      network_type:
+        required: false
+        type: string
+      end_ip:
+        required: false
+        type: string
+      location_info:
+        required: false
+        type: tosca.datatypes.nfv.ext.LocationInfo
+  tosca.nodes.nfv.ext.zte.VNF:
+    capabilities:
+      forwarder:
+        type: tosca.capabilities.nfv.Forwarder
+    derived_from: tosca.nodes.Root
+    properties:
+      request_reclassification:
+        required: false
+        type: boolean
+      domain_type:
+        required: false
+        type: string
+      nsh_aware:
+        required: false
+        type: boolean
+      plugin_info:
+        required: false
+        type: string
+      adjust_vnf_capacity:
+        required: false
+        type: boolean
+      vnfd_version:
+        required: false
+        type: string
+      vmnumber_overquota_alarm:
+        required: false
+        type: boolean
+      custom_properties:
+        entry_schema:
+          type: string
+        required: false
+        type: map
+      version:
+        required: false
+        type: string
+      cross_dc:
+        required: false
+        type: boolean
+      script_info:
+        required: false
+        type: string
+      vendor:
+        required: false
+        type: string
+      is_shared:
+        required: false
+        type: boolean
+      name:
+        required: false
+        type: string
+      vnf_extend_type:
+        required: false
+        type: string
+      id:
+        required: false
+        type: string
+      vnf_type:
+        required: false
+        type: string
+      is_sfc_proxy:
+        required: false
+        type: boolean
+    requirements:
+    - forwarder:
+        capability: tosca.capabilities.nfv.Forwarder
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.VnfVirtualLinkDesc:
+    capabilities:
+      monitoring_parameters:
+        type: tosca.capabilities.nfv.Metric
+      virtual_linkable:
+        type: tosca.capabilities.nfv.VirtualLinkable
+    derived_from: tosca.nodes.Root
+    properties:
+      vl_flavours:
+        entry_schema:
+          type: string
+        type: map
+      description:
+        required: false
+        type: string
+      test_access:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      connectivity_type:
+        type: tosca.datatypes.nfv.ConnectivityType
+
+  org.openecomp.nodes.ForwardingPath:
+    derived_from: tosca.nodes.Root
+    properties:
+      target_range:
+        type: list
+        entry_schema:
+          description: Identifier of the reciever port of the VNF or the service
+          type: integer
+      protocol:
+        type: string
+        description: protocol type that runs on the link
+    requirements:
+    - forwarder:
+        capability: tosca.capabilities.nfv.Forwarder
+        relationship: org.openecomp.relationships.ForwardsTo
+        occurrences: [ 0, UNBOUNDED ]
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/relationships.yml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/in/openecomp/relationships.yml
new file mode 100644 (file)
index 0000000..220658a
--- /dev/null
@@ -0,0 +1,68 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+tosca_definitions_version: tosca_simple_openecomp_1_0
+
+metadata:
+  filename: openecomp/relationships.yml
+  version: '1.0'
+
+imports:
+- openecomp_index:
+    file: _index.yml
+
+relationship_types:
+
+  org.openecomp.relationships.VolumeAttachesTo:
+    derived_from: org.openecomp.relationships.AttachesTo
+    description: This type represents an attachment relationship for associating volume
+    properties:
+      volume_id:
+        description: The ID of the volume to be attached
+        type: string
+        status: SUPPORTED
+        required: true
+      instance_uuid:
+        description: The ID of the server to which the volume attaches
+        type: string
+        status: SUPPORTED
+        required: true
+    attributes:
+      show:
+        description: Detailed information about resource
+        type: string
+        status: SUPPORTED
+
+  org.openecomp.relationships.AttachesTo:
+    derived_from: tosca.relationships.AttachesTo
+    description: This type represents an attachment relationship
+    properties:
+      location:
+        description: The relative location (e.g., path on the file system), which provides the root location to address an attached node.
+        type: string
+        status: SUPPORTED
+        required: false
+        
+  tosca.relationships.nfv.VDU.AttachedTo:
+    derived_from: tosca.relationships.Root
+    properties:
+      location:
+        required: false
+        type: string
+
+  tosca.relationships.nfv.VirtualBindsTo:
+    derived_from: tosca.relationships.Root
+
+  tosca.relationships.nfv.VirtualLinksTo:
+    derived_from: tosca.relationships.Root
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/capabilities.yml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/capabilities.yml
new file mode 100644 (file)
index 0000000..9f09778
--- /dev/null
@@ -0,0 +1,160 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+tosca_definitions_version: tosca_simple_openecomp_1_0
+
+metadata:
+  filename: openecomp/capabilities.yml
+  version: '1.0'
+
+imports:
+- openecomp_index:
+    file: _index.yml
+
+capability_types:
+
+  org.openecomp.capabilities.attachment.DeploymentFlavor:
+    derived_from: tosca.capabilities.Attachment
+    description: The Node capability indicates the base capabilities of a TOSCA Node Type.
+    properties:
+      DeploymentFlavor:
+        type: map
+        description: Deployment flavors instance
+        required: true
+        status: SUPPORTED
+        entry_schema:
+            type: org.openecomp.datatypes.DeploymentFlavor     
+
+  org.openecomp.capabilities.metric.SnmpTrap:
+    derived_from: org.openecomp.capabilities.Metric
+    description: A node type that includes the Metric capability indicates that it can be monitored using snmp trap.
+    properties:
+      oid:
+        description: Object Id of the metric
+        type: string
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.capabilities.AllottedResource:
+    derived_from: tosca.capabilities.Root
+
+  org.openecomp.capabilities.metric.SnmpPolling:
+    derived_from: org.openecomp.capabilities.Metric
+    description: A node type that includes the Metric capability indicates that it can be monitored using snmp polling.
+    properties:
+      oid:
+        description: Object Id of the metric
+        type: string
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.capabilities.metric.Ceilometer:
+    derived_from: org.openecomp.capabilities.Metric
+    description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+    properties:
+      name:
+        description: Ceilometer metric type name to monitor. (The name ceilometer is using)
+        type: string
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.capabilities.Metric:
+    derived_from: tosca.capabilities.Endpoint
+    description: A node type that includes the Metric capability indicates that it can be monitored.
+    properties:
+      unit:
+        description: Unit of the metric value
+        type: string
+        status: SUPPORTED
+        required: true
+      description:
+        description: Description of the metric
+        type: string
+        status: SUPPORTED
+        required: false
+      type:
+        description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc.
+        type: string
+        status: SUPPORTED
+        required: true
+      category:
+        description: Category of the metric, for an example, compute, disk, network, storage and etc.
+        type: string
+        status: SUPPORTED
+        required: false
+    attributes:
+      value:
+        description: Runtime monitored value
+        type: string
+        status: SUPPORTED
+
+  tosca.capabilities.nfv.VirtualLinkable:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.Metric:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.VirtualBindable:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.VirtualCompute:
+    derived_from: tosca.capabilities.Root
+    properties:
+      virtual_memory:
+        type: tosca.datatypes.nfv.VirtualMemory
+      requested_additional_capabilities:
+        entry_schema:
+          type: tosca.datatypes.nfv.RequestedAdditionalCapability
+        required: false
+        type: map
+      virtual_cpu:
+        type: tosca.datatypes.nfv.VirtualCpu
+
+
+  tosca.capabilities.nfv.VirtualStorage:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.Forwarder:
+    derived_from: tosca.capabilities.Root
+
+  org.openecomp.capabilities.Forwarder:
+      derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.ext.Compute.Container.Architecture:
+    derived_from: tosca.capabilities.Root
+    properties:
+      num_cpus:
+        required: false
+        type: string
+      flavor_extra_specs:
+        entry_schema:
+          type: string
+        required: false
+        type: map
+      mem_size:
+        required: false
+        type: string
+
+  tosca.capabilities.nfv.ext.ImageFile:
+    derived_from: tosca.capabilities.Root
+
+  tosca.capabilities.nfv.ext.LocalAttachment:
+    derived_from: tosca.capabilities.Root
+  # New capability types for Port Mirroring
+  org.openecomp.capabilities.PortMirroring:
+    derived_from: tosca.capabilities.Root
+    properties:
+      connection_point:
+        type: org.openecomp.datatypes.PortMirroringConnectionPointDescription
+        required: true
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/nodes.yml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/nodes.yml
new file mode 100644 (file)
index 0000000..6b9d735
--- /dev/null
@@ -0,0 +1,1364 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+tosca_definitions_version: tosca_simple_openecomp_1_0
+
+metadata:
+  filename: openecomp/nodes.yml
+  version: '1.0'
+  
+imports:
+- openecomp_index:
+    file: _index.yml
+
+node_types:
+
+  org.openecomp.resource.vl.nodes.network.Network:
+    derived_from: tosca.nodes.network.Network
+    properties:
+      vendor:
+        type: string
+        required: false
+      vl_name:
+        type: string
+        required: false
+    capabilities:
+      end_point:
+        type: tosca.capabilities.Endpoint
+
+  org.openecomp.resource.abstract.nodes.AbstractSubstitute:
+    derived_from: tosca.nodes.Root
+    properties:
+      service_template_filter:
+        description: Substitution Filter
+        type: org.openecomp.datatypes.substitution.SubstitutionFiltering
+        status: SUPPORTED
+        required: true
+
+  org.openecomp.resource.vl.extVL:
+    derived_from: org.openecomp.resource.vl.nodes.network.Network
+    description: VF Tenant oam protected network
+    properties:
+      network_type:
+        description: OPENECOMP supported network types.
+        type: string
+        required: true
+      network_role:
+        description: |
+          Unique label that defines the role that this network performs.   example: vce oam network, vnat sr-iov1 network
+        type: string
+        required: true
+      network_scope:
+        description: |
+          Uniquely identifies the network scope. Valid values for the network scope   includes: VF - VF-level network. Intra-VF network which connects the VFCs (VMs) inside the VF. SERVICE - Service-level network. Intra-Service network which connects  the VFs within the service GLOBAL - Global network which can be shared by multiple services
+        type: string
+        constraints:
+        - valid_values:
+          - VF
+          - SERVICE
+          - GLOBAL
+      network_technology:
+        description: OPENECOMP supported network technology
+        type: string
+        required: true
+      network_ecomp_naming:
+        type: org.openecomp.datatypes.EcompNaming
+        required: true
+      network_homing:
+        type: org.openecomp.datatypes.EcompHoming
+        required: true
+      network_assignments:
+        type: org.openecomp.datatypes.network.NetworkAssignments
+        required: true
+      provider_network:
+        type: org.openecomp.datatypes.network.ProviderNetwork
+        required: true
+      network_flows:
+        type: org.openecomp.datatypes.network.NetworkFlows
+        required: false
+
+
+  org.openecomp.resource.vfc.nodes.Compute:
+    derived_from: tosca.nodes.Compute
+    capabilities:
+      disk.ephemeral.size:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      instance:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.iops:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu.delta:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.capacity:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.latency:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.usage:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu_util:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.allocation:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.latency:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      cpu:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.root.size:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      vcpus:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.iops:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.usage:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.read.requests.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.write.requests.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.allocation:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.read.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.usage:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.device.capacity:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      memory.resident:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      disk.write.requests:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+
+  org.openecomp.resource.abstract.nodes.DFAbstractSubstitute:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      license_feature_group_ref:
+        description: refrence to license feature group
+        type: string
+        status: SUPPORTED
+        required: true
+    requirements:
+    - deployment_flavor:
+        capability: org.openecomp.capabilities.attachment.DeploymentFlavor
+        node: org.openecomp.resource.nodes.DeploymentFlavor
+        relationship: org.openecomp.relationships.AttachesTo
+        occurrences:
+        - 1
+        - UNBOUNDED
+
+  org.openecomp.resource.abstract.nodes.ComplexVFC:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+
+  org.openecomp.resource.abstract.nodes.VFC:
+    derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute
+    properties:
+      high_availablity:
+        description: high_availablity
+        type: string
+        status: SUPPORTED
+        required: false
+      vm_image_name:
+        description: Master image_name volume id
+        type: string
+        status: SUPPORTED
+        required: true
+      vm_flavor_name:
+        description: Master image_name volume id
+        type: string
+        status: SUPPORTED
+        required: true
+      nfc_naming_code:
+        description: nfc code for instance naming
+        type: string
+        status: SUPPORTED
+        required: false
+      nfc_code:
+        type: string
+        description: nfc code
+        status: SUPPORTED
+        required: false
+      nfc_function:
+        type: string
+        description: nfc function
+        status: SUPPORTED
+        required: false
+      vm_type_tag:
+        description: vm type based on naming Convention
+        type: string
+        status: SUPPORTED
+        required: false
+      vfc_naming:
+        description: vfc naming
+        type: org.openecomp.datatypes.Naming
+        status: SUPPORTED
+        default: false
+        required: false
+      min_instances:
+        description: Minimum number of VFC Instances
+        type: integer
+        status: SUPPORTED
+        default: 0
+        required: false
+        constraints:
+        - greater_or_equal: 0
+      max_instances:
+        description: Maximum number of VFC Instances
+        type: integer
+        status: SUPPORTED
+        required: false
+        constraints:
+        - greater_or_equal: 1
+
+  org.openecomp.resource.vl.ELine:
+    derived_from: org.openecomp.resource.vl.nodes.network.Network
+    capabilities:
+      linkable:
+        type: tosca.capabilities.network.Linkable
+        occurrences:
+        - 0
+        - 2
+
+  org.openecomp.resource.cp.nodes.network.SubInterface:
+    derived_from: tosca.nodes.network.Port
+
+  org.openecomp.resource.vl.internalVL:
+    derived_from: org.openecomp.resource.vl.nodes.network.Network
+    description: The AT&T internal (VF-level) Virtual Link
+
+  org.openecomp.resource.cp.nodes.network.Port:
+    derived_from: tosca.nodes.network.Port  
+    properties:
+      network_role_tag:
+        description: Must correlate to the set of defined â€œnetwork-role�? tag identifiers from the associated HEAT template
+        type: string
+        required: true
+      mac_requirements:
+        description: identifies MAC address assignments to the CP
+        type: org.openecomp.datatypes.network.MacRequirements
+        required: false
+      vlan_requirements:
+        description: identifies vlan address assignments to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.VlanRequirements
+        required: false
+      ip_requirements:
+        description: identifies IP requirements to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.IpRequirements
+        required: true
+      network_role:
+        description: identical to VL network_role
+        type: string
+        required: false
+      order:
+        description: The order of the CP on the compute instance (e.g. eth2).
+        type: integer
+        required: false
+      exCP_naming:
+        description: CP Name
+        type: org.openecomp.datatypes.Naming
+        required: false
+      subnetpoolid:
+        description: subnet pool id
+        type: string
+        required: false
+    capabilities:
+      network.incoming.packets.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.packets.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outpoing.packets:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.bytes:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.outgoing.bytes.rate:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      network.incoming.packets:
+        description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer.
+        type: org.openecomp.capabilities.metric.Ceilometer
+        occurrences:
+        - 1
+        - UNBOUNDED
+      forwarder:
+        type: org.openecomp.capabilities.Forwarder
+
+  org.openecomp.resource.nodes.DeploymentFlavor:
+    derived_from: tosca.nodes.Root
+    capabilities:
+      deployment_flavor:
+        description: Allowed deployment flavors of an abstract node
+        type: org.openecomp.capabilities.attachment.DeploymentFlavor
+        occurrences:
+        - 1
+        - UNBOUNDED
+
+  org.openecomp.resource.cp.extCP:
+    derived_from: tosca.nodes.Root
+    description: The AT&T Connection Point base type all other CP derive from
+    properties:
+      network_role:
+        description: identical to VL network_role
+        type: string
+        required: true
+      order:
+        description: The order of the CP on the compute instance (e.g. eth2).
+        type: integer
+        required: true
+      network_role_tag:
+        description: Must correlate to the set of defined â€œnetwork-role�? tag identifiers from the associated HEAT template
+        type: string
+        required: true
+      mac_requirements:
+        description: identifies MAC address assignments to the CP
+        type: org.openecomp.datatypes.network.MacRequirements
+        required: false
+      vlan_requirements:
+        description: identifies vlan address assignments to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.VlanRequirements
+        required: false
+      ip_requirements:
+        description: identifies IP requirements to the CP
+        type: list
+        entry_schema:
+          type: org.openecomp.datatypes.network.IpRequirements
+        required: true
+    capabilities:
+      internal_connectionPoint:
+        type: tosca.capabilities.Node
+        valid_source_types:
+        - tosca.nodes.network.Port
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.network.Linkable
+        relationship: tosca.relationships.network.LinksTo
+    - virtualBinding:
+        capability: tosca.capabilities.network.Bindable
+        relationship: tosca.relationships.network.BindsTo
+    - external_virtualLink:
+        capability: tosca.capabilities.network.Linkable
+        node: org.openecomp.resource.vl.nodes.network.Network
+        relationship: tosca.relationships.network.LinksTo
+
+  org.openecomp.resource.vfc.nodes.volume:
+    derived_from: tosca.nodes.BlockStorage
+    
+  ### Node types related to Deployment Flavors
+  org.openecomp.resource.abstract.nodes.VnfConfiguration:
+    derived_from: tosca.nodes.Root
+    description: a container for the available flavors
+    properties:
+      allowed_flavors:
+        description: a collection of all available flavor valuesets
+        type: map
+        entry_schema:
+          type: org.openecomp.datatypes.flavors.DeploymentFlavor
+
+  org.openecomp.resource.abstract.nodes.MultiFlavorVFC:
+    derived_from: org.openecomp.resource.abstract.nodes.VFC
+    description: Multi flavored VFC node
+    properties:
+      images:
+        type: map
+        entry_schema:
+          type: org.openecomp.datatypes.ImageInfo
+        required: false
+
+  ## New node types for Port Mirroring
+  org.openecomp.nodes.ServiceProxy:
+    derived_from: tosca.nodes.Root
+
+  org.openecomp.nodes.PortMirroringConfiguration:
+    derived_from: tosca.nodes.Root
+    requirements:
+    - source:
+        capability: org.openecomp.capabilities.PortMirroring
+        occurrences:
+        - 1
+        - UNBOUNDED
+    - collector:
+        capability: org.openecomp.capabilities.PortMirroring
+        occurrences:
+        - 1
+        - 1
+
+  org.openecomp.resource.cp.v2.extCP:
+    derived_from: org.openecomp.resource.cp.nodes.network.Port
+    description: The SDC External Connection Point base type
+    capabilities:
+      port_mirroring:
+        type: org.openecomp.capabilities.PortMirroring
+
+  org.openecomp.resource.cp.v2.extNeutronCP:
+    derived_from: org.openecomp.resource.cp.v2.extCP
+    properties:
+      port_security_enabled:
+        type: boolean
+        description: Flag to enable/disable port security on the network
+        required: false
+        status: SUPPORTED
+      device_id:
+        type: string
+        description: Device ID of this port
+        required: false
+        status: SUPPORTED
+      qos_policy:
+        type: string
+        description: The name or ID of QoS policy to attach to this network
+        required: false
+        status: SUPPORTED
+      allowed_address_pairs:
+        type: list
+        description: Additional MAC/IP address pairs allowed to pass through the port
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.AddressPair
+      binding:vnic_type:
+        type: string
+        description: The vnic type to be bound on the neutron port
+        required: false
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - macvtap
+          - direct
+          - normal
+      value_specs:
+        type: map
+        description: Extra parameters to include in the request
+        required: false
+        default: {
+          }
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      device_owner:
+        type: string
+        description: Name of the network owning the port
+        required: false
+        status: SUPPORTED
+      network:
+        type: string
+        description: Network this port belongs to
+        required: false
+        status: SUPPORTED
+      replacement_policy:
+        type: string
+        description: Policy on how to respond to a stack-update for this resource
+        required: false
+        default: AUTO
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - REPLACE_ALWAYS
+          - AUTO
+      security_groups:
+        type: list
+        description: List of security group names or IDs
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      fixed_ips:
+        type: list
+        description: Desired IPs for this port
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.neutron.port.FixedIps
+      mac_address:
+        type: string
+        description: MAC address to give to this port
+        required: false
+        status: SUPPORTED
+      admin_state_up:
+        type: boolean
+        description: A boolean value specifying the administrative status of the network
+        required: false
+        default: true
+        status: SUPPORTED
+      name:
+        type: string
+        description: A symbolic name for this port
+        required: false
+        status: SUPPORTED
+    attributes:
+      tenant_id:
+        type: string
+        description: Tenant owning the port
+        status: SUPPORTED
+      network_id:
+        type: string
+        description: Unique identifier for the network owning the port
+        status: SUPPORTED
+      qos_policy_id:
+        type: string
+        description: The QoS policy ID attached to this network
+        status: SUPPORTED
+      show:
+        type: string
+        description: Detailed information about resource
+        status: SUPPORTED
+      subnets:
+        type: list
+        description: Subnets of this network
+        status: SUPPORTED
+        entry_schema:
+          type: string
+      status:
+        type: string
+        description: The status of the network
+        status: SUPPORTED
+    capabilities:
+      attachment:
+        type: tosca.capabilities.Attachment
+        occurrences:
+        - 1
+        - UNBOUNDED
+      binding:
+        type: tosca.capabilities.network.Bindable
+        valid_source_types:
+        - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  org.openecomp.resource.cp.v2.extContrailCP:
+    derived_from: org.openecomp.resource.cp.v2.extCP
+    properties:
+      static_routes:
+        type: list
+        description: An ordered list of static routes to be added to this interface
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.contrail.port.StaticRoute
+      virtual_network:
+        type: string
+        description: Virtual Network for this interface
+        required: true
+        status: SUPPORTED
+      static_route:
+        type: boolean
+        description: Static route enabled
+        required: false
+        default: false
+        status: SUPPORTED
+      allowed_address_pairs:
+        type: list
+        description: List of allowed address pair for this interface
+        required: false
+        status: SUPPORTED
+        entry_schema:
+          type: org.openecomp.datatypes.heat.network.contrail.AddressPair
+      shared_ip:
+        type: boolean
+        description: Shared ip enabled
+        required: false
+        default: false
+        status: SUPPORTED
+      ip_address:
+        type: string
+        description: IP for this interface
+        required: false
+        status: SUPPORTED
+      interface_type:
+        type: string
+        description: Interface type
+        required: true
+        status: SUPPORTED
+        constraints:
+        - valid_values:
+          - management
+          - left
+          - right
+          - other
+    attributes:
+      fq_name:
+        type: string
+        description: fq_name
+        status: SUPPORTED
+  tosca.nodes.nfv.NS.vEPC_NS:
+    derived_from: tosca.nodes.nfv.NS
+    properties:
+      vendor:
+        default: ChinaMobile
+        required: false
+        type: string
+      csarVersion:
+        default: v1.0
+        required: false
+        type: string
+      name:
+        default: vEPC_NS
+        required: false
+        type: string
+      csarProvider:
+        default: ChinaMobile
+        required: false
+        type: string
+      id:
+        default: vEPC_NS
+        required: false
+        type: string
+      version:
+        default: v1.0
+        required: false
+        type: string
+      csarType:
+        default: NSAR
+        required: false
+        type: string
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.NS.vIMS_NS:
+    derived_from: tosca.nodes.nfv.NS
+    properties:
+      vendor:
+        default: ChinaMobile
+        required: false
+        type: string
+      csarVersion:
+        default: v1.0
+        required: false
+        type: string
+      name:
+        default: vIMS_NS
+        required: false
+        type: string
+      csarProvider:
+        default: ChinaMobile
+        required: false
+        type: string
+      id:
+        default: vIMS_NS
+        required: false
+        type: string
+      version:
+        default: v1.0
+        required: false
+        type: string
+      csarType:
+        default: NSAR
+        required: false
+        type: string
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.NS:
+    derived_from: tosca.nodes.Root
+    properties:
+      vendor:
+        required: false
+        type: string
+      name:
+        required: false
+        type: string
+      id:
+        required: false
+        type: string
+      version:
+        required: false
+        type: string
+    requirements:
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.VDU.Compute:
+    attributes:
+      private_address:
+        type: string
+      public_address:
+        type: string
+      networks:
+        type: string
+      ports:
+        type: string
+    capabilities:
+      scalable:
+        type: tosca.capabilities.Scalable
+      virtual_compute:
+        type: tosca.capabilities.nfv.VirtualCompute
+      endpoint:
+        type: tosca.capabilities.Endpoint.Admin
+      os:
+        type: tosca.capabilities.OperatingSystem
+      virtual_binding:
+        type: tosca.capabilities.nfv.VirtualBindable
+      host:
+        type: tosca.capabilities.Container
+      binding:
+        type: tosca.capabilities.network.Bindable
+      monitoring_parameter:
+        type: tosca.capabilities.nfv.Metric
+    derived_from: tosca.nodes.Root
+    properties:
+      configurable_properties:
+        entry_schema:
+          type: tosca.datatypes.nfv.VnfcConfigurableProperties
+        type: map
+      name:
+        type: string
+      nfvi_constraints:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      descrption:
+        type: string
+      boot_order:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+    requirements:
+    - local_storage:
+        capability: tosca.capabilities.Attachment
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtual_storage:
+        capability: tosca.capabilities.nfv.VirtualStorage
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.VDU.VirtualStorage:
+    capabilities:
+      virtual_storage:
+        type: tosca.capabilities.nfv.VirtualStorage
+    derived_from: tosca.nodes.Root
+    properties:
+      id:
+        type: string
+      size_of_storage:
+        type: string
+      rdma_enabled:
+        required: false
+        type: boolean
+      type_of_storage:
+        type: string
+
+  tosca.nodes.nfv.VduCpd:
+    derived_from: tosca.nodes.Root
+    properties:
+      virtual_network_interface_requirements:
+        entry_schema:
+          type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements
+        required: false
+        type: list
+      role:
+        constraints:
+        - valid_values:
+          - root
+          - leaf
+        required: false
+        type: string
+      bitrate_requirement:
+        required: false
+        type: integer
+      description:
+        required: false
+        type: string
+      layer_protocol:
+        constraints:
+        - valid_values:
+          - ethernet
+          - mpls
+          - odu2
+          - ipv4
+          - ipv6
+          - pseudo_wire
+        type: string
+      address_data:
+        entry_schema:
+          type: tosca.datatype.nfv.AddressData
+        required: false
+        type: list
+    requirements:
+    - virtual_binding:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtual_link:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+  tosca.nodes.nfv.ext.ImageFile:
+    capabilities:
+      guest_os:
+        type: tosca.capabilities.nfv.ext.GuestOs
+      image_fle:
+        type: tosca.capabilities.nfv.ext.ImageFile
+    derived_from: tosca.nodes.Root
+    properties:
+      file_url:
+        required: false
+        type: string
+      container_type:
+        required: false
+        type: string
+      name:
+        required: false
+        type: string
+      disk_format:
+        required: false
+        type: string
+      version:
+        required: false
+        type: string
+  tosca.nodes.nfv.ext.LocalStorage:
+    capabilities:
+      local_attachment:
+        type: tosca.capabilities.nfv.ext.LocalAttachment
+    derived_from: tosca.nodes.Root
+    properties:
+      size:
+        required: false
+        type: string
+      disk_type:
+        required: false
+        type: string
+  tosca.nodes.nfv.ext.zte.CP:
+    capabilities:
+      forwarder:
+        type: tosca.capabilities.nfv.Forwarder
+    derived_from: tosca.nodes.Root
+    properties:
+      guest_os_mtu:
+        required: false
+        type: integer
+      bandwidth:
+        required: false
+        type: integer
+      interface_name:
+        required: false
+        type: string
+      allowed_address_pairs:
+        entry_schema:
+          type: tosca.datatypes.nfv.ext.AddressPairs
+        required: false
+        type: list
+      ip_address:
+        required: false
+        type: string
+      bond:
+        required: false
+        type: string
+      proxiedVNFs:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      sfc_encapsulation:
+        required: false
+        type: string
+      floating_ip_address:
+        required: false
+        type: tosca.datatypes.nfv.ext.FloatingIP
+      service_ip_address:
+        required: false
+        type: string
+      mac_address:
+        required: false
+        type: string
+      proxiedVNFtype:
+        required: false
+        type: string
+      macbond:
+        required: false
+        type: string
+      vnic_type:
+        required: false
+        type: string
+      direction:
+        required: false
+        type: string
+      order:
+        required: false
+        type: integer
+    requirements:
+    - forwarder:
+        capability: tosca.capabilities.nfv.Forwarder
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtualbinding:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualBindable
+        occurrences:
+        - 0
+        - UNBOUNDED
+  tosca.nodes.nfv.ext.zte.VDU:
+    capabilities:
+      scalable:
+        type: tosca.capabilities.Scalable
+      monitoring_parameter:
+        type: tosca.capabilities.nfv.Metric
+      nfv_compute:
+        type: tosca.capabilities.nfv.ext.Compute.Container.Architecture
+      virtualbinding:
+        type: tosca.capabilities.nfv.VirtualBindable
+    derived_from: tosca.nodes.Root
+    properties:
+      manual_scale_select_vim:
+        required: false
+        type: boolean
+      vdu_type:
+        required: false
+        type: string
+      watchdog:
+        required: false
+        type: tosca.datatypes.nfv.ext.zte.WatchDog
+      name:
+        required: false
+        type: string
+      local_affinity_antiaffinity_rule:
+        required: false
+        type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule
+      support_scaling:
+        required: false
+        type: boolean
+      storage_policy:
+        required: false
+        type: string
+      key_vdu:
+        required: false
+        type: boolean
+      location_info:
+        required: false
+        type: tosca.datatypes.nfv.ext.LocationInfo
+      inject_data_list:
+        entry_schema:
+          type: tosca.datatypes.nfv.ext.InjectData
+        required: false
+        type: list
+    requirements:
+    - guest_os:
+        capability: tosca.capabilities.nfv.ext.GuestOs
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - local_storage:
+        capability: tosca.capabilities.nfv.ext.LocalAttachment
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - volume_storage:
+        capability: tosca.capabilities.Attachment
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - dependency:
+        capability: tosca.capabilities.Node
+        occurrences:
+        - 0
+        - UNBOUNDED
+  tosca.nodes.nfv.ext.zte.VL:
+    capabilities:
+      virtual_linkable:
+        type: tosca.capabilities.nfv.VirtualLinkable
+    derived_from: tosca.nodes.Root
+    properties:
+      segmentation_id:
+        required: false
+        type: string
+      network_name:
+        required: false
+        type: string
+      is_predefined:
+        required: false
+        type: boolean
+      mtu:
+        required: false
+        type: integer
+      dns_nameservers:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      physical_network:
+        required: false
+        type: string
+      dhcp_enabled:
+        required: false
+        type: boolean
+      network_id:
+        required: false
+        type: string
+      host_routes:
+        entry_schema:
+          type: tosca.datatypes.nfv.ext.HostRouteInfo
+        required: false
+        type: list
+      ip_version:
+        required: false
+        type: integer
+      vendor:
+        required: false
+        type: string
+      name:
+        required: false
+        type: string
+      start_ip:
+        required: false
+        type: string
+      vlan_transparent:
+        required: false
+        type: boolean
+      cidr:
+        required: false
+        type: string
+      gateway_ip:
+        required: false
+        type: string
+      network_type:
+        required: false
+        type: string
+      end_ip:
+        required: false
+        type: string
+      location_info:
+        required: false
+        type: tosca.datatypes.nfv.ext.LocationInfo
+  tosca.nodes.nfv.ext.zte.VNF:
+    capabilities:
+      forwarder:
+        type: tosca.capabilities.nfv.Forwarder
+    derived_from: tosca.nodes.Root
+    properties:
+      request_reclassification:
+        required: false
+        type: boolean
+      domain_type:
+        required: false
+        type: string
+      nsh_aware:
+        required: false
+        type: boolean
+      plugin_info:
+        required: false
+        type: string
+      adjust_vnf_capacity:
+        required: false
+        type: boolean
+      vnfd_version:
+        required: false
+        type: string
+      vmnumber_overquota_alarm:
+        required: false
+        type: boolean
+      custom_properties:
+        entry_schema:
+          type: string
+        required: false
+        type: map
+      version:
+        required: false
+        type: string
+      cross_dc:
+        required: false
+        type: boolean
+      script_info:
+        required: false
+        type: string
+      vendor:
+        required: false
+        type: string
+      is_shared:
+        required: false
+        type: boolean
+      name:
+        required: false
+        type: string
+      vnf_extend_type:
+        required: false
+        type: string
+      id:
+        required: false
+        type: string
+      vnf_type:
+        required: false
+        type: string
+      is_sfc_proxy:
+        required: false
+        type: boolean
+    requirements:
+    - forwarder:
+        capability: tosca.capabilities.nfv.Forwarder
+        occurrences:
+        - 0
+        - UNBOUNDED
+    - virtualLink:
+        capability: tosca.capabilities.nfv.VirtualLinkable
+        occurrences:
+        - 0
+        - UNBOUNDED
+
+  tosca.nodes.nfv.VnfVirtualLinkDesc:
+    capabilities:
+      monitoring_parameters:
+        type: tosca.capabilities.nfv.Metric
+      virtual_linkable:
+        type: tosca.capabilities.nfv.VirtualLinkable
+    derived_from: tosca.nodes.Root
+    properties:
+      vl_flavours:
+        entry_schema:
+          type: string
+        type: map
+      description:
+        required: false
+        type: string
+      test_access:
+        entry_schema:
+          type: string
+        required: false
+        type: list
+      connectivity_type:
+        type: tosca.datatypes.nfv.ConnectivityType
+
+  org.openecomp.nodes.ForwardingPath:
+    derived_from: tosca.nodes.Root
+    properties:
+      target_range:
+        type: list
+        entry_schema:
+          description: Identifier of the reciever port of the VNF or the service
+          type: integer
+      protocol:
+        type: string
+        description: protocol type that runs on the link
+    requirements:
+    - forwarder:
+        capability: tosca.capabilities.nfv.Forwarder
+        relationship: org.openecomp.relationships.ForwardsTo
+        occurrences: [ 0, UNBOUNDED ]
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/relationships.yml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testGlobalServiceTemplates/out/openecomp/relationships.yml
new file mode 100644 (file)
index 0000000..5a43b79
--- /dev/null
@@ -0,0 +1,72 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+tosca_definitions_version: tosca_simple_openecomp_1_0
+
+metadata:
+  filename: openecomp/relationships.yml
+  version: '1.0'
+
+imports:
+- openecomp_index:
+    file: _index.yml
+
+relationship_types:
+
+  org.openecomp.relationships.VolumeAttachesTo:
+    derived_from: org.openecomp.relationships.AttachesTo
+    description: This type represents an attachment relationship for associating volume
+    properties:
+      volume_id:
+        description: The ID of the volume to be attached
+        type: string
+        status: SUPPORTED
+        required: true
+      instance_uuid:
+        description: The ID of the server to which the volume attaches
+        type: string
+        status: SUPPORTED
+        required: true
+    attributes:
+      show:
+        description: Detailed information about resource
+        type: string
+        status: SUPPORTED
+
+  org.openecomp.relationships.AttachesTo:
+    derived_from: tosca.relationships.AttachesTo
+    description: This type represents an attachment relationship
+    properties:
+      location:
+        description: The relative location (e.g., path on the file system), which provides the root location to address an attached node.
+        type: string
+        status: SUPPORTED
+        required: false
+        
+  tosca.relationships.nfv.VDU.AttachedTo:
+    derived_from: tosca.relationships.Root
+    properties:
+      location:
+        required: false
+        type: string
+
+  tosca.relationships.nfv.VirtualBindsTo:
+    derived_from: tosca.relationships.Root
+
+  tosca.relationships.nfv.VirtualLinksTo:
+    derived_from: tosca.relationships.Root
+
+  org.openecomp.relationships.ForwardsTo:
+    derived_from: tosca.relationships.Root
+    valid_target_types: [org.openecomp.capabilities.Forwarder]
\ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testNoPorts/in/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testNoPorts/in/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..559b4a4
--- /dev/null
@@ -0,0 +1,116 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testNoPorts/out/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testNoPorts/out/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..559b4a4
--- /dev/null
@@ -0,0 +1,116 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingContrailPort/in/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingContrailPort/in/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..e4db974
--- /dev/null
@@ -0,0 +1,120 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.contrail.Port
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingContrailPort/out/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingContrailPort/out/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..c813f89
--- /dev/null
@@ -0,0 +1,123 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.contrail.Port
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+      Forwarder_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - Forwarder
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtContrailPort/in/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtContrailPort/in/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..0f53985
--- /dev/null
@@ -0,0 +1,120 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.v2.extContrailCP
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtContrailPort/out/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtContrailPort/out/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..3d7bbcf
--- /dev/null
@@ -0,0 +1,123 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.v2.extContrailCP
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+      Forwarder_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - Forwarder
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtNeutronPort/in/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtNeutronPort/in/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..3edb079
--- /dev/null
@@ -0,0 +1,120 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.v2.extNeutronCP
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtNeutronPort/out/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingExtNeutronPort/out/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..69dba32
--- /dev/null
@@ -0,0 +1,123 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.v2.extNeutronCP
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+      Forwarder_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - Forwarder
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingNeutronPort/in/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingNeutronPort/in/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..3883be3
--- /dev/null
@@ -0,0 +1,120 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency
diff --git a/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingNeutronPort/out/Nested_pd_serverServiceTemplate.yaml b/openecomp-be/lib/openecomp-healing-lib/openecomp-sdc-healing-impl/src/test/resources/mock/healers/forwarder/testSubMappingNeutronPort/out/Nested_pd_serverServiceTemplate.yaml
new file mode 100644 (file)
index 0000000..9b98046
--- /dev/null
@@ -0,0 +1,123 @@
+tosca_definitions_version: tosca_simple_yaml_1_0_0
+metadata:
+  template_name: Nested_pd_server
+imports:
+- openecomp_heat_index:
+    file: openecomp-heat/_index.yml
+- GlobalSubstitutionTypes:
+    file: GlobalSubstitutionTypesServiceTemplate.yaml
+node_types:
+  org.openecomp.resource.vfc.nodes.heat.pd_server:
+    derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server
+topology_template:
+  inputs:
+    index_value:
+      type: integer
+      description: Index value of this substitution service template runtime instance
+      required: false
+      default: 0
+      constraints:
+      - greater_or_equal: 0
+    compute_pd_server_availability_zone:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    compute_pd_server_name:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_exCP_naming:
+      type: org.openecomp.datatypes.Naming
+      required: true
+    vm_flavor_name:
+      type: string
+      required: true
+    port_pd01_port_mac_requirements:
+      type: org.openecomp.datatypes.network.MacRequirements
+      required: true
+    vm_image_name:
+      type: string
+      required: true
+    port_pd01_port_ip_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.IpRequirements
+    port_pd01_port_network:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+    port_pd01_port_order:
+      type: integer
+      required: true
+    port_pd01_port_subnetpoolid:
+      type: string
+      required: true
+    port_pd01_port_network_role:
+      type: string
+      required: true
+    port_pd01_port_network_role_tag:
+      type: string
+      required: true
+    port_pd01_port_vlan_requirements:
+      type: list
+      required: true
+      entry_schema:
+        type: org.openecomp.datatypes.network.VlanRequirements
+    compute_pd_server_user_data_format:
+      type: list
+      required: true
+      entry_schema:
+        type: string
+  node_templates:
+    pd_server:
+      type: org.openecomp.resource.vfc.nodes.heat.pd_server
+      properties:
+        availability_zone:
+          get_input:
+          - compute_pd_server_availability_zone
+          - index_value
+        flavor:
+          get_input: vm_flavor_name
+        image:
+          get_input: vm_image_name
+        name:
+          get_input:
+          - compute_pd_server_name
+          - index_value
+        user_data_format:
+          get_input:
+          - compute_pd_server_user_data_format
+          - index_value
+    pd_server_pd01_port:
+      type: org.openecomp.resource.cp.nodes.heat.network.neutron.Port
+      properties:
+        exCP_naming: port_pd01_port_exCP_naming
+  substitution_mappings:
+    node_type: org.openecomp.resource.abstract.nodes.pd_server
+    capabilities:
+      scalable_pd_server:
+      - pd_server
+      - scalable
+      disk.read.bytes.rate_pd_server:
+      - pd_server
+      - disk.read.bytes.rate
+      Forwarder_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - Forwarder
+    requirements:
+      local_storage_pd_server:
+      - pd_server
+      - local_storage
+      link_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - link
+      dependency_pd_server_pd01_port:
+      - pd_server_pd01_port
+      - dependency
+      dependency_pd_server:
+      - pd_server
+      - dependency