From 5f3c6aba1ef89f41e82b8d47bef8731b679da971 Mon Sep 17 00:00:00 2001 From: RossC Date: Thu, 14 May 2020 10:40:00 +0100 Subject: [PATCH] Frankfurt Distribution Performance Test Issue-ID: POLICY-2458 Change-Id: I475ac795256db980ae68993a8cbc509d74278549 Signed-off-by: RossC --- .../src/main/resources/testplans/README.perf.md | 61 +- .../src/main/resources/testplans/addcsars.sh | 35 + .../src/main/resources/testplans/clean_policy.sh | 41 - .../main/resources/testplans/clearuppolicies.sh | 43 + .../src/main/resources/testplans/generate.sh | 46 - .../src/main/resources/testplans/generate_perf.py | 40 - .../src/main/resources/testplans/generate_perf.sh | 28 - .../main/resources/testplans/list_failed_policy.sh | 49 - .../src/main/resources/testplans/perf.jmx | 407 -- .../src/main/resources/testplans/performance.jmx | 708 +++ .../src/main/resources/testplans/removecsars.sh | 33 + .../Deployment/OTHER/authorized_keys | 1 - .../Deployment/OTHER/id_rsa | 27 - .../Deployment/OTHER/id_rsa.pub | 1 - .../Deployment/OTHER/image | 1 - .../VENDOR_LICENSE/vendor-license-model.xml | 1 - .../Deployment/VF_LICENSE/vf-license-model.xml | 1 - .../interfaceType/Definitions/annotations.yml | 30 - .../interfaceType/Definitions/artifacts.yml | 42 - .../interfaceType/Definitions/capabilities.yml | 293 -- .../templates/interfaceType/Definitions/data.yml | 1733 ------- .../templates/interfaceType/Definitions/groups.yml | 133 - .../interfaceType/Definitions/interfaces.yml | 83 - .../templates/interfaceType/Definitions/nodes.yml | 4781 -------------------- .../interfaceType/Definitions/policies.yml | 134 - .../interfaceType/Definitions/relationships.yml | 142 - .../Definitions/resource-VduCompute-template.yml | 103 - .../Definitions/resource-VduCp-template.yml | 59 - .../resource-VduVirtualstorage-template.yml | 50 - .../resource-Vgw1181049-template-interface.yml | 208 - .../Definitions/resource-Vgw1181049-template.yml | 285 -- .../Definitions/resource-Vnf-template.yml | 70 - .../resource-Vnfvirtuallink-template.yml | 57 - .../service-Testns8-template-interface.yml | 176 - .../Definitions/service-Testns8-template.yml | 135 - .../interfaceType/TOSCA-Metadata/TOSCA.meta | 7 - .../testplans/templates/interfaceType/csar.meta | 2 - .../Deployment/OTHER/authorized_keys | 1 - .../Deployment/OTHER/id_rsa | 27 - .../Deployment/OTHER/id_rsa.pub | 1 - .../Deployment/OTHER/image | 1 - .../VENDOR_LICENSE/vendor-license-model.xml | 1 - .../Deployment/VF_LICENSE/vf-license-model.xml | 1 - .../memoryPageSize/Definitions/annotations.yml | 30 - .../memoryPageSize/Definitions/artifacts.yml | 42 - .../memoryPageSize/Definitions/capabilities.yml | 293 -- .../templates/memoryPageSize/Definitions/data.yml | 1733 ------- .../memoryPageSize/Definitions/groups.yml | 133 - .../memoryPageSize/Definitions/interfaces.yml | 83 - .../templates/memoryPageSize/Definitions/nodes.yml | 4781 -------------------- .../memoryPageSize/Definitions/policies.yml | 134 - .../memoryPageSize/Definitions/relationships.yml | 142 - .../Definitions/resource-VduCompute-template.yml | 103 - .../Definitions/resource-VduCp-template.yml | 59 - .../resource-VduVirtualstorage-template.yml | 50 - .../resource-Vgw1181049-template-interface.yml | 208 - .../Definitions/resource-Vgw1181049-template.yml | 282 -- .../Definitions/resource-Vnf-template.yml | 70 - .../resource-Vnfvirtuallink-template.yml | 57 - .../service-Testns8-template-interface.yml | 176 - .../Definitions/service-Testns8-template.yml | 135 - .../memoryPageSize/TOSCA-Metadata/TOSCA.meta | 7 - .../testplans/templates/memoryPageSize/csar.meta | 2 - .../Deployment/OTHER/authorized_keys | 1 - .../Deployment/OTHER/id_rsa | 27 - .../Deployment/OTHER/id_rsa.pub | 1 - .../Deployment/OTHER/image | 1 - .../VENDOR_LICENSE/vendor-license-model.xml | 1 - .../Deployment/VF_LICENSE/vf-license-model.xml | 1 - .../numberOfPages/Definitions/annotations.yml | 30 - .../numberOfPages/Definitions/artifacts.yml | 42 - .../numberOfPages/Definitions/capabilities.yml | 293 -- .../templates/numberOfPages/Definitions/data.yml | 1733 ------- .../templates/numberOfPages/Definitions/groups.yml | 133 - .../numberOfPages/Definitions/interfaces.yml | 83 - .../templates/numberOfPages/Definitions/nodes.yml | 4781 -------------------- .../numberOfPages/Definitions/policies.yml | 134 - .../numberOfPages/Definitions/relationships.yml | 142 - .../Definitions/resource-VduCompute-template.yml | 103 - .../Definitions/resource-VduCp-template.yml | 59 - .../resource-VduVirtualstorage-template.yml | 50 - .../resource-Vgw1181049-template-interface.yml | 208 - .../Definitions/resource-Vgw1181049-template.yml | 282 -- .../Definitions/resource-Vnf-template.yml | 70 - .../resource-Vnfvirtuallink-template.yml | 57 - .../service-Testns8-template-interface.yml | 176 - .../Definitions/service-Testns8-template.yml | 135 - .../numberOfPages/TOSCA-Metadata/TOSCA.meta | 7 - .../testplans/templates/numberOfPages/csar.meta | 2 - .../Deployment/OTHER/authorized_keys | 1 - .../Deployment/OTHER/id_rsa | 27 - .../Deployment/OTHER/id_rsa.pub | 1 - .../Deployment/OTHER/image | 1 - .../VENDOR_LICENSE/vendor-license-model.xml | 1 - .../Deployment/VF_LICENSE/vf-license-model.xml | 1 - .../pciDeviceId/Definitions/annotations.yml | 30 - .../pciDeviceId/Definitions/artifacts.yml | 42 - .../pciDeviceId/Definitions/capabilities.yml | 293 -- .../templates/pciDeviceId/Definitions/data.yml | 1733 ------- .../templates/pciDeviceId/Definitions/groups.yml | 133 - .../pciDeviceId/Definitions/interfaces.yml | 83 - .../templates/pciDeviceId/Definitions/nodes.yml | 4781 -------------------- .../templates/pciDeviceId/Definitions/policies.yml | 134 - .../pciDeviceId/Definitions/relationships.yml | 142 - .../Definitions/resource-VduCompute-template.yml | 103 - .../Definitions/resource-VduCp-template.yml | 59 - .../resource-VduVirtualstorage-template.yml | 50 - .../resource-Vgw1181049-template-interface.yml | 208 - .../Definitions/resource-Vgw1181049-template.yml | 288 -- .../Definitions/resource-Vnf-template.yml | 70 - .../resource-Vnfvirtuallink-template.yml | 57 - .../service-Testns8-template-interface.yml | 176 - .../Definitions/service-Testns8-template.yml | 135 - .../pciDeviceId/TOSCA-Metadata/TOSCA.meta | 7 - .../testplans/templates/pciDeviceId/csar.meta | 2 - .../Deployment/OTHER/authorized_keys | 1 - .../Deployment/OTHER/id_rsa | 27 - .../Deployment/OTHER/id_rsa.pub | 1 - .../Deployment/OTHER/image | 1 - .../VENDOR_LICENSE/vendor-license-model.xml | 1 - .../Deployment/VF_LICENSE/vf-license-model.xml | 1 - .../pciNumDevices/Definitions/annotations.yml | 30 - .../pciNumDevices/Definitions/artifacts.yml | 42 - .../pciNumDevices/Definitions/capabilities.yml | 293 -- .../templates/pciNumDevices/Definitions/data.yml | 1733 ------- .../templates/pciNumDevices/Definitions/groups.yml | 133 - .../pciNumDevices/Definitions/interfaces.yml | 83 - .../templates/pciNumDevices/Definitions/nodes.yml | 4781 -------------------- .../pciNumDevices/Definitions/policies.yml | 134 - .../pciNumDevices/Definitions/relationships.yml | 142 - .../Definitions/resource-VduCompute-template.yml | 103 - .../Definitions/resource-VduCp-template.yml | 59 - .../resource-VduVirtualstorage-template.yml | 50 - .../resource-Vgw1181049-template-interface.yml | 208 - .../Definitions/resource-Vgw1181049-template.yml | 288 -- .../Definitions/resource-Vnf-template.yml | 70 - .../resource-Vnfvirtuallink-template.yml | 57 - .../service-Testns8-template-interface.yml | 176 - .../Definitions/service-Testns8-template.yml | 135 - .../pciNumDevices/TOSCA-Metadata/TOSCA.meta | 7 - .../testplans/templates/pciNumDevices/csar.meta | 2 - .../Deployment/OTHER/authorized_keys | 1 - .../Deployment/OTHER/id_rsa | 27 - .../Deployment/OTHER/id_rsa.pub | 1 - .../Deployment/OTHER/image | 1 - .../VENDOR_LICENSE/vendor-license-model.xml | 1 - .../Deployment/VF_LICENSE/vf-license-model.xml | 1 - .../pciVendorId/Definitions/annotations.yml | 30 - .../pciVendorId/Definitions/artifacts.yml | 42 - .../pciVendorId/Definitions/capabilities.yml | 293 -- .../templates/pciVendorId/Definitions/data.yml | 1733 ------- .../templates/pciVendorId/Definitions/groups.yml | 133 - .../pciVendorId/Definitions/interfaces.yml | 83 - .../templates/pciVendorId/Definitions/nodes.yml | 4781 -------------------- .../templates/pciVendorId/Definitions/policies.yml | 134 - .../pciVendorId/Definitions/relationships.yml | 142 - .../Definitions/resource-VduCompute-template.yml | 103 - .../Definitions/resource-VduCp-template.yml | 59 - .../resource-VduVirtualstorage-template.yml | 50 - .../resource-Vgw1181049-template-interface.yml | 208 - .../Definitions/resource-Vgw1181049-template.yml | 288 -- .../Definitions/resource-Vnf-template.yml | 70 - .../resource-Vnfvirtuallink-template.yml | 57 - .../service-Testns8-template-interface.yml | 176 - .../Definitions/service-Testns8-template.yml | 135 - .../pciVendorId/TOSCA-Metadata/TOSCA.meta | 7 - .../testplans/templates/pciVendorId/csar.meta | 2 - .../resources/testplans/testCsars/test_csar_1.csar | Bin 0 -> 93619 bytes .../testplans/testCsars/test_csar_10.csar | Bin 0 -> 93618 bytes .../resources/testplans/testCsars/test_csar_2.csar | Bin 0 -> 93622 bytes .../resources/testplans/testCsars/test_csar_3.csar | Bin 0 -> 93622 bytes .../resources/testplans/testCsars/test_csar_4.csar | Bin 0 -> 93622 bytes .../resources/testplans/testCsars/test_csar_5.csar | Bin 0 -> 93622 bytes .../resources/testplans/testCsars/test_csar_6.csar | Bin 0 -> 93622 bytes .../resources/testplans/testCsars/test_csar_7.csar | Bin 0 -> 93622 bytes .../resources/testplans/testCsars/test_csar_8.csar | Bin 0 -> 93622 bytes .../resources/testplans/testCsars/test_csar_9.csar | Bin 0 -> 93622 bytes 177 files changed, 840 insertions(+), 51984 deletions(-) create mode 100755 testsuites/performance/src/main/resources/testplans/addcsars.sh delete mode 100755 testsuites/performance/src/main/resources/testplans/clean_policy.sh create mode 100755 testsuites/performance/src/main/resources/testplans/clearuppolicies.sh delete mode 100755 testsuites/performance/src/main/resources/testplans/generate.sh delete mode 100644 testsuites/performance/src/main/resources/testplans/generate_perf.py delete mode 100755 testsuites/performance/src/main/resources/testplans/generate_perf.sh delete mode 100755 testsuites/performance/src/main/resources/testplans/list_failed_policy.sh delete mode 100644 testsuites/performance/src/main/resources/testplans/perf.jmx create mode 100644 testsuites/performance/src/main/resources/testplans/performance.jmx create mode 100755 testsuites/performance/src/main/resources/testplans/removecsars.sh delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/annotations.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/artifacts.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/capabilities.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/data.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/groups.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/interfaces.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/nodes.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/policies.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/relationships.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCompute-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCp-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduVirtualstorage-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnf-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnfvirtuallink-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/TOSCA-Metadata/TOSCA.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/interfaceType/csar.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/annotations.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/artifacts.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/capabilities.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/data.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/groups.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/interfaces.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/nodes.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/policies.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/relationships.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCompute-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCp-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduVirtualstorage-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnf-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnfvirtuallink-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/TOSCA-Metadata/TOSCA.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/csar.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/annotations.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/artifacts.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/capabilities.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/data.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/groups.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/interfaces.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/nodes.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/policies.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/relationships.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCompute-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCp-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduVirtualstorage-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnf-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnfvirtuallink-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/TOSCA-Metadata/TOSCA.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/numberOfPages/csar.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/annotations.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/artifacts.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/capabilities.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/data.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/groups.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/interfaces.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/nodes.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/policies.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/relationships.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCompute-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCp-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduVirtualstorage-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnf-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnfvirtuallink-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/TOSCA-Metadata/TOSCA.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/csar.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/annotations.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/artifacts.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/capabilities.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/data.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/groups.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/interfaces.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/nodes.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/policies.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/relationships.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCompute-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCp-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduVirtualstorage-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnf-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnfvirtuallink-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/TOSCA-Metadata/TOSCA.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/csar.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/annotations.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/artifacts.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/capabilities.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/data.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/groups.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/interfaces.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/nodes.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/policies.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/relationships.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCompute-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCp-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduVirtualstorage-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnf-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnfvirtuallink-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template-interface.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template.yml delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/TOSCA-Metadata/TOSCA.meta delete mode 100644 testsuites/performance/src/main/resources/testplans/templates/pciVendorId/csar.meta create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_1.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_10.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_2.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_3.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_4.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_5.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_6.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_7.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_8.csar create mode 100644 testsuites/performance/src/main/resources/testplans/testCsars/test_csar_9.csar diff --git a/testsuites/performance/src/main/resources/testplans/README.perf.md b/testsuites/performance/src/main/resources/testplans/README.perf.md index aaa9d47d..cbde3d76 100644 --- a/testsuites/performance/src/main/resources/testplans/README.perf.md +++ b/testsuites/performance/src/main/resources/testplans/README.perf.md @@ -1,55 +1,36 @@ -# Performance Test for Policy Distribution +Performance Test for Policy Distribution ## Steps to Run performance test 1. Download Apache JMeter Download JMeter 5.0 from https://jmeter.apache.org/download_jmeter.cgi, and extracted it locally. - -2. Launch the policy distribution service -Launch the policy distribution service with the configuration from s3pConfig.json, you need to make sure when the service is being launched, the directory configured in s3pConfig.json by receptionHandlerConfigurationParameters.fileConfiguration.parameters.watchPath is a valid local directory(Default directory is /tmp/policy_distribution/csar/). -The policy distribution service will use the FileSystemReceptionHandler plugin to monitor the local directory specified by the 'watchPath' parameter for newly added csar files, parse them to generate policies and forward it to PDP. -``` -java -cp "" org.onap.policy.distribution.main.startstop.Main -c s3pConfig.json -``` - Or if you want to launch it from docker, please do the followings: -``` -mkdir -p /tmp/policy_distribution/csar/ -docker run -d -e "CONFIG_FILE=/opt/app/policy/distribution/etc/s3pConfig.json" \ - -v /tmp/policy_distribution/csar/:/tmp/policy_distribution/csar/ \ - -p 6969:6969 \ - --name policy-distribution policy-distribution -``` -Here we use -e option to "docker run" to pass the config file which the policy distribution service will be launched upon and use -v option to map the local host /tmp/policy_distribution/csar/ directory as the directory of /tmp/policy_distribution/csar/ within the policy-distribution docker. -**NOTED:** -Please make sure when you launch the policy distribution service, the following requirements are met: -a. The policy PDP service is active, and can be reached using the parameters configured by policyForwarderConfigurationParameters.xacmlPdpConfiguration.parameters in the s3pConfig.json file. +2. Run the setup-components script found within simulator setup in the stability test folder. +This will launch MariaDB, PDPSimulator, PAP, Policy-API and DMaaP Simulator as docker containers. -b. Make sure you have installed the AAF root CA either in local host or in the docker image(running as root): +3. Launch the policy distribution service by running the setup-distribution script found within distributionsetup +in the stability test folder. +If you are running all of the components locally you will need to edit the port that distribution starts on as it is +currently 6969 which conflicts with the policy API port. +This will launch policy-distribution as a docker container and takes 2 arguments, PAP IP and API IP. +If you are running locally these will be 127.0.0.1. If on a VM enter the VM IP. ``` -curl -s https://git.onap.org/dmaap/buscontroller/plain/misc/cert-client-init.sh | bash -- +setup-distribution.sh 127.0.0.1 127.0.0.1 ``` -3. Get the Jmeter configuration ans scripts -Git clone the policy distribution code, and goto the s3p directory: +4. Run the JMeter performance test ``` -git clone https://git.onap.org/policy/distribution policy-distribution -cd policy-distribution/s3p +rm -f performance.log; /bin/jmeter.sh -t performance.jmx -n -Jhost= -Jduration=100 -l performance.log ``` - -4. Run the JMeter stability test -``` -rm -f perf.log; /bin/jmeter.sh -t perf.jmx -n -Jhost= -Jtotal=5 -l perf.log -``` -In the meantime, you can run various system tools i.e. top, atop, etc. to monitor the cpu/memory usage of the policy-distribution service. - -After jmeter finished, search for 'Fail at idx' in the perf.log file to see if there is any errors found during the stability test. +Search for 'get policy failed' in the performance.log file to see if there is any errors found during the performance test. ## JMeter properties -We can configure the following properties when running the JMeter stability test for policy distribution +We can configure the following properties when running the JMeter performance test for policy distribution | Property Name | Default Value | Description | |---------------|-------------|---------------| -| host | pdp | PDP service host name or ip | -| csardir | /tmp/policy_distribution/csar | Directory where to store the generated csar files | -| total | 5 | Total number of csar files to be generated in bulk to test performance -| retry | 100 | Number of retry to retrieve the policy of each csar - +| host | 10.2.0.27 | PAP/API service host name or ip | +| watchedfolder | /tmp/policy_distribution/distributionmounts | Directory that is mounted to distribution watched folder | +| duration | 259200 | Number of seconds for how long to run the tests | +|PAP_PORT|7000| Port that pap service is exposing| +|API_PORT|6969| Port that API service is exposing| +|DISTRIBUTION_HOST| 127.0.0.1 | Distribution service host name or ip | +|DISTRIBUTION_PORT| 6969 | Distribution service port | diff --git a/testsuites/performance/src/main/resources/testplans/addcsars.sh b/testsuites/performance/src/main/resources/testplans/addcsars.sh new file mode 100755 index 00000000..e446a67b --- /dev/null +++ b/testsuites/performance/src/main/resources/testplans/addcsars.sh @@ -0,0 +1,35 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2020 Nordix Foundation. +# ================================================================================ +# 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +# the directory of the script +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +echo "${DIR}" + +if [ $# -le 1 ] +then + echo "Usage ./addcsars.sh \$TESTCSARSLOCATION \$TARGETDIRECTORY" + exit 1 +fi +TESTCSARSLOCATION=$1 +TARGETDIRECTORY=$2 + +for file in "$TESTCSARSLOCATION"/* +do + cp "$file" "$TARGETDIRECTORY" +done \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/clean_policy.sh b/testsuites/performance/src/main/resources/testplans/clean_policy.sh deleted file mode 100755 index 7b45ea8b..00000000 --- a/testsuites/performance/src/main/resources/testplans/clean_policy.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/bash - -function print_usage_and_exit { - [ -z "$1" ] || echo "Error: $1" - echo "Usage: $0 [ | ]" - echo " - directory where the s3p csar files stores, policies related to them will be cleaned from PDP/PAP" - echo " - rulename to be cleaned" - exit 1 -} - -[ "$#" -ne 1 ] && print_usage_and_exit - -rules=() -if [ -d $1 ]; then - files=(`find "$1" -maxdepth 1 -name "*.csar" -printf "%f\n"`) - for i in ${files[@]}; do - fn=`echo $i | cut -d '.' -f 1` - rules+=("oofCasablanca.Config_OOF_Optimization_${fn}.1.xml") - done -else - rules+=($1) -fi - -for NAME in ${rules[@]}; do - BODY="{\"policyComponent\":\"PDP\",\"policyType\":\"Optimization\",\"pdpGroup\":\"default\",\"policyName\":\"${NAME}\"}" - rescode=`curl --silent --output /dev/null --write-out %{http_code} -k -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'ClientAuth: cHl0aG9uOnRlc3Q=' -H 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' -H 'Environment: TEST' -X DELETE -d $BODY https://pdp:8081/pdp/api/deletePolicy` - if [ "$rescode" == "200" ]; then - echo "delete $NAME in PDP success" - else - echo "delete $NAME in PDP FAIL with rescode $rescode" - fi - - BODY="{\"policyName\":\"${NAME}\",\"policyComponent\":\"PAP\",\"policyType\":\"Optimization\",\"deleteCondition\":\"ALL\"}" - rescode=`curl --silent --output /dev/null --write-out %{http_code} -k -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'ClientAuth: cHl0aG9uOnRlc3Q=' -H 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' -H 'Environment: TEST' -X DELETE -d $BODY https://pdp:8081/pdp/api/deletePolicy` - if [ "$rescode" == "200" ]; then - echo "delete $NAME in PAP success" - else - echo "delete $NAME in PAP FAIL with rescode $rescode" - fi -done - diff --git a/testsuites/performance/src/main/resources/testplans/clearuppolicies.sh b/testsuites/performance/src/main/resources/testplans/clearuppolicies.sh new file mode 100755 index 00000000..6cf38a0d --- /dev/null +++ b/testsuites/performance/src/main/resources/testplans/clearuppolicies.sh @@ -0,0 +1,43 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2020 Nordix Foundation. +# ================================================================================ +# 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +# the directory of the script +if [ $# -le 3 ] + then + echo "Usage ./addcsars.sh \$POLICY_API_IP \$POLICY_API_PORT \$POLICY_PAP_IP \$POLICY_PAP_PORT" + exit 1 +fi +POLICY_API_IP=$1 +POLICY_API_PORT=$2 +POLICY_PAP_IP=$3 +POLICY_PAP_PORT=$4 + +send_delete_request(){ + echo $1 + curl -k -u 'healthcheck:zb!XztG34' -X DELETE "$1" + COUNTER=$((COUNTER +1)) +} + +COUNTER=1 +while [ $COUNTER != 11 ] +do + send_delete_request https://"$POLICY_PAP_IP":"$POLICY_PAP_PORT"/policy/pap/v1/pdps/policies/operational.apex.\ +sampledomain.test$COUNTER + send_delete_request https://"$POLICY_API_IP":"$POLICY_API_PORT"/policy/api/v1/policytypes/operational.apex.\ +sampledomain.test$COUNTER/versions/1.0.0/policies/operational.apex.sampledomain.test$COUNTER/versions/1.0.0 +done diff --git a/testsuites/performance/src/main/resources/testplans/generate.sh b/testsuites/performance/src/main/resources/testplans/generate.sh deleted file mode 100755 index d28da1e8..00000000 --- a/testsuites/performance/src/main/resources/testplans/generate.sh +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/env bash - -function print_usage_and_exit { - [ -z "$1" ] || echo "Error: $1" - echo "Usage: $0 " - echo " - : directory where the generated csar file will be put into" - echo " - : random number to choose which csar template to use" - exit 1 -} - -[ "$#" -ne 2 ] && print_usage_and_exit -OUTPUT=$1 -SEED=$2 -[ -d $OUTPUT ] || mkdir -p $OUTPUT -[ -d $OUTPUT ] || print_usage_and_exit "$OUTPUT is not a valid directory" -[[ $SEED =~ ^[0-9]+$ ]] || print_usage_and_exit "$SEED is not a integer" - - -ROOT_DIR=`dirname $(readlink -f $0)` -TMP_DIR=$ROOT_DIR/csar_tmp - -declare -A TEMPLATES -#fill templates -for path in $ROOT_DIR/templates/*; do - [ -d "$path" ] || continue # not directory, skip - dirname="$(basename "${path}")" - TEMPLATES[$dirname]=${path} -done -KEYS=(${!TEMPLATES[@]}) - -key=${KEYS[$(( 10#$SEED % ${#KEYS[@]} ))]} -src=${TEMPLATES[$key]} - -rm -rf $TMP_DIR -cp -r -f $src $TMP_DIR -find $TMP_DIR -type f | xargs sed -i "s/##RANDOM_RESOURCE_NAME##/s3p_${SEED}_${key}/g" -cd $TMP_DIR -echo $key -echo $src -zip -r "$ROOT_DIR/s3p_${SEED}_${key}.csar" * - -rm -f "$OUTPUT/s3p_${SEED}_${key}.csar" -mv -f "$ROOT_DIR/s3p_${SEED}_${key}.csar" $OUTPUT/ - -cd $ROOT_DIR -rm -rf $TMP_DIR diff --git a/testsuites/performance/src/main/resources/testplans/generate_perf.py b/testsuites/performance/src/main/resources/testplans/generate_perf.py deleted file mode 100644 index dfd62fc8..00000000 --- a/testsuites/performance/src/main/resources/testplans/generate_perf.py +++ /dev/null @@ -1,40 +0,0 @@ -import argparse -import csv -import os -import shutil -import sys -import subprocess - - -def parse_args(): - parser = argparse.ArgumentParser(description='Prepare CSAR for policy distrition performance test') - parser.add_argument('--total', required=True, type=int, help='total number of CSAR to be generated') - parser.add_argument('--dest', required=True, help='dest directory where the CSAR files will be stored') - parser.add_argument('--out', default='perf_data.csv', help='list of generated CSAR identifier') - return parser.parse_args(sys.argv[1:]) - - -def main(): - args = parse_args() - - # create dest dir - shutil.rmtree(args.dest, ignore_errors=True) - os.makedirs(args.dest) - - # prepartion - count = 0 - maxwidth = len(str(args.total)) - scripts = os.path.dirname(os.path.abspath(__file__)) - scripts = os.path.join(scripts, 'generate.sh') - - with open(args.out, 'w') as out_file: - out_writer = csv.writer(out_file, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL) - while (count < args.total): - seed = str(count).zfill(maxwidth) - subprocess.check_call([scripts, args.dest, seed]) - out_writer.writerow(["s3p_" + seed]) - count += 1 - return 0 - -if __name__ == '__main__': - main() diff --git a/testsuites/performance/src/main/resources/testplans/generate_perf.sh b/testsuites/performance/src/main/resources/testplans/generate_perf.sh deleted file mode 100755 index beabb783..00000000 --- a/testsuites/performance/src/main/resources/testplans/generate_perf.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash - -function print_usage_and_exit { - [ -z "$1" ] || echo "Error: $1" - echo "Usage: $0 " - echo " - : directory where the generated csar file will be put into" - echo " - : total number of csar files to be generated" - exit 1 -} - -[ "$#" -ne 2 ] && print_usage_and_exit -OUTPUT=$1 -TOTAL=$2 - -[ -d $OUTPUT ] || mkdir -p $OUTPUT -[ -d $OUTPUT ] || print_usage_and_exit "$OUTPUT is not a valid directory" -[[ $TOTAL =~ ^[0-9]+$ ]] || print_usage_and_exit "$SEED is not a integer" - - -ROOT_DIR=`dirname $(readlink -f $0)` -TMP_DIR=$ROOT_DIR/perf_tmp - -python $ROOT_DIR/generate_perf.py --dest $TMP_DIR --total $TOTAL --out $ROOT_DIR/perf_data.csv - -rm -f $OUTPUT/*.csar -cp -fr $TMP_DIR/*.csar $OUTPUT/ - -rm -rf $TMP_DIR diff --git a/testsuites/performance/src/main/resources/testplans/list_failed_policy.sh b/testsuites/performance/src/main/resources/testplans/list_failed_policy.sh deleted file mode 100755 index 042dcf34..00000000 --- a/testsuites/performance/src/main/resources/testplans/list_failed_policy.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash - -function print_usage_and_exit { - echo "Usage: $0 " - echo " - : s for stability log , p for perf log , or other for simple policy name" - echo " - " - exit 1 -} - -[ "$#" -ne 2 ] && print_usage_and_exit -case $1 in -[sS]) - type='s' - ;; -[pP]) - type='p' - ;; -*) - type='simple' - ;; -esac - -rules=() -if [ -f $2 ] && [ $type == 's' ]; then - resids=(`grep -o "get policy failed for resource [0-9]\+" $2 | cut -d ' ' -f 6`) - for i in ${resids[@]}; do - rules+=("oofCasablanca.Config_OOF_Optimization_s3p_$i.*") - done -elif [ -f $2 ] && [ $type == 'p' ]; then - idx=`grep -o "Fail at idx [0-9]\+" $2 | cut -d ' ' -f 4` - total=`cat perf_data.csv | wc -l` - while [ "s$idx" > "s" ] && [ $idx -lt $total ]; do - rules+=("oofCasablanca.Config_OOF_Optimization_s3p_$idx.*") - idx=$((idx+1)) - done -else - rules+=($2) -fi - -for NAME in ${rules[@]}; do - BODY="{\"policyName\":\"${NAME}\"}" - rescode=`curl --silent --write-out %{http_code} -k -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'ClientAuth: cHl0aG9uOnRlc3Q=' -H 'Authorization: Basic dGVzdHBkcDphbHBoYTEyMw==' -H 'Environment: TEST' -X POST -d $BODY --output /dev/null https://pdp:8081/pdp/api/listConfig` - if [ "$rescode" == '200' ]; then - echo "list policy $NAME in PDP success" - else - echo "list policy $NAME in PDP FAIL with rescode $rescode" - fi -done - diff --git a/testsuites/performance/src/main/resources/testplans/perf.jmx b/testsuites/performance/src/main/resources/testplans/perf.jmx deleted file mode 100644 index ac934776..00000000 --- a/testsuites/performance/src/main/resources/testplans/perf.jmx +++ /dev/null @@ -1,407 +0,0 @@ - - - - - - false - true - false - - - - PDP_HOST - ${__P(host,pdp)} - = - - - RETRY - ${__P(retry, 100)} - = - - - PERF_DATA - ${__P(perf_data, perf_data.csv)} - = - - - BASE_DIR - ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)} - = - - - CSAR_DIR - ${__P(csardir, /tmp/policy_distribution/csar)} - = - - - TOTAL - ${__P(total, 5)} - = - - - - - - - - continue - - false - 1 - - 1 - 1 - false - ${DURATION} - 1 - - - - - - Content-Type - application/json - - - Accept - application/json - - - ClientAuth - cHl0aG9uOnRlc3Q= - - - Authorization - Basic dGVzdHBkcDphbHBoYTEyMw== - - - Environment - TEST - - - - - - - - true - - - - false - {"policyName": "oofCasablanca.*s3p.*"} - = - - - - ${PDP_HOST} - 8081 - https - - /pdp/api/listConfig - POST - true - false - true - false - - - - - - - groovy - - - true - import groovy.json.JsonSlurper; - -def to_delete = []; -if (prev.getResponseCode() == '200') { - def jsonSlurper = new JsonSlurper(); - to_delete = jsonSlurper.parseText(prev.getResponseDataAsString()); -} -vars.putObject('to_delete', to_delete); - - - - - - ${__groovy(vars.getObject('to_delete').size() > 0)} - - - - true - - - - false - { - "pdpGroup": "default", - "policyComponent": "PDP", - "policyType": "Optimization", - "policyName": "${policyname}" -} - = - - - - ${PDP_HOST} - 8081 - https - - /pdp/api/deletePolicy - DELETE - true - false - true - false - - - - - - - groovy - - - true - def to_delete = vars.getObject('to_delete'); -def policyname = to_delete.pop() -vars.put('policyname', policyname.toString()); -vars.putObject('to_delete', to_delete); - - - - - - true - - - - false - { - "deleteCondition":"ALL", - "policyComponent": "PAP", - "policyType": "Optimization", - "policyName": "${policyname}" -} - = - - - - ${PDP_HOST} - 8081 - https - - /pdp/api/deletePolicy - DELETE - true - false - true - false - - - - - - - - - - - false - 0 - ${BASE_DIR}generate_perf.sh - - - - - ${CSAR_DIR} - = - - - - ${TOTAL} - = - - - - - - - - - - - true - - - def data_file=new File(vars.get('BASE_DIR') + vars.get('PERF_DATA')); -def data=data_file.readLines(); -def total=data.size(); - -vars.putObject('data', data); -vars.putObject('total', total); -vars.putObject('idx', 0); -vars.putObject('total_counter', vars.get('RETRY').toInteger() * total); - -SampleResult.setIgnore(); - groovy - - - - - false - true - - - - - - innter_counter - 1 - = - - - rescode - - = - - - counter - 1 - = - - - - - - ${__javaScript(${counter} < ${total_counter} && ${idx} < ${total})} - - - - groovy - - - true - //log.info("idx: " + vars.getObject('idx')); -//log.info("counter: " + vars.get('counter')); -//log.info("total_counter: " + vars.get('total_counter')); - -vars.putObject('inner_counter', 0); -vars.put('rescode', ""); - -SampleResult.setIgnore(); - - - - ${__javaScript(${inner_counter} < ${RETRY} && "${rescode}" != '200')} - - - - true - - - - false - {"policyName": "oofCasablanca.*${resid}.*"} - = - - - - ${PDP_HOST} - 8081 - https - - /pdp/api/getConfig - POST - true - false - true - false - - - - - - - groovy - - - true - def idx=vars.getObject('idx'); -def data=vars.getObject('data'); - -vars.put('resid', data[idx]); -//log.error(data[idx]); - - - - - true - - - def rescode = prev.getResponseCode(); -def idx=vars.getObject('idx'); -def total=vars.getObject('total'); -def inner_counter=vars.getObject('inner_counter'); - -vars.put('rescode', rescode); -//log.info('inner_counter: ' + inner_counter); -//log.info('idx: '+ idx); - -inner_counter += 1; -vars.putObject('inner_counter', inner_counter); - -if (rescode == '200'){ - idx += 1; - vars.putObject('idx', idx); -}else { - -} - - groovy - - - - - 1 - - 1 - counter - - true - true - - - - - - - - - groovy - - - true - def idx=vars.getObject('idx'); -def total=vars.getObject('total'); - -if (idx<total) { - SampleResult.setSuccessful(false); - SampleResult.setResponseCode("410"); - SampleResult.setResponseMessage("Fail at idx " + idx); -}else { - SampleResult.setSuccessful(true); - SampleResult.setResponseCode("200"); - SampleResult.setResponseMessage("Success"); -} - - - - - - - - diff --git a/testsuites/performance/src/main/resources/testplans/performance.jmx b/testsuites/performance/src/main/resources/testplans/performance.jmx new file mode 100644 index 00000000..6fd00bfb --- /dev/null +++ b/testsuites/performance/src/main/resources/testplans/performance.jmx @@ -0,0 +1,708 @@ + + + + + + false + true + false + + + + PAP_HOST + ${__P(host,10.2.0.27)} + = + + + PAP_PORT + 7000 + = + + + API_HOST + ${__P(host,10.2.0.27)} + = + + + API_PORT + 6969 + = + + + DISTRIBUTION_HOST + ${__P(distributionhost,127.0.0.1)} + = + + + DISTRIBUTION_PORT + 7001 + = + + + DURATION + ${__P(duration, 259200)} + = + + + SCRIPT_DIR + ${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)} + = + + + WATCHED_FOLDER + ${__P(watchedfolder, /tmp/policydistribution/distributionmounts)} + = + + + + + + + + continue + + false + -1 + + 1 + 1 + true + ${DURATION} + 1 + + + + + + Accept + application/json + + + Content-Type + application/json + + + + + + + + https://${PAP_HOST}:7000/policy/pap/v1 + healthcheck + zb!XztG34 + + + + + https://${API_HOST}:6969/policy/api/v1 + healthcheck + zb!XztG34 + + + + + http://127.0.0.1:6969/ + healthcheck + zb!XztG34 + + + + + true + + + + + + false + 0 + ${SCRIPT_DIR}removecsars.sh + + + + + ${WATCHED_FOLDER} + = + + + + + + + + + + + + + + false + 0 + ${SCRIPT_DIR}addcsars.sh + + + + + ${SCRIPT_DIR}/testCsars + = + + + + ${WATCHED_FOLDER} + = + + + + + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + + + + + 30000 + + + + + + + ${PAP_HOST} + ${PAP_PORT} + https + + policy/pap/v1/policies/deployed + GET + true + false + true + false + + + + + + + policies + $[*] + -1 + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + + 10 + + + Assertion.response_data + false + 8 + variable + policies_matchNr + + + + + + + + ${PAP_HOST} + ${PAP_PORT} + https + + /policy/pap/v1/pdps + GET + true + false + true + false + + + + + + + checkpdppolicies + $.groups[0].pdpSubgroups[0].policies[*] + -1 + + + + + 10 + + + Assertion.response_data + false + 8 + variable + checkpdppolicies_matchNr + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + + + + false + 0 + ${SCRIPT_DIR}clearuppolicies.sh + + + + + ${API_HOST} + = + + + + ${API_PORT} + = + + + + ${PAP_HOST} + = + + + + ${PAP_PORT} + = + + + + + + + + + + + + + + + + + ${PAP_HOST} + ${PAP_PORT} + https + + /policy/pap/v1/pdps + GET + true + false + true + false + + + + + + + deletedpolicies + $.groups[0].pdpSubgroups[0].policies[*] + -1 + + + + + 0 + + + Assertion.response_data + false + 8 + variable + deletedpolicies_matchNr + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + Distribution_Performance_Test.log + + + + + continue + + false + -1 + + 3 + 1 + true + ${DURATION} + 1 + + + + + + Accept + application/json + + + Content-Type + application/json + + + + + + + + https://${PAP_HOST}:7000/policy/pap/v1 + healthcheck + zb!XztG34 + + + + + https://${API_HOST}:6969/policy/api/v1 + healthcheck + zb!XztG34 + + + + + http://127.0.0.1:6969/ + healthcheck + zb!XztG34 + + + + + true + + + + + + + + + ${DISTRIBUTION_HOST} + ${DISTRIBUTION_PORT} + http + + healthcheck + GET + true + false + true + false + + + + + + + + 200 + + + Assertion.response_code + false + 8 + + + + + + + + ${DISTRIBUTION_HOST} + ${DISTRIBUTION_PORT} + http + + statistics + GET + true + false + true + false + + + + + + + + 200 + + + Assertion.response_code + false + 8 + + + + + 300 + + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + HealthcheckAndStatisticsPerformance.log + + + + false + + saveConfig + + + true + true + true + + true + true + true + true + false + true + true + false + false + false + true + false + false + false + true + 0 + true + true + true + true + true + true + + + + + + + + + diff --git a/testsuites/performance/src/main/resources/testplans/removecsars.sh b/testsuites/performance/src/main/resources/testplans/removecsars.sh new file mode 100755 index 00000000..e5528d81 --- /dev/null +++ b/testsuites/performance/src/main/resources/testplans/removecsars.sh @@ -0,0 +1,33 @@ +# ============LICENSE_START======================================================= +# Copyright (c) 2020 Nordix Foundation. +# ================================================================================ +# 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. +# +# SPDX-License-Identifier: Apache-2.0 +# ============LICENSE_END========================================================= + +# the directory of the script +DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +echo "${DIR}" + +if [ $# -le 0 ] +then + echo "Usage ./removecsars.sh \$TARGETDIRECTORY" + exit 1 +fi +TARGETDIRECTORY=$1 + +rm -f "$TARGETDIRECTORY"/*.csar + + diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa deleted file mode 100644 index 60597577..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxsekiqwLgs9VfChnr2bnpLC3VqD1iT+s969vWe05j1RDozPu -zyD3krNgVUcd65x2QQJWrDK2fnyQUtubbPb3wviLXs0Gof4a/b65JsMQkeeC2/OK -aFvrE6D3heouXmWO1vo1iXy2hUhcfXdr6eM3rP3zpU9zb2Al25/90Ha8kKBpe1RS -PKHpmcqVXIpGVxJSXnioAFXUsJ687qrTv7Zm13AHkm2L1Y5IvMsGHLFjFTGFlFoY -ftQQAepF507CFqs66tD378vvNVg8LYqrKpnfdx2PIRNLHAa1xQWc0EvwGHyBQZRL -hTXS3M3IZ7Y22dJ+3Zg15PMx7QmWDZO5MG/JPwIDAQABAoIBAE5KS1AiutXmezDP -aSb4TLvcrhj8hDhuT92txxmQCV+ePJWG2sPRpDCvXX246NvnX9vy49gmkSH4RY+c -1vZvvt2XrqzD65zZzB+sgpf1tA0DNdMTdKvtqASvHU4tEd4z+bJKEdP4vpp4CZWQ -93vC9ia4TsIJLNns8Hwz42+7lEEResKYZA2djGnzHl+83vR1dm0GGBD6BKR1C3Cx -HbEhqx42EV61+8nAweQNjWKxeAc2hg+H8o8qWJM1aKy0TnqW6kudOYRyYIpX0rJA -siE2HwvDA1mDd5M8ntZ/Cx0pnTc/cuZB8BQJ0jN1JXbrJGbWspBNXformw7isbyO -WIOjvEECgYEA84XKV3aPrTE2JBs5vzzs59NMPV+5frw+xzDyPxqK5Q7+jjVKDwxh -/WRatCaTdRxhOI905HfVsDYjrsPOpmF9MHsLxmBhwk8zBFOu/xtYr7zBNkJhmCsq -kZMdxf8bpu08E7kMQJ2MvT7OhM5HRlWIUR0jdja8Hz51Ro4oOb/po7kCgYEA0Pb5 -v12ZsaSHMF0r4l983PifNwYmI22iQIEtRT2DxgTkDKgBTjbRzqZmEhaADMAO48o9 -sIZy+KJ/a8G9fPQVwMgBID8zOHnWsrFmM3qkj5hhrAQdtq7OE71zgaP0tyE1TG4u -Zs3a7eSyuoildHHFqX88oXSYsTlfV8vn23UpwLcCgYEAwXiCuBger8dQL0FeEJwz -zz5k7MG3WoPuEEzHuPC6dp8CCDM4IlqBI1JuaX/YWQtyBgCbKsQ2BigNE1THQhJj -5ndrdHCwWjKX4pElj9HHFN+OVTBJ3x40VLGfzuUNsAH8X+L9Y/yHivZyFrrXj352 -rZLL0KhNrzjs7WAVf0QEOCkCgYBe2s1xnZZnueyX+qMyBfBTChST0Jm9WUXejAS1 -un+3gn7Wc+jrzRyd9pC8wzPrFb9sjWBFYjKMRI8cpfxS3SWGtgM01Rt2FnBr+vUO -hyxt9ljX0aJ/S4hGE6h7/6XU/yEHibhMeENZ24d5/w9D9WUpVJV8IMYzJHzwCKI9 -z0hdrwKBgQDMKvY3DBpZjhZe9YnOgdj4SRpNwaasUSf3a3SZYY1JyOZVUzeSSzoX -rYLfxBRDjkJ8Nnod+nR/JSRqYa/SJYEMZEZFsC+k/pvBiaP6tk694IlpLD/2MXN6 -14FUV5LH/rGSbZJMSfZ9yNX1XZDowH8nOu+qlmlU4lmgiOuityTmtw== ------END RSA PRIVATE KEY----- diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image deleted file mode 100644 index f31d15df..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image +++ /dev/null @@ -1 +0,0 @@ -ubuntu_16.04 diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml deleted file mode 100644 index c49c2c69..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendorecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F118291.0entitlement pool12341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB39089 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml deleted file mode 100644 index db573afd..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendor2455e00dddf84eedaaed6eb412d39a7eentitlement poolecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F1182912341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB390891.0feature groupd3780d334c4c42d38c7ab1ec23a65cfd4444 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/annotations.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/annotations.yml deleted file mode 100644 index 2f146061..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/annotations.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -annotation_types: - org.openecomp.annotations.Source: - description: Indicates the origin source of an input - properties: - source_type: - type: string - vf_module_label: - type: list - description: List of VF Modules this input was originated from - entry_schema: - type: string - param_name: - type: string - description: Source parameter name diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/artifacts.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/artifacts.yml deleted file mode 100644 index 175615c7..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/artifacts.yml +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -artifact_types: - tosca.artifacts.Root: - description: This is the default (root) TOSCA Artifact Type definition that all other TOSCA base Artifact Types derive from. - tosca.artifacts.Deployment.Image: - derived_from: tosca.artifacts.Deployment - description: This artifact type represents a parent type for any "image" which is an opaque packaging of a TOSCA Node's deployment (whether real or virtual) whose contents are typically already installed and pre-configured (i.e., "stateful") and prepared to be run on a known target container. - tosca.artifacts.Implementation.Bash: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Bash script type that contains Bash commands that can be executed on the Unix Bash shell. - tosca.artifacts.Deployment.Image.VM: - derived_from: tosca.artifacts.Deployment - description: This artifact represents the parent type for all Virtual Machine (VM) image and container formatted deployment artifacts. These images contain a stateful capture of a machine (e.g., server) including operating system and installed software along with any configurations and can be run on another machine using a hypervisor which virtualizes typical server (i.e., hardware) resources. - tosca.artifacts.Implementation.Python: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Python file that contains Python language constructs that can be executed within a Python interpreter. - tosca.artifacts.Deployment: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all deployment artifacts in TOSCA. This class of artifacts typically represents a binary packaging of an application or service that is used to install/create or deploy it as part of a node's lifecycle. - tosca.artifacts.File: - derived_from: tosca.artifacts.Root - description: This artifact type is used when an artifact definition needs to have its associated file simply treated as a file and no special handling/handlers are invoked (i.e., it is not treated as either an implementation or deployment artifact type). - tosca.artifacts.Implementation: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all implementation artifacts in TOSCA. These artifacts are used to implement operations of TOSCA interfaces either directly (e.g., scripts) or indirectly (e.g., config. files). - tosca.artifacts.nfv.SwImage: - derived_from: tosca.artifacts.Deployment.Image diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/capabilities.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/capabilities.yml deleted file mode 100644 index 734c2012..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/capabilities.yml +++ /dev/null @@ -1,293 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -capability_types: - tosca.capabilities.Root: - description: The TOSCA root Capability Type all other TOSCA base Capability Types derive from - tosca.capabilities.Attachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.Node: - derived_from: tosca.capabilities.Root - tosca.capabilities.Container: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: integer - required: false - constraints: - - greater_or_equal: 1 - cpu_frequency: - type: scalar-unit.frequency - required: false - constraints: - - greater_or_equal: 0.1 GHz - disk_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - mem_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - org.openecomp.capabilities.PortMirroring: - derived_from: tosca.capabilities.Root - properties: - connection_point: - type: org.openecomp.datatypes.PortMirroringConnectionPointDescription - tosca.capabilities.Endpoint: - derived_from: tosca.capabilities.Root - properties: - protocol: - type: string - default: tcp - port: - type: PortDef - required: false - secure: - type: boolean - default: false - url_path: - type: string - required: false - port_name: - type: string - required: false - network_name: - type: string - required: false - default: PRIVATE - initiator: - type: string - default: source - constraints: - - valid_values: - - source - - target - - peer - ports: - type: map - required: false - constraints: - - min_length: 1 - entry_schema: - type: PortSpec - attributes: - ip_address: - type: string - tosca.capabilities.DatabaseEndpoint: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.Endpoint.Public: - derived_from: tosca.capabilities.Endpoint - properties: - network_name: PUBLIC - floating: - description: | - indicates that the public address should be allocated from a pool of floating IPs that are associated with the network. - type: boolean - default: false - status: experimental - dns_name: - description: The optional name to register with DNS - type: string - required: false - status: experimental - tosca.capabilities.Endpoint.Admin: - derived_from: tosca.capabilities.Endpoint - properties: - secure: true - tosca.capabilities.Endpoint.Database: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.OperatingSystem: - derived_from: tosca.capabilities.Root - properties: - architecture: - type: string - required: false - type: - type: string - required: false - distribution: - type: string - required: false - version: - type: version - required: false - tosca.capabilities.Scalable: - derived_from: tosca.capabilities.Root - properties: - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - default_instances: - type: integer - tosca.capabilities.network.Bindable: - derived_from: tosca.capabilities.Node - tosca.capabilities.Container.Docker: - derived_from: tosca.capabilities.Container - properties: - version: - type: list - required: false - entry_schema: version - publish_all: - type: boolean - default: false - required: false - publish_ports: - type: list - entry_schema: PortSpec - required: false - expose_ports: - type: list - entry_schema: PortSpec - required: false - volumes: - type: list - entry_schema: string - required: false - tosca.capabilities.network.Linkable: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.AllottedResource: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Metric: - derived_from: tosca.capabilities.Endpoint - org.openecomp.capabilities.Metric: - derived_from: tosca.capabilities.nfv.Metric - description: A node type that includes the Metric capability indicates that it can be monitored. - properties: - unit: - type: string - description: Unit of the metric value - required: true - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - status: SUPPORTED - attributes: - value: - type: string - description: Runtime monitored value - status: SUPPORTED - 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: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - org.openecomp.capabilities.Forwarder: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.VLANAssignment: - derived_from: tosca.capabilities.Root - description: ability to expose routing information of the internal network - properties: - vfc_instance_group_reference: - type: string - description: Ability to recognize capability per vfc instance group on vnf instance - required: true - org.openecomp.capabilities.RoutingConfiguration: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.FabricConfiguration: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualStorage: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualCompute: - derived_from: tosca.capabilities.Root - properties: - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - compute_requirements: - type: map - entry_schema: - type: string - required: false - requested_additional_capabilities: - type: map - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - required: false - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - tosca.capabilities.nfv.VirtualBindable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ExtVirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Forwarder: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.GuestOs: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.ImageFile: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.LocalAttachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.Compute.Container.Architecture: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: string - required: false - flavor_extra_specs: - type: map - required: false - entry_schema: - type: string - mem_size: - type: string - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/data.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/data.yml deleted file mode 100644 index 0ff71791..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/data.yml +++ /dev/null @@ -1,1733 +0,0 @@ -# -# 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_yaml_1_1 -data_types: - tosca.datatypes.Root: - description: The TOSCA root Data Type all other TOSCA base Data Types derive from - integer: - derived_from: tosca.datatypes.Root - string: - derived_from: tosca.datatypes.Root - boolean: - derived_from: tosca.datatypes.Root - float: - derived_from: tosca.datatypes.Root - list: - derived_from: tosca.datatypes.Root - map: - derived_from: tosca.datatypes.Root - json: - derived_from: tosca.datatypes.Root - scalar-unit: - derived_from: tosca.datatypes.Root - scalar-unit.size: - derived_from: scalar-unit - scalar-unit.time: - derived_from: scalar-unit - scalar-unit.frequency: - derived_from: scalar-unit - tosca.datatypes.Credential: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: false - token_type: - type: string - default: password - token: - type: string - keys: - type: map - required: false - entry_schema: - type: string - user: - type: string - required: false - org.openecomp.datatypes.PortMirroringConnectionPointDescription: - derived_from: tosca.datatypes.Root - properties: - nf_naming_code: - type: string - nfc_naming_code: - type: string - network_role: - type: string - pps_capacity: - type: string - nf_type: - type: string - description: deprecated - nfc_type: - type: string - description: deprecated - tosca.datatypes.TimeInterval: - derived_from: tosca.datatypes.Root - properties: - start_time: - type: timestamp - required: true - end_time: - type: timestamp - required: true - tosca.datatypes.network.NetworkInfo: - derived_from: tosca.datatypes.Root - properties: - network_name: - type: string - network_id: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortInfo: - derived_from: tosca.datatypes.Root - properties: - port_name: - type: string - port_id: - type: string - network_id: - type: string - mac_address: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortDef: - derived_from: integer - constraints: - - in_range: - - 1 - - 65535 - tosca.datatypes.network.PortSpec: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: true - default: tcp - constraints: - - valid_values: - - udp - - tcp - - igmp - target: - type: tosca.datatypes.network.PortDef - target_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - source: - type: tosca.datatypes.network.PortDef - source_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - org.openecomp.datatypes.heat.network.AddressPair: - derived_from: tosca.datatypes.Root - description: MAC/IP address pairs - properties: - mac_address: - type: string - description: MAC address - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.subnet.HostRoute: - derived_from: tosca.datatypes.Root - description: Host route info for the subnet - properties: - destination: - type: string - description: The destination for static route - required: false - status: SUPPORTED - nexthop: - type: string - description: The next hop for the destination - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.AllocationPool: - derived_from: tosca.datatypes.Root - description: The start and end addresses for the allocation pool - properties: - start: - type: string - description: Start address for the allocation pool - required: false - status: SUPPORTED - end: - type: string - description: End address for the allocation pool - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.Subnet: - derived_from: tosca.datatypes.Root - description: A subnet represents an IP address block that can be used for assigning IP addresses to virtual instances - properties: - tenant_id: - type: string - description: The ID of the tenant who owns the network - required: false - status: SUPPORTED - enable_dhcp: - type: boolean - description: Set to true if DHCP is enabled and false if DHCP is disabled - required: false - default: true - status: SUPPORTED - ipv6_address_mode: - type: string - description: IPv6 address mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - ipv6_ra_mode: - type: string - description: IPv6 RA (Router Advertisement) mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - allocation_pools: - type: list - description: The start and end addresses for the allocation pools - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.AllocationPool - subnetpool: - type: string - description: The name or ID of the subnet pool - required: false - status: SUPPORTED - dns_nameservers: - type: list - description: A specified set of DNS name servers to be used - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - host_routes: - type: list - description: The gateway IP address - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.subnet.HostRoute - ip_version: - type: integer - description: The gateway IP address - required: false - default: 4 - status: SUPPORTED - constraints: - - valid_values: - - '4' - - '6' - name: - type: string - description: The name of the subnet - required: false - status: SUPPORTED - prefixlen: - type: integer - description: Prefix length for subnet allocation from subnet pool - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 0 - cidr: - type: string - description: The CIDR - required: false - status: SUPPORTED - gateway_ip: - type: string - description: The gateway IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.novaServer.network.PortExtraProperties: - derived_from: tosca.datatypes.Root - description: Nova server network expand properties for port - properties: - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the port - required: false - status: SUPPORTED - mac_address: - type: string - description: MAC address to give to this port - required: false - status: SUPPORTED - admin_state_up: - type: boolean - description: The administrative state of this port - required: false - default: true - status: SUPPORTED - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this port - 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 - org.openecomp.datatypes.heat.novaServer.network.AddressInfo: - derived_from: tosca.datatypes.network.NetworkInfo - description: Network addresses with corresponding port id - properties: - port_id: - type: string - description: Port id - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.neutron.port.FixedIps: - derived_from: tosca.datatypes.Root - description: subnet/ip_address - properties: - subnet: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address desired in the subnet for this port - required: false - status: SUPPORTED - subnet_id: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.FileInfo: - derived_from: tosca.datatypes.Root - description: Heat File Info - properties: - file: - type: string - description: The required URI string (relative or absolute) which can be used to locate the file - required: true - status: SUPPORTED - file_type: - type: string - description: The type of the file - required: true - status: SUPPORTED - constraints: - - valid_values: - - base - - env - - volume - - network - org.openecomp.datatypes.heat.contrail.network.rule.PortPairs: - derived_from: tosca.datatypes.Root - description: source and destination port pairs - properties: - start_port: - type: string - description: Start port - required: false - status: SUPPORTED - end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - apply_service: - type: string - description: Service to apply - required: false - status: SUPPORTED - dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - direction: - type: string - description: Direction - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.Rule - org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork: - derived_from: tosca.datatypes.Root - description: source and destination addresses - properties: - virtual_network: - type: string - description: Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule: - derived_from: tosca.datatypes.Root - description: Rules Pairs - properties: - remote_group_id: - type: string - description: The remote group ID to be associated with this security group rule - required: false - status: SUPPORTED - protocol: - type: string - description: The protocol that is matched by the security group rule - required: false - status: SUPPORTED - constraints: - - valid_values: - - tcp - - udp - - icmp - ethertype: - type: string - description: Ethertype of the traffic - required: false - default: IPv4 - status: SUPPORTED - constraints: - - valid_values: - - IPv4 - - IPv6 - port_range_max: - type: integer - description: 'The maximum port number in the range that is matched by the - security group rule. ' - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - remote_ip_prefix: - type: string - description: The remote IP prefix (CIDR) to be associated with this security group rule - required: false - status: SUPPORTED - remote_mode: - type: string - description: Whether to specify a remote group or a remote IP prefix - required: false - default: remote_ip_prefix - status: SUPPORTED - constraints: - - valid_values: - - remote_ip_prefix - - remote_group_id - direction: - type: string - description: The direction in which the security group rule is applied - required: false - default: ingress - status: SUPPORTED - constraints: - - valid_values: - - egress - - ingress - port_range_min: - type: integer - description: The minimum port number in the range that is matched by the security group rule. - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - org.openecomp.datatypes.heat.substitution.SubstitutionFiltering: - derived_from: tosca.datatypes.Root - description: Substitution Filter - properties: - substitute_service_template: - type: string - description: Substitute Service Template - required: true - status: SUPPORTED - index_value: - type: integer - description: Index value of the substitution service template runtime instance - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - count: - type: string - description: Count - required: false - default: 1 - status: SUPPORTED - scaling_enabled: - type: boolean - description: Indicates whether service scaling is enabled - required: false - default: true - status: SUPPORTED - mandatory: - type: boolean - description: Mandatory - required: false - default: true - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence: - derived_from: tosca.datatypes.Root - description: network policy refs data sequence - properties: - network_policy_refs_data_sequence_major: - type: integer - description: Network Policy ref data sequence Major - required: false - status: SUPPORTED - network_policy_refs_data_sequence_minor: - type: integer - description: Network Policy ref data sequence Minor - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData: - derived_from: tosca.datatypes.Root - description: network policy refs data - properties: - network_policy_refs_data_sequence: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence - description: Network Policy ref data sequence - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet - properties: - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len: - type: string - description: Network ipam refs data ipam subnets ip prefix len - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix: - type: string - description: Network ipam refs data ipam subnets ip prefix - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet List - properties: - network_ipam_refs_data_ipam_subnets_subnet: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_addr_from_start: - type: string - description: Network ipam refs data ipam subnets addr from start - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data - properties: - network_ipam_refs_data_ipam_subnets: - type: list - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork: - derived_from: tosca.datatypes.Root - description: source addresses - properties: - network_policy_entries_policy_rule_src_addresses_virtual_network: - type: string - description: Source addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork: - derived_from: tosca.datatypes.Root - description: destination addresses - properties: - network_policy_entries_policy_rule_dst_addresses_virtual_network: - type: string - description: Destination addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs: - derived_from: tosca.datatypes.Root - description: destination port pairs - properties: - network_policy_entries_policy_rule_dst_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_dst_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs: - derived_from: tosca.datatypes.Root - description: source port pairs - properties: - network_policy_entries_policy_rule_src_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList: - derived_from: tosca.datatypes.Root - description: Action List - properties: - network_policy_entries_policy_rule_action_list_simple_action: - type: string - description: Simple Action - required: false - status: SUPPORTED - network_policy_entries_policy_rule_action_list_apply_service: - type: list - description: Apply Service - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - network_policy_entries_policy_rule_dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork - network_policy_entries_policy_rule_dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs - network_policy_entries_policy_rule_protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork - network_policy_entries_policy_rule_direction: - type: string - description: Direction - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs - network_policy_entries_policy_rule_action_list: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList - description: Action list - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - network_policy_entries_policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.Rule - org.openecomp.datatypes.heat.network.contrail.port.StaticRoute: - derived_from: tosca.datatypes.Root - description: static route - properties: - prefix: - type: string - description: Route prefix - required: false - status: SUPPORTED - next_hop: - type: string - description: Next hop - required: false - status: SUPPORTED - next_hop_type: - type: string - description: Next hop type - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.AddressPair: - derived_from: tosca.datatypes.Root - description: Address Pair - properties: - address_mode: - type: string - description: Address mode active-active or active-standy - required: false - status: SUPPORTED - constraints: - - valid_values: - - active-active - - active-standby - prefix: - type: string - description: IP address prefix - required: false - status: SUPPORTED - mac_address: - type: string - description: Mac address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.InterfaceData: - derived_from: tosca.datatypes.Root - description: Interface Data - 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 - 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 - ip_address: - type: string - description: IP for this interface - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Interface Properties. - properties: - virtual_machine_interface_properties_service_interface_type: - type: string - description: Service Interface Type. - required: false - status: SUPPORTED - org.openecomp.datatypes.Root: - derived_from: tosca.datatypes.Root - description: | - The ECOMP root Data Type all other Data Types derive from - properties: - supplemental_data: - type: map - entry_schema: - description: | - A placeholder for missing properties that would be included in future ecomp model versions. fromat : - type: string - org.openecomp.datatypes.AssignmentRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - is_required: - description: | - "true" indicates that assignment is required - type: boolean - default: false - required: true - count: - description: number of assignments required - type: integer - required: false - org.openecomp.datatypes.network.SubnetAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ip_network_address_plan: - type: string - required: false - description: Reference to EIPAM, VLAN or other address plan ID used to assign subnets to this network - dhcp_enabled: - type: boolean - required: false - description: \"true\" indicates the network has 1 or more policies - ip_version: - type: integer - constraints: - - valid_values: - - 4 - - 6 - required: true - description: The IP version of the subnet - cidr_mask: - type: integer - required: true - description: The default subnet CIDR mask - min_subnets_count: - type: integer - default: 1 - required: true - description: Quantity of subnets that must be initially assigned - org.openecomp.datatypes.network.IPv4SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv4: - type: boolean - required: true - description: Indicates IPv4 subnet assignments - org.openecomp.datatypes.network.IPv6SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv6: - type: boolean - required: true - description: Indicates IPv6 subnet assignments - org.openecomp.datatypes.network.NetworkAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_network_assignment: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the network assignments will be auto-generated by ECOMP \"false\" indicates operator-supplied Network assignments file upload is required (e.g. VID will present prompt to operator to upload operator-supplied Network assignments file). - is_shared_network: - type: boolean - required: true - description: \"true\" means this network is shared by multiple Openstack tenants - is_external_network: - type: boolean - required: true - default: false - description: | - \"true\" means this Contrail external network - ipv4_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv4SubnetAssignments - required: true - description: IPv4 defualt subnet assignments - ipv6_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv6SubnetAssignments - required: true - description: IPv6 defualt subnet assignments - related_networks: - type: list - required: false - description: Related Networks List. - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - is_trunked: - type: boolean - required: true - description: \"true\" indicates that network is trunked - default: false - org.openecomp.datatypes.network.ProviderNetwork: - derived_from: org.openecomp.datatypes.Root - properties: - is_provider_network: - type: boolean - required: true - description: \"true\" indicates that this a Neutron provider type of network - physical_network_name: - type: string - required: false - constraints: - - valid_values: - - Physnet41 - - Physnet42 - - Physnet43 - - Physnet44 - - Physnet21 - - Physnet22 - - sriovnet1 - - sriovnet2 - - oam - description: | - Identifies the NUMA processor cluster to which this physical network interface belongs. NUMA instance correlates to the first digit of the Physical Network Name suffix (e.g. \"01\" = NUMA 0, \"11\" = NUMA 1) - numa: - type: string - required: false - constraints: - - valid_values: - - NUMA 0 - - NUMA 1 - description: | - PNIC instance within the NUMA processor cluster PNIC Instance correlates to the second digit of the Physical Network Name suffix (e.g. "01" = PNIC 1, "02" = "PNIC 2) - pnic_instance: - type: integer - required: false - description: PNIC instance within the NUMA processor cluster - org.openecomp.datatypes.network.NetworkFlows: - derived_from: org.openecomp.datatypes.Root - properties: - is_network_policy: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more policies - network_policy: - type: string - required: false - description: 'Identifies the specific Cloud network policy that must be applied - to this network (source: from Policy Manager).' - is_bound_to_vpn: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more vpn bindings - vpn_binding: - type: string - required: false - description: 'Identifies the specific VPN Binding entry in A&AI that must - be applied when creating this network (source: A&AI)' - org.openecomp.datatypes.network.VlanRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - vlan_range_plan: - type: string - required: true - description: reference to a vlan range plan - vlan_type: - type: string - required: true - constraints: - - valid_values: - - c-tag - - s-tag - description: identifies the vlan type (e.g., c-tag) - vlan_count: - type: integer - required: true - description: identifies the number of vlan tags to assign to the CP from the plan - org.openecomp.datatypes.network.IpRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - ip_version: - type: integer - required: true - constraints: - - valid_values: - - 4 - - 6 - ip_count: - description: identifies the number of ip address to assign to the CP from the plan - type: integer - required: false - floating_ip_count: - type: integer - required: false - subnet_role: - type: string - required: false - assingment_method: - type: string - required: true - constraints: - - valid_values: - - fixed - - dhcp - dhcp_enabled: - type: boolean - required: false - ip_count_required: - description: identifies the number of ip address to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - required: false - floating_ip_count_required: - type: org.openecomp.datatypes.AssignmentRequirements - required: false - ip_address_plan_name: - type: string - required: false - vrf_name: - type: string - required: false - org.openecomp.datatypes.network.MacAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - type: string - required: true - description: reference to a MAC address range plan - mac_count: - type: integer - required: true - description: identifies the number of MAC addresses to assign to the CP from the plan - org.openecomp.datatypes.EcompHoming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_selected_instance_node_target: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the target deployment node for this instance will be auto-selected by ECOMP \"false\" indicates operator-supplied instance target deployment node required (e.g. VID will present a prompt to operator and collect the operator-selected target node for the deployment of this Network instance). - homing_policy: - type: string - required: false - description: Referenc to a service level homing policy that ECOMP will use for instance deployment target node - instance_node_target: - type: string - required: false - description: Instance target deployment node - org.openecomp.datatypes.EcompNaming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - type: boolean - required: true - default: true - description: | - \"true\" indicates that the name for the instance will be auto-generated by ECOMP. \"false\" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - naming_policy: - type: string - required: false - description: Referenc to naming policy that ECOMP will use when the name is auto-generated - org.openecomp.datatypes.network.MacRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - description: reference to a MAC address range plan - type: string - required: false - mac_count: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: integer - required: false - mac_count_required: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair IP. - properties: - ip_prefix: - type: string - description: IP Prefix. - required: false - status: SUPPORTED - ip_prefix_len: - type: integer - description: IP Prefix Len. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Mac Address. - properties: - mac_address: - type: list - description: Mac Addresses List. - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface VLAN Properties. - properties: - sub_interface_vlan_tag: - type: string - description: Sub Interface VLAN Tag. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair. - properties: - address_mode: - type: string - description: Address Mode. - required: false - status: SUPPORTED - ip: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp - description: IP. - required: false - status: SUPPORTED - mac: - type: string - description: Mac. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pairs. - properties: - allowed_address_pair: - type: list - description: Addresses pair List. - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair - org.openecomp.datatypes.Naming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - description: | - "true" indicates that the name for the instance will be auto-generated by ECOMP. "false" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: boolean - default: true - required: true - naming_policy: - description: Reference to naming policy that ECOMP will use when the name is auto-generated - type: string - required: false - instance_name: - description: indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: string - required: false - org.openecomp.datatypes.flavors.ComputeFlavor: - derived_from: tosca.datatypes.Root - properties: - num_cpus: - type: integer - disk_size: - type: scalar-unit.size - mem_size: - type: scalar-unit.size - org.openecomp.datatypes.flavors.LicenseFlavor: - derived_from: tosca.datatypes.Root - properties: - feature_group_uuid: - type: string - org.openecomp.datatypes.flavors.VendorInfo: - derived_from: tosca.datatypes.Root - properties: - manufacturer_reference_number: - type: string - vendor_model: - type: string - org.openecomp.datatypes.flavors.DeploymentFlavor: - derived_from: tosca.datatypes.Root - properties: - sp_part_number: - type: string - vendor_info: - type: org.openecomp.datatypes.flavors.VendorInfo - compute_flavor: - type: org.openecomp.datatypes.flavors.ComputeFlavor - license_flavor: - type: org.openecomp.datatypes.flavors.LicenseFlavor - required: false - org.openecomp.datatypes.ImageInfo: - derived_from: tosca.datatypes.Root - properties: - software_version: - type: string - file_name: - type: string - file_hash: - type: string - description: checksum/signature - file_hash_type: - type: string - required: false - default: md5 - org.openecomp.datatypes.network.RelatedNetworksAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - related_network_role: - type: string - description: The network role of the related network, sharing provider network. - required: false - tosca.datatypes.nfv.VnfcConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - additional_vnfc_configurable_properties: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.RequestedAdditionalCapability: - derived_from: tosca.datatypes.Root - properties: - support_mandatory: - type: boolean - required: true - min_requested_additional_capability_version: - type: string - required: false - preferred_requested_additional_capability_version: - type: string - required: false - requested_additional_capability_name: - type: string - required: true - target_performance_parameters: - type: map - entry_schema: - type: string - required: true - tosca.datatypes.nfv.VirtualMemory: - derived_from: tosca.datatypes.Root - properties: - virtual_mem_size: - type: scalar-unit.size - required: true - virtual_mem_oversubscription_policy: - type: string - required: false - vdu_memory_requirements: - type: map - entry_schema: - type: string - required: false - numa_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VirtualCpuPinning: - derived_from: tosca.datatypes.Root - properties: - cpu_pinning_policy: - type: string - constraints: - - valid_values: - - static - - dynamic - required: false - cpu_pinning_map: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualCpu: - derived_from: tosca.datatypes.Root - properties: - cpu_architecture: - type: string - required: false - num_virtual_cpu: - type: integer - required: true - virtual_cpu_clock: - type: scalar-unit.frequency - required: false - virtual_cpu_oversubscription_policy: - type: string - required: false - vdu_cpu_requirements: - type: map - entry_schema: - type: string - required: false - virtual_cpu_pinning: - type: tosca.datatypes.nfv.VirtualCpuPinning - required: false - tosca.datatypes.nfv.LogicalNodeData: - derived_from: tosca.datatypes.Root - properties: - logical_node_requirements: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: false - description: - type: string - required: false - support_mandatory: - type: boolean - required: true - requirement: - type: string - required: false - network_interface_requirements: - type: map - entry_schema: - type: string - required: true - nic_io_requirements: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - tosca.datatypes.nfv.injectFile: - derived_from: tosca.datatypes.Root - properties: - source_path: - type: string - required: true - dest_path: - type: string - required: true - tosca.datatypes.nfv.L2AddressData: - derived_from: tosca.datatypes.Root - properties: - mac_address_assignment: - type: boolean - required: true - address: - type: string - required: false - tosca.datatypes.nfv.L3AddressData: - derived_from: tosca.datatypes.Root - properties: - ip_address_assignment: - type: boolean - required: true - floating_ip_activated: - type: boolean - required: true - ip_address_type: - type: string - required: false - constraints: - - valid_values: - - ipv4 - - ipv6 - number_of_ip_address: - type: integer - required: false - fixed_ip_address: - type: list - entry_schema: - type: string - required: false - tosca.datatypes.nfv.AddressData: - properties: - address_type: - constraints: - - valid_values: - - mac_address - - ip_address - type: string - required: true - l2_address_data: - required: false - type: tosca.datatypes.nfv.L2AddressData - l3_address_data: - required: false - type: tosca.datatypes.nfv.L3AddressData - tosca.datatypes.nfv.ConnectivityType: - derived_from: tosca.datatypes.Root - properties: - layer_protocol: - type: string - required: true - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - flow_pattern: - type: string - required: false - constraints: - - valid_values: - - Line - - Tree - - Mesh - tosca.datatypes.nfv.VlFlavour: - derived_from: tosca.datatypes.Root - properties: - flavourId: - type: string - tosca.datatypes.nfv.ext.AddressPairs: - properties: - ip: - type: string - required: false - mac: - type: string - required: false - tosca.datatypes.nfv.ext.FloatingIP: - properties: - external_network: - type: string - required: false - ip_address: - type: string - required: false - tosca.datatypes.nfv.ext.LocationInfo: - properties: - availability_zone: - type: string - required: false - vimid: - type: integer - required: false - tenant: - type: string - required: false - tosca.datatypes.nfv.ext.HostRouteInfo: - properties: - destination: - type: string - required: false - nexthop: - type: string - required: false - tosca.datatypes.nfv.ext.InjectData: - properties: - file_name: - type: string - required: false - file_data: - type: string - required: false - tosca.datatypes.nfv.ext.zte.WatchDog: - properties: - enable_delay: - type: integer - required: false - action: - type: string - required: false - tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule: - properties: - scope: - type: string - required: false - affinity_antiaffinity: - type: string - required: false - tosca.datatypes.nfv.VduProfile: - derived_from: tosca.datatypes.Root - properties: - min_number_of_instances: - type: integer - required: true - max_number_of_instances: - type: integer - required: true - watchdog: - type: string - required: true - vmBootUpTimeOut: - type: integer - required: false - tosca.datatypes.nfv.LinkBitRateRequirements: - derived_from: tosca.datatypes.Root - properties: - root: - type: integer - required: true - leaf: - type: integer - required: true - tosca.datatypes.nfv.Qos: - derived_from: tosca.datatypes.Root - properties: - latency: - type: integer - required: true - packet_delay_variation: - type: integer - required: true - packet_loss_ratio: - type: float - constraints: - - in_range: - - 0.0 - - 1.0 - required: false - tosca.datatypes.nfv.VlProfile: - derived_from: tosca.datatypes.Root - properties: - max_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - min_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - qos: - type: tosca.datatypes.nfv.Qos - required: false - initiationParameters: - type: map - entry_schema: - type: string - required: false - cidr: - type: string - required: false - networkName: - type: string - required: false - startIp: - type: string - required: false - endIp: - type: string - required: false - gatewayIp: - type: string - required: false - segmentationId: - type: integer - required: false - physicalNetwork: - type: string - required: false - networkType: - type: string - required: false - constraints: - - valid_values: - - VLAN - - VXLAN - dhcpEnabled: - type: boolean - required: false - vlanTransparent: - type: boolean - required: false - tosca.datatypes.nfv.VduLevel: - derived_from: tosca.datatypes.Root - properties: - number_of_instances: - type: integer - required: true - tosca.datatypes.nfv.ScaleInfo: - derived_from: tosca.datatypes.Root - properties: - scaleLevel: - type: integer - required: true - tosca.datatypes.nfv.ScaleAspect: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - associated_group: - type: string - required: false - max_scale_level: - type: integer - required: true - tosca.datatypes.nfv.InstantiationLevel: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: true - vdu_levels: - type: map - required: true - entry_schema: - type: tosca.datatypes.nfv.VduLevel - scale_info: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.ScaleInfo - tosca.datatypes.nfv.VnfScaleOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - scaling_by_more_than_one_step_supported: - type: boolean - tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - arbitrary_target_levels_supported: - type: boolean - tosca.datatypes.nfv.VnfHealOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - causes: - type: list - entry_schema: - type: string - tosca.datatypes.nfv.VnfTerminateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfOperateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfLcmOperationsConfiguration: - derived_from: tosca.datatypes.Root - properties: - scale: - type: tosca.datatypes.nfv.VnfScaleOperationConfiguration - scale_to_level: - type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration - heal: - type: tosca.datatypes.nfv.VnfHealOperationConfiguration - terminate: - type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration - operate: - type: tosca.datatypes.nfv.VnfOperateOperationConfiguration - tosca.datatypes.nfv.CpProtocolData: - derived_from: tosca.datatypes.Root - properties: - asscociated_layer_protocol: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo-wire - required: true - address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.datatypes.nfv.VnfConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - is_autoscale_enabled: - type: boolean - required: false - is_autoheal_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributes: - derived_from: tosca.datatypes.Root - properties: - extensions: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions - required: false - metadata: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/groups.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/groups.yml deleted file mode 100644 index f8be60db..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/groups.yml +++ /dev/null @@ -1,133 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -group_types: - tosca.groups.Root: - description: The TOSCA Group Type all other TOSCA Group Types derive from - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - org.openecomp.groups.heat.HeatStack: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same heat stack - properties: - heat_file: - type: string - description: Heat file which associate to this group/heat stack - required: true - status: SUPPORTED - description: - type: string - description: group description - required: true - status: SUPPORTED - org.openecomp.groups.VfModule: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same VF Module - properties: - isBase: - type: boolean - description: Whether this module should be deployed before other modules - required: true - default: false - status: SUPPORTED - vf_module_label: - type: string - required: true - description: | - Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model - vf_module_description: - type: string - required: true - description: | - Description of the VF-modules contents and purpose (e.g. "Front-End" or "Database Cluster") - min_vf_module_instances: - type: integer - required: true - description: The minimum instances of this VF-Module - max_vf_module_instances: - type: integer - required: false - description: The maximum instances of this VF-Module - initial_count: - type: integer - required: false - description: | - The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances. - vf_module_type: - type: string - required: true - constraint: - - valid_values: - - Base - - Expansion - volume_group: - type: boolean - required: true - default: false - description: | - "true" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time. - availability_zone_count: - type: integer - required: false - description: | - Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template) - vfc_list: - type: map - entry_schema: - description: : - type: string - required: false - description: | - Identifies the set of VM types and their count included in the VF-Module - org.openecomp.groups.NetworkCollection: - derived_from: tosca.groups.Root - description: groups l3-networks in network collection - properties: - network_collection_function: - type: string - required: true - description: network collection function - network_collection_description: - type: string - required: true - description: network collection description, free format text - org.openecomp.groups.VfcInstanceGroup: - derived_from: tosca.groups.Root - description: groups VFCs with same parent port role - properties: - vfc_instance_group_function: - type: string - required: true - description: function of this VFC group - vfc_parent_port_role: - type: string - required: true - description: common role of parent ports of VFCs in this group - network_collection_function: - type: string - required: true - description: network collection function assigned to this group - subinterface_role: - type: string - required: true - description: common role of subinterfaces of VFCs in this group, criteria the group is created - capabilities: - vlan_assignment: - type: org.openecomp.capabilities.VLANAssignment - properties: - vfc_instance_group_reference: - type: string diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/interfaces.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/interfaces.yml deleted file mode 100644 index a11c7169..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/interfaces.yml +++ /dev/null @@ -1,83 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -interface_types: - tosca.interfaces.nfv.vnf.lifecycle.Nfv: - instantiate: - description: Invoked upon receipt of an Instantiate VNF request - instantiate_start: - description: Invoked before instantiate - instantiate_end: - description: Invoked after instantiate - terminate: - description: Invoked upon receipt Terminate VNF request - terminate_start: - description: Invoked before terminate - terminate_end: - description: Invoked after terminate - modify_information: - description: Invoked upon receipt of a Modify VNF Information request - modify_information_start: - description: Invoked before modify_information - modify_information_end: - description: Invoked after modify_information - change_flavour: - description: Invoked upon receipt of a Change VNF Flavour request - change_flavour_start: - description: Invoked before change_flavour - change_flavour_end: - description: Invoked after change_flavour - change_external_connectivity: - description: Invoked upon receipt of a Change External VNF Connectivity request - change_external_connectivity_start: - description: Invoked before change_external_connectivity - change_external_connectivity_end: - description: Invoked after change_external_connectivity - operate: - description: Invoked upon receipt of an Operate VNF request - operate_start: - description: Invoked before operate - operate_end: - description: Invoked after operate - heal: - description: Invoked upon receipt of a Heal VNF request - heal_start: - description: Invoked before heal - heal_end: - description: Invoked after heal - scale: - description: Invoked upon receipt of a Scale VNF request - scale_start: - description: Invoked before scale - scale_end: - description: Invoked after scale - scale_to_level: - description: Invoked upon receipt of a Scale VNF to Level request - scale_to_level_start: - description: Invoked before scale_to_level - scale_to_level_end: - description: Invoked after scale_to_level - tosca.interfaces.node.lifecycle.Standard: - create: - description: Standard lifecycle create operation. - configure: - description: Standard lifecycle configure operation. - start: - description: Standard lifecycle start operation. - stop: - description: Standard lifecycle stop operation. - delete: - description: Standard lifecycle delete operation. diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/nodes.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/nodes.yml deleted file mode 100644 index 62d77f4c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/nodes.yml +++ /dev/null @@ -1,4781 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -- artifacts.yml -- capabilities.yml -- interfaces.yml -- relationships.yml -node_types: - tosca.nodes.BlockStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 1 MB - volume_id: - type: string - required: false - snapshot_id: - type: string - required: false - capabilities: - attachment: - type: tosca.capabilities.Attachment - tosca.nodes.WebApplication: - derived_from: tosca.nodes.Root - properties: - context_root: - type: string - capabilities: - app_endpoint: - type: tosca.capabilities.Endpoint - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.WebServer - relationship: tosca.relationships.HostedOn - tosca.nodes.Database: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: the logical name of the database - port: - type: integer - description: the port the underlying database service will listen to for data - user: - type: string - description: the optional user account name for DB administration - required: false - password: - type: string - description: the optional password for the DB user account - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.DBMS - relationship: tosca.relationships.HostedOn - capabilities: - database_endpoint: - type: tosca.capabilities.Endpoint.Database - tosca.nodes.Container.Runtime: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - host: - type: tosca.capabilities.Container - scalable: - type: tosca.capabilities.Scalable - tosca.nodes.network.Port: - derived_from: tosca.nodes.Root - properties: - ip_address: - type: string - required: false - order: - type: integer - required: true - default: 0 - constraints: - - greater_or_equal: 0 - is_default: - type: boolean - required: false - default: false - ip_range_start: - type: string - required: false - ip_range_end: - type: string - required: false - requirements: - - link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - tosca.nodes.Root: - description: The TOSCA Node Type all other TOSCA base Node Types derive from - attributes: - tosca_id: - type: string - tosca_name: - type: string - state: - type: string - capabilities: - feature: - type: tosca.capabilities.Node - requirements: - - dependency: - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - occurrences: - - 0 - - UNBOUNDED - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - tosca.nodes.network.Network: - derived_from: tosca.nodes.Root - properties: - ip_version: - type: integer - required: false - default: 4 - constraints: - - valid_values: - - 4 - - 6 - cidr: - type: string - required: false - start_ip: - type: string - required: false - end_ip: - type: string - required: false - gateway_ip: - type: string - required: false - network_name: - type: string - required: false - network_id: - type: string - required: false - segmentation_id: - type: string - required: false - network_type: - type: string - required: false - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - default: true - capabilities: - link: - type: tosca.capabilities.network.Linkable - tosca.nodes.Compute: - derived_from: tosca.nodes.Root - attributes: - private_address: - type: string - public_address: - type: string - networks: - type: map - entry_schema: - type: tosca.datatypes.network.NetworkInfo - ports: - type: map - entry_schema: - type: tosca.datatypes.network.PortInfo - requirements: - - local_storage: - capability: tosca.capabilities.Attachment - node: tosca.nodes.BlockStorage - relationship: tosca.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.SoftwareComponent - endpoint: - type: tosca.capabilities.Endpoint.Admin - os: - type: tosca.capabilities.OperatingSystem - scalable: - type: tosca.capabilities.Scalable - binding: - type: tosca.capabilities.network.Bindable - tosca.nodes.LoadBalancer: - derived_from: tosca.nodes.Root - properties: - algorithm: - type: string - required: false - status: experimental - capabilities: - client: - type: tosca.capabilities.Endpoint.Public - occurrences: - - 0 - - UNBOUNDED - description: the Floating (IP) client’s on the public network can connect to - requirements: - - application: - capability: tosca.capabilities.Endpoint - relationship: tosca.relationships.RoutesTo - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.DBMS: - derived_from: tosca.nodes.SoftwareComponent - properties: - root_password: - type: string - required: false - description: the optional root password for the DBMS service - port: - type: integer - required: false - description: the port the DBMS service will listen to for data and requests - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.Database - tosca.nodes.WebServer: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - data_endpoint: tosca.capabilities.Endpoint - admin_endpoint: tosca.capabilities.Endpoint.Admin - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.WebApplication - tosca.nodes.Container.Application: - derived_from: tosca.nodes.Root - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Container - relationship: tosca.relationships.HostedOn - tosca.nodes.SoftwareComponent: - derived_from: tosca.nodes.Root - properties: - component_version: - type: version - required: false - admin_credential: - type: tosca.datatypes.Credential - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.ObjectStorage: - derived_from: tosca.nodes.Root - properties: - name: - type: string - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - maxsize: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - capabilities: - storage_endpoint: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.ServiceProxy: - derived_from: tosca.nodes.Root - org.openecomp.resource.vfc.rules.nodes.heat.network.contrailV2.NetworkRules: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - network_policy_entries: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - shared: - type: string - description: Is virtual network shared - required: false - status: SUPPORTED - forwarding_mode: - type: string - description: forwarding mode of the virtual network - required: false - status: SUPPORTED - external: - type: string - description: Is virtual network external - required: false - status: SUPPORTED - allow_transit: - type: string - description: Whether this network should be transitive. - required: false - status: SUPPORTED - flood_unknown_unicast: - type: string - description: flood L2 packets on network - required: false - status: SUPPORTED - route_targets: - type: list - description: route targets associated with the virtual network - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - 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 - org.openecomp.resource.abstract.nodes.service: - derived_from: tosca.nodes.Root - org.openecomp.resource.cp.v2.extVirtualMachineInterfaceCP: - derived_from: org.openecomp.resource.cp.v2.extCP - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.v2.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.vfc.nodes.volume: - derived_from: tosca.nodes.BlockStorage - org.openecomp.nodes.VLANNetworkReceptor: - derived_from: tosca.nodes.Root - capabilities: - routing_configuration_internal: - type: org.openecomp.capabilities.RoutingConfiguration - requirements: - - vlan_assignment: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.VLANAssignment - relationship: org.openecomp.relationships.AssignsTo - org.openecomp.resource.vl.nodes.heat.network.neutron.Net: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - dhcp_agent_ids: - type: list - description: The IDs of the DHCP agent to schedule the network - required: false - status: SUPPORTED - entry_schema: - type: string - tenant_id: - type: string - description: The ID of the tenant which will own the network - required: false - status: SUPPORTED - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the network - required: false - status: SUPPORTED - shared: - type: boolean - description: Whether this network should be shared across all tenants - required: false - default: 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 - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this network - required: false - status: SUPPORTED - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - attributes: - 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_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - mtu: - type: scalar-unit.size - description: The maximum transmission unit size(in bytes) for the network - status: SUPPORTED - status: - type: string - description: The status of the network - status: SUPPORTED - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.nova.Server: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - admin_pass: - type: string - description: The administrator password for the server - required: false - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - image: - type: string - description: The ID or name of the image to boot with - required: false - status: SUPPORTED - image_update_policy: - type: string - description: Policy on how to apply an image-id update - required: false - default: REBUILD - status: SUPPORTED - constraints: - - valid_values: - - REBUILD_PRESERVE_EPHEMERAL - - REPLACE - - REBUILD - metadata: - type: json - description: Arbitrary JSON metadata to store for this server - required: false - status: SUPPORTED - contrail_service_instance_ind: - type: boolean - description: Nova server related to service instance indicator - required: false - default: false - status: SUPPORTED - user_data_update_policy: - type: string - description: Policy on how to apply a user_data update - required: false - default: REPLACE - status: SUPPORTED - constraints: - - valid_values: - - REPLACE - - IGNORE - flavor_update_policy: - type: string - description: Policy on how to apply a flavor update - required: false - default: RESIZE - status: SUPPORTED - constraints: - - valid_values: - - RESIZE - - REPLACE - user_data: - type: string - description: User data script to be executed by cloud-init - required: false - default: '' - status: SUPPORTED - flavor: - type: string - description: The ID or name of the flavor to boot onto - required: true - status: SUPPORTED - key_name: - type: string - description: Name of keypair to inject into the server - required: false - status: SUPPORTED - reservation_id: - type: string - description: A UUID for the set of servers being requested - required: false - status: SUPPORTED - security_groups: - type: list - description: List of security group names or IDs - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - config_drive: - type: boolean - description: enable config drive on the server - required: false - status: SUPPORTED - personality: - type: map - description: A map of files to create/overwrite on the server upon boot - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - software_config_transport: - type: string - description: How the server should receive the metadata required for software configuration - required: false - default: POLL_SERVER_CFN - status: SUPPORTED - constraints: - - valid_values: - - POLL_SERVER_CFN - - POLL_SERVER_HEAT - - POLL_TEMP_URL - - ZAQAR_MESSAGE - user_data_format: - type: string - description: How the user_data should be formatted for the server - required: false - default: HEAT_CFNTOOLS - status: SUPPORTED - constraints: - - valid_values: - - SOFTWARE_CONFIG - - RAW - - HEAT_CFNTOOLS - diskConfig: - type: string - description: Control how the disk is partitioned when the server is created - required: false - status: SUPPORTED - constraints: - - valid_values: - - AUTO - - MANUAL - name: - type: string - description: Server name - required: false - status: SUPPORTED - scheduler_hints: - type: map - description: Arbitrary key-value pairs specified by the client to help boot a server - required: false - status: SUPPORTED - entry_schema: - type: string - attributes: - accessIPv4: - type: string - description: The manually assigned alternative public IPv4 address of the server - status: SUPPORTED - addresses: - type: map - description: A dict of all network addresses with corresponding port_id - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.novaServer.network.AddressInfo - accessIPv6: - type: string - description: The manually assigned alternative public IPv6 address of the server - status: SUPPORTED - instance_name: - type: string - description: AWS compatible instance name - status: SUPPORTED - name: - type: string - description: Name of the server - status: SUPPORTED - show: - type: string - description: Detailed information about resource - status: SUPPORTED - console_urls: - type: string - description: URLs of servers consoles - status: SUPPORTED - org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules: - derived_from: tosca.nodes.Root - properties: - description: - type: string - description: Description of the security group - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this security group, which is not required to be unique. - required: false - status: SUPPORTED - rules: - type: list - description: List of security group rules - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule - attributes: - show: - type: string - description: Detailed information about resource - status: SUPPORTED - requirements: - - port: - capability: tosca.capabilities.Attachment - node: org.openecomp.resource.cp.nodes.heat.network.neutron.Port - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.cinder.Volume: - derived_from: org.openecomp.resource.vfc.nodes.volume - properties: - availability_zone: - description: The availability zone in which the volume will be created - type: string - status: SUPPORTED - required: false - image: - description: If specified, the name or ID of the image to create the volume from - type: string - status: SUPPORTED - required: false - metadata: - description: Key/value pairs to associate with the volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - volume_type: - description: If specified, the type of volume to use, mapping to a specific backend - type: string - status: SUPPORTED - required: false - description: - description: A description of the volume - type: string - status: SUPPORTED - required: false - device_type: - description: Device type - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - cdrom - - disk - disk_bus: - description: 'Bus of the device: hypervisor driver chooses a suitable default - if omitted' - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - ide - - lame_bus - - scsi - - usb - - virtio - backup_id: - description: If specified, the backup to create the volume from - type: string - status: SUPPORTED - required: false - source_volid: - description: If specified, the volume to use as source - type: string - status: SUPPORTED - required: false - boot_index: - description: Integer used for ordering the boot disks - type: integer - status: SUPPORTED - required: false - size: - description: The requested storage size (default unit is MB) - type: scalar-unit.size - status: SUPPORTED - required: false - constraints: - - greater_or_equal: 1 GB - read_only: - description: Enables or disables read-only access mode of volume - type: boolean - status: SUPPORTED - required: false - name: - description: A name used to distinguish the volume - type: string - status: SUPPORTED - required: false - scheduler_hints: - description: Arbitrary key-value pairs specified by the client to help the Cinder scheduler creating a volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - swap_size: - description: The size of the swap, in MB - type: scalar-unit.size - status: SUPPORTED - required: false - delete_on_termination: - description: Indicate whether the volume should be deleted when the server is terminated - type: boolean - status: SUPPORTED - required: false - multiattach: - description: Whether allow the volume to be attached more than once - type: boolean - status: SUPPORTED - required: false - attributes: - display_description: - description: Description of the volume - type: string - status: SUPPORTED - attachments: - description: The list of attachments of the volume - type: string - status: SUPPORTED - entry_schema: - type: string - encrypted: - description: Boolean indicating if the volume is encrypted or not - type: boolean - status: SUPPORTED - show: - description: Detailed information about resource - type: string - status: SUPPORTED - created_at: - description: The timestamp indicating volume creation - type: timestamp - status: SUPPORTED - display_name: - description: Name of the volume - type: string - status: SUPPORTED - metadata_values: - description: Key/value pairs associated with the volume in raw dict form - type: map - status: SUPPORTED - entry_schema: - type: string - bootable: - description: Boolean indicating if the volume can be booted or not - type: boolean - status: SUPPORTED - status: - description: The current status of the volume - type: string - status: SUPPORTED - org.openecomp.resource.abstract.nodes.CR: - derived_from: tosca.nodes.Root - properties: - cr_function: - type: string - cr_role: - type: string - cr_type: - type: string - org.openecomp.resource.vl.extVL: - derived_from: tosca.nodes.Root - description: VF Tenant oam protected network - properties: - network_type: - type: string - required: true - description: ECOMP supported network types. - network_role: - type: string - required: true - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_scope: - type: string - constraints: - valid_values: - - VF - - SERVICE - - GLOBAL - 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 - network_technology: - type: string - required: true - description: ECOMP supported network technology - exVL_naming: - type: org.openecomp.datatypes.Naming - 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 - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.abstract.nodes.PNF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_type: - type: string - software_versions: - type: list - entry_schema: - type: string - org.openecomp.resource.vfc.rules.nodes.heat.network.contrail.NetworkRules: - derived_from: tosca.nodes.Root - properties: - entries: - type: org.openecomp.datatypes.heat.contrail.network.rule.RuleList - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - attributes: - tenant_id: - type: string - description: tenant_id - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - rules: - type: list - description: List of rules - status: SUPPORTED - entry_schema: - type: string - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - 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.nodes.VRFObject: - derived_from: tosca.nodes.Root - description: provides capability to connect WAN Transport Service Proxy to VRF Entry - capabilities: - routing_configuration_external: - type: org.openecomp.capabilities.RoutingConfiguration - org.openecomp.resource.abstract.nodes.VFC: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - nfc_function: - type: string - high_availablity: - type: string - description: high_availablity - required: false - status: SUPPORTED - vm_image_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - vm_flavor_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - nfc_naming_code: - type: string - description: nfc code for instance naming - required: false - status: SUPPORTED - vm_type_tag: - type: string - description: vm type based on naming Convention - required: false - status: SUPPORTED - nfc_naming: - type: org.openecomp.datatypes.Naming - description: vfc naming - min_instances: - type: integer - description: Minimum number of VFC Instances - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - max_instances: - type: integer - description: Maximum number of VFC Instances - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 1 - org.openecomp.resource.cp.nodes.heat.contrailV2.VirtualMachineInterface: - derived_from: org.openecomp.resource.cp.nodes.network.Port - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.abstract.nodes.VnfConfiguration: - derived_from: tosca.nodes.Root - properties: - allowed_flavors: - description: a collection of all flavor valuesets available for a given VFC - type: map - entry_schema: - type: org.openecomp.datatypes.flavors.DeploymentFlavor - org.openecomp.resource.vl.nodes.heat.network.contrailV2.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - network_ipam_refs_data: - type: list - description: IPAM references Data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData - network_policy_refs_data: - type: list - description: Policy references data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData - network_ipam_refs: - type: list - description: IPAM references - required: false - status: SUPPORTED - entry_schema: - type: string - network_policy_refs: - type: list - description: Policy references - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vl.internalVL: - derived_from: tosca.nodes.network.Network - description: The AT&T internal (VF-level) Virtual Link - org.openecomp.resource.vl.ELine: - derived_from: org.openecomp.resource.vl.VL - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 0 - - 2 - org.openecomp.resource.vl.VL: - derived_from: tosca.nodes.network.Network - properties: - vendor: - type: string - required: false - vl_name: - type: string - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - end_point: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.Configuration: - derived_from: tosca.nodes.Root - properties: - type: - type: string - description: The type of the node, the configuration will be defined for it. Ex. SBC - required: false - role: - type: string - description: The role of the node, the configuration will be defined for it. Ex. Active, Standby - required: false - function: - type: string - description: The function of the node, the configuration will be defined for it. Ex. NAT Traversal - required: false - org.openecomp.resource.cp.nodes.network.v2.SubInterface: - derived_from: tosca.nodes.Root - properties: - ip_address: - description: Allow the user to set a fixed IP address. Note that this address is a request to the provider which they will attempt to fulfill but may not be able to dependent on the network the port is associated with. - type: string - required: false - order: - description: 'The order of the NIC on the compute instance (e.g. eth2). Note: - when binding more than one port to a single compute (aka multi vNICs) and - ordering is desired, it is *mandatory* that all ports will be set with an - order value and. The order values must represent a positive, arithmetic - progression that starts with 0 (e.g. 0, 1, 2, ..., n).' - type: integer - default: 0 - required: false - constraints: - - greater_or_equal: 0 - is_default: - description: Set is_default=true to apply a default gateway route on the running compute instance to the associated network gateway. Only one port that is associated to single compute node can set as default=true. - type: boolean - default: false - required: false - ip_range_start: - description: Defines the starting IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - ip_range_end: - description: Defines the ending IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - attributes: - ip_address: - description: The IP address would be assigned to the associated compute instance. - type: string - requirements: - - subinterface_link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - 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.vfc.nodes.Compute: - derived_from: tosca.nodes.Compute - capabilities: - disk.ephemeral.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.ephemeral.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of ephemeral disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - instance: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: instance - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: instance - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Existence of instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu.delta: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu.delta - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used since previous datapoint - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Delta - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu_util: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: '%' - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu_util - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average CPU utilization - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.root.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.root.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of root disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - vcpus: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: vcpu - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: vcpus - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of virtual CPUs allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance from the amount of its allocated memory - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.resident: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.resident - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance on the physical machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.MultiFlavorVFC: - derived_from: org.openecomp.resource.abstract.nodes.VFC - properties: - images: - type: map - entry_schema: - type: org.openecomp.datatypes.ImageInfo - required: false - org.openecomp.nodes.PortMirroringConfigurationByPolicy: - derived_from: tosca.nodes.Root - properties: - collector_node: - type: string - description: The name of the Collector Proxy - required: true - policy_name: - type: string - description: The name of the policy for selection of the collector interfaces - required: true - equip_model: - type: string - description: The name of the equipment type of the collector, i.e. Cisco 4500x - required: true - equip_vendor: - type: string - description: The name of the equipment vendor of the collector, i.e. Cisco - required: true - requirements: - - source: - capability: org.openecomp.capabilities.PortMirroring - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.VF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_naming_code: - type: string - nf_type: - type: string - nf_naming: - type: org.openecomp.datatypes.Naming - Default: true - availability_zone_max_count: - type: integer - default: 1 - constraints: - - valid_values: - - 0 - - 1 - - 2 - min_instances: - type: integer - max_instances: - type: integer - multi_stage_design: - type: boolean - default: false - 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.nodes.ForwardingPath: - derived_from: tosca.nodes.Root - properties: - target_range: - type: list - required: true - status: SUPPORTED - 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 - required: true - status: SUPPORTED - requirements: - - forwarder: - capability: org.openecomp.capabilities.Forwarder - relationship: org.openecomp.relationships.ForwardsTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.cp.nodes.heat.network.contrail.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - org.openecomp.resource.cp.nodes.network.SubInterface: - derived_from: tosca.nodes.network.Port - org.openecomp.resource.vfc.nodes.heat.contrail.Compute: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - attributes: - tenant_id: - type: string - description: Tenant id of the VM - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of active VMs - status: SUPPORTED - virtual_machines: - type: string - description: VMs of this compute - status: SUPPORTED - status: - type: string - description: status of the compute - status: SUPPORTED - org.openecomp.resource.cp.nodes.network.Port: - derived_from: tosca.nodes.network.Port - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - 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 - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - subinterface_indicator: - description: identifies if Port is having Sub Interface - type: boolean - required: false - default: false - related_networks: - type: list - description: Related Networks List. - required: false - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - capabilities: - network.incoming.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - forwarder: - type: org.openecomp.capabilities.Forwarder - network.outgoing.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outpoing.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outpoing.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.nodes.VRFEntry: - derived_from: tosca.nodes.Root - requirements: - - routing_configuration_internal: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - - routing_configuration_external: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.cp.extCP: - derived_from: tosca.nodes.Root - description: The SDC Connection Point base type all other CP derive from - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - network_role_tag: - type: string - required: true - description: Must correlate to the set of defined “network-role” tag identifiers from the associated HEAT template - mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements - required: false - description: identifies MAC address assignments to the CP - vlan_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.VlanRequirements - required: false - description: identifies vlan address assignments to the CP - ip_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.IpRequirements - required: true - description: identifies IP requirements to the CP - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - 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 - relationship: tosca.relationships.network.LinksTo - node: org.openecomp.resource.vl.VL - capabilities: - internal_connectionPoint: - type: tosca.capabilities.Node - valid_source_type: - - tosca.nodes.network.Port - org.openecomp.nodes.FabricConfiguration: - derived_from: org.openecomp.nodes.Configuration - requirements: - - fabric_configuration_monitoring: - capability: org.openecomp.capabilities.FabricConfiguration - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.contrail.AbstractSubstitute: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - static_routes_list: - type: list - description: Static routes enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - ordered_interfaces: - type: boolean - description: Indicates if service interface are ordered - required: false - default: false - status: SUPPORTED - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - service_interface_type_list: - type: list - description: List of interface types - required: true - status: SUPPORTED - entry_schema: - type: string - constraints: - - valid_values: - - management - - left - - right - - other - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - interface_list: - type: list - description: List of interfaces - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.contrail.InterfaceData - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - shared_ip_list: - type: list - description: Shared ips enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - attributes: - tenant_id: - type: string - description: Tenant id of the Service Instance - status: SUPPORTED - fq_name: - type: string - description: The FQ name of the service instance - status: SUPPORTED - service_template_name: - type: string - description: Service Template of the Service Instance - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of service VMs active for this Service Instance - status: SUPPORTED - service_instance_name: - type: string - description: The name of the service instance - status: SUPPORTED - virtual_machines: - type: string - description: Service VMs for the Service Instance - status: SUPPORTED - status: - type: string - description: Status of the service instance - status: SUPPORTED - org.openecomp.resource.abstract.nodes.AbstractSubstitute: - derived_from: tosca.nodes.Root - properties: - service_template_filter: - type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering - description: Substitution Filter - required: true - status: SUPPORTED - org.openecomp.resource.cp.nodes.heat.network.neutron.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_profile: - type: tosca.datatypes.nfv.VlProfile - required: true - capabilities: - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.Cp: - derived_from: tosca.nodes.Root - properties: - layer_protocol: - type: list - entry_schema: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - required: true - role: - type: string - constraints: - - valid_values: - - root - - leaf - required: false - description: - type: string - required: false - protocol_data: - type: list - entry_schema: - type: tosca.datatypes.nfv.CpProtocolData - required: true - trunk_mode: - type: boolean - required: true - allowed_address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.nodes.nfv.VnfVirtualLinkDesc: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_flavours: - type: map - entry_schema: - type: tosca.datatypes.nfv.VlFlavour - required: true - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - org.openecomp.resource.vfc.AllottedResource: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - role: - type: string - required: true - description: Unique label that defines the role that this allotted resource performs - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - target_network_role: - type: string - required: true - description: Target network role - requirements: - - service_dependency: - capability: org.openecomp.capabilities.AllottedResource - relationship: tosca.relationships.DependsOn - node: tosca.services.Root - tosca.nodes.nfv.ext.zte.VDU: - derived_from: tosca.nodes.Root - properties: - manual_scale_select_vim: - type: boolean - required: false - vdu_type: - type: string - required: false - watchdog: - type: tosca.datatypes.nfv.ext.zte.WatchDog - required: false - name: - type: string - required: false - local_affinity_antiaffinity_rule: - type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule - required: false - support_scaling: - type: boolean - required: false - storage_policy: - type: string - required: false - key_vdu: - type: boolean - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - inject_data_list: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.InjectData - 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 - 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 - tosca.nodes.nfv.VDU: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - Virtualbinding: - type: tosca.capabilities.nfv.VirtualBindable - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - properties: - bitrate_requirement: - type: integer - required: false - vnic_name: - type: string - required: false - vnic_order: - type: integer - required: false - vnic_type: - type: string - constraints: - - valid_values: - - normal - - macvtap - - direct - - baremetal - - direct-physical - - virtio-forwarder - required: false - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - required: false - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - - virtual_binding: - capability: tosca.capabilities.nfv.VirtualBindable - relationship: tosca.relationships.nfv.VirtualBindsTo - node: tosca.nodes.nfv.Vdu.Compute - org.openecomp.resource.vfc.NSD: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - nsd_id: - type: string - required: true - description: ID of the NSD - nsd_designer: - type: string - required: true - description: Designer of the NSD - nsd_version: - type: string - required: true - description: Version of the NSD - nsd_name: - type: string - required: true - description: Name of the NSD - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - boot_order: - type: map - entry_schema: - type: string - required: false - nfvi_constraints: - type: map - entry_schema: - type: string - required: false - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - required: true - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - required: true - inject_files: - type: tosca.datatypes.nfv.injectFile - required: false - meta_data: - type: map - entry_schema: - type: string - required: false - user_data: - type: string - required: false - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - requirements: - - virtual_storage: - capability: tosca.capabilities.nfv.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - node: tosca.nodes.nfv.Vdu.VirtualStorage - occurences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.GenericNeutronNet: - derived_from: org.openecomp.resource.vl.extVL - description: Generic Neutron Network - properties: - network_role: - type: string - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_assignments: - type: org.openecomp.datatypes.network.NetworkAssignments - network_flows: - type: org.openecomp.datatypes.network.NetworkFlows - network_scope: - type: string - network_ecomp_naming: - type: org.openecomp.datatypes.EcompNaming - network_type: - type: string - description: ECOMP supported network types. - default: NEUTRON - provider_network: - type: org.openecomp.datatypes.network.ProviderNetwork - network_technology: - type: string - description: ECOMP supported network technology - default: NEUTRON - network_homing: - type: org.openecomp.datatypes.EcompHoming - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 1 - - UNBOUNDED - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - properties: - type_of_storage: - type: string - constraints: - - valid_values: - - volume - - object - - root - - block - required: true - size_of_storage: - type: scalar-unit.size - required: true - vdu_storage_requirements: - type: map - entry_schema: - type: string - required: false - rdma_enabled: - type: boolean - required: false - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - tosca.nodes.nfv.ext.zte.VL: - derived_from: tosca.nodes.Root - properties: - segmentation_id: - type: string - required: false - network_name: - type: string - required: false - is_predefined: - type: boolean - required: false - mtu: - type: integer - required: false - dns_nameservers: - type: list - required: false - entry_schema: - type: string - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - network_id: - type: string - required: false - host_routes: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.HostRouteInfo - ip_version: - type: integer - required: false - vendor: - type: string - required: false - name: - type: string - required: false - start_ip: - type: string - required: false - vlan_transparent: - type: boolean - required: false - cidr: - type: string - required: false - gateway_ip: - type: string - required: false - network_type: - type: string - required: false - end_ip: - type: string - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.ext.LocalStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: string - required: false - disk_type: - type: string - required: false - capabilities: - local_attachment: - type: tosca.capabilities.nfv.ext.LocalAttachment - tosca.nodes.nfv.ext.zte.CP: - derived_from: tosca.nodes.Root - properties: - guest_os_mtu: - type: integer - required: false - bandwidth: - type: integer - required: false - interface_name: - type: string - required: false - allowed_address_pairs: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.AddressPairs - ip_address: - type: string - required: false - bond: - type: string - required: false - proxiedVNFs: - type: list - required: false - entry_schema: - type: string - sfc_encapsulation: - type: string - required: false - floating_ip_address: - type: tosca.datatypes.nfv.ext.FloatingIP - required: false - service_ip_address: - required: false - type: string - mac_address: - type: string - required: false - proxiedVNFtype: - type: string - required: false - macbond: - type: string - required: false - vnic_type: - type: string - required: false - direction: - type: string - required: false - order: - type: integer - required: false - requirements: - - forwarder: - capability: tosca.capabilities.nfv.Forwarder - occurrences: - - 0 - - UNBOUNDED - - virtualbinding: - capability: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 0 - - UNBOUNDED - - virtualLink: - capability: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 0 - - UNBOUNDED - capabilities: - forwarder: - type: tosca.capabilities.nfv.Forwarder - tosca.nodes.nfv.ext.ImageFile: - derived_from: tosca.nodes.Root - properties: - file_url: - type: string - required: false - container_type: - type: string - required: false - name: - type: string - required: false - disk_format: - type: string - required: false - version: - type: string - required: false - capabilities: - guest_os: - type: tosca.capabilities.nfv.ext.GuestOs - image_fle: - type: tosca.capabilities.nfv.ext.ImageFile - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - properties: - descriptor_id: - type: string - required: true - descriptor_version: - type: string - required: true - provider: - type: string - required: true - product_name: - type: string - required: true - software_version: - type: string - required: true - product_info_name: - type: string - required: false - product_info_description: - type: string - required: false - vnfm_info: - type: list - entry_schema: - type: string - required: true - localization_languages: - type: list - entry_schema: - type: string - required: false - default_localization_language: - type: string - required: false - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - required: false - modifiable_attributes: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributes - required: false - flavour_id: - type: string - required: true - flavour_description: - type: string - required: true - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - occurrences: - - 0 - - UNBOUNDED - interfaces: - Nfv: - type: tosca.interfaces.nfv.vnf.lifecycle.Nfv - org.openecomp.resource.vl.overlaytunnel: - derived_from: tosca.nodes.Root - description: This entity represents abstract overlay tunnel end point. - properties: - id: - type: string - description: Identifier of the Tunnel Endpoint node. - required: false - template_name: - type: string - required: false - version: - type: string - required: false - name: - type: string - description: Overlay tunnel name used by for reference by the administrator. - required: false - description: - type: string - description: Additional comments/information about overlay tunnel. - required: false - tunnelType: - type: string - constraints: - - valid_values: - - L3-DCI - - L2-DCI - description: type defines if the overlay tunnel is L3-DCI tunnel or L2-DCI tunnel. - required: true - site1_id: - type: string - description: Identifier of first DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site1_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site1_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site1_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site1_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site1_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site1_vni: - type: integer - description: VXLAN ID - required: false - site1_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site1_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site1_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - site2_id: - type: string - description: Identifier of second DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site2_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site2_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site2_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site2_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site2_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site2_vni: - type: integer - description: VXLAN ID - required: false - site2_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site2_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site2_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.vl.underlayvpn: - derived_from: tosca.nodes.Root - description: undelay vpn type definitions - properties: - id: - type: string - required: false - template_name: - type: string - required: false - version: - type: string - required: false - vendor: - type: string - required: false - template_author: - type: string - required: false - name: - type: string - required: false - description: - type: string - required: false - serviceType: - type: string - description: type of VPN service - required: false - default: l3vpn_sptn - topology: - type: string - description: type of VPN topology - constraints: - - valid_values: - - full-mesh - - point_to_multipoint - - point_to_point - - singlePoint - - hubspoke - - hubspoke_via_hubce - - hubspoke_disjoint - - ADD_DROP_Z - required: false - default: full-mesh - technology: - type: string - description: type of VPN technology - constraints: - - valid_values: - - mpls - - rosen multivpn - - vxlan overlay l3vpn - - eth over sdh - - vlan - required: false - default: mpls - site1_name: - type: string - description: name of first site - required: false - site2_name: - type: string - description: name of second site - required: false - sna1_name: - type: string - description: name of site network accesses associated with the site1 - required: false - sna2_name: - type: string - description: name of site network accesses associated with the site2 - required: false - pe1_id: - type: string - description: id of provider edge1, it can be name or ip or uuid - required: false - pe2_id: - type: string - description: id of provider edge2, it can be name or ip or uuid - required: false - ac1_id: - type: string - description: id of attachment circuit1, it can be port name or uuid - required: false - ac1_svlan: - type: integer - description: ac1 svlan - required: false - ac1_ip: - type: string - description: ip of ac1, only for layer3 vpn, it should contain mask - required: false - ac1_peer_ip: - type: string - description: ip of ac1 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac1_route: - type: string - description: route configure of ac1, only for layer3 vpn - required: false - ac1_protocol: - type: string - description: routing protocol type of ac1, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - required: false - ac1_protocol_bgp_as: - type: string - description: autonomous-system number of ac1, , only required for ebgp protocol - required: false - ac2_id: - type: string - description: id of attachment circuit2, it can be port name or uuid - required: false - ac2_svlan: - type: integer - description: ac2 svlan - required: false - ac2_ip: - type: string - description: ip of ac2, only for layer3 vpn, it should contain mask - required: false - ac2_peer_ip: - type: string - description: ip of ac2 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac2_route: - type: string - description: route configure of ac2, only for layer3 vpn - required: false - ac2_protocol: - type: string - description: routing protocol type of ac2, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - default: STATIC - required: false - ac2_protocol_bgp_as: - type: string - description: autonomous-system number of ac2, , only required for ebgp protocol - required: false - af_type: - type: string - description: address family type - default: ipv4 - required: false - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/policies.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/policies.yml deleted file mode 100644 index 6063d085..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/policies.yml +++ /dev/null @@ -1,134 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -policy_types: - tosca.policies.Root: - description: The TOSCA Policy Type all other TOSCA Policy Types derive from - tosca.policies.Placement: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern placement of TOSCA nodes or groups of nodes. - tosca.policies.Scaling: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern scaling of TOSCA nodes or groups of nodes. - tosca.policies.Update: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern update of TOSCA nodes or groups of nodes. - tosca.policies.Performance: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to declare performance requirements for TOSCA nodes or groups of nodes. - org.openecomp.policies.placement.Antilocate: - derived_from: tosca.policies.Placement - description: My placement policy for separation based upon container type value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - container_type: - type: string - description: container type - required: false - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.Colocate: - derived_from: tosca.policies.Placement - description: Keep associated nodes (groups of nodes) based upon affinity value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - affinity: - type: string - description: affinity - required: true - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.valet.Diversity: - derived_from: tosca.policies.Placement - description: Valet Diversity - properties: - level: - type: string - description: diversity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Exclusivity: - derived_from: tosca.policies.Placement - description: Valet Exclusivity - properties: - level: - type: string - description: exclusivity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Affinity: - derived_from: tosca.policies.Placement - description: Valet Affinity - properties: - level: - type: string - description: affinity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.scaling.Fixed: - derived_from: tosca.policies.Scaling - properties: - quantity: - description: the exact number of instances to keep up - type: integer - required: true - org.openecomp.policies.External: - derived_from: tosca.policies.Root - description: externally managed policy (for example, type="network assignment", source="Policy Manager", name="route target") - properties: - source: - type: string - description: The name of the server that exposes the policy with predefined type and name. - required: false - type: - type: string - description: The type (category) of the policy same as it is defined in the source. - required: false - name: - type: string - description: The name of the policy, that related to specific type, same as it is defined in the source. - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/relationships.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/relationships.yml deleted file mode 100644 index b1b554d1..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/relationships.yml +++ /dev/null @@ -1,142 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- capabilities.yml -- data.yml -- interfaces.yml -relationship_types: - tosca.relationships.Root: - description: This is the default (root) TOSCA Relationship Type definition that all other TOSCA Relationship Types derive from. - attributes: - tosca_id: - description: A unique identifier of the realized instance of a Relationship Template that derives from any TOSCA normative type. - type: string - tosca_name: - description: This attribute reflects the name of the Relationship Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment. - type: string - state: - description: The state of the relationship instance. - type: string - default: initial - interfaces: - Configure: - type: tosca.interfaces.relationship.Configure - tosca.relationships.RoutesTo: - derived_from: tosca.relationships.ConnectsTo - description: This type represents an intentional network routing between two Endpoints in different networks. - valid_target_types: - - tosca.capabilities.Endpoint - tosca.relationships.network.LinksTo: - derived_from: tosca.relationships.DependsOn - description: This relationship type represents an association relationship between Port and Network node types. - valid_target_types: - - tosca.capabilities.network.Linkable - tosca.relationships.AttachesTo: - derived_from: tosca.relationships.Root - description: This type represents an attachment relationship between two nodes. For example, an AttachesTo relationship type would be used for attaching a storage node to a Compute node. - valid_target_types: - - tosca.capabilities.Attachment - properties: - location: - description: 'The relative location (e.g., path on the file system), which - provides the root location to address an attached node. e.g., a mount point - / path such as ''/usr/data''. Note: The user must provide it and it cannot - be "root".' - type: string - constraints: - - min_length: 1 - device: - description: The logical device name which for the attached device (which is represented by the target node in the model). e.g., '/dev/hda1'. - type: string - required: false - attributes: - device: - description: 'The logical name of the device as exposed to the instance. Note: - A runtime property that gets set when the model gets instantiated by the - orchestrator.' - type: string - tosca.relationships.network.BindsTo: - derived_from: tosca.relationships.DependsOn - description: This type represents a network association relationship between Port and Compute node types. - valid_target_types: - - tosca.capabilities.network.Bindable - tosca.relationships.HostedOn: - derived_from: tosca.relationships.Root - description: This type represents a hosting relationship between two nodes. - valid_target_types: - - tosca.capabilities.Container - tosca.relationships.DependsOn: - derived_from: tosca.relationships.Root - description: This type represents a general dependency relationship between two nodes. - valid_target_types: - - tosca.capabilities.Node - tosca.relationships.ConnectsTo: - derived_from: tosca.relationships.Root - description: This type represents a network connection relationship between two nodes. - valid_target_types: - - tosca.capabilities.Endpoint - properties: - credential: - type: tosca.datatypes.Credential - required: false - 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 - org.openecomp.relationships.ForwardsTo: - derived_from: tosca.relationships.Root - valid_target_types: - - org.openecomp.capabilities.Forwarder - org.openecomp.relationships.AssignsTo: - derived_from: tosca.relationships.Root - org.openecomp.relationships.RoutesTo: - derived_from: tosca.relationships.RoutesTo - description: This type represents an intentional network routing between internal and external network - tosca.relationships.nfv.VirtualBindsTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualBindable - tosca.relationships.nfv.VirtualLinksTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualLinkable - tosca.relationships.nfv.Vdu.AttachedTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualStorage diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCompute-template.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCompute-template.yml deleted file mode 100644 index 546f88a8..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCompute-template.yml +++ /dev/null @@ -1,103 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - description: VDU Compute - properties: - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - inject_files: - type: tosca.datatypes.nfv.injectFile - name: - type: string - nfvi_constraints: - type: map - entry_schema: - type: string - meta_data: - type: map - entry_schema: - type: string - description: - type: string - user_data: - type: string - boot_order: - type: map - entry_schema: - type: string - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCp-template.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCp-template.yml deleted file mode 100644 index ec266374..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduCp-template.yml +++ /dev/null @@ -1,59 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - description: VDU Cp - properties: - vnic_name: - type: string - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - bitrate_requirement: - type: integer - vnic_order: - type: integer - vnic_type: - type: string - requirements: - - virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduVirtualstorage-template.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduVirtualstorage-template.yml deleted file mode 100644 index 566f7054..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-VduVirtualstorage-template.yml +++ /dev/null @@ -1,50 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - description: VDU VirtualStorage - properties: - vdu_storage_requirements: - type: map - entry_schema: - type: string - size_of_storage: - type: scalar-unit.size - rdma_enabled: - type: boolean - type_of_storage: - type: string - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template-interface.yml deleted file mode 100644 index 93cb070e..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template-interface.yml +++ /dev/null @@ -1,208 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.resource.vf.Vgw1181049: - derived_from: org.openecomp.resource.abstract.nodes.VF - properties: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - capabilities: - vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template.yml deleted file mode 100644 index 520287b4..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vgw1181049-template.yml +++ /dev/null @@ -1,285 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -- resource-VNF: - file: resource-Vnf-template.yml -- resource-VnfVirtualLink: - file: resource-Vnfvirtuallink-template.yml -- resource-VDU Cp: - file: resource-VduCp-template.yml -- resource-VDU VirtualStorage: - file: resource-VduVirtualstorage-template.yml -- resource-VDU Compute: - file: resource-VduCompute-template.yml -topology_template: - inputs: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - node_templates: - LLU_VNF: - type: tosca.nodes.nfv.VNF - metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - customizationUUID: 06bffc87-30c7-42ad-b99d-19c6c13405dc - version: '1.0' - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - descriptor_id: b1bb0ce7-2222-4fa7-95ed-4840d70a1177 - provider: onap - vnfm_info: - - gvnfm - flavour_id: simple - descriptor_version: '1.0' - software_version: '1.0' - flavour_description: simple - product_name: vcpe_vgw - VL_mux_gw_private_net: - type: tosca.nodes.nfv.VnfVirtualLink - metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - customizationUUID: fbea54ef-8f8b-4f35-81d6-997a47282698 - version: '1.0' - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - vl_profile: - min_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - max_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - networkName: mux_gw_private_net_id - cidr: 192.168.0.0/24 - dhcpEnabled: false - connectivity_type: - layer_protocol: ipv4 - VDU_vgw_0: - type: tosca.nodes.nfv.Vdu.Compute - metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - customizationUUID: 93c3f2e3-67e7-4bb4-be11-8a48df924c4c - version: '1.0' - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - configurable_properties: - additional_vnfc_configurable_properties: { - } - name: vdu_vgw_0 - description: vgw - vdu_profile: - watchdog: none - min_number_of_instances: 1 - max_number_of_instances: 1 - requirements: - - virtual_storage: - capability: virtual_storage - node: VirtualStorage_root_all - capabilities: - virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - VirtualStorage_root_all: - type: tosca.nodes.nfv.Vdu.VirtualStorage - metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - customizationUUID: dc20e1ad-aed9-4154-b2b4-3a702eee49a7 - version: '1.0' - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - size_of_storage: 40 GB - type_of_storage: root - Cp_vgw_mux_gw_private_net: - type: tosca.nodes.nfv.VduCp - metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - customizationUUID: b5ff315f-effc-46e9-a0c5-aec1954845e0 - version: '1.0' - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - trunk_mode: false - virtual_network_interface_requirements: - - network_interface_requirements: - interfaceType: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform":"generic", "mandatory": "true", "configurationValue": "SR-IOV"}' - name: dpdk support - support_mandatory: true - protocol_data: - - asscociated_layer_protocol: ipv4 - address_data: - address_type: ip_address - l3_address_data: - fixed_ip_address: - - 192.168.0.1 - ip_address_assignment: false - floating_ip_activated: false - layer_protocol: - - ipv4 - requirements: - - virtual_link: - capability: virtual_linkable - node: VL_mux_gw_private_net - - virtual_binding: - capability: virtual_binding - node: VDU_vgw_0 - substitution_mappings: - node_type: org.openecomp.resource.vf.Vgw1181049 - capabilities: - vl_mux_gw_private_net.feature: - - vl_mux_gw_private_net - - feature - cp_vgw_mux_gw_private_net.feature: - - cp_vgw_mux_gw_private_net - - feature - vdu_vgw_0.virtual_compute: - - vdu_vgw_0 - - virtual_compute - vdu_vgw_0.virtual_binding: - - vdu_vgw_0 - - virtual_binding - virtualstorage_root_all.virtual_storage: - - virtualstorage_root_all - - virtual_storage - llu_vnf.feature: - - llu_vnf - - feature - vl_mux_gw_private_net.virtual_linkable: - - vl_mux_gw_private_net - - virtual_linkable - vl_mux_gw_private_net.monitoring_parameter: - - vl_mux_gw_private_net - - monitoring_parameter - vdu_vgw_0.monitoring_parameter: - - vdu_vgw_0 - - monitoring_parameter - virtualstorage_root_all.feature: - - virtualstorage_root_all - - feature - vdu_vgw_0.feature: - - vdu_vgw_0 - - feature - requirements: - vdu_vgw_0.virtual_storage: - - vdu_vgw_0 - - virtual_storage - vl_mux_gw_private_net.dependency: - - vl_mux_gw_private_net - - dependency - virtualstorage_root_all.dependency: - - virtualstorage_root_all - - dependency - vdu_vgw_0.dependency: - - vdu_vgw_0 - - dependency - cp_vgw_mux_gw_private_net.virtual_binding: - - cp_vgw_mux_gw_private_net - - virtual_binding - cp_vgw_mux_gw_private_net.dependency: - - cp_vgw_mux_gw_private_net - - dependency - llu_vnf.dependency: - - llu_vnf - - dependency - llu_vnf.virtual_link: - - llu_vnf - - virtual_link - cp_vgw_mux_gw_private_net.virtual_link: - - cp_vgw_mux_gw_private_net - - virtual_link diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnf-template.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnf-template.yml deleted file mode 100644 index 121aba2c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnf-template.yml +++ /dev/null @@ -1,70 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - description: VNF - properties: - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - product_info_name: - type: string - default_localization_language: - type: string - flavour_id: - type: string - flavour_description: - type: string - product_name: - type: string - descriptor_id: - type: string - product_info_description: - type: string - provider: - type: string - descriptor_version: - type: string - vnfm_info: - type: list - entry_schema: - type: string - software_version: - type: string - localization_languages: - type: list - entry_schema: - type: string - requirements: - - virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnfvirtuallink-template.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnfvirtuallink-template.yml deleted file mode 100644 index d39b1b3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/resource-Vnfvirtuallink-template.yml +++ /dev/null @@ -1,57 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - description: VnfVirtualLink - properties: - vl_profile: - type: tosca.datatypes.nfv.VlProfile - description: - type: string - test_access: - type: list - entry_schema: - type: string - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template-interface.yml deleted file mode 100644 index 45fc3065..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template-interface.yml +++ /dev/null @@ -1,176 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.service.Testns8: - derived_from: org.openecomp.resource.abstract.nodes.service - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - requirements: - - vgw11810490.llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - vgw11810490.llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template.yml b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template.yml deleted file mode 100644 index 9d9bdc3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/Definitions/service-Testns8-template.yml +++ /dev/null @@ -1,135 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 5be056bd-1ecd-4c14-9465-3bbc994190ee - UUID: 188ed3c6-1573-4b2d-9d3f-a03693bed79b - name: TestNs8 - description: test - type: Service - category: Network Service - serviceType: '' - serviceRole: '' - instantiationType: A-la-carte - serviceEcompNaming: true - ecompGeneratedNaming: true - namingPolicy: '' - environmentContext: General_Revenue-Bearing -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- service-TestNs8-interface: - file: service-Testns8-template-interface.yml -- resource-vgw1181049: - file: resource-Vgw1181049-template.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -topology_template: - node_templates: - vgw1181049 0: - type: org.openecomp.resource.vf.Vgw1181049 - metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - customizationUUID: 32efc3ac-6fd2-4cda-9f15-592e54f41560 - version: '1.0' - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' - properties: - nf_naming: - ecomp_generated_naming: true - multi_stage_design: false - availability_zone_max_count: 1 - capabilities: - vdu_vgw_0.virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform": - "generic","mandatory": "true", "configurationValue": "1024"}' - memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": - "generic", "mandatory": "true", "configurationValue": "2 MB"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - substitution_mappings: - node_type: org.openecomp.service.Testns8 - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - - vgw11810490 - - virtualstorage_root_all.virtual_storage - vgw11810490.llu_vnf.feature: - - vgw11810490 - - llu_vnf.feature - vgw11810490.vdu_vgw_0.monitoring_parameter: - - vgw11810490 - - vdu_vgw_0.monitoring_parameter - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - - vgw11810490 - - vl_mux_gw_private_net.monitoring_parameter - vgw11810490.cp_vgw_mux_gw_private_net.feature: - - vgw11810490 - - cp_vgw_mux_gw_private_net.feature - vgw11810490.vl_mux_gw_private_net.feature: - - vgw11810490 - - vl_mux_gw_private_net.feature - vgw11810490.vdu_vgw_0.feature: - - vgw11810490 - - vdu_vgw_0.feature - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - - vgw11810490 - - vl_mux_gw_private_net.virtual_linkable - vgw11810490.vdu_vgw_0.virtual_binding: - - vgw11810490 - - vdu_vgw_0.virtual_binding - vgw11810490.virtualstorage_root_all.feature: - - vgw11810490 - - virtualstorage_root_all.feature - vgw11810490.vdu_vgw_0.virtual_compute: - - vgw11810490 - - vdu_vgw_0.virtual_compute - requirements: - vgw11810490.vdu_vgw_0.virtual_storage: - - vgw11810490 - - vdu_vgw_0.virtual_storage - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_link - vgw11810490.llu_vnf.dependency: - - vgw11810490 - - llu_vnf.dependency - vgw11810490.virtualstorage_root_all.dependency: - - vgw11810490 - - virtualstorage_root_all.dependency - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - - vgw11810490 - - cp_vgw_mux_gw_private_net.dependency - vgw11810490.llu_vnf.virtual_link: - - vgw11810490 - - llu_vnf.virtual_link - vgw11810490.vl_mux_gw_private_net.dependency: - - vgw11810490 - - vl_mux_gw_private_net.dependency - vgw11810490.vdu_vgw_0.dependency: - - vgw11810490 - - vdu_vgw_0.dependency - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_binding diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/TOSCA-Metadata/TOSCA.meta b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/TOSCA-Metadata/TOSCA.meta deleted file mode 100644 index e65ed508..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,7 +0,0 @@ -TOSCA-Meta-File-Version: 1.0 -CSAR-Version: 1.1 -Created-By: Carlos Santana -Entry-Definitions: Definitions/service-Testns8-template.yml - -Name: csar.meta -Content-Type: text/plain diff --git a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/csar.meta b/testsuites/performance/src/main/resources/testplans/templates/interfaceType/csar.meta deleted file mode 100644 index bc3359ce..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/interfaceType/csar.meta +++ /dev/null @@ -1,2 +0,0 @@ -SDC-TOSCA-Meta-File-Version: 1.0 -SDC-TOSCA-Definitions-Version: 9.0 diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa deleted file mode 100644 index 60597577..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxsekiqwLgs9VfChnr2bnpLC3VqD1iT+s969vWe05j1RDozPu -zyD3krNgVUcd65x2QQJWrDK2fnyQUtubbPb3wviLXs0Gof4a/b65JsMQkeeC2/OK -aFvrE6D3heouXmWO1vo1iXy2hUhcfXdr6eM3rP3zpU9zb2Al25/90Ha8kKBpe1RS -PKHpmcqVXIpGVxJSXnioAFXUsJ687qrTv7Zm13AHkm2L1Y5IvMsGHLFjFTGFlFoY -ftQQAepF507CFqs66tD378vvNVg8LYqrKpnfdx2PIRNLHAa1xQWc0EvwGHyBQZRL -hTXS3M3IZ7Y22dJ+3Zg15PMx7QmWDZO5MG/JPwIDAQABAoIBAE5KS1AiutXmezDP -aSb4TLvcrhj8hDhuT92txxmQCV+ePJWG2sPRpDCvXX246NvnX9vy49gmkSH4RY+c -1vZvvt2XrqzD65zZzB+sgpf1tA0DNdMTdKvtqASvHU4tEd4z+bJKEdP4vpp4CZWQ -93vC9ia4TsIJLNns8Hwz42+7lEEResKYZA2djGnzHl+83vR1dm0GGBD6BKR1C3Cx -HbEhqx42EV61+8nAweQNjWKxeAc2hg+H8o8qWJM1aKy0TnqW6kudOYRyYIpX0rJA -siE2HwvDA1mDd5M8ntZ/Cx0pnTc/cuZB8BQJ0jN1JXbrJGbWspBNXformw7isbyO -WIOjvEECgYEA84XKV3aPrTE2JBs5vzzs59NMPV+5frw+xzDyPxqK5Q7+jjVKDwxh -/WRatCaTdRxhOI905HfVsDYjrsPOpmF9MHsLxmBhwk8zBFOu/xtYr7zBNkJhmCsq -kZMdxf8bpu08E7kMQJ2MvT7OhM5HRlWIUR0jdja8Hz51Ro4oOb/po7kCgYEA0Pb5 -v12ZsaSHMF0r4l983PifNwYmI22iQIEtRT2DxgTkDKgBTjbRzqZmEhaADMAO48o9 -sIZy+KJ/a8G9fPQVwMgBID8zOHnWsrFmM3qkj5hhrAQdtq7OE71zgaP0tyE1TG4u -Zs3a7eSyuoildHHFqX88oXSYsTlfV8vn23UpwLcCgYEAwXiCuBger8dQL0FeEJwz -zz5k7MG3WoPuEEzHuPC6dp8CCDM4IlqBI1JuaX/YWQtyBgCbKsQ2BigNE1THQhJj -5ndrdHCwWjKX4pElj9HHFN+OVTBJ3x40VLGfzuUNsAH8X+L9Y/yHivZyFrrXj352 -rZLL0KhNrzjs7WAVf0QEOCkCgYBe2s1xnZZnueyX+qMyBfBTChST0Jm9WUXejAS1 -un+3gn7Wc+jrzRyd9pC8wzPrFb9sjWBFYjKMRI8cpfxS3SWGtgM01Rt2FnBr+vUO -hyxt9ljX0aJ/S4hGE6h7/6XU/yEHibhMeENZ24d5/w9D9WUpVJV8IMYzJHzwCKI9 -z0hdrwKBgQDMKvY3DBpZjhZe9YnOgdj4SRpNwaasUSf3a3SZYY1JyOZVUzeSSzoX -rYLfxBRDjkJ8Nnod+nR/JSRqYa/SJYEMZEZFsC+k/pvBiaP6tk694IlpLD/2MXN6 -14FUV5LH/rGSbZJMSfZ9yNX1XZDowH8nOu+qlmlU4lmgiOuityTmtw== ------END RSA PRIVATE KEY----- diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image deleted file mode 100644 index f31d15df..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image +++ /dev/null @@ -1 +0,0 @@ -ubuntu_16.04 diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml deleted file mode 100644 index c49c2c69..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendorecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F118291.0entitlement pool12341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB39089 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml deleted file mode 100644 index db573afd..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendor2455e00dddf84eedaaed6eb412d39a7eentitlement poolecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F1182912341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB390891.0feature groupd3780d334c4c42d38c7ab1ec23a65cfd4444 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/annotations.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/annotations.yml deleted file mode 100644 index 2f146061..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/annotations.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -annotation_types: - org.openecomp.annotations.Source: - description: Indicates the origin source of an input - properties: - source_type: - type: string - vf_module_label: - type: list - description: List of VF Modules this input was originated from - entry_schema: - type: string - param_name: - type: string - description: Source parameter name diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/artifacts.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/artifacts.yml deleted file mode 100644 index 175615c7..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/artifacts.yml +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -artifact_types: - tosca.artifacts.Root: - description: This is the default (root) TOSCA Artifact Type definition that all other TOSCA base Artifact Types derive from. - tosca.artifacts.Deployment.Image: - derived_from: tosca.artifacts.Deployment - description: This artifact type represents a parent type for any "image" which is an opaque packaging of a TOSCA Node's deployment (whether real or virtual) whose contents are typically already installed and pre-configured (i.e., "stateful") and prepared to be run on a known target container. - tosca.artifacts.Implementation.Bash: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Bash script type that contains Bash commands that can be executed on the Unix Bash shell. - tosca.artifacts.Deployment.Image.VM: - derived_from: tosca.artifacts.Deployment - description: This artifact represents the parent type for all Virtual Machine (VM) image and container formatted deployment artifacts. These images contain a stateful capture of a machine (e.g., server) including operating system and installed software along with any configurations and can be run on another machine using a hypervisor which virtualizes typical server (i.e., hardware) resources. - tosca.artifacts.Implementation.Python: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Python file that contains Python language constructs that can be executed within a Python interpreter. - tosca.artifacts.Deployment: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all deployment artifacts in TOSCA. This class of artifacts typically represents a binary packaging of an application or service that is used to install/create or deploy it as part of a node's lifecycle. - tosca.artifacts.File: - derived_from: tosca.artifacts.Root - description: This artifact type is used when an artifact definition needs to have its associated file simply treated as a file and no special handling/handlers are invoked (i.e., it is not treated as either an implementation or deployment artifact type). - tosca.artifacts.Implementation: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all implementation artifacts in TOSCA. These artifacts are used to implement operations of TOSCA interfaces either directly (e.g., scripts) or indirectly (e.g., config. files). - tosca.artifacts.nfv.SwImage: - derived_from: tosca.artifacts.Deployment.Image diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/capabilities.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/capabilities.yml deleted file mode 100644 index 734c2012..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/capabilities.yml +++ /dev/null @@ -1,293 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -capability_types: - tosca.capabilities.Root: - description: The TOSCA root Capability Type all other TOSCA base Capability Types derive from - tosca.capabilities.Attachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.Node: - derived_from: tosca.capabilities.Root - tosca.capabilities.Container: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: integer - required: false - constraints: - - greater_or_equal: 1 - cpu_frequency: - type: scalar-unit.frequency - required: false - constraints: - - greater_or_equal: 0.1 GHz - disk_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - mem_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - org.openecomp.capabilities.PortMirroring: - derived_from: tosca.capabilities.Root - properties: - connection_point: - type: org.openecomp.datatypes.PortMirroringConnectionPointDescription - tosca.capabilities.Endpoint: - derived_from: tosca.capabilities.Root - properties: - protocol: - type: string - default: tcp - port: - type: PortDef - required: false - secure: - type: boolean - default: false - url_path: - type: string - required: false - port_name: - type: string - required: false - network_name: - type: string - required: false - default: PRIVATE - initiator: - type: string - default: source - constraints: - - valid_values: - - source - - target - - peer - ports: - type: map - required: false - constraints: - - min_length: 1 - entry_schema: - type: PortSpec - attributes: - ip_address: - type: string - tosca.capabilities.DatabaseEndpoint: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.Endpoint.Public: - derived_from: tosca.capabilities.Endpoint - properties: - network_name: PUBLIC - floating: - description: | - indicates that the public address should be allocated from a pool of floating IPs that are associated with the network. - type: boolean - default: false - status: experimental - dns_name: - description: The optional name to register with DNS - type: string - required: false - status: experimental - tosca.capabilities.Endpoint.Admin: - derived_from: tosca.capabilities.Endpoint - properties: - secure: true - tosca.capabilities.Endpoint.Database: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.OperatingSystem: - derived_from: tosca.capabilities.Root - properties: - architecture: - type: string - required: false - type: - type: string - required: false - distribution: - type: string - required: false - version: - type: version - required: false - tosca.capabilities.Scalable: - derived_from: tosca.capabilities.Root - properties: - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - default_instances: - type: integer - tosca.capabilities.network.Bindable: - derived_from: tosca.capabilities.Node - tosca.capabilities.Container.Docker: - derived_from: tosca.capabilities.Container - properties: - version: - type: list - required: false - entry_schema: version - publish_all: - type: boolean - default: false - required: false - publish_ports: - type: list - entry_schema: PortSpec - required: false - expose_ports: - type: list - entry_schema: PortSpec - required: false - volumes: - type: list - entry_schema: string - required: false - tosca.capabilities.network.Linkable: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.AllottedResource: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Metric: - derived_from: tosca.capabilities.Endpoint - org.openecomp.capabilities.Metric: - derived_from: tosca.capabilities.nfv.Metric - description: A node type that includes the Metric capability indicates that it can be monitored. - properties: - unit: - type: string - description: Unit of the metric value - required: true - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - status: SUPPORTED - attributes: - value: - type: string - description: Runtime monitored value - status: SUPPORTED - 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: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - org.openecomp.capabilities.Forwarder: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.VLANAssignment: - derived_from: tosca.capabilities.Root - description: ability to expose routing information of the internal network - properties: - vfc_instance_group_reference: - type: string - description: Ability to recognize capability per vfc instance group on vnf instance - required: true - org.openecomp.capabilities.RoutingConfiguration: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.FabricConfiguration: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualStorage: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualCompute: - derived_from: tosca.capabilities.Root - properties: - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - compute_requirements: - type: map - entry_schema: - type: string - required: false - requested_additional_capabilities: - type: map - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - required: false - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - tosca.capabilities.nfv.VirtualBindable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ExtVirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Forwarder: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.GuestOs: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.ImageFile: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.LocalAttachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.Compute.Container.Architecture: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: string - required: false - flavor_extra_specs: - type: map - required: false - entry_schema: - type: string - mem_size: - type: string - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/data.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/data.yml deleted file mode 100644 index 0ff71791..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/data.yml +++ /dev/null @@ -1,1733 +0,0 @@ -# -# 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_yaml_1_1 -data_types: - tosca.datatypes.Root: - description: The TOSCA root Data Type all other TOSCA base Data Types derive from - integer: - derived_from: tosca.datatypes.Root - string: - derived_from: tosca.datatypes.Root - boolean: - derived_from: tosca.datatypes.Root - float: - derived_from: tosca.datatypes.Root - list: - derived_from: tosca.datatypes.Root - map: - derived_from: tosca.datatypes.Root - json: - derived_from: tosca.datatypes.Root - scalar-unit: - derived_from: tosca.datatypes.Root - scalar-unit.size: - derived_from: scalar-unit - scalar-unit.time: - derived_from: scalar-unit - scalar-unit.frequency: - derived_from: scalar-unit - tosca.datatypes.Credential: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: false - token_type: - type: string - default: password - token: - type: string - keys: - type: map - required: false - entry_schema: - type: string - user: - type: string - required: false - org.openecomp.datatypes.PortMirroringConnectionPointDescription: - derived_from: tosca.datatypes.Root - properties: - nf_naming_code: - type: string - nfc_naming_code: - type: string - network_role: - type: string - pps_capacity: - type: string - nf_type: - type: string - description: deprecated - nfc_type: - type: string - description: deprecated - tosca.datatypes.TimeInterval: - derived_from: tosca.datatypes.Root - properties: - start_time: - type: timestamp - required: true - end_time: - type: timestamp - required: true - tosca.datatypes.network.NetworkInfo: - derived_from: tosca.datatypes.Root - properties: - network_name: - type: string - network_id: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortInfo: - derived_from: tosca.datatypes.Root - properties: - port_name: - type: string - port_id: - type: string - network_id: - type: string - mac_address: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortDef: - derived_from: integer - constraints: - - in_range: - - 1 - - 65535 - tosca.datatypes.network.PortSpec: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: true - default: tcp - constraints: - - valid_values: - - udp - - tcp - - igmp - target: - type: tosca.datatypes.network.PortDef - target_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - source: - type: tosca.datatypes.network.PortDef - source_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - org.openecomp.datatypes.heat.network.AddressPair: - derived_from: tosca.datatypes.Root - description: MAC/IP address pairs - properties: - mac_address: - type: string - description: MAC address - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.subnet.HostRoute: - derived_from: tosca.datatypes.Root - description: Host route info for the subnet - properties: - destination: - type: string - description: The destination for static route - required: false - status: SUPPORTED - nexthop: - type: string - description: The next hop for the destination - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.AllocationPool: - derived_from: tosca.datatypes.Root - description: The start and end addresses for the allocation pool - properties: - start: - type: string - description: Start address for the allocation pool - required: false - status: SUPPORTED - end: - type: string - description: End address for the allocation pool - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.Subnet: - derived_from: tosca.datatypes.Root - description: A subnet represents an IP address block that can be used for assigning IP addresses to virtual instances - properties: - tenant_id: - type: string - description: The ID of the tenant who owns the network - required: false - status: SUPPORTED - enable_dhcp: - type: boolean - description: Set to true if DHCP is enabled and false if DHCP is disabled - required: false - default: true - status: SUPPORTED - ipv6_address_mode: - type: string - description: IPv6 address mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - ipv6_ra_mode: - type: string - description: IPv6 RA (Router Advertisement) mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - allocation_pools: - type: list - description: The start and end addresses for the allocation pools - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.AllocationPool - subnetpool: - type: string - description: The name or ID of the subnet pool - required: false - status: SUPPORTED - dns_nameservers: - type: list - description: A specified set of DNS name servers to be used - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - host_routes: - type: list - description: The gateway IP address - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.subnet.HostRoute - ip_version: - type: integer - description: The gateway IP address - required: false - default: 4 - status: SUPPORTED - constraints: - - valid_values: - - '4' - - '6' - name: - type: string - description: The name of the subnet - required: false - status: SUPPORTED - prefixlen: - type: integer - description: Prefix length for subnet allocation from subnet pool - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 0 - cidr: - type: string - description: The CIDR - required: false - status: SUPPORTED - gateway_ip: - type: string - description: The gateway IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.novaServer.network.PortExtraProperties: - derived_from: tosca.datatypes.Root - description: Nova server network expand properties for port - properties: - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the port - required: false - status: SUPPORTED - mac_address: - type: string - description: MAC address to give to this port - required: false - status: SUPPORTED - admin_state_up: - type: boolean - description: The administrative state of this port - required: false - default: true - status: SUPPORTED - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this port - 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 - org.openecomp.datatypes.heat.novaServer.network.AddressInfo: - derived_from: tosca.datatypes.network.NetworkInfo - description: Network addresses with corresponding port id - properties: - port_id: - type: string - description: Port id - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.neutron.port.FixedIps: - derived_from: tosca.datatypes.Root - description: subnet/ip_address - properties: - subnet: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address desired in the subnet for this port - required: false - status: SUPPORTED - subnet_id: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.FileInfo: - derived_from: tosca.datatypes.Root - description: Heat File Info - properties: - file: - type: string - description: The required URI string (relative or absolute) which can be used to locate the file - required: true - status: SUPPORTED - file_type: - type: string - description: The type of the file - required: true - status: SUPPORTED - constraints: - - valid_values: - - base - - env - - volume - - network - org.openecomp.datatypes.heat.contrail.network.rule.PortPairs: - derived_from: tosca.datatypes.Root - description: source and destination port pairs - properties: - start_port: - type: string - description: Start port - required: false - status: SUPPORTED - end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - apply_service: - type: string - description: Service to apply - required: false - status: SUPPORTED - dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - direction: - type: string - description: Direction - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.Rule - org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork: - derived_from: tosca.datatypes.Root - description: source and destination addresses - properties: - virtual_network: - type: string - description: Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule: - derived_from: tosca.datatypes.Root - description: Rules Pairs - properties: - remote_group_id: - type: string - description: The remote group ID to be associated with this security group rule - required: false - status: SUPPORTED - protocol: - type: string - description: The protocol that is matched by the security group rule - required: false - status: SUPPORTED - constraints: - - valid_values: - - tcp - - udp - - icmp - ethertype: - type: string - description: Ethertype of the traffic - required: false - default: IPv4 - status: SUPPORTED - constraints: - - valid_values: - - IPv4 - - IPv6 - port_range_max: - type: integer - description: 'The maximum port number in the range that is matched by the - security group rule. ' - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - remote_ip_prefix: - type: string - description: The remote IP prefix (CIDR) to be associated with this security group rule - required: false - status: SUPPORTED - remote_mode: - type: string - description: Whether to specify a remote group or a remote IP prefix - required: false - default: remote_ip_prefix - status: SUPPORTED - constraints: - - valid_values: - - remote_ip_prefix - - remote_group_id - direction: - type: string - description: The direction in which the security group rule is applied - required: false - default: ingress - status: SUPPORTED - constraints: - - valid_values: - - egress - - ingress - port_range_min: - type: integer - description: The minimum port number in the range that is matched by the security group rule. - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - org.openecomp.datatypes.heat.substitution.SubstitutionFiltering: - derived_from: tosca.datatypes.Root - description: Substitution Filter - properties: - substitute_service_template: - type: string - description: Substitute Service Template - required: true - status: SUPPORTED - index_value: - type: integer - description: Index value of the substitution service template runtime instance - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - count: - type: string - description: Count - required: false - default: 1 - status: SUPPORTED - scaling_enabled: - type: boolean - description: Indicates whether service scaling is enabled - required: false - default: true - status: SUPPORTED - mandatory: - type: boolean - description: Mandatory - required: false - default: true - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence: - derived_from: tosca.datatypes.Root - description: network policy refs data sequence - properties: - network_policy_refs_data_sequence_major: - type: integer - description: Network Policy ref data sequence Major - required: false - status: SUPPORTED - network_policy_refs_data_sequence_minor: - type: integer - description: Network Policy ref data sequence Minor - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData: - derived_from: tosca.datatypes.Root - description: network policy refs data - properties: - network_policy_refs_data_sequence: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence - description: Network Policy ref data sequence - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet - properties: - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len: - type: string - description: Network ipam refs data ipam subnets ip prefix len - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix: - type: string - description: Network ipam refs data ipam subnets ip prefix - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet List - properties: - network_ipam_refs_data_ipam_subnets_subnet: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_addr_from_start: - type: string - description: Network ipam refs data ipam subnets addr from start - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data - properties: - network_ipam_refs_data_ipam_subnets: - type: list - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork: - derived_from: tosca.datatypes.Root - description: source addresses - properties: - network_policy_entries_policy_rule_src_addresses_virtual_network: - type: string - description: Source addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork: - derived_from: tosca.datatypes.Root - description: destination addresses - properties: - network_policy_entries_policy_rule_dst_addresses_virtual_network: - type: string - description: Destination addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs: - derived_from: tosca.datatypes.Root - description: destination port pairs - properties: - network_policy_entries_policy_rule_dst_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_dst_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs: - derived_from: tosca.datatypes.Root - description: source port pairs - properties: - network_policy_entries_policy_rule_src_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList: - derived_from: tosca.datatypes.Root - description: Action List - properties: - network_policy_entries_policy_rule_action_list_simple_action: - type: string - description: Simple Action - required: false - status: SUPPORTED - network_policy_entries_policy_rule_action_list_apply_service: - type: list - description: Apply Service - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - network_policy_entries_policy_rule_dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork - network_policy_entries_policy_rule_dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs - network_policy_entries_policy_rule_protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork - network_policy_entries_policy_rule_direction: - type: string - description: Direction - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs - network_policy_entries_policy_rule_action_list: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList - description: Action list - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - network_policy_entries_policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.Rule - org.openecomp.datatypes.heat.network.contrail.port.StaticRoute: - derived_from: tosca.datatypes.Root - description: static route - properties: - prefix: - type: string - description: Route prefix - required: false - status: SUPPORTED - next_hop: - type: string - description: Next hop - required: false - status: SUPPORTED - next_hop_type: - type: string - description: Next hop type - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.AddressPair: - derived_from: tosca.datatypes.Root - description: Address Pair - properties: - address_mode: - type: string - description: Address mode active-active or active-standy - required: false - status: SUPPORTED - constraints: - - valid_values: - - active-active - - active-standby - prefix: - type: string - description: IP address prefix - required: false - status: SUPPORTED - mac_address: - type: string - description: Mac address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.InterfaceData: - derived_from: tosca.datatypes.Root - description: Interface Data - 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 - 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 - ip_address: - type: string - description: IP for this interface - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Interface Properties. - properties: - virtual_machine_interface_properties_service_interface_type: - type: string - description: Service Interface Type. - required: false - status: SUPPORTED - org.openecomp.datatypes.Root: - derived_from: tosca.datatypes.Root - description: | - The ECOMP root Data Type all other Data Types derive from - properties: - supplemental_data: - type: map - entry_schema: - description: | - A placeholder for missing properties that would be included in future ecomp model versions. fromat : - type: string - org.openecomp.datatypes.AssignmentRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - is_required: - description: | - "true" indicates that assignment is required - type: boolean - default: false - required: true - count: - description: number of assignments required - type: integer - required: false - org.openecomp.datatypes.network.SubnetAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ip_network_address_plan: - type: string - required: false - description: Reference to EIPAM, VLAN or other address plan ID used to assign subnets to this network - dhcp_enabled: - type: boolean - required: false - description: \"true\" indicates the network has 1 or more policies - ip_version: - type: integer - constraints: - - valid_values: - - 4 - - 6 - required: true - description: The IP version of the subnet - cidr_mask: - type: integer - required: true - description: The default subnet CIDR mask - min_subnets_count: - type: integer - default: 1 - required: true - description: Quantity of subnets that must be initially assigned - org.openecomp.datatypes.network.IPv4SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv4: - type: boolean - required: true - description: Indicates IPv4 subnet assignments - org.openecomp.datatypes.network.IPv6SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv6: - type: boolean - required: true - description: Indicates IPv6 subnet assignments - org.openecomp.datatypes.network.NetworkAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_network_assignment: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the network assignments will be auto-generated by ECOMP \"false\" indicates operator-supplied Network assignments file upload is required (e.g. VID will present prompt to operator to upload operator-supplied Network assignments file). - is_shared_network: - type: boolean - required: true - description: \"true\" means this network is shared by multiple Openstack tenants - is_external_network: - type: boolean - required: true - default: false - description: | - \"true\" means this Contrail external network - ipv4_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv4SubnetAssignments - required: true - description: IPv4 defualt subnet assignments - ipv6_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv6SubnetAssignments - required: true - description: IPv6 defualt subnet assignments - related_networks: - type: list - required: false - description: Related Networks List. - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - is_trunked: - type: boolean - required: true - description: \"true\" indicates that network is trunked - default: false - org.openecomp.datatypes.network.ProviderNetwork: - derived_from: org.openecomp.datatypes.Root - properties: - is_provider_network: - type: boolean - required: true - description: \"true\" indicates that this a Neutron provider type of network - physical_network_name: - type: string - required: false - constraints: - - valid_values: - - Physnet41 - - Physnet42 - - Physnet43 - - Physnet44 - - Physnet21 - - Physnet22 - - sriovnet1 - - sriovnet2 - - oam - description: | - Identifies the NUMA processor cluster to which this physical network interface belongs. NUMA instance correlates to the first digit of the Physical Network Name suffix (e.g. \"01\" = NUMA 0, \"11\" = NUMA 1) - numa: - type: string - required: false - constraints: - - valid_values: - - NUMA 0 - - NUMA 1 - description: | - PNIC instance within the NUMA processor cluster PNIC Instance correlates to the second digit of the Physical Network Name suffix (e.g. "01" = PNIC 1, "02" = "PNIC 2) - pnic_instance: - type: integer - required: false - description: PNIC instance within the NUMA processor cluster - org.openecomp.datatypes.network.NetworkFlows: - derived_from: org.openecomp.datatypes.Root - properties: - is_network_policy: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more policies - network_policy: - type: string - required: false - description: 'Identifies the specific Cloud network policy that must be applied - to this network (source: from Policy Manager).' - is_bound_to_vpn: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more vpn bindings - vpn_binding: - type: string - required: false - description: 'Identifies the specific VPN Binding entry in A&AI that must - be applied when creating this network (source: A&AI)' - org.openecomp.datatypes.network.VlanRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - vlan_range_plan: - type: string - required: true - description: reference to a vlan range plan - vlan_type: - type: string - required: true - constraints: - - valid_values: - - c-tag - - s-tag - description: identifies the vlan type (e.g., c-tag) - vlan_count: - type: integer - required: true - description: identifies the number of vlan tags to assign to the CP from the plan - org.openecomp.datatypes.network.IpRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - ip_version: - type: integer - required: true - constraints: - - valid_values: - - 4 - - 6 - ip_count: - description: identifies the number of ip address to assign to the CP from the plan - type: integer - required: false - floating_ip_count: - type: integer - required: false - subnet_role: - type: string - required: false - assingment_method: - type: string - required: true - constraints: - - valid_values: - - fixed - - dhcp - dhcp_enabled: - type: boolean - required: false - ip_count_required: - description: identifies the number of ip address to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - required: false - floating_ip_count_required: - type: org.openecomp.datatypes.AssignmentRequirements - required: false - ip_address_plan_name: - type: string - required: false - vrf_name: - type: string - required: false - org.openecomp.datatypes.network.MacAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - type: string - required: true - description: reference to a MAC address range plan - mac_count: - type: integer - required: true - description: identifies the number of MAC addresses to assign to the CP from the plan - org.openecomp.datatypes.EcompHoming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_selected_instance_node_target: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the target deployment node for this instance will be auto-selected by ECOMP \"false\" indicates operator-supplied instance target deployment node required (e.g. VID will present a prompt to operator and collect the operator-selected target node for the deployment of this Network instance). - homing_policy: - type: string - required: false - description: Referenc to a service level homing policy that ECOMP will use for instance deployment target node - instance_node_target: - type: string - required: false - description: Instance target deployment node - org.openecomp.datatypes.EcompNaming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - type: boolean - required: true - default: true - description: | - \"true\" indicates that the name for the instance will be auto-generated by ECOMP. \"false\" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - naming_policy: - type: string - required: false - description: Referenc to naming policy that ECOMP will use when the name is auto-generated - org.openecomp.datatypes.network.MacRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - description: reference to a MAC address range plan - type: string - required: false - mac_count: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: integer - required: false - mac_count_required: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair IP. - properties: - ip_prefix: - type: string - description: IP Prefix. - required: false - status: SUPPORTED - ip_prefix_len: - type: integer - description: IP Prefix Len. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Mac Address. - properties: - mac_address: - type: list - description: Mac Addresses List. - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface VLAN Properties. - properties: - sub_interface_vlan_tag: - type: string - description: Sub Interface VLAN Tag. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair. - properties: - address_mode: - type: string - description: Address Mode. - required: false - status: SUPPORTED - ip: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp - description: IP. - required: false - status: SUPPORTED - mac: - type: string - description: Mac. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pairs. - properties: - allowed_address_pair: - type: list - description: Addresses pair List. - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair - org.openecomp.datatypes.Naming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - description: | - "true" indicates that the name for the instance will be auto-generated by ECOMP. "false" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: boolean - default: true - required: true - naming_policy: - description: Reference to naming policy that ECOMP will use when the name is auto-generated - type: string - required: false - instance_name: - description: indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: string - required: false - org.openecomp.datatypes.flavors.ComputeFlavor: - derived_from: tosca.datatypes.Root - properties: - num_cpus: - type: integer - disk_size: - type: scalar-unit.size - mem_size: - type: scalar-unit.size - org.openecomp.datatypes.flavors.LicenseFlavor: - derived_from: tosca.datatypes.Root - properties: - feature_group_uuid: - type: string - org.openecomp.datatypes.flavors.VendorInfo: - derived_from: tosca.datatypes.Root - properties: - manufacturer_reference_number: - type: string - vendor_model: - type: string - org.openecomp.datatypes.flavors.DeploymentFlavor: - derived_from: tosca.datatypes.Root - properties: - sp_part_number: - type: string - vendor_info: - type: org.openecomp.datatypes.flavors.VendorInfo - compute_flavor: - type: org.openecomp.datatypes.flavors.ComputeFlavor - license_flavor: - type: org.openecomp.datatypes.flavors.LicenseFlavor - required: false - org.openecomp.datatypes.ImageInfo: - derived_from: tosca.datatypes.Root - properties: - software_version: - type: string - file_name: - type: string - file_hash: - type: string - description: checksum/signature - file_hash_type: - type: string - required: false - default: md5 - org.openecomp.datatypes.network.RelatedNetworksAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - related_network_role: - type: string - description: The network role of the related network, sharing provider network. - required: false - tosca.datatypes.nfv.VnfcConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - additional_vnfc_configurable_properties: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.RequestedAdditionalCapability: - derived_from: tosca.datatypes.Root - properties: - support_mandatory: - type: boolean - required: true - min_requested_additional_capability_version: - type: string - required: false - preferred_requested_additional_capability_version: - type: string - required: false - requested_additional_capability_name: - type: string - required: true - target_performance_parameters: - type: map - entry_schema: - type: string - required: true - tosca.datatypes.nfv.VirtualMemory: - derived_from: tosca.datatypes.Root - properties: - virtual_mem_size: - type: scalar-unit.size - required: true - virtual_mem_oversubscription_policy: - type: string - required: false - vdu_memory_requirements: - type: map - entry_schema: - type: string - required: false - numa_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VirtualCpuPinning: - derived_from: tosca.datatypes.Root - properties: - cpu_pinning_policy: - type: string - constraints: - - valid_values: - - static - - dynamic - required: false - cpu_pinning_map: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualCpu: - derived_from: tosca.datatypes.Root - properties: - cpu_architecture: - type: string - required: false - num_virtual_cpu: - type: integer - required: true - virtual_cpu_clock: - type: scalar-unit.frequency - required: false - virtual_cpu_oversubscription_policy: - type: string - required: false - vdu_cpu_requirements: - type: map - entry_schema: - type: string - required: false - virtual_cpu_pinning: - type: tosca.datatypes.nfv.VirtualCpuPinning - required: false - tosca.datatypes.nfv.LogicalNodeData: - derived_from: tosca.datatypes.Root - properties: - logical_node_requirements: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: false - description: - type: string - required: false - support_mandatory: - type: boolean - required: true - requirement: - type: string - required: false - network_interface_requirements: - type: map - entry_schema: - type: string - required: true - nic_io_requirements: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - tosca.datatypes.nfv.injectFile: - derived_from: tosca.datatypes.Root - properties: - source_path: - type: string - required: true - dest_path: - type: string - required: true - tosca.datatypes.nfv.L2AddressData: - derived_from: tosca.datatypes.Root - properties: - mac_address_assignment: - type: boolean - required: true - address: - type: string - required: false - tosca.datatypes.nfv.L3AddressData: - derived_from: tosca.datatypes.Root - properties: - ip_address_assignment: - type: boolean - required: true - floating_ip_activated: - type: boolean - required: true - ip_address_type: - type: string - required: false - constraints: - - valid_values: - - ipv4 - - ipv6 - number_of_ip_address: - type: integer - required: false - fixed_ip_address: - type: list - entry_schema: - type: string - required: false - tosca.datatypes.nfv.AddressData: - properties: - address_type: - constraints: - - valid_values: - - mac_address - - ip_address - type: string - required: true - l2_address_data: - required: false - type: tosca.datatypes.nfv.L2AddressData - l3_address_data: - required: false - type: tosca.datatypes.nfv.L3AddressData - tosca.datatypes.nfv.ConnectivityType: - derived_from: tosca.datatypes.Root - properties: - layer_protocol: - type: string - required: true - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - flow_pattern: - type: string - required: false - constraints: - - valid_values: - - Line - - Tree - - Mesh - tosca.datatypes.nfv.VlFlavour: - derived_from: tosca.datatypes.Root - properties: - flavourId: - type: string - tosca.datatypes.nfv.ext.AddressPairs: - properties: - ip: - type: string - required: false - mac: - type: string - required: false - tosca.datatypes.nfv.ext.FloatingIP: - properties: - external_network: - type: string - required: false - ip_address: - type: string - required: false - tosca.datatypes.nfv.ext.LocationInfo: - properties: - availability_zone: - type: string - required: false - vimid: - type: integer - required: false - tenant: - type: string - required: false - tosca.datatypes.nfv.ext.HostRouteInfo: - properties: - destination: - type: string - required: false - nexthop: - type: string - required: false - tosca.datatypes.nfv.ext.InjectData: - properties: - file_name: - type: string - required: false - file_data: - type: string - required: false - tosca.datatypes.nfv.ext.zte.WatchDog: - properties: - enable_delay: - type: integer - required: false - action: - type: string - required: false - tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule: - properties: - scope: - type: string - required: false - affinity_antiaffinity: - type: string - required: false - tosca.datatypes.nfv.VduProfile: - derived_from: tosca.datatypes.Root - properties: - min_number_of_instances: - type: integer - required: true - max_number_of_instances: - type: integer - required: true - watchdog: - type: string - required: true - vmBootUpTimeOut: - type: integer - required: false - tosca.datatypes.nfv.LinkBitRateRequirements: - derived_from: tosca.datatypes.Root - properties: - root: - type: integer - required: true - leaf: - type: integer - required: true - tosca.datatypes.nfv.Qos: - derived_from: tosca.datatypes.Root - properties: - latency: - type: integer - required: true - packet_delay_variation: - type: integer - required: true - packet_loss_ratio: - type: float - constraints: - - in_range: - - 0.0 - - 1.0 - required: false - tosca.datatypes.nfv.VlProfile: - derived_from: tosca.datatypes.Root - properties: - max_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - min_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - qos: - type: tosca.datatypes.nfv.Qos - required: false - initiationParameters: - type: map - entry_schema: - type: string - required: false - cidr: - type: string - required: false - networkName: - type: string - required: false - startIp: - type: string - required: false - endIp: - type: string - required: false - gatewayIp: - type: string - required: false - segmentationId: - type: integer - required: false - physicalNetwork: - type: string - required: false - networkType: - type: string - required: false - constraints: - - valid_values: - - VLAN - - VXLAN - dhcpEnabled: - type: boolean - required: false - vlanTransparent: - type: boolean - required: false - tosca.datatypes.nfv.VduLevel: - derived_from: tosca.datatypes.Root - properties: - number_of_instances: - type: integer - required: true - tosca.datatypes.nfv.ScaleInfo: - derived_from: tosca.datatypes.Root - properties: - scaleLevel: - type: integer - required: true - tosca.datatypes.nfv.ScaleAspect: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - associated_group: - type: string - required: false - max_scale_level: - type: integer - required: true - tosca.datatypes.nfv.InstantiationLevel: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: true - vdu_levels: - type: map - required: true - entry_schema: - type: tosca.datatypes.nfv.VduLevel - scale_info: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.ScaleInfo - tosca.datatypes.nfv.VnfScaleOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - scaling_by_more_than_one_step_supported: - type: boolean - tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - arbitrary_target_levels_supported: - type: boolean - tosca.datatypes.nfv.VnfHealOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - causes: - type: list - entry_schema: - type: string - tosca.datatypes.nfv.VnfTerminateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfOperateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfLcmOperationsConfiguration: - derived_from: tosca.datatypes.Root - properties: - scale: - type: tosca.datatypes.nfv.VnfScaleOperationConfiguration - scale_to_level: - type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration - heal: - type: tosca.datatypes.nfv.VnfHealOperationConfiguration - terminate: - type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration - operate: - type: tosca.datatypes.nfv.VnfOperateOperationConfiguration - tosca.datatypes.nfv.CpProtocolData: - derived_from: tosca.datatypes.Root - properties: - asscociated_layer_protocol: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo-wire - required: true - address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.datatypes.nfv.VnfConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - is_autoscale_enabled: - type: boolean - required: false - is_autoheal_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributes: - derived_from: tosca.datatypes.Root - properties: - extensions: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions - required: false - metadata: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/groups.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/groups.yml deleted file mode 100644 index f8be60db..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/groups.yml +++ /dev/null @@ -1,133 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -group_types: - tosca.groups.Root: - description: The TOSCA Group Type all other TOSCA Group Types derive from - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - org.openecomp.groups.heat.HeatStack: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same heat stack - properties: - heat_file: - type: string - description: Heat file which associate to this group/heat stack - required: true - status: SUPPORTED - description: - type: string - description: group description - required: true - status: SUPPORTED - org.openecomp.groups.VfModule: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same VF Module - properties: - isBase: - type: boolean - description: Whether this module should be deployed before other modules - required: true - default: false - status: SUPPORTED - vf_module_label: - type: string - required: true - description: | - Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model - vf_module_description: - type: string - required: true - description: | - Description of the VF-modules contents and purpose (e.g. "Front-End" or "Database Cluster") - min_vf_module_instances: - type: integer - required: true - description: The minimum instances of this VF-Module - max_vf_module_instances: - type: integer - required: false - description: The maximum instances of this VF-Module - initial_count: - type: integer - required: false - description: | - The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances. - vf_module_type: - type: string - required: true - constraint: - - valid_values: - - Base - - Expansion - volume_group: - type: boolean - required: true - default: false - description: | - "true" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time. - availability_zone_count: - type: integer - required: false - description: | - Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template) - vfc_list: - type: map - entry_schema: - description: : - type: string - required: false - description: | - Identifies the set of VM types and their count included in the VF-Module - org.openecomp.groups.NetworkCollection: - derived_from: tosca.groups.Root - description: groups l3-networks in network collection - properties: - network_collection_function: - type: string - required: true - description: network collection function - network_collection_description: - type: string - required: true - description: network collection description, free format text - org.openecomp.groups.VfcInstanceGroup: - derived_from: tosca.groups.Root - description: groups VFCs with same parent port role - properties: - vfc_instance_group_function: - type: string - required: true - description: function of this VFC group - vfc_parent_port_role: - type: string - required: true - description: common role of parent ports of VFCs in this group - network_collection_function: - type: string - required: true - description: network collection function assigned to this group - subinterface_role: - type: string - required: true - description: common role of subinterfaces of VFCs in this group, criteria the group is created - capabilities: - vlan_assignment: - type: org.openecomp.capabilities.VLANAssignment - properties: - vfc_instance_group_reference: - type: string diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/interfaces.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/interfaces.yml deleted file mode 100644 index a11c7169..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/interfaces.yml +++ /dev/null @@ -1,83 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -interface_types: - tosca.interfaces.nfv.vnf.lifecycle.Nfv: - instantiate: - description: Invoked upon receipt of an Instantiate VNF request - instantiate_start: - description: Invoked before instantiate - instantiate_end: - description: Invoked after instantiate - terminate: - description: Invoked upon receipt Terminate VNF request - terminate_start: - description: Invoked before terminate - terminate_end: - description: Invoked after terminate - modify_information: - description: Invoked upon receipt of a Modify VNF Information request - modify_information_start: - description: Invoked before modify_information - modify_information_end: - description: Invoked after modify_information - change_flavour: - description: Invoked upon receipt of a Change VNF Flavour request - change_flavour_start: - description: Invoked before change_flavour - change_flavour_end: - description: Invoked after change_flavour - change_external_connectivity: - description: Invoked upon receipt of a Change External VNF Connectivity request - change_external_connectivity_start: - description: Invoked before change_external_connectivity - change_external_connectivity_end: - description: Invoked after change_external_connectivity - operate: - description: Invoked upon receipt of an Operate VNF request - operate_start: - description: Invoked before operate - operate_end: - description: Invoked after operate - heal: - description: Invoked upon receipt of a Heal VNF request - heal_start: - description: Invoked before heal - heal_end: - description: Invoked after heal - scale: - description: Invoked upon receipt of a Scale VNF request - scale_start: - description: Invoked before scale - scale_end: - description: Invoked after scale - scale_to_level: - description: Invoked upon receipt of a Scale VNF to Level request - scale_to_level_start: - description: Invoked before scale_to_level - scale_to_level_end: - description: Invoked after scale_to_level - tosca.interfaces.node.lifecycle.Standard: - create: - description: Standard lifecycle create operation. - configure: - description: Standard lifecycle configure operation. - start: - description: Standard lifecycle start operation. - stop: - description: Standard lifecycle stop operation. - delete: - description: Standard lifecycle delete operation. diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/nodes.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/nodes.yml deleted file mode 100644 index 62d77f4c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/nodes.yml +++ /dev/null @@ -1,4781 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -- artifacts.yml -- capabilities.yml -- interfaces.yml -- relationships.yml -node_types: - tosca.nodes.BlockStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 1 MB - volume_id: - type: string - required: false - snapshot_id: - type: string - required: false - capabilities: - attachment: - type: tosca.capabilities.Attachment - tosca.nodes.WebApplication: - derived_from: tosca.nodes.Root - properties: - context_root: - type: string - capabilities: - app_endpoint: - type: tosca.capabilities.Endpoint - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.WebServer - relationship: tosca.relationships.HostedOn - tosca.nodes.Database: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: the logical name of the database - port: - type: integer - description: the port the underlying database service will listen to for data - user: - type: string - description: the optional user account name for DB administration - required: false - password: - type: string - description: the optional password for the DB user account - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.DBMS - relationship: tosca.relationships.HostedOn - capabilities: - database_endpoint: - type: tosca.capabilities.Endpoint.Database - tosca.nodes.Container.Runtime: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - host: - type: tosca.capabilities.Container - scalable: - type: tosca.capabilities.Scalable - tosca.nodes.network.Port: - derived_from: tosca.nodes.Root - properties: - ip_address: - type: string - required: false - order: - type: integer - required: true - default: 0 - constraints: - - greater_or_equal: 0 - is_default: - type: boolean - required: false - default: false - ip_range_start: - type: string - required: false - ip_range_end: - type: string - required: false - requirements: - - link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - tosca.nodes.Root: - description: The TOSCA Node Type all other TOSCA base Node Types derive from - attributes: - tosca_id: - type: string - tosca_name: - type: string - state: - type: string - capabilities: - feature: - type: tosca.capabilities.Node - requirements: - - dependency: - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - occurrences: - - 0 - - UNBOUNDED - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - tosca.nodes.network.Network: - derived_from: tosca.nodes.Root - properties: - ip_version: - type: integer - required: false - default: 4 - constraints: - - valid_values: - - 4 - - 6 - cidr: - type: string - required: false - start_ip: - type: string - required: false - end_ip: - type: string - required: false - gateway_ip: - type: string - required: false - network_name: - type: string - required: false - network_id: - type: string - required: false - segmentation_id: - type: string - required: false - network_type: - type: string - required: false - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - default: true - capabilities: - link: - type: tosca.capabilities.network.Linkable - tosca.nodes.Compute: - derived_from: tosca.nodes.Root - attributes: - private_address: - type: string - public_address: - type: string - networks: - type: map - entry_schema: - type: tosca.datatypes.network.NetworkInfo - ports: - type: map - entry_schema: - type: tosca.datatypes.network.PortInfo - requirements: - - local_storage: - capability: tosca.capabilities.Attachment - node: tosca.nodes.BlockStorage - relationship: tosca.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.SoftwareComponent - endpoint: - type: tosca.capabilities.Endpoint.Admin - os: - type: tosca.capabilities.OperatingSystem - scalable: - type: tosca.capabilities.Scalable - binding: - type: tosca.capabilities.network.Bindable - tosca.nodes.LoadBalancer: - derived_from: tosca.nodes.Root - properties: - algorithm: - type: string - required: false - status: experimental - capabilities: - client: - type: tosca.capabilities.Endpoint.Public - occurrences: - - 0 - - UNBOUNDED - description: the Floating (IP) client’s on the public network can connect to - requirements: - - application: - capability: tosca.capabilities.Endpoint - relationship: tosca.relationships.RoutesTo - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.DBMS: - derived_from: tosca.nodes.SoftwareComponent - properties: - root_password: - type: string - required: false - description: the optional root password for the DBMS service - port: - type: integer - required: false - description: the port the DBMS service will listen to for data and requests - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.Database - tosca.nodes.WebServer: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - data_endpoint: tosca.capabilities.Endpoint - admin_endpoint: tosca.capabilities.Endpoint.Admin - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.WebApplication - tosca.nodes.Container.Application: - derived_from: tosca.nodes.Root - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Container - relationship: tosca.relationships.HostedOn - tosca.nodes.SoftwareComponent: - derived_from: tosca.nodes.Root - properties: - component_version: - type: version - required: false - admin_credential: - type: tosca.datatypes.Credential - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.ObjectStorage: - derived_from: tosca.nodes.Root - properties: - name: - type: string - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - maxsize: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - capabilities: - storage_endpoint: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.ServiceProxy: - derived_from: tosca.nodes.Root - org.openecomp.resource.vfc.rules.nodes.heat.network.contrailV2.NetworkRules: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - network_policy_entries: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - shared: - type: string - description: Is virtual network shared - required: false - status: SUPPORTED - forwarding_mode: - type: string - description: forwarding mode of the virtual network - required: false - status: SUPPORTED - external: - type: string - description: Is virtual network external - required: false - status: SUPPORTED - allow_transit: - type: string - description: Whether this network should be transitive. - required: false - status: SUPPORTED - flood_unknown_unicast: - type: string - description: flood L2 packets on network - required: false - status: SUPPORTED - route_targets: - type: list - description: route targets associated with the virtual network - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - 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 - org.openecomp.resource.abstract.nodes.service: - derived_from: tosca.nodes.Root - org.openecomp.resource.cp.v2.extVirtualMachineInterfaceCP: - derived_from: org.openecomp.resource.cp.v2.extCP - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.v2.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.vfc.nodes.volume: - derived_from: tosca.nodes.BlockStorage - org.openecomp.nodes.VLANNetworkReceptor: - derived_from: tosca.nodes.Root - capabilities: - routing_configuration_internal: - type: org.openecomp.capabilities.RoutingConfiguration - requirements: - - vlan_assignment: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.VLANAssignment - relationship: org.openecomp.relationships.AssignsTo - org.openecomp.resource.vl.nodes.heat.network.neutron.Net: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - dhcp_agent_ids: - type: list - description: The IDs of the DHCP agent to schedule the network - required: false - status: SUPPORTED - entry_schema: - type: string - tenant_id: - type: string - description: The ID of the tenant which will own the network - required: false - status: SUPPORTED - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the network - required: false - status: SUPPORTED - shared: - type: boolean - description: Whether this network should be shared across all tenants - required: false - default: 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 - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this network - required: false - status: SUPPORTED - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - attributes: - 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_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - mtu: - type: scalar-unit.size - description: The maximum transmission unit size(in bytes) for the network - status: SUPPORTED - status: - type: string - description: The status of the network - status: SUPPORTED - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.nova.Server: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - admin_pass: - type: string - description: The administrator password for the server - required: false - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - image: - type: string - description: The ID or name of the image to boot with - required: false - status: SUPPORTED - image_update_policy: - type: string - description: Policy on how to apply an image-id update - required: false - default: REBUILD - status: SUPPORTED - constraints: - - valid_values: - - REBUILD_PRESERVE_EPHEMERAL - - REPLACE - - REBUILD - metadata: - type: json - description: Arbitrary JSON metadata to store for this server - required: false - status: SUPPORTED - contrail_service_instance_ind: - type: boolean - description: Nova server related to service instance indicator - required: false - default: false - status: SUPPORTED - user_data_update_policy: - type: string - description: Policy on how to apply a user_data update - required: false - default: REPLACE - status: SUPPORTED - constraints: - - valid_values: - - REPLACE - - IGNORE - flavor_update_policy: - type: string - description: Policy on how to apply a flavor update - required: false - default: RESIZE - status: SUPPORTED - constraints: - - valid_values: - - RESIZE - - REPLACE - user_data: - type: string - description: User data script to be executed by cloud-init - required: false - default: '' - status: SUPPORTED - flavor: - type: string - description: The ID or name of the flavor to boot onto - required: true - status: SUPPORTED - key_name: - type: string - description: Name of keypair to inject into the server - required: false - status: SUPPORTED - reservation_id: - type: string - description: A UUID for the set of servers being requested - required: false - status: SUPPORTED - security_groups: - type: list - description: List of security group names or IDs - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - config_drive: - type: boolean - description: enable config drive on the server - required: false - status: SUPPORTED - personality: - type: map - description: A map of files to create/overwrite on the server upon boot - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - software_config_transport: - type: string - description: How the server should receive the metadata required for software configuration - required: false - default: POLL_SERVER_CFN - status: SUPPORTED - constraints: - - valid_values: - - POLL_SERVER_CFN - - POLL_SERVER_HEAT - - POLL_TEMP_URL - - ZAQAR_MESSAGE - user_data_format: - type: string - description: How the user_data should be formatted for the server - required: false - default: HEAT_CFNTOOLS - status: SUPPORTED - constraints: - - valid_values: - - SOFTWARE_CONFIG - - RAW - - HEAT_CFNTOOLS - diskConfig: - type: string - description: Control how the disk is partitioned when the server is created - required: false - status: SUPPORTED - constraints: - - valid_values: - - AUTO - - MANUAL - name: - type: string - description: Server name - required: false - status: SUPPORTED - scheduler_hints: - type: map - description: Arbitrary key-value pairs specified by the client to help boot a server - required: false - status: SUPPORTED - entry_schema: - type: string - attributes: - accessIPv4: - type: string - description: The manually assigned alternative public IPv4 address of the server - status: SUPPORTED - addresses: - type: map - description: A dict of all network addresses with corresponding port_id - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.novaServer.network.AddressInfo - accessIPv6: - type: string - description: The manually assigned alternative public IPv6 address of the server - status: SUPPORTED - instance_name: - type: string - description: AWS compatible instance name - status: SUPPORTED - name: - type: string - description: Name of the server - status: SUPPORTED - show: - type: string - description: Detailed information about resource - status: SUPPORTED - console_urls: - type: string - description: URLs of servers consoles - status: SUPPORTED - org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules: - derived_from: tosca.nodes.Root - properties: - description: - type: string - description: Description of the security group - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this security group, which is not required to be unique. - required: false - status: SUPPORTED - rules: - type: list - description: List of security group rules - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule - attributes: - show: - type: string - description: Detailed information about resource - status: SUPPORTED - requirements: - - port: - capability: tosca.capabilities.Attachment - node: org.openecomp.resource.cp.nodes.heat.network.neutron.Port - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.cinder.Volume: - derived_from: org.openecomp.resource.vfc.nodes.volume - properties: - availability_zone: - description: The availability zone in which the volume will be created - type: string - status: SUPPORTED - required: false - image: - description: If specified, the name or ID of the image to create the volume from - type: string - status: SUPPORTED - required: false - metadata: - description: Key/value pairs to associate with the volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - volume_type: - description: If specified, the type of volume to use, mapping to a specific backend - type: string - status: SUPPORTED - required: false - description: - description: A description of the volume - type: string - status: SUPPORTED - required: false - device_type: - description: Device type - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - cdrom - - disk - disk_bus: - description: 'Bus of the device: hypervisor driver chooses a suitable default - if omitted' - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - ide - - lame_bus - - scsi - - usb - - virtio - backup_id: - description: If specified, the backup to create the volume from - type: string - status: SUPPORTED - required: false - source_volid: - description: If specified, the volume to use as source - type: string - status: SUPPORTED - required: false - boot_index: - description: Integer used for ordering the boot disks - type: integer - status: SUPPORTED - required: false - size: - description: The requested storage size (default unit is MB) - type: scalar-unit.size - status: SUPPORTED - required: false - constraints: - - greater_or_equal: 1 GB - read_only: - description: Enables or disables read-only access mode of volume - type: boolean - status: SUPPORTED - required: false - name: - description: A name used to distinguish the volume - type: string - status: SUPPORTED - required: false - scheduler_hints: - description: Arbitrary key-value pairs specified by the client to help the Cinder scheduler creating a volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - swap_size: - description: The size of the swap, in MB - type: scalar-unit.size - status: SUPPORTED - required: false - delete_on_termination: - description: Indicate whether the volume should be deleted when the server is terminated - type: boolean - status: SUPPORTED - required: false - multiattach: - description: Whether allow the volume to be attached more than once - type: boolean - status: SUPPORTED - required: false - attributes: - display_description: - description: Description of the volume - type: string - status: SUPPORTED - attachments: - description: The list of attachments of the volume - type: string - status: SUPPORTED - entry_schema: - type: string - encrypted: - description: Boolean indicating if the volume is encrypted or not - type: boolean - status: SUPPORTED - show: - description: Detailed information about resource - type: string - status: SUPPORTED - created_at: - description: The timestamp indicating volume creation - type: timestamp - status: SUPPORTED - display_name: - description: Name of the volume - type: string - status: SUPPORTED - metadata_values: - description: Key/value pairs associated with the volume in raw dict form - type: map - status: SUPPORTED - entry_schema: - type: string - bootable: - description: Boolean indicating if the volume can be booted or not - type: boolean - status: SUPPORTED - status: - description: The current status of the volume - type: string - status: SUPPORTED - org.openecomp.resource.abstract.nodes.CR: - derived_from: tosca.nodes.Root - properties: - cr_function: - type: string - cr_role: - type: string - cr_type: - type: string - org.openecomp.resource.vl.extVL: - derived_from: tosca.nodes.Root - description: VF Tenant oam protected network - properties: - network_type: - type: string - required: true - description: ECOMP supported network types. - network_role: - type: string - required: true - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_scope: - type: string - constraints: - valid_values: - - VF - - SERVICE - - GLOBAL - 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 - network_technology: - type: string - required: true - description: ECOMP supported network technology - exVL_naming: - type: org.openecomp.datatypes.Naming - 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 - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.abstract.nodes.PNF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_type: - type: string - software_versions: - type: list - entry_schema: - type: string - org.openecomp.resource.vfc.rules.nodes.heat.network.contrail.NetworkRules: - derived_from: tosca.nodes.Root - properties: - entries: - type: org.openecomp.datatypes.heat.contrail.network.rule.RuleList - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - attributes: - tenant_id: - type: string - description: tenant_id - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - rules: - type: list - description: List of rules - status: SUPPORTED - entry_schema: - type: string - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - 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.nodes.VRFObject: - derived_from: tosca.nodes.Root - description: provides capability to connect WAN Transport Service Proxy to VRF Entry - capabilities: - routing_configuration_external: - type: org.openecomp.capabilities.RoutingConfiguration - org.openecomp.resource.abstract.nodes.VFC: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - nfc_function: - type: string - high_availablity: - type: string - description: high_availablity - required: false - status: SUPPORTED - vm_image_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - vm_flavor_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - nfc_naming_code: - type: string - description: nfc code for instance naming - required: false - status: SUPPORTED - vm_type_tag: - type: string - description: vm type based on naming Convention - required: false - status: SUPPORTED - nfc_naming: - type: org.openecomp.datatypes.Naming - description: vfc naming - min_instances: - type: integer - description: Minimum number of VFC Instances - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - max_instances: - type: integer - description: Maximum number of VFC Instances - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 1 - org.openecomp.resource.cp.nodes.heat.contrailV2.VirtualMachineInterface: - derived_from: org.openecomp.resource.cp.nodes.network.Port - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.abstract.nodes.VnfConfiguration: - derived_from: tosca.nodes.Root - properties: - allowed_flavors: - description: a collection of all flavor valuesets available for a given VFC - type: map - entry_schema: - type: org.openecomp.datatypes.flavors.DeploymentFlavor - org.openecomp.resource.vl.nodes.heat.network.contrailV2.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - network_ipam_refs_data: - type: list - description: IPAM references Data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData - network_policy_refs_data: - type: list - description: Policy references data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData - network_ipam_refs: - type: list - description: IPAM references - required: false - status: SUPPORTED - entry_schema: - type: string - network_policy_refs: - type: list - description: Policy references - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vl.internalVL: - derived_from: tosca.nodes.network.Network - description: The AT&T internal (VF-level) Virtual Link - org.openecomp.resource.vl.ELine: - derived_from: org.openecomp.resource.vl.VL - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 0 - - 2 - org.openecomp.resource.vl.VL: - derived_from: tosca.nodes.network.Network - properties: - vendor: - type: string - required: false - vl_name: - type: string - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - end_point: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.Configuration: - derived_from: tosca.nodes.Root - properties: - type: - type: string - description: The type of the node, the configuration will be defined for it. Ex. SBC - required: false - role: - type: string - description: The role of the node, the configuration will be defined for it. Ex. Active, Standby - required: false - function: - type: string - description: The function of the node, the configuration will be defined for it. Ex. NAT Traversal - required: false - org.openecomp.resource.cp.nodes.network.v2.SubInterface: - derived_from: tosca.nodes.Root - properties: - ip_address: - description: Allow the user to set a fixed IP address. Note that this address is a request to the provider which they will attempt to fulfill but may not be able to dependent on the network the port is associated with. - type: string - required: false - order: - description: 'The order of the NIC on the compute instance (e.g. eth2). Note: - when binding more than one port to a single compute (aka multi vNICs) and - ordering is desired, it is *mandatory* that all ports will be set with an - order value and. The order values must represent a positive, arithmetic - progression that starts with 0 (e.g. 0, 1, 2, ..., n).' - type: integer - default: 0 - required: false - constraints: - - greater_or_equal: 0 - is_default: - description: Set is_default=true to apply a default gateway route on the running compute instance to the associated network gateway. Only one port that is associated to single compute node can set as default=true. - type: boolean - default: false - required: false - ip_range_start: - description: Defines the starting IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - ip_range_end: - description: Defines the ending IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - attributes: - ip_address: - description: The IP address would be assigned to the associated compute instance. - type: string - requirements: - - subinterface_link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - 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.vfc.nodes.Compute: - derived_from: tosca.nodes.Compute - capabilities: - disk.ephemeral.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.ephemeral.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of ephemeral disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - instance: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: instance - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: instance - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Existence of instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu.delta: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu.delta - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used since previous datapoint - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Delta - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu_util: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: '%' - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu_util - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average CPU utilization - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.root.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.root.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of root disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - vcpus: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: vcpu - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: vcpus - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of virtual CPUs allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance from the amount of its allocated memory - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.resident: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.resident - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance on the physical machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.MultiFlavorVFC: - derived_from: org.openecomp.resource.abstract.nodes.VFC - properties: - images: - type: map - entry_schema: - type: org.openecomp.datatypes.ImageInfo - required: false - org.openecomp.nodes.PortMirroringConfigurationByPolicy: - derived_from: tosca.nodes.Root - properties: - collector_node: - type: string - description: The name of the Collector Proxy - required: true - policy_name: - type: string - description: The name of the policy for selection of the collector interfaces - required: true - equip_model: - type: string - description: The name of the equipment type of the collector, i.e. Cisco 4500x - required: true - equip_vendor: - type: string - description: The name of the equipment vendor of the collector, i.e. Cisco - required: true - requirements: - - source: - capability: org.openecomp.capabilities.PortMirroring - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.VF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_naming_code: - type: string - nf_type: - type: string - nf_naming: - type: org.openecomp.datatypes.Naming - Default: true - availability_zone_max_count: - type: integer - default: 1 - constraints: - - valid_values: - - 0 - - 1 - - 2 - min_instances: - type: integer - max_instances: - type: integer - multi_stage_design: - type: boolean - default: false - 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.nodes.ForwardingPath: - derived_from: tosca.nodes.Root - properties: - target_range: - type: list - required: true - status: SUPPORTED - 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 - required: true - status: SUPPORTED - requirements: - - forwarder: - capability: org.openecomp.capabilities.Forwarder - relationship: org.openecomp.relationships.ForwardsTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.cp.nodes.heat.network.contrail.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - org.openecomp.resource.cp.nodes.network.SubInterface: - derived_from: tosca.nodes.network.Port - org.openecomp.resource.vfc.nodes.heat.contrail.Compute: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - attributes: - tenant_id: - type: string - description: Tenant id of the VM - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of active VMs - status: SUPPORTED - virtual_machines: - type: string - description: VMs of this compute - status: SUPPORTED - status: - type: string - description: status of the compute - status: SUPPORTED - org.openecomp.resource.cp.nodes.network.Port: - derived_from: tosca.nodes.network.Port - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - 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 - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - subinterface_indicator: - description: identifies if Port is having Sub Interface - type: boolean - required: false - default: false - related_networks: - type: list - description: Related Networks List. - required: false - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - capabilities: - network.incoming.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - forwarder: - type: org.openecomp.capabilities.Forwarder - network.outgoing.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outpoing.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outpoing.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.nodes.VRFEntry: - derived_from: tosca.nodes.Root - requirements: - - routing_configuration_internal: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - - routing_configuration_external: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.cp.extCP: - derived_from: tosca.nodes.Root - description: The SDC Connection Point base type all other CP derive from - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - network_role_tag: - type: string - required: true - description: Must correlate to the set of defined “network-role” tag identifiers from the associated HEAT template - mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements - required: false - description: identifies MAC address assignments to the CP - vlan_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.VlanRequirements - required: false - description: identifies vlan address assignments to the CP - ip_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.IpRequirements - required: true - description: identifies IP requirements to the CP - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - 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 - relationship: tosca.relationships.network.LinksTo - node: org.openecomp.resource.vl.VL - capabilities: - internal_connectionPoint: - type: tosca.capabilities.Node - valid_source_type: - - tosca.nodes.network.Port - org.openecomp.nodes.FabricConfiguration: - derived_from: org.openecomp.nodes.Configuration - requirements: - - fabric_configuration_monitoring: - capability: org.openecomp.capabilities.FabricConfiguration - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.contrail.AbstractSubstitute: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - static_routes_list: - type: list - description: Static routes enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - ordered_interfaces: - type: boolean - description: Indicates if service interface are ordered - required: false - default: false - status: SUPPORTED - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - service_interface_type_list: - type: list - description: List of interface types - required: true - status: SUPPORTED - entry_schema: - type: string - constraints: - - valid_values: - - management - - left - - right - - other - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - interface_list: - type: list - description: List of interfaces - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.contrail.InterfaceData - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - shared_ip_list: - type: list - description: Shared ips enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - attributes: - tenant_id: - type: string - description: Tenant id of the Service Instance - status: SUPPORTED - fq_name: - type: string - description: The FQ name of the service instance - status: SUPPORTED - service_template_name: - type: string - description: Service Template of the Service Instance - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of service VMs active for this Service Instance - status: SUPPORTED - service_instance_name: - type: string - description: The name of the service instance - status: SUPPORTED - virtual_machines: - type: string - description: Service VMs for the Service Instance - status: SUPPORTED - status: - type: string - description: Status of the service instance - status: SUPPORTED - org.openecomp.resource.abstract.nodes.AbstractSubstitute: - derived_from: tosca.nodes.Root - properties: - service_template_filter: - type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering - description: Substitution Filter - required: true - status: SUPPORTED - org.openecomp.resource.cp.nodes.heat.network.neutron.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_profile: - type: tosca.datatypes.nfv.VlProfile - required: true - capabilities: - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.Cp: - derived_from: tosca.nodes.Root - properties: - layer_protocol: - type: list - entry_schema: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - required: true - role: - type: string - constraints: - - valid_values: - - root - - leaf - required: false - description: - type: string - required: false - protocol_data: - type: list - entry_schema: - type: tosca.datatypes.nfv.CpProtocolData - required: true - trunk_mode: - type: boolean - required: true - allowed_address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.nodes.nfv.VnfVirtualLinkDesc: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_flavours: - type: map - entry_schema: - type: tosca.datatypes.nfv.VlFlavour - required: true - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - org.openecomp.resource.vfc.AllottedResource: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - role: - type: string - required: true - description: Unique label that defines the role that this allotted resource performs - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - target_network_role: - type: string - required: true - description: Target network role - requirements: - - service_dependency: - capability: org.openecomp.capabilities.AllottedResource - relationship: tosca.relationships.DependsOn - node: tosca.services.Root - tosca.nodes.nfv.ext.zte.VDU: - derived_from: tosca.nodes.Root - properties: - manual_scale_select_vim: - type: boolean - required: false - vdu_type: - type: string - required: false - watchdog: - type: tosca.datatypes.nfv.ext.zte.WatchDog - required: false - name: - type: string - required: false - local_affinity_antiaffinity_rule: - type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule - required: false - support_scaling: - type: boolean - required: false - storage_policy: - type: string - required: false - key_vdu: - type: boolean - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - inject_data_list: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.InjectData - 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 - 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 - tosca.nodes.nfv.VDU: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - Virtualbinding: - type: tosca.capabilities.nfv.VirtualBindable - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - properties: - bitrate_requirement: - type: integer - required: false - vnic_name: - type: string - required: false - vnic_order: - type: integer - required: false - vnic_type: - type: string - constraints: - - valid_values: - - normal - - macvtap - - direct - - baremetal - - direct-physical - - virtio-forwarder - required: false - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - required: false - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - - virtual_binding: - capability: tosca.capabilities.nfv.VirtualBindable - relationship: tosca.relationships.nfv.VirtualBindsTo - node: tosca.nodes.nfv.Vdu.Compute - org.openecomp.resource.vfc.NSD: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - nsd_id: - type: string - required: true - description: ID of the NSD - nsd_designer: - type: string - required: true - description: Designer of the NSD - nsd_version: - type: string - required: true - description: Version of the NSD - nsd_name: - type: string - required: true - description: Name of the NSD - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - boot_order: - type: map - entry_schema: - type: string - required: false - nfvi_constraints: - type: map - entry_schema: - type: string - required: false - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - required: true - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - required: true - inject_files: - type: tosca.datatypes.nfv.injectFile - required: false - meta_data: - type: map - entry_schema: - type: string - required: false - user_data: - type: string - required: false - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - requirements: - - virtual_storage: - capability: tosca.capabilities.nfv.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - node: tosca.nodes.nfv.Vdu.VirtualStorage - occurences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.GenericNeutronNet: - derived_from: org.openecomp.resource.vl.extVL - description: Generic Neutron Network - properties: - network_role: - type: string - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_assignments: - type: org.openecomp.datatypes.network.NetworkAssignments - network_flows: - type: org.openecomp.datatypes.network.NetworkFlows - network_scope: - type: string - network_ecomp_naming: - type: org.openecomp.datatypes.EcompNaming - network_type: - type: string - description: ECOMP supported network types. - default: NEUTRON - provider_network: - type: org.openecomp.datatypes.network.ProviderNetwork - network_technology: - type: string - description: ECOMP supported network technology - default: NEUTRON - network_homing: - type: org.openecomp.datatypes.EcompHoming - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 1 - - UNBOUNDED - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - properties: - type_of_storage: - type: string - constraints: - - valid_values: - - volume - - object - - root - - block - required: true - size_of_storage: - type: scalar-unit.size - required: true - vdu_storage_requirements: - type: map - entry_schema: - type: string - required: false - rdma_enabled: - type: boolean - required: false - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - tosca.nodes.nfv.ext.zte.VL: - derived_from: tosca.nodes.Root - properties: - segmentation_id: - type: string - required: false - network_name: - type: string - required: false - is_predefined: - type: boolean - required: false - mtu: - type: integer - required: false - dns_nameservers: - type: list - required: false - entry_schema: - type: string - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - network_id: - type: string - required: false - host_routes: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.HostRouteInfo - ip_version: - type: integer - required: false - vendor: - type: string - required: false - name: - type: string - required: false - start_ip: - type: string - required: false - vlan_transparent: - type: boolean - required: false - cidr: - type: string - required: false - gateway_ip: - type: string - required: false - network_type: - type: string - required: false - end_ip: - type: string - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.ext.LocalStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: string - required: false - disk_type: - type: string - required: false - capabilities: - local_attachment: - type: tosca.capabilities.nfv.ext.LocalAttachment - tosca.nodes.nfv.ext.zte.CP: - derived_from: tosca.nodes.Root - properties: - guest_os_mtu: - type: integer - required: false - bandwidth: - type: integer - required: false - interface_name: - type: string - required: false - allowed_address_pairs: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.AddressPairs - ip_address: - type: string - required: false - bond: - type: string - required: false - proxiedVNFs: - type: list - required: false - entry_schema: - type: string - sfc_encapsulation: - type: string - required: false - floating_ip_address: - type: tosca.datatypes.nfv.ext.FloatingIP - required: false - service_ip_address: - required: false - type: string - mac_address: - type: string - required: false - proxiedVNFtype: - type: string - required: false - macbond: - type: string - required: false - vnic_type: - type: string - required: false - direction: - type: string - required: false - order: - type: integer - required: false - requirements: - - forwarder: - capability: tosca.capabilities.nfv.Forwarder - occurrences: - - 0 - - UNBOUNDED - - virtualbinding: - capability: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 0 - - UNBOUNDED - - virtualLink: - capability: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 0 - - UNBOUNDED - capabilities: - forwarder: - type: tosca.capabilities.nfv.Forwarder - tosca.nodes.nfv.ext.ImageFile: - derived_from: tosca.nodes.Root - properties: - file_url: - type: string - required: false - container_type: - type: string - required: false - name: - type: string - required: false - disk_format: - type: string - required: false - version: - type: string - required: false - capabilities: - guest_os: - type: tosca.capabilities.nfv.ext.GuestOs - image_fle: - type: tosca.capabilities.nfv.ext.ImageFile - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - properties: - descriptor_id: - type: string - required: true - descriptor_version: - type: string - required: true - provider: - type: string - required: true - product_name: - type: string - required: true - software_version: - type: string - required: true - product_info_name: - type: string - required: false - product_info_description: - type: string - required: false - vnfm_info: - type: list - entry_schema: - type: string - required: true - localization_languages: - type: list - entry_schema: - type: string - required: false - default_localization_language: - type: string - required: false - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - required: false - modifiable_attributes: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributes - required: false - flavour_id: - type: string - required: true - flavour_description: - type: string - required: true - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - occurrences: - - 0 - - UNBOUNDED - interfaces: - Nfv: - type: tosca.interfaces.nfv.vnf.lifecycle.Nfv - org.openecomp.resource.vl.overlaytunnel: - derived_from: tosca.nodes.Root - description: This entity represents abstract overlay tunnel end point. - properties: - id: - type: string - description: Identifier of the Tunnel Endpoint node. - required: false - template_name: - type: string - required: false - version: - type: string - required: false - name: - type: string - description: Overlay tunnel name used by for reference by the administrator. - required: false - description: - type: string - description: Additional comments/information about overlay tunnel. - required: false - tunnelType: - type: string - constraints: - - valid_values: - - L3-DCI - - L2-DCI - description: type defines if the overlay tunnel is L3-DCI tunnel or L2-DCI tunnel. - required: true - site1_id: - type: string - description: Identifier of first DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site1_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site1_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site1_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site1_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site1_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site1_vni: - type: integer - description: VXLAN ID - required: false - site1_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site1_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site1_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - site2_id: - type: string - description: Identifier of second DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site2_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site2_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site2_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site2_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site2_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site2_vni: - type: integer - description: VXLAN ID - required: false - site2_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site2_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site2_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.vl.underlayvpn: - derived_from: tosca.nodes.Root - description: undelay vpn type definitions - properties: - id: - type: string - required: false - template_name: - type: string - required: false - version: - type: string - required: false - vendor: - type: string - required: false - template_author: - type: string - required: false - name: - type: string - required: false - description: - type: string - required: false - serviceType: - type: string - description: type of VPN service - required: false - default: l3vpn_sptn - topology: - type: string - description: type of VPN topology - constraints: - - valid_values: - - full-mesh - - point_to_multipoint - - point_to_point - - singlePoint - - hubspoke - - hubspoke_via_hubce - - hubspoke_disjoint - - ADD_DROP_Z - required: false - default: full-mesh - technology: - type: string - description: type of VPN technology - constraints: - - valid_values: - - mpls - - rosen multivpn - - vxlan overlay l3vpn - - eth over sdh - - vlan - required: false - default: mpls - site1_name: - type: string - description: name of first site - required: false - site2_name: - type: string - description: name of second site - required: false - sna1_name: - type: string - description: name of site network accesses associated with the site1 - required: false - sna2_name: - type: string - description: name of site network accesses associated with the site2 - required: false - pe1_id: - type: string - description: id of provider edge1, it can be name or ip or uuid - required: false - pe2_id: - type: string - description: id of provider edge2, it can be name or ip or uuid - required: false - ac1_id: - type: string - description: id of attachment circuit1, it can be port name or uuid - required: false - ac1_svlan: - type: integer - description: ac1 svlan - required: false - ac1_ip: - type: string - description: ip of ac1, only for layer3 vpn, it should contain mask - required: false - ac1_peer_ip: - type: string - description: ip of ac1 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac1_route: - type: string - description: route configure of ac1, only for layer3 vpn - required: false - ac1_protocol: - type: string - description: routing protocol type of ac1, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - required: false - ac1_protocol_bgp_as: - type: string - description: autonomous-system number of ac1, , only required for ebgp protocol - required: false - ac2_id: - type: string - description: id of attachment circuit2, it can be port name or uuid - required: false - ac2_svlan: - type: integer - description: ac2 svlan - required: false - ac2_ip: - type: string - description: ip of ac2, only for layer3 vpn, it should contain mask - required: false - ac2_peer_ip: - type: string - description: ip of ac2 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac2_route: - type: string - description: route configure of ac2, only for layer3 vpn - required: false - ac2_protocol: - type: string - description: routing protocol type of ac2, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - default: STATIC - required: false - ac2_protocol_bgp_as: - type: string - description: autonomous-system number of ac2, , only required for ebgp protocol - required: false - af_type: - type: string - description: address family type - default: ipv4 - required: false - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/policies.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/policies.yml deleted file mode 100644 index 6063d085..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/policies.yml +++ /dev/null @@ -1,134 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -policy_types: - tosca.policies.Root: - description: The TOSCA Policy Type all other TOSCA Policy Types derive from - tosca.policies.Placement: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern placement of TOSCA nodes or groups of nodes. - tosca.policies.Scaling: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern scaling of TOSCA nodes or groups of nodes. - tosca.policies.Update: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern update of TOSCA nodes or groups of nodes. - tosca.policies.Performance: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to declare performance requirements for TOSCA nodes or groups of nodes. - org.openecomp.policies.placement.Antilocate: - derived_from: tosca.policies.Placement - description: My placement policy for separation based upon container type value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - container_type: - type: string - description: container type - required: false - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.Colocate: - derived_from: tosca.policies.Placement - description: Keep associated nodes (groups of nodes) based upon affinity value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - affinity: - type: string - description: affinity - required: true - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.valet.Diversity: - derived_from: tosca.policies.Placement - description: Valet Diversity - properties: - level: - type: string - description: diversity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Exclusivity: - derived_from: tosca.policies.Placement - description: Valet Exclusivity - properties: - level: - type: string - description: exclusivity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Affinity: - derived_from: tosca.policies.Placement - description: Valet Affinity - properties: - level: - type: string - description: affinity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.scaling.Fixed: - derived_from: tosca.policies.Scaling - properties: - quantity: - description: the exact number of instances to keep up - type: integer - required: true - org.openecomp.policies.External: - derived_from: tosca.policies.Root - description: externally managed policy (for example, type="network assignment", source="Policy Manager", name="route target") - properties: - source: - type: string - description: The name of the server that exposes the policy with predefined type and name. - required: false - type: - type: string - description: The type (category) of the policy same as it is defined in the source. - required: false - name: - type: string - description: The name of the policy, that related to specific type, same as it is defined in the source. - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/relationships.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/relationships.yml deleted file mode 100644 index b1b554d1..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/relationships.yml +++ /dev/null @@ -1,142 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- capabilities.yml -- data.yml -- interfaces.yml -relationship_types: - tosca.relationships.Root: - description: This is the default (root) TOSCA Relationship Type definition that all other TOSCA Relationship Types derive from. - attributes: - tosca_id: - description: A unique identifier of the realized instance of a Relationship Template that derives from any TOSCA normative type. - type: string - tosca_name: - description: This attribute reflects the name of the Relationship Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment. - type: string - state: - description: The state of the relationship instance. - type: string - default: initial - interfaces: - Configure: - type: tosca.interfaces.relationship.Configure - tosca.relationships.RoutesTo: - derived_from: tosca.relationships.ConnectsTo - description: This type represents an intentional network routing between two Endpoints in different networks. - valid_target_types: - - tosca.capabilities.Endpoint - tosca.relationships.network.LinksTo: - derived_from: tosca.relationships.DependsOn - description: This relationship type represents an association relationship between Port and Network node types. - valid_target_types: - - tosca.capabilities.network.Linkable - tosca.relationships.AttachesTo: - derived_from: tosca.relationships.Root - description: This type represents an attachment relationship between two nodes. For example, an AttachesTo relationship type would be used for attaching a storage node to a Compute node. - valid_target_types: - - tosca.capabilities.Attachment - properties: - location: - description: 'The relative location (e.g., path on the file system), which - provides the root location to address an attached node. e.g., a mount point - / path such as ''/usr/data''. Note: The user must provide it and it cannot - be "root".' - type: string - constraints: - - min_length: 1 - device: - description: The logical device name which for the attached device (which is represented by the target node in the model). e.g., '/dev/hda1'. - type: string - required: false - attributes: - device: - description: 'The logical name of the device as exposed to the instance. Note: - A runtime property that gets set when the model gets instantiated by the - orchestrator.' - type: string - tosca.relationships.network.BindsTo: - derived_from: tosca.relationships.DependsOn - description: This type represents a network association relationship between Port and Compute node types. - valid_target_types: - - tosca.capabilities.network.Bindable - tosca.relationships.HostedOn: - derived_from: tosca.relationships.Root - description: This type represents a hosting relationship between two nodes. - valid_target_types: - - tosca.capabilities.Container - tosca.relationships.DependsOn: - derived_from: tosca.relationships.Root - description: This type represents a general dependency relationship between two nodes. - valid_target_types: - - tosca.capabilities.Node - tosca.relationships.ConnectsTo: - derived_from: tosca.relationships.Root - description: This type represents a network connection relationship between two nodes. - valid_target_types: - - tosca.capabilities.Endpoint - properties: - credential: - type: tosca.datatypes.Credential - required: false - 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 - org.openecomp.relationships.ForwardsTo: - derived_from: tosca.relationships.Root - valid_target_types: - - org.openecomp.capabilities.Forwarder - org.openecomp.relationships.AssignsTo: - derived_from: tosca.relationships.Root - org.openecomp.relationships.RoutesTo: - derived_from: tosca.relationships.RoutesTo - description: This type represents an intentional network routing between internal and external network - tosca.relationships.nfv.VirtualBindsTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualBindable - tosca.relationships.nfv.VirtualLinksTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualLinkable - tosca.relationships.nfv.Vdu.AttachedTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualStorage diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCompute-template.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCompute-template.yml deleted file mode 100644 index 546f88a8..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCompute-template.yml +++ /dev/null @@ -1,103 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - description: VDU Compute - properties: - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - inject_files: - type: tosca.datatypes.nfv.injectFile - name: - type: string - nfvi_constraints: - type: map - entry_schema: - type: string - meta_data: - type: map - entry_schema: - type: string - description: - type: string - user_data: - type: string - boot_order: - type: map - entry_schema: - type: string - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCp-template.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCp-template.yml deleted file mode 100644 index ec266374..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduCp-template.yml +++ /dev/null @@ -1,59 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - description: VDU Cp - properties: - vnic_name: - type: string - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - bitrate_requirement: - type: integer - vnic_order: - type: integer - vnic_type: - type: string - requirements: - - virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduVirtualstorage-template.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduVirtualstorage-template.yml deleted file mode 100644 index 566f7054..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-VduVirtualstorage-template.yml +++ /dev/null @@ -1,50 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - description: VDU VirtualStorage - properties: - vdu_storage_requirements: - type: map - entry_schema: - type: string - size_of_storage: - type: scalar-unit.size - rdma_enabled: - type: boolean - type_of_storage: - type: string - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template-interface.yml deleted file mode 100644 index 93cb070e..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template-interface.yml +++ /dev/null @@ -1,208 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.resource.vf.Vgw1181049: - derived_from: org.openecomp.resource.abstract.nodes.VF - properties: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - capabilities: - vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template.yml deleted file mode 100644 index 7063fde2..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vgw1181049-template.yml +++ /dev/null @@ -1,282 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -- resource-VNF: - file: resource-Vnf-template.yml -- resource-VnfVirtualLink: - file: resource-Vnfvirtuallink-template.yml -- resource-VDU Cp: - file: resource-VduCp-template.yml -- resource-VDU VirtualStorage: - file: resource-VduVirtualstorage-template.yml -- resource-VDU Compute: - file: resource-VduCompute-template.yml -topology_template: - inputs: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - node_templates: - LLU_VNF: - type: tosca.nodes.nfv.VNF - metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - customizationUUID: 06bffc87-30c7-42ad-b99d-19c6c13405dc - version: '1.0' - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - descriptor_id: b1bb0ce7-2222-4fa7-95ed-4840d70a1177 - provider: onap - vnfm_info: - - gvnfm - flavour_id: simple - descriptor_version: '1.0' - software_version: '1.0' - flavour_description: simple - product_name: vcpe_vgw - VL_mux_gw_private_net: - type: tosca.nodes.nfv.VnfVirtualLink - metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - customizationUUID: fbea54ef-8f8b-4f35-81d6-997a47282698 - version: '1.0' - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - vl_profile: - min_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - max_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - networkName: mux_gw_private_net_id - cidr: 192.168.0.0/24 - dhcpEnabled: false - connectivity_type: - layer_protocol: ipv4 - VDU_vgw_0: - type: tosca.nodes.nfv.Vdu.Compute - metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - customizationUUID: 93c3f2e3-67e7-4bb4-be11-8a48df924c4c - version: '1.0' - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - configurable_properties: - additional_vnfc_configurable_properties: { - } - name: vdu_vgw_0 - description: vgw - vdu_profile: - watchdog: none - min_number_of_instances: 1 - max_number_of_instances: 1 - requirements: - - virtual_storage: - capability: virtual_storage - node: VirtualStorage_root_all - capabilities: - virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": "generic", "mandatory": "false", "configurationValue": "2 MB"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - VirtualStorage_root_all: - type: tosca.nodes.nfv.Vdu.VirtualStorage - metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - customizationUUID: dc20e1ad-aed9-4154-b2b4-3a702eee49a7 - version: '1.0' - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - size_of_storage: 40 GB - type_of_storage: root - Cp_vgw_mux_gw_private_net: - type: tosca.nodes.nfv.VduCp - metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - customizationUUID: b5ff315f-effc-46e9-a0c5-aec1954845e0 - version: '1.0' - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - trunk_mode: false - protocol_data: - - asscociated_layer_protocol: ipv4 - address_data: - address_type: ip_address - l3_address_data: - fixed_ip_address: - - 192.168.0.1 - ip_address_assignment: false - floating_ip_activated: false - layer_protocol: - - ipv4 - requirements: - - virtual_link: - capability: virtual_linkable - node: VL_mux_gw_private_net - - virtual_binding: - capability: virtual_binding - node: VDU_vgw_0 - substitution_mappings: - node_type: org.openecomp.resource.vf.Vgw1181049 - capabilities: - vl_mux_gw_private_net.feature: - - vl_mux_gw_private_net - - feature - cp_vgw_mux_gw_private_net.feature: - - cp_vgw_mux_gw_private_net - - feature - vdu_vgw_0.virtual_compute: - - vdu_vgw_0 - - virtual_compute - vdu_vgw_0.virtual_binding: - - vdu_vgw_0 - - virtual_binding - virtualstorage_root_all.virtual_storage: - - virtualstorage_root_all - - virtual_storage - llu_vnf.feature: - - llu_vnf - - feature - vl_mux_gw_private_net.virtual_linkable: - - vl_mux_gw_private_net - - virtual_linkable - vl_mux_gw_private_net.monitoring_parameter: - - vl_mux_gw_private_net - - monitoring_parameter - vdu_vgw_0.monitoring_parameter: - - vdu_vgw_0 - - monitoring_parameter - virtualstorage_root_all.feature: - - virtualstorage_root_all - - feature - vdu_vgw_0.feature: - - vdu_vgw_0 - - feature - requirements: - vdu_vgw_0.virtual_storage: - - vdu_vgw_0 - - virtual_storage - vl_mux_gw_private_net.dependency: - - vl_mux_gw_private_net - - dependency - virtualstorage_root_all.dependency: - - virtualstorage_root_all - - dependency - vdu_vgw_0.dependency: - - vdu_vgw_0 - - dependency - cp_vgw_mux_gw_private_net.virtual_binding: - - cp_vgw_mux_gw_private_net - - virtual_binding - cp_vgw_mux_gw_private_net.dependency: - - cp_vgw_mux_gw_private_net - - dependency - llu_vnf.dependency: - - llu_vnf - - dependency - llu_vnf.virtual_link: - - llu_vnf - - virtual_link - cp_vgw_mux_gw_private_net.virtual_link: - - cp_vgw_mux_gw_private_net - - virtual_link diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnf-template.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnf-template.yml deleted file mode 100644 index 121aba2c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnf-template.yml +++ /dev/null @@ -1,70 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - description: VNF - properties: - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - product_info_name: - type: string - default_localization_language: - type: string - flavour_id: - type: string - flavour_description: - type: string - product_name: - type: string - descriptor_id: - type: string - product_info_description: - type: string - provider: - type: string - descriptor_version: - type: string - vnfm_info: - type: list - entry_schema: - type: string - software_version: - type: string - localization_languages: - type: list - entry_schema: - type: string - requirements: - - virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnfvirtuallink-template.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnfvirtuallink-template.yml deleted file mode 100644 index d39b1b3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/resource-Vnfvirtuallink-template.yml +++ /dev/null @@ -1,57 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - description: VnfVirtualLink - properties: - vl_profile: - type: tosca.datatypes.nfv.VlProfile - description: - type: string - test_access: - type: list - entry_schema: - type: string - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template-interface.yml deleted file mode 100644 index 45fc3065..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template-interface.yml +++ /dev/null @@ -1,176 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.service.Testns8: - derived_from: org.openecomp.resource.abstract.nodes.service - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - requirements: - - vgw11810490.llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - vgw11810490.llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template.yml b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template.yml deleted file mode 100644 index 9d9bdc3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/Definitions/service-Testns8-template.yml +++ /dev/null @@ -1,135 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 5be056bd-1ecd-4c14-9465-3bbc994190ee - UUID: 188ed3c6-1573-4b2d-9d3f-a03693bed79b - name: TestNs8 - description: test - type: Service - category: Network Service - serviceType: '' - serviceRole: '' - instantiationType: A-la-carte - serviceEcompNaming: true - ecompGeneratedNaming: true - namingPolicy: '' - environmentContext: General_Revenue-Bearing -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- service-TestNs8-interface: - file: service-Testns8-template-interface.yml -- resource-vgw1181049: - file: resource-Vgw1181049-template.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -topology_template: - node_templates: - vgw1181049 0: - type: org.openecomp.resource.vf.Vgw1181049 - metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - customizationUUID: 32efc3ac-6fd2-4cda-9f15-592e54f41560 - version: '1.0' - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' - properties: - nf_naming: - ecomp_generated_naming: true - multi_stage_design: false - availability_zone_max_count: 1 - capabilities: - vdu_vgw_0.virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform": - "generic","mandatory": "true", "configurationValue": "1024"}' - memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": - "generic", "mandatory": "true", "configurationValue": "2 MB"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - substitution_mappings: - node_type: org.openecomp.service.Testns8 - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - - vgw11810490 - - virtualstorage_root_all.virtual_storage - vgw11810490.llu_vnf.feature: - - vgw11810490 - - llu_vnf.feature - vgw11810490.vdu_vgw_0.monitoring_parameter: - - vgw11810490 - - vdu_vgw_0.monitoring_parameter - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - - vgw11810490 - - vl_mux_gw_private_net.monitoring_parameter - vgw11810490.cp_vgw_mux_gw_private_net.feature: - - vgw11810490 - - cp_vgw_mux_gw_private_net.feature - vgw11810490.vl_mux_gw_private_net.feature: - - vgw11810490 - - vl_mux_gw_private_net.feature - vgw11810490.vdu_vgw_0.feature: - - vgw11810490 - - vdu_vgw_0.feature - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - - vgw11810490 - - vl_mux_gw_private_net.virtual_linkable - vgw11810490.vdu_vgw_0.virtual_binding: - - vgw11810490 - - vdu_vgw_0.virtual_binding - vgw11810490.virtualstorage_root_all.feature: - - vgw11810490 - - virtualstorage_root_all.feature - vgw11810490.vdu_vgw_0.virtual_compute: - - vgw11810490 - - vdu_vgw_0.virtual_compute - requirements: - vgw11810490.vdu_vgw_0.virtual_storage: - - vgw11810490 - - vdu_vgw_0.virtual_storage - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_link - vgw11810490.llu_vnf.dependency: - - vgw11810490 - - llu_vnf.dependency - vgw11810490.virtualstorage_root_all.dependency: - - vgw11810490 - - virtualstorage_root_all.dependency - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - - vgw11810490 - - cp_vgw_mux_gw_private_net.dependency - vgw11810490.llu_vnf.virtual_link: - - vgw11810490 - - llu_vnf.virtual_link - vgw11810490.vl_mux_gw_private_net.dependency: - - vgw11810490 - - vl_mux_gw_private_net.dependency - vgw11810490.vdu_vgw_0.dependency: - - vgw11810490 - - vdu_vgw_0.dependency - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_binding diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/TOSCA-Metadata/TOSCA.meta b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/TOSCA-Metadata/TOSCA.meta deleted file mode 100644 index e65ed508..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,7 +0,0 @@ -TOSCA-Meta-File-Version: 1.0 -CSAR-Version: 1.1 -Created-By: Carlos Santana -Entry-Definitions: Definitions/service-Testns8-template.yml - -Name: csar.meta -Content-Type: text/plain diff --git a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/csar.meta b/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/csar.meta deleted file mode 100644 index bc3359ce..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/memoryPageSize/csar.meta +++ /dev/null @@ -1,2 +0,0 @@ -SDC-TOSCA-Meta-File-Version: 1.0 -SDC-TOSCA-Definitions-Version: 9.0 diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa deleted file mode 100644 index 60597577..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxsekiqwLgs9VfChnr2bnpLC3VqD1iT+s969vWe05j1RDozPu -zyD3krNgVUcd65x2QQJWrDK2fnyQUtubbPb3wviLXs0Gof4a/b65JsMQkeeC2/OK -aFvrE6D3heouXmWO1vo1iXy2hUhcfXdr6eM3rP3zpU9zb2Al25/90Ha8kKBpe1RS -PKHpmcqVXIpGVxJSXnioAFXUsJ687qrTv7Zm13AHkm2L1Y5IvMsGHLFjFTGFlFoY -ftQQAepF507CFqs66tD378vvNVg8LYqrKpnfdx2PIRNLHAa1xQWc0EvwGHyBQZRL -hTXS3M3IZ7Y22dJ+3Zg15PMx7QmWDZO5MG/JPwIDAQABAoIBAE5KS1AiutXmezDP -aSb4TLvcrhj8hDhuT92txxmQCV+ePJWG2sPRpDCvXX246NvnX9vy49gmkSH4RY+c -1vZvvt2XrqzD65zZzB+sgpf1tA0DNdMTdKvtqASvHU4tEd4z+bJKEdP4vpp4CZWQ -93vC9ia4TsIJLNns8Hwz42+7lEEResKYZA2djGnzHl+83vR1dm0GGBD6BKR1C3Cx -HbEhqx42EV61+8nAweQNjWKxeAc2hg+H8o8qWJM1aKy0TnqW6kudOYRyYIpX0rJA -siE2HwvDA1mDd5M8ntZ/Cx0pnTc/cuZB8BQJ0jN1JXbrJGbWspBNXformw7isbyO -WIOjvEECgYEA84XKV3aPrTE2JBs5vzzs59NMPV+5frw+xzDyPxqK5Q7+jjVKDwxh -/WRatCaTdRxhOI905HfVsDYjrsPOpmF9MHsLxmBhwk8zBFOu/xtYr7zBNkJhmCsq -kZMdxf8bpu08E7kMQJ2MvT7OhM5HRlWIUR0jdja8Hz51Ro4oOb/po7kCgYEA0Pb5 -v12ZsaSHMF0r4l983PifNwYmI22iQIEtRT2DxgTkDKgBTjbRzqZmEhaADMAO48o9 -sIZy+KJ/a8G9fPQVwMgBID8zOHnWsrFmM3qkj5hhrAQdtq7OE71zgaP0tyE1TG4u -Zs3a7eSyuoildHHFqX88oXSYsTlfV8vn23UpwLcCgYEAwXiCuBger8dQL0FeEJwz -zz5k7MG3WoPuEEzHuPC6dp8CCDM4IlqBI1JuaX/YWQtyBgCbKsQ2BigNE1THQhJj -5ndrdHCwWjKX4pElj9HHFN+OVTBJ3x40VLGfzuUNsAH8X+L9Y/yHivZyFrrXj352 -rZLL0KhNrzjs7WAVf0QEOCkCgYBe2s1xnZZnueyX+qMyBfBTChST0Jm9WUXejAS1 -un+3gn7Wc+jrzRyd9pC8wzPrFb9sjWBFYjKMRI8cpfxS3SWGtgM01Rt2FnBr+vUO -hyxt9ljX0aJ/S4hGE6h7/6XU/yEHibhMeENZ24d5/w9D9WUpVJV8IMYzJHzwCKI9 -z0hdrwKBgQDMKvY3DBpZjhZe9YnOgdj4SRpNwaasUSf3a3SZYY1JyOZVUzeSSzoX -rYLfxBRDjkJ8Nnod+nR/JSRqYa/SJYEMZEZFsC+k/pvBiaP6tk694IlpLD/2MXN6 -14FUV5LH/rGSbZJMSfZ9yNX1XZDowH8nOu+qlmlU4lmgiOuityTmtw== ------END RSA PRIVATE KEY----- diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image deleted file mode 100644 index f31d15df..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image +++ /dev/null @@ -1 +0,0 @@ -ubuntu_16.04 diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml deleted file mode 100644 index c49c2c69..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendorecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F118291.0entitlement pool12341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB39089 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml deleted file mode 100644 index db573afd..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendor2455e00dddf84eedaaed6eb412d39a7eentitlement poolecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F1182912341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB390891.0feature groupd3780d334c4c42d38c7ab1ec23a65cfd4444 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/annotations.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/annotations.yml deleted file mode 100644 index 2f146061..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/annotations.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -annotation_types: - org.openecomp.annotations.Source: - description: Indicates the origin source of an input - properties: - source_type: - type: string - vf_module_label: - type: list - description: List of VF Modules this input was originated from - entry_schema: - type: string - param_name: - type: string - description: Source parameter name diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/artifacts.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/artifacts.yml deleted file mode 100644 index 175615c7..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/artifacts.yml +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -artifact_types: - tosca.artifacts.Root: - description: This is the default (root) TOSCA Artifact Type definition that all other TOSCA base Artifact Types derive from. - tosca.artifacts.Deployment.Image: - derived_from: tosca.artifacts.Deployment - description: This artifact type represents a parent type for any "image" which is an opaque packaging of a TOSCA Node's deployment (whether real or virtual) whose contents are typically already installed and pre-configured (i.e., "stateful") and prepared to be run on a known target container. - tosca.artifacts.Implementation.Bash: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Bash script type that contains Bash commands that can be executed on the Unix Bash shell. - tosca.artifacts.Deployment.Image.VM: - derived_from: tosca.artifacts.Deployment - description: This artifact represents the parent type for all Virtual Machine (VM) image and container formatted deployment artifacts. These images contain a stateful capture of a machine (e.g., server) including operating system and installed software along with any configurations and can be run on another machine using a hypervisor which virtualizes typical server (i.e., hardware) resources. - tosca.artifacts.Implementation.Python: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Python file that contains Python language constructs that can be executed within a Python interpreter. - tosca.artifacts.Deployment: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all deployment artifacts in TOSCA. This class of artifacts typically represents a binary packaging of an application or service that is used to install/create or deploy it as part of a node's lifecycle. - tosca.artifacts.File: - derived_from: tosca.artifacts.Root - description: This artifact type is used when an artifact definition needs to have its associated file simply treated as a file and no special handling/handlers are invoked (i.e., it is not treated as either an implementation or deployment artifact type). - tosca.artifacts.Implementation: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all implementation artifacts in TOSCA. These artifacts are used to implement operations of TOSCA interfaces either directly (e.g., scripts) or indirectly (e.g., config. files). - tosca.artifacts.nfv.SwImage: - derived_from: tosca.artifacts.Deployment.Image diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/capabilities.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/capabilities.yml deleted file mode 100644 index 734c2012..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/capabilities.yml +++ /dev/null @@ -1,293 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -capability_types: - tosca.capabilities.Root: - description: The TOSCA root Capability Type all other TOSCA base Capability Types derive from - tosca.capabilities.Attachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.Node: - derived_from: tosca.capabilities.Root - tosca.capabilities.Container: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: integer - required: false - constraints: - - greater_or_equal: 1 - cpu_frequency: - type: scalar-unit.frequency - required: false - constraints: - - greater_or_equal: 0.1 GHz - disk_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - mem_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - org.openecomp.capabilities.PortMirroring: - derived_from: tosca.capabilities.Root - properties: - connection_point: - type: org.openecomp.datatypes.PortMirroringConnectionPointDescription - tosca.capabilities.Endpoint: - derived_from: tosca.capabilities.Root - properties: - protocol: - type: string - default: tcp - port: - type: PortDef - required: false - secure: - type: boolean - default: false - url_path: - type: string - required: false - port_name: - type: string - required: false - network_name: - type: string - required: false - default: PRIVATE - initiator: - type: string - default: source - constraints: - - valid_values: - - source - - target - - peer - ports: - type: map - required: false - constraints: - - min_length: 1 - entry_schema: - type: PortSpec - attributes: - ip_address: - type: string - tosca.capabilities.DatabaseEndpoint: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.Endpoint.Public: - derived_from: tosca.capabilities.Endpoint - properties: - network_name: PUBLIC - floating: - description: | - indicates that the public address should be allocated from a pool of floating IPs that are associated with the network. - type: boolean - default: false - status: experimental - dns_name: - description: The optional name to register with DNS - type: string - required: false - status: experimental - tosca.capabilities.Endpoint.Admin: - derived_from: tosca.capabilities.Endpoint - properties: - secure: true - tosca.capabilities.Endpoint.Database: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.OperatingSystem: - derived_from: tosca.capabilities.Root - properties: - architecture: - type: string - required: false - type: - type: string - required: false - distribution: - type: string - required: false - version: - type: version - required: false - tosca.capabilities.Scalable: - derived_from: tosca.capabilities.Root - properties: - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - default_instances: - type: integer - tosca.capabilities.network.Bindable: - derived_from: tosca.capabilities.Node - tosca.capabilities.Container.Docker: - derived_from: tosca.capabilities.Container - properties: - version: - type: list - required: false - entry_schema: version - publish_all: - type: boolean - default: false - required: false - publish_ports: - type: list - entry_schema: PortSpec - required: false - expose_ports: - type: list - entry_schema: PortSpec - required: false - volumes: - type: list - entry_schema: string - required: false - tosca.capabilities.network.Linkable: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.AllottedResource: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Metric: - derived_from: tosca.capabilities.Endpoint - org.openecomp.capabilities.Metric: - derived_from: tosca.capabilities.nfv.Metric - description: A node type that includes the Metric capability indicates that it can be monitored. - properties: - unit: - type: string - description: Unit of the metric value - required: true - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - status: SUPPORTED - attributes: - value: - type: string - description: Runtime monitored value - status: SUPPORTED - 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: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - org.openecomp.capabilities.Forwarder: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.VLANAssignment: - derived_from: tosca.capabilities.Root - description: ability to expose routing information of the internal network - properties: - vfc_instance_group_reference: - type: string - description: Ability to recognize capability per vfc instance group on vnf instance - required: true - org.openecomp.capabilities.RoutingConfiguration: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.FabricConfiguration: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualStorage: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualCompute: - derived_from: tosca.capabilities.Root - properties: - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - compute_requirements: - type: map - entry_schema: - type: string - required: false - requested_additional_capabilities: - type: map - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - required: false - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - tosca.capabilities.nfv.VirtualBindable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ExtVirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Forwarder: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.GuestOs: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.ImageFile: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.LocalAttachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.Compute.Container.Architecture: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: string - required: false - flavor_extra_specs: - type: map - required: false - entry_schema: - type: string - mem_size: - type: string - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/data.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/data.yml deleted file mode 100644 index 0ff71791..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/data.yml +++ /dev/null @@ -1,1733 +0,0 @@ -# -# 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_yaml_1_1 -data_types: - tosca.datatypes.Root: - description: The TOSCA root Data Type all other TOSCA base Data Types derive from - integer: - derived_from: tosca.datatypes.Root - string: - derived_from: tosca.datatypes.Root - boolean: - derived_from: tosca.datatypes.Root - float: - derived_from: tosca.datatypes.Root - list: - derived_from: tosca.datatypes.Root - map: - derived_from: tosca.datatypes.Root - json: - derived_from: tosca.datatypes.Root - scalar-unit: - derived_from: tosca.datatypes.Root - scalar-unit.size: - derived_from: scalar-unit - scalar-unit.time: - derived_from: scalar-unit - scalar-unit.frequency: - derived_from: scalar-unit - tosca.datatypes.Credential: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: false - token_type: - type: string - default: password - token: - type: string - keys: - type: map - required: false - entry_schema: - type: string - user: - type: string - required: false - org.openecomp.datatypes.PortMirroringConnectionPointDescription: - derived_from: tosca.datatypes.Root - properties: - nf_naming_code: - type: string - nfc_naming_code: - type: string - network_role: - type: string - pps_capacity: - type: string - nf_type: - type: string - description: deprecated - nfc_type: - type: string - description: deprecated - tosca.datatypes.TimeInterval: - derived_from: tosca.datatypes.Root - properties: - start_time: - type: timestamp - required: true - end_time: - type: timestamp - required: true - tosca.datatypes.network.NetworkInfo: - derived_from: tosca.datatypes.Root - properties: - network_name: - type: string - network_id: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortInfo: - derived_from: tosca.datatypes.Root - properties: - port_name: - type: string - port_id: - type: string - network_id: - type: string - mac_address: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortDef: - derived_from: integer - constraints: - - in_range: - - 1 - - 65535 - tosca.datatypes.network.PortSpec: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: true - default: tcp - constraints: - - valid_values: - - udp - - tcp - - igmp - target: - type: tosca.datatypes.network.PortDef - target_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - source: - type: tosca.datatypes.network.PortDef - source_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - org.openecomp.datatypes.heat.network.AddressPair: - derived_from: tosca.datatypes.Root - description: MAC/IP address pairs - properties: - mac_address: - type: string - description: MAC address - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.subnet.HostRoute: - derived_from: tosca.datatypes.Root - description: Host route info for the subnet - properties: - destination: - type: string - description: The destination for static route - required: false - status: SUPPORTED - nexthop: - type: string - description: The next hop for the destination - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.AllocationPool: - derived_from: tosca.datatypes.Root - description: The start and end addresses for the allocation pool - properties: - start: - type: string - description: Start address for the allocation pool - required: false - status: SUPPORTED - end: - type: string - description: End address for the allocation pool - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.Subnet: - derived_from: tosca.datatypes.Root - description: A subnet represents an IP address block that can be used for assigning IP addresses to virtual instances - properties: - tenant_id: - type: string - description: The ID of the tenant who owns the network - required: false - status: SUPPORTED - enable_dhcp: - type: boolean - description: Set to true if DHCP is enabled and false if DHCP is disabled - required: false - default: true - status: SUPPORTED - ipv6_address_mode: - type: string - description: IPv6 address mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - ipv6_ra_mode: - type: string - description: IPv6 RA (Router Advertisement) mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - allocation_pools: - type: list - description: The start and end addresses for the allocation pools - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.AllocationPool - subnetpool: - type: string - description: The name or ID of the subnet pool - required: false - status: SUPPORTED - dns_nameservers: - type: list - description: A specified set of DNS name servers to be used - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - host_routes: - type: list - description: The gateway IP address - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.subnet.HostRoute - ip_version: - type: integer - description: The gateway IP address - required: false - default: 4 - status: SUPPORTED - constraints: - - valid_values: - - '4' - - '6' - name: - type: string - description: The name of the subnet - required: false - status: SUPPORTED - prefixlen: - type: integer - description: Prefix length for subnet allocation from subnet pool - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 0 - cidr: - type: string - description: The CIDR - required: false - status: SUPPORTED - gateway_ip: - type: string - description: The gateway IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.novaServer.network.PortExtraProperties: - derived_from: tosca.datatypes.Root - description: Nova server network expand properties for port - properties: - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the port - required: false - status: SUPPORTED - mac_address: - type: string - description: MAC address to give to this port - required: false - status: SUPPORTED - admin_state_up: - type: boolean - description: The administrative state of this port - required: false - default: true - status: SUPPORTED - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this port - 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 - org.openecomp.datatypes.heat.novaServer.network.AddressInfo: - derived_from: tosca.datatypes.network.NetworkInfo - description: Network addresses with corresponding port id - properties: - port_id: - type: string - description: Port id - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.neutron.port.FixedIps: - derived_from: tosca.datatypes.Root - description: subnet/ip_address - properties: - subnet: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address desired in the subnet for this port - required: false - status: SUPPORTED - subnet_id: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.FileInfo: - derived_from: tosca.datatypes.Root - description: Heat File Info - properties: - file: - type: string - description: The required URI string (relative or absolute) which can be used to locate the file - required: true - status: SUPPORTED - file_type: - type: string - description: The type of the file - required: true - status: SUPPORTED - constraints: - - valid_values: - - base - - env - - volume - - network - org.openecomp.datatypes.heat.contrail.network.rule.PortPairs: - derived_from: tosca.datatypes.Root - description: source and destination port pairs - properties: - start_port: - type: string - description: Start port - required: false - status: SUPPORTED - end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - apply_service: - type: string - description: Service to apply - required: false - status: SUPPORTED - dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - direction: - type: string - description: Direction - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.Rule - org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork: - derived_from: tosca.datatypes.Root - description: source and destination addresses - properties: - virtual_network: - type: string - description: Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule: - derived_from: tosca.datatypes.Root - description: Rules Pairs - properties: - remote_group_id: - type: string - description: The remote group ID to be associated with this security group rule - required: false - status: SUPPORTED - protocol: - type: string - description: The protocol that is matched by the security group rule - required: false - status: SUPPORTED - constraints: - - valid_values: - - tcp - - udp - - icmp - ethertype: - type: string - description: Ethertype of the traffic - required: false - default: IPv4 - status: SUPPORTED - constraints: - - valid_values: - - IPv4 - - IPv6 - port_range_max: - type: integer - description: 'The maximum port number in the range that is matched by the - security group rule. ' - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - remote_ip_prefix: - type: string - description: The remote IP prefix (CIDR) to be associated with this security group rule - required: false - status: SUPPORTED - remote_mode: - type: string - description: Whether to specify a remote group or a remote IP prefix - required: false - default: remote_ip_prefix - status: SUPPORTED - constraints: - - valid_values: - - remote_ip_prefix - - remote_group_id - direction: - type: string - description: The direction in which the security group rule is applied - required: false - default: ingress - status: SUPPORTED - constraints: - - valid_values: - - egress - - ingress - port_range_min: - type: integer - description: The minimum port number in the range that is matched by the security group rule. - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - org.openecomp.datatypes.heat.substitution.SubstitutionFiltering: - derived_from: tosca.datatypes.Root - description: Substitution Filter - properties: - substitute_service_template: - type: string - description: Substitute Service Template - required: true - status: SUPPORTED - index_value: - type: integer - description: Index value of the substitution service template runtime instance - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - count: - type: string - description: Count - required: false - default: 1 - status: SUPPORTED - scaling_enabled: - type: boolean - description: Indicates whether service scaling is enabled - required: false - default: true - status: SUPPORTED - mandatory: - type: boolean - description: Mandatory - required: false - default: true - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence: - derived_from: tosca.datatypes.Root - description: network policy refs data sequence - properties: - network_policy_refs_data_sequence_major: - type: integer - description: Network Policy ref data sequence Major - required: false - status: SUPPORTED - network_policy_refs_data_sequence_minor: - type: integer - description: Network Policy ref data sequence Minor - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData: - derived_from: tosca.datatypes.Root - description: network policy refs data - properties: - network_policy_refs_data_sequence: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence - description: Network Policy ref data sequence - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet - properties: - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len: - type: string - description: Network ipam refs data ipam subnets ip prefix len - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix: - type: string - description: Network ipam refs data ipam subnets ip prefix - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet List - properties: - network_ipam_refs_data_ipam_subnets_subnet: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_addr_from_start: - type: string - description: Network ipam refs data ipam subnets addr from start - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data - properties: - network_ipam_refs_data_ipam_subnets: - type: list - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork: - derived_from: tosca.datatypes.Root - description: source addresses - properties: - network_policy_entries_policy_rule_src_addresses_virtual_network: - type: string - description: Source addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork: - derived_from: tosca.datatypes.Root - description: destination addresses - properties: - network_policy_entries_policy_rule_dst_addresses_virtual_network: - type: string - description: Destination addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs: - derived_from: tosca.datatypes.Root - description: destination port pairs - properties: - network_policy_entries_policy_rule_dst_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_dst_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs: - derived_from: tosca.datatypes.Root - description: source port pairs - properties: - network_policy_entries_policy_rule_src_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList: - derived_from: tosca.datatypes.Root - description: Action List - properties: - network_policy_entries_policy_rule_action_list_simple_action: - type: string - description: Simple Action - required: false - status: SUPPORTED - network_policy_entries_policy_rule_action_list_apply_service: - type: list - description: Apply Service - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - network_policy_entries_policy_rule_dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork - network_policy_entries_policy_rule_dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs - network_policy_entries_policy_rule_protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork - network_policy_entries_policy_rule_direction: - type: string - description: Direction - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs - network_policy_entries_policy_rule_action_list: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList - description: Action list - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - network_policy_entries_policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.Rule - org.openecomp.datatypes.heat.network.contrail.port.StaticRoute: - derived_from: tosca.datatypes.Root - description: static route - properties: - prefix: - type: string - description: Route prefix - required: false - status: SUPPORTED - next_hop: - type: string - description: Next hop - required: false - status: SUPPORTED - next_hop_type: - type: string - description: Next hop type - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.AddressPair: - derived_from: tosca.datatypes.Root - description: Address Pair - properties: - address_mode: - type: string - description: Address mode active-active or active-standy - required: false - status: SUPPORTED - constraints: - - valid_values: - - active-active - - active-standby - prefix: - type: string - description: IP address prefix - required: false - status: SUPPORTED - mac_address: - type: string - description: Mac address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.InterfaceData: - derived_from: tosca.datatypes.Root - description: Interface Data - 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 - 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 - ip_address: - type: string - description: IP for this interface - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Interface Properties. - properties: - virtual_machine_interface_properties_service_interface_type: - type: string - description: Service Interface Type. - required: false - status: SUPPORTED - org.openecomp.datatypes.Root: - derived_from: tosca.datatypes.Root - description: | - The ECOMP root Data Type all other Data Types derive from - properties: - supplemental_data: - type: map - entry_schema: - description: | - A placeholder for missing properties that would be included in future ecomp model versions. fromat : - type: string - org.openecomp.datatypes.AssignmentRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - is_required: - description: | - "true" indicates that assignment is required - type: boolean - default: false - required: true - count: - description: number of assignments required - type: integer - required: false - org.openecomp.datatypes.network.SubnetAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ip_network_address_plan: - type: string - required: false - description: Reference to EIPAM, VLAN or other address plan ID used to assign subnets to this network - dhcp_enabled: - type: boolean - required: false - description: \"true\" indicates the network has 1 or more policies - ip_version: - type: integer - constraints: - - valid_values: - - 4 - - 6 - required: true - description: The IP version of the subnet - cidr_mask: - type: integer - required: true - description: The default subnet CIDR mask - min_subnets_count: - type: integer - default: 1 - required: true - description: Quantity of subnets that must be initially assigned - org.openecomp.datatypes.network.IPv4SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv4: - type: boolean - required: true - description: Indicates IPv4 subnet assignments - org.openecomp.datatypes.network.IPv6SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv6: - type: boolean - required: true - description: Indicates IPv6 subnet assignments - org.openecomp.datatypes.network.NetworkAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_network_assignment: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the network assignments will be auto-generated by ECOMP \"false\" indicates operator-supplied Network assignments file upload is required (e.g. VID will present prompt to operator to upload operator-supplied Network assignments file). - is_shared_network: - type: boolean - required: true - description: \"true\" means this network is shared by multiple Openstack tenants - is_external_network: - type: boolean - required: true - default: false - description: | - \"true\" means this Contrail external network - ipv4_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv4SubnetAssignments - required: true - description: IPv4 defualt subnet assignments - ipv6_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv6SubnetAssignments - required: true - description: IPv6 defualt subnet assignments - related_networks: - type: list - required: false - description: Related Networks List. - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - is_trunked: - type: boolean - required: true - description: \"true\" indicates that network is trunked - default: false - org.openecomp.datatypes.network.ProviderNetwork: - derived_from: org.openecomp.datatypes.Root - properties: - is_provider_network: - type: boolean - required: true - description: \"true\" indicates that this a Neutron provider type of network - physical_network_name: - type: string - required: false - constraints: - - valid_values: - - Physnet41 - - Physnet42 - - Physnet43 - - Physnet44 - - Physnet21 - - Physnet22 - - sriovnet1 - - sriovnet2 - - oam - description: | - Identifies the NUMA processor cluster to which this physical network interface belongs. NUMA instance correlates to the first digit of the Physical Network Name suffix (e.g. \"01\" = NUMA 0, \"11\" = NUMA 1) - numa: - type: string - required: false - constraints: - - valid_values: - - NUMA 0 - - NUMA 1 - description: | - PNIC instance within the NUMA processor cluster PNIC Instance correlates to the second digit of the Physical Network Name suffix (e.g. "01" = PNIC 1, "02" = "PNIC 2) - pnic_instance: - type: integer - required: false - description: PNIC instance within the NUMA processor cluster - org.openecomp.datatypes.network.NetworkFlows: - derived_from: org.openecomp.datatypes.Root - properties: - is_network_policy: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more policies - network_policy: - type: string - required: false - description: 'Identifies the specific Cloud network policy that must be applied - to this network (source: from Policy Manager).' - is_bound_to_vpn: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more vpn bindings - vpn_binding: - type: string - required: false - description: 'Identifies the specific VPN Binding entry in A&AI that must - be applied when creating this network (source: A&AI)' - org.openecomp.datatypes.network.VlanRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - vlan_range_plan: - type: string - required: true - description: reference to a vlan range plan - vlan_type: - type: string - required: true - constraints: - - valid_values: - - c-tag - - s-tag - description: identifies the vlan type (e.g., c-tag) - vlan_count: - type: integer - required: true - description: identifies the number of vlan tags to assign to the CP from the plan - org.openecomp.datatypes.network.IpRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - ip_version: - type: integer - required: true - constraints: - - valid_values: - - 4 - - 6 - ip_count: - description: identifies the number of ip address to assign to the CP from the plan - type: integer - required: false - floating_ip_count: - type: integer - required: false - subnet_role: - type: string - required: false - assingment_method: - type: string - required: true - constraints: - - valid_values: - - fixed - - dhcp - dhcp_enabled: - type: boolean - required: false - ip_count_required: - description: identifies the number of ip address to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - required: false - floating_ip_count_required: - type: org.openecomp.datatypes.AssignmentRequirements - required: false - ip_address_plan_name: - type: string - required: false - vrf_name: - type: string - required: false - org.openecomp.datatypes.network.MacAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - type: string - required: true - description: reference to a MAC address range plan - mac_count: - type: integer - required: true - description: identifies the number of MAC addresses to assign to the CP from the plan - org.openecomp.datatypes.EcompHoming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_selected_instance_node_target: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the target deployment node for this instance will be auto-selected by ECOMP \"false\" indicates operator-supplied instance target deployment node required (e.g. VID will present a prompt to operator and collect the operator-selected target node for the deployment of this Network instance). - homing_policy: - type: string - required: false - description: Referenc to a service level homing policy that ECOMP will use for instance deployment target node - instance_node_target: - type: string - required: false - description: Instance target deployment node - org.openecomp.datatypes.EcompNaming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - type: boolean - required: true - default: true - description: | - \"true\" indicates that the name for the instance will be auto-generated by ECOMP. \"false\" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - naming_policy: - type: string - required: false - description: Referenc to naming policy that ECOMP will use when the name is auto-generated - org.openecomp.datatypes.network.MacRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - description: reference to a MAC address range plan - type: string - required: false - mac_count: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: integer - required: false - mac_count_required: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair IP. - properties: - ip_prefix: - type: string - description: IP Prefix. - required: false - status: SUPPORTED - ip_prefix_len: - type: integer - description: IP Prefix Len. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Mac Address. - properties: - mac_address: - type: list - description: Mac Addresses List. - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface VLAN Properties. - properties: - sub_interface_vlan_tag: - type: string - description: Sub Interface VLAN Tag. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair. - properties: - address_mode: - type: string - description: Address Mode. - required: false - status: SUPPORTED - ip: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp - description: IP. - required: false - status: SUPPORTED - mac: - type: string - description: Mac. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pairs. - properties: - allowed_address_pair: - type: list - description: Addresses pair List. - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair - org.openecomp.datatypes.Naming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - description: | - "true" indicates that the name for the instance will be auto-generated by ECOMP. "false" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: boolean - default: true - required: true - naming_policy: - description: Reference to naming policy that ECOMP will use when the name is auto-generated - type: string - required: false - instance_name: - description: indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: string - required: false - org.openecomp.datatypes.flavors.ComputeFlavor: - derived_from: tosca.datatypes.Root - properties: - num_cpus: - type: integer - disk_size: - type: scalar-unit.size - mem_size: - type: scalar-unit.size - org.openecomp.datatypes.flavors.LicenseFlavor: - derived_from: tosca.datatypes.Root - properties: - feature_group_uuid: - type: string - org.openecomp.datatypes.flavors.VendorInfo: - derived_from: tosca.datatypes.Root - properties: - manufacturer_reference_number: - type: string - vendor_model: - type: string - org.openecomp.datatypes.flavors.DeploymentFlavor: - derived_from: tosca.datatypes.Root - properties: - sp_part_number: - type: string - vendor_info: - type: org.openecomp.datatypes.flavors.VendorInfo - compute_flavor: - type: org.openecomp.datatypes.flavors.ComputeFlavor - license_flavor: - type: org.openecomp.datatypes.flavors.LicenseFlavor - required: false - org.openecomp.datatypes.ImageInfo: - derived_from: tosca.datatypes.Root - properties: - software_version: - type: string - file_name: - type: string - file_hash: - type: string - description: checksum/signature - file_hash_type: - type: string - required: false - default: md5 - org.openecomp.datatypes.network.RelatedNetworksAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - related_network_role: - type: string - description: The network role of the related network, sharing provider network. - required: false - tosca.datatypes.nfv.VnfcConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - additional_vnfc_configurable_properties: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.RequestedAdditionalCapability: - derived_from: tosca.datatypes.Root - properties: - support_mandatory: - type: boolean - required: true - min_requested_additional_capability_version: - type: string - required: false - preferred_requested_additional_capability_version: - type: string - required: false - requested_additional_capability_name: - type: string - required: true - target_performance_parameters: - type: map - entry_schema: - type: string - required: true - tosca.datatypes.nfv.VirtualMemory: - derived_from: tosca.datatypes.Root - properties: - virtual_mem_size: - type: scalar-unit.size - required: true - virtual_mem_oversubscription_policy: - type: string - required: false - vdu_memory_requirements: - type: map - entry_schema: - type: string - required: false - numa_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VirtualCpuPinning: - derived_from: tosca.datatypes.Root - properties: - cpu_pinning_policy: - type: string - constraints: - - valid_values: - - static - - dynamic - required: false - cpu_pinning_map: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualCpu: - derived_from: tosca.datatypes.Root - properties: - cpu_architecture: - type: string - required: false - num_virtual_cpu: - type: integer - required: true - virtual_cpu_clock: - type: scalar-unit.frequency - required: false - virtual_cpu_oversubscription_policy: - type: string - required: false - vdu_cpu_requirements: - type: map - entry_schema: - type: string - required: false - virtual_cpu_pinning: - type: tosca.datatypes.nfv.VirtualCpuPinning - required: false - tosca.datatypes.nfv.LogicalNodeData: - derived_from: tosca.datatypes.Root - properties: - logical_node_requirements: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: false - description: - type: string - required: false - support_mandatory: - type: boolean - required: true - requirement: - type: string - required: false - network_interface_requirements: - type: map - entry_schema: - type: string - required: true - nic_io_requirements: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - tosca.datatypes.nfv.injectFile: - derived_from: tosca.datatypes.Root - properties: - source_path: - type: string - required: true - dest_path: - type: string - required: true - tosca.datatypes.nfv.L2AddressData: - derived_from: tosca.datatypes.Root - properties: - mac_address_assignment: - type: boolean - required: true - address: - type: string - required: false - tosca.datatypes.nfv.L3AddressData: - derived_from: tosca.datatypes.Root - properties: - ip_address_assignment: - type: boolean - required: true - floating_ip_activated: - type: boolean - required: true - ip_address_type: - type: string - required: false - constraints: - - valid_values: - - ipv4 - - ipv6 - number_of_ip_address: - type: integer - required: false - fixed_ip_address: - type: list - entry_schema: - type: string - required: false - tosca.datatypes.nfv.AddressData: - properties: - address_type: - constraints: - - valid_values: - - mac_address - - ip_address - type: string - required: true - l2_address_data: - required: false - type: tosca.datatypes.nfv.L2AddressData - l3_address_data: - required: false - type: tosca.datatypes.nfv.L3AddressData - tosca.datatypes.nfv.ConnectivityType: - derived_from: tosca.datatypes.Root - properties: - layer_protocol: - type: string - required: true - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - flow_pattern: - type: string - required: false - constraints: - - valid_values: - - Line - - Tree - - Mesh - tosca.datatypes.nfv.VlFlavour: - derived_from: tosca.datatypes.Root - properties: - flavourId: - type: string - tosca.datatypes.nfv.ext.AddressPairs: - properties: - ip: - type: string - required: false - mac: - type: string - required: false - tosca.datatypes.nfv.ext.FloatingIP: - properties: - external_network: - type: string - required: false - ip_address: - type: string - required: false - tosca.datatypes.nfv.ext.LocationInfo: - properties: - availability_zone: - type: string - required: false - vimid: - type: integer - required: false - tenant: - type: string - required: false - tosca.datatypes.nfv.ext.HostRouteInfo: - properties: - destination: - type: string - required: false - nexthop: - type: string - required: false - tosca.datatypes.nfv.ext.InjectData: - properties: - file_name: - type: string - required: false - file_data: - type: string - required: false - tosca.datatypes.nfv.ext.zte.WatchDog: - properties: - enable_delay: - type: integer - required: false - action: - type: string - required: false - tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule: - properties: - scope: - type: string - required: false - affinity_antiaffinity: - type: string - required: false - tosca.datatypes.nfv.VduProfile: - derived_from: tosca.datatypes.Root - properties: - min_number_of_instances: - type: integer - required: true - max_number_of_instances: - type: integer - required: true - watchdog: - type: string - required: true - vmBootUpTimeOut: - type: integer - required: false - tosca.datatypes.nfv.LinkBitRateRequirements: - derived_from: tosca.datatypes.Root - properties: - root: - type: integer - required: true - leaf: - type: integer - required: true - tosca.datatypes.nfv.Qos: - derived_from: tosca.datatypes.Root - properties: - latency: - type: integer - required: true - packet_delay_variation: - type: integer - required: true - packet_loss_ratio: - type: float - constraints: - - in_range: - - 0.0 - - 1.0 - required: false - tosca.datatypes.nfv.VlProfile: - derived_from: tosca.datatypes.Root - properties: - max_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - min_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - qos: - type: tosca.datatypes.nfv.Qos - required: false - initiationParameters: - type: map - entry_schema: - type: string - required: false - cidr: - type: string - required: false - networkName: - type: string - required: false - startIp: - type: string - required: false - endIp: - type: string - required: false - gatewayIp: - type: string - required: false - segmentationId: - type: integer - required: false - physicalNetwork: - type: string - required: false - networkType: - type: string - required: false - constraints: - - valid_values: - - VLAN - - VXLAN - dhcpEnabled: - type: boolean - required: false - vlanTransparent: - type: boolean - required: false - tosca.datatypes.nfv.VduLevel: - derived_from: tosca.datatypes.Root - properties: - number_of_instances: - type: integer - required: true - tosca.datatypes.nfv.ScaleInfo: - derived_from: tosca.datatypes.Root - properties: - scaleLevel: - type: integer - required: true - tosca.datatypes.nfv.ScaleAspect: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - associated_group: - type: string - required: false - max_scale_level: - type: integer - required: true - tosca.datatypes.nfv.InstantiationLevel: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: true - vdu_levels: - type: map - required: true - entry_schema: - type: tosca.datatypes.nfv.VduLevel - scale_info: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.ScaleInfo - tosca.datatypes.nfv.VnfScaleOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - scaling_by_more_than_one_step_supported: - type: boolean - tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - arbitrary_target_levels_supported: - type: boolean - tosca.datatypes.nfv.VnfHealOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - causes: - type: list - entry_schema: - type: string - tosca.datatypes.nfv.VnfTerminateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfOperateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfLcmOperationsConfiguration: - derived_from: tosca.datatypes.Root - properties: - scale: - type: tosca.datatypes.nfv.VnfScaleOperationConfiguration - scale_to_level: - type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration - heal: - type: tosca.datatypes.nfv.VnfHealOperationConfiguration - terminate: - type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration - operate: - type: tosca.datatypes.nfv.VnfOperateOperationConfiguration - tosca.datatypes.nfv.CpProtocolData: - derived_from: tosca.datatypes.Root - properties: - asscociated_layer_protocol: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo-wire - required: true - address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.datatypes.nfv.VnfConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - is_autoscale_enabled: - type: boolean - required: false - is_autoheal_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributes: - derived_from: tosca.datatypes.Root - properties: - extensions: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions - required: false - metadata: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/groups.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/groups.yml deleted file mode 100644 index f8be60db..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/groups.yml +++ /dev/null @@ -1,133 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -group_types: - tosca.groups.Root: - description: The TOSCA Group Type all other TOSCA Group Types derive from - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - org.openecomp.groups.heat.HeatStack: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same heat stack - properties: - heat_file: - type: string - description: Heat file which associate to this group/heat stack - required: true - status: SUPPORTED - description: - type: string - description: group description - required: true - status: SUPPORTED - org.openecomp.groups.VfModule: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same VF Module - properties: - isBase: - type: boolean - description: Whether this module should be deployed before other modules - required: true - default: false - status: SUPPORTED - vf_module_label: - type: string - required: true - description: | - Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model - vf_module_description: - type: string - required: true - description: | - Description of the VF-modules contents and purpose (e.g. "Front-End" or "Database Cluster") - min_vf_module_instances: - type: integer - required: true - description: The minimum instances of this VF-Module - max_vf_module_instances: - type: integer - required: false - description: The maximum instances of this VF-Module - initial_count: - type: integer - required: false - description: | - The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances. - vf_module_type: - type: string - required: true - constraint: - - valid_values: - - Base - - Expansion - volume_group: - type: boolean - required: true - default: false - description: | - "true" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time. - availability_zone_count: - type: integer - required: false - description: | - Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template) - vfc_list: - type: map - entry_schema: - description: : - type: string - required: false - description: | - Identifies the set of VM types and their count included in the VF-Module - org.openecomp.groups.NetworkCollection: - derived_from: tosca.groups.Root - description: groups l3-networks in network collection - properties: - network_collection_function: - type: string - required: true - description: network collection function - network_collection_description: - type: string - required: true - description: network collection description, free format text - org.openecomp.groups.VfcInstanceGroup: - derived_from: tosca.groups.Root - description: groups VFCs with same parent port role - properties: - vfc_instance_group_function: - type: string - required: true - description: function of this VFC group - vfc_parent_port_role: - type: string - required: true - description: common role of parent ports of VFCs in this group - network_collection_function: - type: string - required: true - description: network collection function assigned to this group - subinterface_role: - type: string - required: true - description: common role of subinterfaces of VFCs in this group, criteria the group is created - capabilities: - vlan_assignment: - type: org.openecomp.capabilities.VLANAssignment - properties: - vfc_instance_group_reference: - type: string diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/interfaces.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/interfaces.yml deleted file mode 100644 index a11c7169..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/interfaces.yml +++ /dev/null @@ -1,83 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -interface_types: - tosca.interfaces.nfv.vnf.lifecycle.Nfv: - instantiate: - description: Invoked upon receipt of an Instantiate VNF request - instantiate_start: - description: Invoked before instantiate - instantiate_end: - description: Invoked after instantiate - terminate: - description: Invoked upon receipt Terminate VNF request - terminate_start: - description: Invoked before terminate - terminate_end: - description: Invoked after terminate - modify_information: - description: Invoked upon receipt of a Modify VNF Information request - modify_information_start: - description: Invoked before modify_information - modify_information_end: - description: Invoked after modify_information - change_flavour: - description: Invoked upon receipt of a Change VNF Flavour request - change_flavour_start: - description: Invoked before change_flavour - change_flavour_end: - description: Invoked after change_flavour - change_external_connectivity: - description: Invoked upon receipt of a Change External VNF Connectivity request - change_external_connectivity_start: - description: Invoked before change_external_connectivity - change_external_connectivity_end: - description: Invoked after change_external_connectivity - operate: - description: Invoked upon receipt of an Operate VNF request - operate_start: - description: Invoked before operate - operate_end: - description: Invoked after operate - heal: - description: Invoked upon receipt of a Heal VNF request - heal_start: - description: Invoked before heal - heal_end: - description: Invoked after heal - scale: - description: Invoked upon receipt of a Scale VNF request - scale_start: - description: Invoked before scale - scale_end: - description: Invoked after scale - scale_to_level: - description: Invoked upon receipt of a Scale VNF to Level request - scale_to_level_start: - description: Invoked before scale_to_level - scale_to_level_end: - description: Invoked after scale_to_level - tosca.interfaces.node.lifecycle.Standard: - create: - description: Standard lifecycle create operation. - configure: - description: Standard lifecycle configure operation. - start: - description: Standard lifecycle start operation. - stop: - description: Standard lifecycle stop operation. - delete: - description: Standard lifecycle delete operation. diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/nodes.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/nodes.yml deleted file mode 100644 index 62d77f4c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/nodes.yml +++ /dev/null @@ -1,4781 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -- artifacts.yml -- capabilities.yml -- interfaces.yml -- relationships.yml -node_types: - tosca.nodes.BlockStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 1 MB - volume_id: - type: string - required: false - snapshot_id: - type: string - required: false - capabilities: - attachment: - type: tosca.capabilities.Attachment - tosca.nodes.WebApplication: - derived_from: tosca.nodes.Root - properties: - context_root: - type: string - capabilities: - app_endpoint: - type: tosca.capabilities.Endpoint - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.WebServer - relationship: tosca.relationships.HostedOn - tosca.nodes.Database: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: the logical name of the database - port: - type: integer - description: the port the underlying database service will listen to for data - user: - type: string - description: the optional user account name for DB administration - required: false - password: - type: string - description: the optional password for the DB user account - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.DBMS - relationship: tosca.relationships.HostedOn - capabilities: - database_endpoint: - type: tosca.capabilities.Endpoint.Database - tosca.nodes.Container.Runtime: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - host: - type: tosca.capabilities.Container - scalable: - type: tosca.capabilities.Scalable - tosca.nodes.network.Port: - derived_from: tosca.nodes.Root - properties: - ip_address: - type: string - required: false - order: - type: integer - required: true - default: 0 - constraints: - - greater_or_equal: 0 - is_default: - type: boolean - required: false - default: false - ip_range_start: - type: string - required: false - ip_range_end: - type: string - required: false - requirements: - - link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - tosca.nodes.Root: - description: The TOSCA Node Type all other TOSCA base Node Types derive from - attributes: - tosca_id: - type: string - tosca_name: - type: string - state: - type: string - capabilities: - feature: - type: tosca.capabilities.Node - requirements: - - dependency: - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - occurrences: - - 0 - - UNBOUNDED - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - tosca.nodes.network.Network: - derived_from: tosca.nodes.Root - properties: - ip_version: - type: integer - required: false - default: 4 - constraints: - - valid_values: - - 4 - - 6 - cidr: - type: string - required: false - start_ip: - type: string - required: false - end_ip: - type: string - required: false - gateway_ip: - type: string - required: false - network_name: - type: string - required: false - network_id: - type: string - required: false - segmentation_id: - type: string - required: false - network_type: - type: string - required: false - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - default: true - capabilities: - link: - type: tosca.capabilities.network.Linkable - tosca.nodes.Compute: - derived_from: tosca.nodes.Root - attributes: - private_address: - type: string - public_address: - type: string - networks: - type: map - entry_schema: - type: tosca.datatypes.network.NetworkInfo - ports: - type: map - entry_schema: - type: tosca.datatypes.network.PortInfo - requirements: - - local_storage: - capability: tosca.capabilities.Attachment - node: tosca.nodes.BlockStorage - relationship: tosca.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.SoftwareComponent - endpoint: - type: tosca.capabilities.Endpoint.Admin - os: - type: tosca.capabilities.OperatingSystem - scalable: - type: tosca.capabilities.Scalable - binding: - type: tosca.capabilities.network.Bindable - tosca.nodes.LoadBalancer: - derived_from: tosca.nodes.Root - properties: - algorithm: - type: string - required: false - status: experimental - capabilities: - client: - type: tosca.capabilities.Endpoint.Public - occurrences: - - 0 - - UNBOUNDED - description: the Floating (IP) client’s on the public network can connect to - requirements: - - application: - capability: tosca.capabilities.Endpoint - relationship: tosca.relationships.RoutesTo - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.DBMS: - derived_from: tosca.nodes.SoftwareComponent - properties: - root_password: - type: string - required: false - description: the optional root password for the DBMS service - port: - type: integer - required: false - description: the port the DBMS service will listen to for data and requests - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.Database - tosca.nodes.WebServer: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - data_endpoint: tosca.capabilities.Endpoint - admin_endpoint: tosca.capabilities.Endpoint.Admin - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.WebApplication - tosca.nodes.Container.Application: - derived_from: tosca.nodes.Root - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Container - relationship: tosca.relationships.HostedOn - tosca.nodes.SoftwareComponent: - derived_from: tosca.nodes.Root - properties: - component_version: - type: version - required: false - admin_credential: - type: tosca.datatypes.Credential - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.ObjectStorage: - derived_from: tosca.nodes.Root - properties: - name: - type: string - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - maxsize: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - capabilities: - storage_endpoint: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.ServiceProxy: - derived_from: tosca.nodes.Root - org.openecomp.resource.vfc.rules.nodes.heat.network.contrailV2.NetworkRules: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - network_policy_entries: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - shared: - type: string - description: Is virtual network shared - required: false - status: SUPPORTED - forwarding_mode: - type: string - description: forwarding mode of the virtual network - required: false - status: SUPPORTED - external: - type: string - description: Is virtual network external - required: false - status: SUPPORTED - allow_transit: - type: string - description: Whether this network should be transitive. - required: false - status: SUPPORTED - flood_unknown_unicast: - type: string - description: flood L2 packets on network - required: false - status: SUPPORTED - route_targets: - type: list - description: route targets associated with the virtual network - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - 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 - org.openecomp.resource.abstract.nodes.service: - derived_from: tosca.nodes.Root - org.openecomp.resource.cp.v2.extVirtualMachineInterfaceCP: - derived_from: org.openecomp.resource.cp.v2.extCP - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.v2.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.vfc.nodes.volume: - derived_from: tosca.nodes.BlockStorage - org.openecomp.nodes.VLANNetworkReceptor: - derived_from: tosca.nodes.Root - capabilities: - routing_configuration_internal: - type: org.openecomp.capabilities.RoutingConfiguration - requirements: - - vlan_assignment: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.VLANAssignment - relationship: org.openecomp.relationships.AssignsTo - org.openecomp.resource.vl.nodes.heat.network.neutron.Net: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - dhcp_agent_ids: - type: list - description: The IDs of the DHCP agent to schedule the network - required: false - status: SUPPORTED - entry_schema: - type: string - tenant_id: - type: string - description: The ID of the tenant which will own the network - required: false - status: SUPPORTED - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the network - required: false - status: SUPPORTED - shared: - type: boolean - description: Whether this network should be shared across all tenants - required: false - default: 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 - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this network - required: false - status: SUPPORTED - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - attributes: - 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_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - mtu: - type: scalar-unit.size - description: The maximum transmission unit size(in bytes) for the network - status: SUPPORTED - status: - type: string - description: The status of the network - status: SUPPORTED - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.nova.Server: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - admin_pass: - type: string - description: The administrator password for the server - required: false - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - image: - type: string - description: The ID or name of the image to boot with - required: false - status: SUPPORTED - image_update_policy: - type: string - description: Policy on how to apply an image-id update - required: false - default: REBUILD - status: SUPPORTED - constraints: - - valid_values: - - REBUILD_PRESERVE_EPHEMERAL - - REPLACE - - REBUILD - metadata: - type: json - description: Arbitrary JSON metadata to store for this server - required: false - status: SUPPORTED - contrail_service_instance_ind: - type: boolean - description: Nova server related to service instance indicator - required: false - default: false - status: SUPPORTED - user_data_update_policy: - type: string - description: Policy on how to apply a user_data update - required: false - default: REPLACE - status: SUPPORTED - constraints: - - valid_values: - - REPLACE - - IGNORE - flavor_update_policy: - type: string - description: Policy on how to apply a flavor update - required: false - default: RESIZE - status: SUPPORTED - constraints: - - valid_values: - - RESIZE - - REPLACE - user_data: - type: string - description: User data script to be executed by cloud-init - required: false - default: '' - status: SUPPORTED - flavor: - type: string - description: The ID or name of the flavor to boot onto - required: true - status: SUPPORTED - key_name: - type: string - description: Name of keypair to inject into the server - required: false - status: SUPPORTED - reservation_id: - type: string - description: A UUID for the set of servers being requested - required: false - status: SUPPORTED - security_groups: - type: list - description: List of security group names or IDs - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - config_drive: - type: boolean - description: enable config drive on the server - required: false - status: SUPPORTED - personality: - type: map - description: A map of files to create/overwrite on the server upon boot - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - software_config_transport: - type: string - description: How the server should receive the metadata required for software configuration - required: false - default: POLL_SERVER_CFN - status: SUPPORTED - constraints: - - valid_values: - - POLL_SERVER_CFN - - POLL_SERVER_HEAT - - POLL_TEMP_URL - - ZAQAR_MESSAGE - user_data_format: - type: string - description: How the user_data should be formatted for the server - required: false - default: HEAT_CFNTOOLS - status: SUPPORTED - constraints: - - valid_values: - - SOFTWARE_CONFIG - - RAW - - HEAT_CFNTOOLS - diskConfig: - type: string - description: Control how the disk is partitioned when the server is created - required: false - status: SUPPORTED - constraints: - - valid_values: - - AUTO - - MANUAL - name: - type: string - description: Server name - required: false - status: SUPPORTED - scheduler_hints: - type: map - description: Arbitrary key-value pairs specified by the client to help boot a server - required: false - status: SUPPORTED - entry_schema: - type: string - attributes: - accessIPv4: - type: string - description: The manually assigned alternative public IPv4 address of the server - status: SUPPORTED - addresses: - type: map - description: A dict of all network addresses with corresponding port_id - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.novaServer.network.AddressInfo - accessIPv6: - type: string - description: The manually assigned alternative public IPv6 address of the server - status: SUPPORTED - instance_name: - type: string - description: AWS compatible instance name - status: SUPPORTED - name: - type: string - description: Name of the server - status: SUPPORTED - show: - type: string - description: Detailed information about resource - status: SUPPORTED - console_urls: - type: string - description: URLs of servers consoles - status: SUPPORTED - org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules: - derived_from: tosca.nodes.Root - properties: - description: - type: string - description: Description of the security group - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this security group, which is not required to be unique. - required: false - status: SUPPORTED - rules: - type: list - description: List of security group rules - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule - attributes: - show: - type: string - description: Detailed information about resource - status: SUPPORTED - requirements: - - port: - capability: tosca.capabilities.Attachment - node: org.openecomp.resource.cp.nodes.heat.network.neutron.Port - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.cinder.Volume: - derived_from: org.openecomp.resource.vfc.nodes.volume - properties: - availability_zone: - description: The availability zone in which the volume will be created - type: string - status: SUPPORTED - required: false - image: - description: If specified, the name or ID of the image to create the volume from - type: string - status: SUPPORTED - required: false - metadata: - description: Key/value pairs to associate with the volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - volume_type: - description: If specified, the type of volume to use, mapping to a specific backend - type: string - status: SUPPORTED - required: false - description: - description: A description of the volume - type: string - status: SUPPORTED - required: false - device_type: - description: Device type - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - cdrom - - disk - disk_bus: - description: 'Bus of the device: hypervisor driver chooses a suitable default - if omitted' - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - ide - - lame_bus - - scsi - - usb - - virtio - backup_id: - description: If specified, the backup to create the volume from - type: string - status: SUPPORTED - required: false - source_volid: - description: If specified, the volume to use as source - type: string - status: SUPPORTED - required: false - boot_index: - description: Integer used for ordering the boot disks - type: integer - status: SUPPORTED - required: false - size: - description: The requested storage size (default unit is MB) - type: scalar-unit.size - status: SUPPORTED - required: false - constraints: - - greater_or_equal: 1 GB - read_only: - description: Enables or disables read-only access mode of volume - type: boolean - status: SUPPORTED - required: false - name: - description: A name used to distinguish the volume - type: string - status: SUPPORTED - required: false - scheduler_hints: - description: Arbitrary key-value pairs specified by the client to help the Cinder scheduler creating a volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - swap_size: - description: The size of the swap, in MB - type: scalar-unit.size - status: SUPPORTED - required: false - delete_on_termination: - description: Indicate whether the volume should be deleted when the server is terminated - type: boolean - status: SUPPORTED - required: false - multiattach: - description: Whether allow the volume to be attached more than once - type: boolean - status: SUPPORTED - required: false - attributes: - display_description: - description: Description of the volume - type: string - status: SUPPORTED - attachments: - description: The list of attachments of the volume - type: string - status: SUPPORTED - entry_schema: - type: string - encrypted: - description: Boolean indicating if the volume is encrypted or not - type: boolean - status: SUPPORTED - show: - description: Detailed information about resource - type: string - status: SUPPORTED - created_at: - description: The timestamp indicating volume creation - type: timestamp - status: SUPPORTED - display_name: - description: Name of the volume - type: string - status: SUPPORTED - metadata_values: - description: Key/value pairs associated with the volume in raw dict form - type: map - status: SUPPORTED - entry_schema: - type: string - bootable: - description: Boolean indicating if the volume can be booted or not - type: boolean - status: SUPPORTED - status: - description: The current status of the volume - type: string - status: SUPPORTED - org.openecomp.resource.abstract.nodes.CR: - derived_from: tosca.nodes.Root - properties: - cr_function: - type: string - cr_role: - type: string - cr_type: - type: string - org.openecomp.resource.vl.extVL: - derived_from: tosca.nodes.Root - description: VF Tenant oam protected network - properties: - network_type: - type: string - required: true - description: ECOMP supported network types. - network_role: - type: string - required: true - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_scope: - type: string - constraints: - valid_values: - - VF - - SERVICE - - GLOBAL - 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 - network_technology: - type: string - required: true - description: ECOMP supported network technology - exVL_naming: - type: org.openecomp.datatypes.Naming - 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 - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.abstract.nodes.PNF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_type: - type: string - software_versions: - type: list - entry_schema: - type: string - org.openecomp.resource.vfc.rules.nodes.heat.network.contrail.NetworkRules: - derived_from: tosca.nodes.Root - properties: - entries: - type: org.openecomp.datatypes.heat.contrail.network.rule.RuleList - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - attributes: - tenant_id: - type: string - description: tenant_id - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - rules: - type: list - description: List of rules - status: SUPPORTED - entry_schema: - type: string - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - 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.nodes.VRFObject: - derived_from: tosca.nodes.Root - description: provides capability to connect WAN Transport Service Proxy to VRF Entry - capabilities: - routing_configuration_external: - type: org.openecomp.capabilities.RoutingConfiguration - org.openecomp.resource.abstract.nodes.VFC: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - nfc_function: - type: string - high_availablity: - type: string - description: high_availablity - required: false - status: SUPPORTED - vm_image_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - vm_flavor_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - nfc_naming_code: - type: string - description: nfc code for instance naming - required: false - status: SUPPORTED - vm_type_tag: - type: string - description: vm type based on naming Convention - required: false - status: SUPPORTED - nfc_naming: - type: org.openecomp.datatypes.Naming - description: vfc naming - min_instances: - type: integer - description: Minimum number of VFC Instances - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - max_instances: - type: integer - description: Maximum number of VFC Instances - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 1 - org.openecomp.resource.cp.nodes.heat.contrailV2.VirtualMachineInterface: - derived_from: org.openecomp.resource.cp.nodes.network.Port - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.abstract.nodes.VnfConfiguration: - derived_from: tosca.nodes.Root - properties: - allowed_flavors: - description: a collection of all flavor valuesets available for a given VFC - type: map - entry_schema: - type: org.openecomp.datatypes.flavors.DeploymentFlavor - org.openecomp.resource.vl.nodes.heat.network.contrailV2.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - network_ipam_refs_data: - type: list - description: IPAM references Data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData - network_policy_refs_data: - type: list - description: Policy references data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData - network_ipam_refs: - type: list - description: IPAM references - required: false - status: SUPPORTED - entry_schema: - type: string - network_policy_refs: - type: list - description: Policy references - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vl.internalVL: - derived_from: tosca.nodes.network.Network - description: The AT&T internal (VF-level) Virtual Link - org.openecomp.resource.vl.ELine: - derived_from: org.openecomp.resource.vl.VL - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 0 - - 2 - org.openecomp.resource.vl.VL: - derived_from: tosca.nodes.network.Network - properties: - vendor: - type: string - required: false - vl_name: - type: string - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - end_point: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.Configuration: - derived_from: tosca.nodes.Root - properties: - type: - type: string - description: The type of the node, the configuration will be defined for it. Ex. SBC - required: false - role: - type: string - description: The role of the node, the configuration will be defined for it. Ex. Active, Standby - required: false - function: - type: string - description: The function of the node, the configuration will be defined for it. Ex. NAT Traversal - required: false - org.openecomp.resource.cp.nodes.network.v2.SubInterface: - derived_from: tosca.nodes.Root - properties: - ip_address: - description: Allow the user to set a fixed IP address. Note that this address is a request to the provider which they will attempt to fulfill but may not be able to dependent on the network the port is associated with. - type: string - required: false - order: - description: 'The order of the NIC on the compute instance (e.g. eth2). Note: - when binding more than one port to a single compute (aka multi vNICs) and - ordering is desired, it is *mandatory* that all ports will be set with an - order value and. The order values must represent a positive, arithmetic - progression that starts with 0 (e.g. 0, 1, 2, ..., n).' - type: integer - default: 0 - required: false - constraints: - - greater_or_equal: 0 - is_default: - description: Set is_default=true to apply a default gateway route on the running compute instance to the associated network gateway. Only one port that is associated to single compute node can set as default=true. - type: boolean - default: false - required: false - ip_range_start: - description: Defines the starting IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - ip_range_end: - description: Defines the ending IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - attributes: - ip_address: - description: The IP address would be assigned to the associated compute instance. - type: string - requirements: - - subinterface_link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - 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.vfc.nodes.Compute: - derived_from: tosca.nodes.Compute - capabilities: - disk.ephemeral.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.ephemeral.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of ephemeral disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - instance: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: instance - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: instance - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Existence of instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu.delta: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu.delta - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used since previous datapoint - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Delta - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu_util: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: '%' - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu_util - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average CPU utilization - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.root.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.root.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of root disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - vcpus: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: vcpu - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: vcpus - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of virtual CPUs allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance from the amount of its allocated memory - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.resident: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.resident - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance on the physical machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.MultiFlavorVFC: - derived_from: org.openecomp.resource.abstract.nodes.VFC - properties: - images: - type: map - entry_schema: - type: org.openecomp.datatypes.ImageInfo - required: false - org.openecomp.nodes.PortMirroringConfigurationByPolicy: - derived_from: tosca.nodes.Root - properties: - collector_node: - type: string - description: The name of the Collector Proxy - required: true - policy_name: - type: string - description: The name of the policy for selection of the collector interfaces - required: true - equip_model: - type: string - description: The name of the equipment type of the collector, i.e. Cisco 4500x - required: true - equip_vendor: - type: string - description: The name of the equipment vendor of the collector, i.e. Cisco - required: true - requirements: - - source: - capability: org.openecomp.capabilities.PortMirroring - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.VF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_naming_code: - type: string - nf_type: - type: string - nf_naming: - type: org.openecomp.datatypes.Naming - Default: true - availability_zone_max_count: - type: integer - default: 1 - constraints: - - valid_values: - - 0 - - 1 - - 2 - min_instances: - type: integer - max_instances: - type: integer - multi_stage_design: - type: boolean - default: false - 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.nodes.ForwardingPath: - derived_from: tosca.nodes.Root - properties: - target_range: - type: list - required: true - status: SUPPORTED - 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 - required: true - status: SUPPORTED - requirements: - - forwarder: - capability: org.openecomp.capabilities.Forwarder - relationship: org.openecomp.relationships.ForwardsTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.cp.nodes.heat.network.contrail.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - org.openecomp.resource.cp.nodes.network.SubInterface: - derived_from: tosca.nodes.network.Port - org.openecomp.resource.vfc.nodes.heat.contrail.Compute: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - attributes: - tenant_id: - type: string - description: Tenant id of the VM - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of active VMs - status: SUPPORTED - virtual_machines: - type: string - description: VMs of this compute - status: SUPPORTED - status: - type: string - description: status of the compute - status: SUPPORTED - org.openecomp.resource.cp.nodes.network.Port: - derived_from: tosca.nodes.network.Port - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - 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 - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - subinterface_indicator: - description: identifies if Port is having Sub Interface - type: boolean - required: false - default: false - related_networks: - type: list - description: Related Networks List. - required: false - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - capabilities: - network.incoming.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - forwarder: - type: org.openecomp.capabilities.Forwarder - network.outgoing.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outpoing.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outpoing.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.nodes.VRFEntry: - derived_from: tosca.nodes.Root - requirements: - - routing_configuration_internal: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - - routing_configuration_external: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.cp.extCP: - derived_from: tosca.nodes.Root - description: The SDC Connection Point base type all other CP derive from - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - network_role_tag: - type: string - required: true - description: Must correlate to the set of defined “network-role” tag identifiers from the associated HEAT template - mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements - required: false - description: identifies MAC address assignments to the CP - vlan_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.VlanRequirements - required: false - description: identifies vlan address assignments to the CP - ip_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.IpRequirements - required: true - description: identifies IP requirements to the CP - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - 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 - relationship: tosca.relationships.network.LinksTo - node: org.openecomp.resource.vl.VL - capabilities: - internal_connectionPoint: - type: tosca.capabilities.Node - valid_source_type: - - tosca.nodes.network.Port - org.openecomp.nodes.FabricConfiguration: - derived_from: org.openecomp.nodes.Configuration - requirements: - - fabric_configuration_monitoring: - capability: org.openecomp.capabilities.FabricConfiguration - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.contrail.AbstractSubstitute: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - static_routes_list: - type: list - description: Static routes enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - ordered_interfaces: - type: boolean - description: Indicates if service interface are ordered - required: false - default: false - status: SUPPORTED - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - service_interface_type_list: - type: list - description: List of interface types - required: true - status: SUPPORTED - entry_schema: - type: string - constraints: - - valid_values: - - management - - left - - right - - other - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - interface_list: - type: list - description: List of interfaces - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.contrail.InterfaceData - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - shared_ip_list: - type: list - description: Shared ips enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - attributes: - tenant_id: - type: string - description: Tenant id of the Service Instance - status: SUPPORTED - fq_name: - type: string - description: The FQ name of the service instance - status: SUPPORTED - service_template_name: - type: string - description: Service Template of the Service Instance - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of service VMs active for this Service Instance - status: SUPPORTED - service_instance_name: - type: string - description: The name of the service instance - status: SUPPORTED - virtual_machines: - type: string - description: Service VMs for the Service Instance - status: SUPPORTED - status: - type: string - description: Status of the service instance - status: SUPPORTED - org.openecomp.resource.abstract.nodes.AbstractSubstitute: - derived_from: tosca.nodes.Root - properties: - service_template_filter: - type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering - description: Substitution Filter - required: true - status: SUPPORTED - org.openecomp.resource.cp.nodes.heat.network.neutron.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_profile: - type: tosca.datatypes.nfv.VlProfile - required: true - capabilities: - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.Cp: - derived_from: tosca.nodes.Root - properties: - layer_protocol: - type: list - entry_schema: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - required: true - role: - type: string - constraints: - - valid_values: - - root - - leaf - required: false - description: - type: string - required: false - protocol_data: - type: list - entry_schema: - type: tosca.datatypes.nfv.CpProtocolData - required: true - trunk_mode: - type: boolean - required: true - allowed_address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.nodes.nfv.VnfVirtualLinkDesc: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_flavours: - type: map - entry_schema: - type: tosca.datatypes.nfv.VlFlavour - required: true - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - org.openecomp.resource.vfc.AllottedResource: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - role: - type: string - required: true - description: Unique label that defines the role that this allotted resource performs - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - target_network_role: - type: string - required: true - description: Target network role - requirements: - - service_dependency: - capability: org.openecomp.capabilities.AllottedResource - relationship: tosca.relationships.DependsOn - node: tosca.services.Root - tosca.nodes.nfv.ext.zte.VDU: - derived_from: tosca.nodes.Root - properties: - manual_scale_select_vim: - type: boolean - required: false - vdu_type: - type: string - required: false - watchdog: - type: tosca.datatypes.nfv.ext.zte.WatchDog - required: false - name: - type: string - required: false - local_affinity_antiaffinity_rule: - type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule - required: false - support_scaling: - type: boolean - required: false - storage_policy: - type: string - required: false - key_vdu: - type: boolean - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - inject_data_list: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.InjectData - 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 - 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 - tosca.nodes.nfv.VDU: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - Virtualbinding: - type: tosca.capabilities.nfv.VirtualBindable - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - properties: - bitrate_requirement: - type: integer - required: false - vnic_name: - type: string - required: false - vnic_order: - type: integer - required: false - vnic_type: - type: string - constraints: - - valid_values: - - normal - - macvtap - - direct - - baremetal - - direct-physical - - virtio-forwarder - required: false - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - required: false - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - - virtual_binding: - capability: tosca.capabilities.nfv.VirtualBindable - relationship: tosca.relationships.nfv.VirtualBindsTo - node: tosca.nodes.nfv.Vdu.Compute - org.openecomp.resource.vfc.NSD: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - nsd_id: - type: string - required: true - description: ID of the NSD - nsd_designer: - type: string - required: true - description: Designer of the NSD - nsd_version: - type: string - required: true - description: Version of the NSD - nsd_name: - type: string - required: true - description: Name of the NSD - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - boot_order: - type: map - entry_schema: - type: string - required: false - nfvi_constraints: - type: map - entry_schema: - type: string - required: false - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - required: true - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - required: true - inject_files: - type: tosca.datatypes.nfv.injectFile - required: false - meta_data: - type: map - entry_schema: - type: string - required: false - user_data: - type: string - required: false - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - requirements: - - virtual_storage: - capability: tosca.capabilities.nfv.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - node: tosca.nodes.nfv.Vdu.VirtualStorage - occurences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.GenericNeutronNet: - derived_from: org.openecomp.resource.vl.extVL - description: Generic Neutron Network - properties: - network_role: - type: string - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_assignments: - type: org.openecomp.datatypes.network.NetworkAssignments - network_flows: - type: org.openecomp.datatypes.network.NetworkFlows - network_scope: - type: string - network_ecomp_naming: - type: org.openecomp.datatypes.EcompNaming - network_type: - type: string - description: ECOMP supported network types. - default: NEUTRON - provider_network: - type: org.openecomp.datatypes.network.ProviderNetwork - network_technology: - type: string - description: ECOMP supported network technology - default: NEUTRON - network_homing: - type: org.openecomp.datatypes.EcompHoming - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 1 - - UNBOUNDED - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - properties: - type_of_storage: - type: string - constraints: - - valid_values: - - volume - - object - - root - - block - required: true - size_of_storage: - type: scalar-unit.size - required: true - vdu_storage_requirements: - type: map - entry_schema: - type: string - required: false - rdma_enabled: - type: boolean - required: false - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - tosca.nodes.nfv.ext.zte.VL: - derived_from: tosca.nodes.Root - properties: - segmentation_id: - type: string - required: false - network_name: - type: string - required: false - is_predefined: - type: boolean - required: false - mtu: - type: integer - required: false - dns_nameservers: - type: list - required: false - entry_schema: - type: string - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - network_id: - type: string - required: false - host_routes: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.HostRouteInfo - ip_version: - type: integer - required: false - vendor: - type: string - required: false - name: - type: string - required: false - start_ip: - type: string - required: false - vlan_transparent: - type: boolean - required: false - cidr: - type: string - required: false - gateway_ip: - type: string - required: false - network_type: - type: string - required: false - end_ip: - type: string - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.ext.LocalStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: string - required: false - disk_type: - type: string - required: false - capabilities: - local_attachment: - type: tosca.capabilities.nfv.ext.LocalAttachment - tosca.nodes.nfv.ext.zte.CP: - derived_from: tosca.nodes.Root - properties: - guest_os_mtu: - type: integer - required: false - bandwidth: - type: integer - required: false - interface_name: - type: string - required: false - allowed_address_pairs: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.AddressPairs - ip_address: - type: string - required: false - bond: - type: string - required: false - proxiedVNFs: - type: list - required: false - entry_schema: - type: string - sfc_encapsulation: - type: string - required: false - floating_ip_address: - type: tosca.datatypes.nfv.ext.FloatingIP - required: false - service_ip_address: - required: false - type: string - mac_address: - type: string - required: false - proxiedVNFtype: - type: string - required: false - macbond: - type: string - required: false - vnic_type: - type: string - required: false - direction: - type: string - required: false - order: - type: integer - required: false - requirements: - - forwarder: - capability: tosca.capabilities.nfv.Forwarder - occurrences: - - 0 - - UNBOUNDED - - virtualbinding: - capability: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 0 - - UNBOUNDED - - virtualLink: - capability: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 0 - - UNBOUNDED - capabilities: - forwarder: - type: tosca.capabilities.nfv.Forwarder - tosca.nodes.nfv.ext.ImageFile: - derived_from: tosca.nodes.Root - properties: - file_url: - type: string - required: false - container_type: - type: string - required: false - name: - type: string - required: false - disk_format: - type: string - required: false - version: - type: string - required: false - capabilities: - guest_os: - type: tosca.capabilities.nfv.ext.GuestOs - image_fle: - type: tosca.capabilities.nfv.ext.ImageFile - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - properties: - descriptor_id: - type: string - required: true - descriptor_version: - type: string - required: true - provider: - type: string - required: true - product_name: - type: string - required: true - software_version: - type: string - required: true - product_info_name: - type: string - required: false - product_info_description: - type: string - required: false - vnfm_info: - type: list - entry_schema: - type: string - required: true - localization_languages: - type: list - entry_schema: - type: string - required: false - default_localization_language: - type: string - required: false - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - required: false - modifiable_attributes: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributes - required: false - flavour_id: - type: string - required: true - flavour_description: - type: string - required: true - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - occurrences: - - 0 - - UNBOUNDED - interfaces: - Nfv: - type: tosca.interfaces.nfv.vnf.lifecycle.Nfv - org.openecomp.resource.vl.overlaytunnel: - derived_from: tosca.nodes.Root - description: This entity represents abstract overlay tunnel end point. - properties: - id: - type: string - description: Identifier of the Tunnel Endpoint node. - required: false - template_name: - type: string - required: false - version: - type: string - required: false - name: - type: string - description: Overlay tunnel name used by for reference by the administrator. - required: false - description: - type: string - description: Additional comments/information about overlay tunnel. - required: false - tunnelType: - type: string - constraints: - - valid_values: - - L3-DCI - - L2-DCI - description: type defines if the overlay tunnel is L3-DCI tunnel or L2-DCI tunnel. - required: true - site1_id: - type: string - description: Identifier of first DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site1_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site1_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site1_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site1_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site1_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site1_vni: - type: integer - description: VXLAN ID - required: false - site1_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site1_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site1_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - site2_id: - type: string - description: Identifier of second DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site2_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site2_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site2_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site2_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site2_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site2_vni: - type: integer - description: VXLAN ID - required: false - site2_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site2_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site2_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.vl.underlayvpn: - derived_from: tosca.nodes.Root - description: undelay vpn type definitions - properties: - id: - type: string - required: false - template_name: - type: string - required: false - version: - type: string - required: false - vendor: - type: string - required: false - template_author: - type: string - required: false - name: - type: string - required: false - description: - type: string - required: false - serviceType: - type: string - description: type of VPN service - required: false - default: l3vpn_sptn - topology: - type: string - description: type of VPN topology - constraints: - - valid_values: - - full-mesh - - point_to_multipoint - - point_to_point - - singlePoint - - hubspoke - - hubspoke_via_hubce - - hubspoke_disjoint - - ADD_DROP_Z - required: false - default: full-mesh - technology: - type: string - description: type of VPN technology - constraints: - - valid_values: - - mpls - - rosen multivpn - - vxlan overlay l3vpn - - eth over sdh - - vlan - required: false - default: mpls - site1_name: - type: string - description: name of first site - required: false - site2_name: - type: string - description: name of second site - required: false - sna1_name: - type: string - description: name of site network accesses associated with the site1 - required: false - sna2_name: - type: string - description: name of site network accesses associated with the site2 - required: false - pe1_id: - type: string - description: id of provider edge1, it can be name or ip or uuid - required: false - pe2_id: - type: string - description: id of provider edge2, it can be name or ip or uuid - required: false - ac1_id: - type: string - description: id of attachment circuit1, it can be port name or uuid - required: false - ac1_svlan: - type: integer - description: ac1 svlan - required: false - ac1_ip: - type: string - description: ip of ac1, only for layer3 vpn, it should contain mask - required: false - ac1_peer_ip: - type: string - description: ip of ac1 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac1_route: - type: string - description: route configure of ac1, only for layer3 vpn - required: false - ac1_protocol: - type: string - description: routing protocol type of ac1, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - required: false - ac1_protocol_bgp_as: - type: string - description: autonomous-system number of ac1, , only required for ebgp protocol - required: false - ac2_id: - type: string - description: id of attachment circuit2, it can be port name or uuid - required: false - ac2_svlan: - type: integer - description: ac2 svlan - required: false - ac2_ip: - type: string - description: ip of ac2, only for layer3 vpn, it should contain mask - required: false - ac2_peer_ip: - type: string - description: ip of ac2 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac2_route: - type: string - description: route configure of ac2, only for layer3 vpn - required: false - ac2_protocol: - type: string - description: routing protocol type of ac2, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - default: STATIC - required: false - ac2_protocol_bgp_as: - type: string - description: autonomous-system number of ac2, , only required for ebgp protocol - required: false - af_type: - type: string - description: address family type - default: ipv4 - required: false - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/policies.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/policies.yml deleted file mode 100644 index 6063d085..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/policies.yml +++ /dev/null @@ -1,134 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -policy_types: - tosca.policies.Root: - description: The TOSCA Policy Type all other TOSCA Policy Types derive from - tosca.policies.Placement: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern placement of TOSCA nodes or groups of nodes. - tosca.policies.Scaling: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern scaling of TOSCA nodes or groups of nodes. - tosca.policies.Update: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern update of TOSCA nodes or groups of nodes. - tosca.policies.Performance: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to declare performance requirements for TOSCA nodes or groups of nodes. - org.openecomp.policies.placement.Antilocate: - derived_from: tosca.policies.Placement - description: My placement policy for separation based upon container type value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - container_type: - type: string - description: container type - required: false - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.Colocate: - derived_from: tosca.policies.Placement - description: Keep associated nodes (groups of nodes) based upon affinity value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - affinity: - type: string - description: affinity - required: true - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.valet.Diversity: - derived_from: tosca.policies.Placement - description: Valet Diversity - properties: - level: - type: string - description: diversity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Exclusivity: - derived_from: tosca.policies.Placement - description: Valet Exclusivity - properties: - level: - type: string - description: exclusivity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Affinity: - derived_from: tosca.policies.Placement - description: Valet Affinity - properties: - level: - type: string - description: affinity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.scaling.Fixed: - derived_from: tosca.policies.Scaling - properties: - quantity: - description: the exact number of instances to keep up - type: integer - required: true - org.openecomp.policies.External: - derived_from: tosca.policies.Root - description: externally managed policy (for example, type="network assignment", source="Policy Manager", name="route target") - properties: - source: - type: string - description: The name of the server that exposes the policy with predefined type and name. - required: false - type: - type: string - description: The type (category) of the policy same as it is defined in the source. - required: false - name: - type: string - description: The name of the policy, that related to specific type, same as it is defined in the source. - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/relationships.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/relationships.yml deleted file mode 100644 index b1b554d1..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/relationships.yml +++ /dev/null @@ -1,142 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- capabilities.yml -- data.yml -- interfaces.yml -relationship_types: - tosca.relationships.Root: - description: This is the default (root) TOSCA Relationship Type definition that all other TOSCA Relationship Types derive from. - attributes: - tosca_id: - description: A unique identifier of the realized instance of a Relationship Template that derives from any TOSCA normative type. - type: string - tosca_name: - description: This attribute reflects the name of the Relationship Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment. - type: string - state: - description: The state of the relationship instance. - type: string - default: initial - interfaces: - Configure: - type: tosca.interfaces.relationship.Configure - tosca.relationships.RoutesTo: - derived_from: tosca.relationships.ConnectsTo - description: This type represents an intentional network routing between two Endpoints in different networks. - valid_target_types: - - tosca.capabilities.Endpoint - tosca.relationships.network.LinksTo: - derived_from: tosca.relationships.DependsOn - description: This relationship type represents an association relationship between Port and Network node types. - valid_target_types: - - tosca.capabilities.network.Linkable - tosca.relationships.AttachesTo: - derived_from: tosca.relationships.Root - description: This type represents an attachment relationship between two nodes. For example, an AttachesTo relationship type would be used for attaching a storage node to a Compute node. - valid_target_types: - - tosca.capabilities.Attachment - properties: - location: - description: 'The relative location (e.g., path on the file system), which - provides the root location to address an attached node. e.g., a mount point - / path such as ''/usr/data''. Note: The user must provide it and it cannot - be "root".' - type: string - constraints: - - min_length: 1 - device: - description: The logical device name which for the attached device (which is represented by the target node in the model). e.g., '/dev/hda1'. - type: string - required: false - attributes: - device: - description: 'The logical name of the device as exposed to the instance. Note: - A runtime property that gets set when the model gets instantiated by the - orchestrator.' - type: string - tosca.relationships.network.BindsTo: - derived_from: tosca.relationships.DependsOn - description: This type represents a network association relationship between Port and Compute node types. - valid_target_types: - - tosca.capabilities.network.Bindable - tosca.relationships.HostedOn: - derived_from: tosca.relationships.Root - description: This type represents a hosting relationship between two nodes. - valid_target_types: - - tosca.capabilities.Container - tosca.relationships.DependsOn: - derived_from: tosca.relationships.Root - description: This type represents a general dependency relationship between two nodes. - valid_target_types: - - tosca.capabilities.Node - tosca.relationships.ConnectsTo: - derived_from: tosca.relationships.Root - description: This type represents a network connection relationship between two nodes. - valid_target_types: - - tosca.capabilities.Endpoint - properties: - credential: - type: tosca.datatypes.Credential - required: false - 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 - org.openecomp.relationships.ForwardsTo: - derived_from: tosca.relationships.Root - valid_target_types: - - org.openecomp.capabilities.Forwarder - org.openecomp.relationships.AssignsTo: - derived_from: tosca.relationships.Root - org.openecomp.relationships.RoutesTo: - derived_from: tosca.relationships.RoutesTo - description: This type represents an intentional network routing between internal and external network - tosca.relationships.nfv.VirtualBindsTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualBindable - tosca.relationships.nfv.VirtualLinksTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualLinkable - tosca.relationships.nfv.Vdu.AttachedTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualStorage diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCompute-template.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCompute-template.yml deleted file mode 100644 index 546f88a8..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCompute-template.yml +++ /dev/null @@ -1,103 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - description: VDU Compute - properties: - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - inject_files: - type: tosca.datatypes.nfv.injectFile - name: - type: string - nfvi_constraints: - type: map - entry_schema: - type: string - meta_data: - type: map - entry_schema: - type: string - description: - type: string - user_data: - type: string - boot_order: - type: map - entry_schema: - type: string - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCp-template.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCp-template.yml deleted file mode 100644 index ec266374..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduCp-template.yml +++ /dev/null @@ -1,59 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - description: VDU Cp - properties: - vnic_name: - type: string - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - bitrate_requirement: - type: integer - vnic_order: - type: integer - vnic_type: - type: string - requirements: - - virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduVirtualstorage-template.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduVirtualstorage-template.yml deleted file mode 100644 index 566f7054..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-VduVirtualstorage-template.yml +++ /dev/null @@ -1,50 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - description: VDU VirtualStorage - properties: - vdu_storage_requirements: - type: map - entry_schema: - type: string - size_of_storage: - type: scalar-unit.size - rdma_enabled: - type: boolean - type_of_storage: - type: string - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template-interface.yml deleted file mode 100644 index 93cb070e..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template-interface.yml +++ /dev/null @@ -1,208 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.resource.vf.Vgw1181049: - derived_from: org.openecomp.resource.abstract.nodes.VF - properties: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - capabilities: - vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template.yml deleted file mode 100644 index 68eec35b..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vgw1181049-template.yml +++ /dev/null @@ -1,282 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -- resource-VNF: - file: resource-Vnf-template.yml -- resource-VnfVirtualLink: - file: resource-Vnfvirtuallink-template.yml -- resource-VDU Cp: - file: resource-VduCp-template.yml -- resource-VDU VirtualStorage: - file: resource-VduVirtualstorage-template.yml -- resource-VDU Compute: - file: resource-VduCompute-template.yml -topology_template: - inputs: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - node_templates: - LLU_VNF: - type: tosca.nodes.nfv.VNF - metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - customizationUUID: 06bffc87-30c7-42ad-b99d-19c6c13405dc - version: '1.0' - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - descriptor_id: b1bb0ce7-2222-4fa7-95ed-4840d70a1177 - provider: onap - vnfm_info: - - gvnfm - flavour_id: simple - descriptor_version: '1.0' - software_version: '1.0' - flavour_description: simple - product_name: vcpe_vgw - VL_mux_gw_private_net: - type: tosca.nodes.nfv.VnfVirtualLink - metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - customizationUUID: fbea54ef-8f8b-4f35-81d6-997a47282698 - version: '1.0' - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - vl_profile: - min_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - max_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - networkName: mux_gw_private_net_id - cidr: 192.168.0.0/24 - dhcpEnabled: false - connectivity_type: - layer_protocol: ipv4 - VDU_vgw_0: - type: tosca.nodes.nfv.Vdu.Compute - metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - customizationUUID: 93c3f2e3-67e7-4bb4-be11-8a48df924c4c - version: '1.0' - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - configurable_properties: - additional_vnfc_configurable_properties: { - } - name: vdu_vgw_0 - description: vgw - vdu_profile: - watchdog: none - min_number_of_instances: 1 - max_number_of_instances: 1 - requirements: - - virtual_storage: - capability: virtual_storage - node: VirtualStorage_root_all - capabilities: - virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform": "generic", "mandatory":"true","configurationValue": "1024"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - VirtualStorage_root_all: - type: tosca.nodes.nfv.Vdu.VirtualStorage - metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - customizationUUID: dc20e1ad-aed9-4154-b2b4-3a702eee49a7 - version: '1.0' - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - size_of_storage: 40 GB - type_of_storage: root - Cp_vgw_mux_gw_private_net: - type: tosca.nodes.nfv.VduCp - metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - customizationUUID: b5ff315f-effc-46e9-a0c5-aec1954845e0 - version: '1.0' - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - trunk_mode: false - protocol_data: - - asscociated_layer_protocol: ipv4 - address_data: - address_type: ip_address - l3_address_data: - fixed_ip_address: - - 192.168.0.1 - ip_address_assignment: false - floating_ip_activated: false - layer_protocol: - - ipv4 - requirements: - - virtual_link: - capability: virtual_linkable - node: VL_mux_gw_private_net - - virtual_binding: - capability: virtual_binding - node: VDU_vgw_0 - substitution_mappings: - node_type: org.openecomp.resource.vf.Vgw1181049 - capabilities: - vl_mux_gw_private_net.feature: - - vl_mux_gw_private_net - - feature - cp_vgw_mux_gw_private_net.feature: - - cp_vgw_mux_gw_private_net - - feature - vdu_vgw_0.virtual_compute: - - vdu_vgw_0 - - virtual_compute - vdu_vgw_0.virtual_binding: - - vdu_vgw_0 - - virtual_binding - virtualstorage_root_all.virtual_storage: - - virtualstorage_root_all - - virtual_storage - llu_vnf.feature: - - llu_vnf - - feature - vl_mux_gw_private_net.virtual_linkable: - - vl_mux_gw_private_net - - virtual_linkable - vl_mux_gw_private_net.monitoring_parameter: - - vl_mux_gw_private_net - - monitoring_parameter - vdu_vgw_0.monitoring_parameter: - - vdu_vgw_0 - - monitoring_parameter - virtualstorage_root_all.feature: - - virtualstorage_root_all - - feature - vdu_vgw_0.feature: - - vdu_vgw_0 - - feature - requirements: - vdu_vgw_0.virtual_storage: - - vdu_vgw_0 - - virtual_storage - vl_mux_gw_private_net.dependency: - - vl_mux_gw_private_net - - dependency - virtualstorage_root_all.dependency: - - virtualstorage_root_all - - dependency - vdu_vgw_0.dependency: - - vdu_vgw_0 - - dependency - cp_vgw_mux_gw_private_net.virtual_binding: - - cp_vgw_mux_gw_private_net - - virtual_binding - cp_vgw_mux_gw_private_net.dependency: - - cp_vgw_mux_gw_private_net - - dependency - llu_vnf.dependency: - - llu_vnf - - dependency - llu_vnf.virtual_link: - - llu_vnf - - virtual_link - cp_vgw_mux_gw_private_net.virtual_link: - - cp_vgw_mux_gw_private_net - - virtual_link diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnf-template.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnf-template.yml deleted file mode 100644 index 121aba2c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnf-template.yml +++ /dev/null @@ -1,70 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - description: VNF - properties: - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - product_info_name: - type: string - default_localization_language: - type: string - flavour_id: - type: string - flavour_description: - type: string - product_name: - type: string - descriptor_id: - type: string - product_info_description: - type: string - provider: - type: string - descriptor_version: - type: string - vnfm_info: - type: list - entry_schema: - type: string - software_version: - type: string - localization_languages: - type: list - entry_schema: - type: string - requirements: - - virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnfvirtuallink-template.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnfvirtuallink-template.yml deleted file mode 100644 index d39b1b3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/resource-Vnfvirtuallink-template.yml +++ /dev/null @@ -1,57 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - description: VnfVirtualLink - properties: - vl_profile: - type: tosca.datatypes.nfv.VlProfile - description: - type: string - test_access: - type: list - entry_schema: - type: string - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template-interface.yml deleted file mode 100644 index 45fc3065..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template-interface.yml +++ /dev/null @@ -1,176 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.service.Testns8: - derived_from: org.openecomp.resource.abstract.nodes.service - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - requirements: - - vgw11810490.llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - vgw11810490.llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template.yml b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template.yml deleted file mode 100644 index 9d9bdc3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/Definitions/service-Testns8-template.yml +++ /dev/null @@ -1,135 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 5be056bd-1ecd-4c14-9465-3bbc994190ee - UUID: 188ed3c6-1573-4b2d-9d3f-a03693bed79b - name: TestNs8 - description: test - type: Service - category: Network Service - serviceType: '' - serviceRole: '' - instantiationType: A-la-carte - serviceEcompNaming: true - ecompGeneratedNaming: true - namingPolicy: '' - environmentContext: General_Revenue-Bearing -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- service-TestNs8-interface: - file: service-Testns8-template-interface.yml -- resource-vgw1181049: - file: resource-Vgw1181049-template.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -topology_template: - node_templates: - vgw1181049 0: - type: org.openecomp.resource.vf.Vgw1181049 - metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - customizationUUID: 32efc3ac-6fd2-4cda-9f15-592e54f41560 - version: '1.0' - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' - properties: - nf_naming: - ecomp_generated_naming: true - multi_stage_design: false - availability_zone_max_count: 1 - capabilities: - vdu_vgw_0.virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform": - "generic","mandatory": "true", "configurationValue": "1024"}' - memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": - "generic", "mandatory": "true", "configurationValue": "2 MB"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - substitution_mappings: - node_type: org.openecomp.service.Testns8 - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - - vgw11810490 - - virtualstorage_root_all.virtual_storage - vgw11810490.llu_vnf.feature: - - vgw11810490 - - llu_vnf.feature - vgw11810490.vdu_vgw_0.monitoring_parameter: - - vgw11810490 - - vdu_vgw_0.monitoring_parameter - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - - vgw11810490 - - vl_mux_gw_private_net.monitoring_parameter - vgw11810490.cp_vgw_mux_gw_private_net.feature: - - vgw11810490 - - cp_vgw_mux_gw_private_net.feature - vgw11810490.vl_mux_gw_private_net.feature: - - vgw11810490 - - vl_mux_gw_private_net.feature - vgw11810490.vdu_vgw_0.feature: - - vgw11810490 - - vdu_vgw_0.feature - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - - vgw11810490 - - vl_mux_gw_private_net.virtual_linkable - vgw11810490.vdu_vgw_0.virtual_binding: - - vgw11810490 - - vdu_vgw_0.virtual_binding - vgw11810490.virtualstorage_root_all.feature: - - vgw11810490 - - virtualstorage_root_all.feature - vgw11810490.vdu_vgw_0.virtual_compute: - - vgw11810490 - - vdu_vgw_0.virtual_compute - requirements: - vgw11810490.vdu_vgw_0.virtual_storage: - - vgw11810490 - - vdu_vgw_0.virtual_storage - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_link - vgw11810490.llu_vnf.dependency: - - vgw11810490 - - llu_vnf.dependency - vgw11810490.virtualstorage_root_all.dependency: - - vgw11810490 - - virtualstorage_root_all.dependency - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - - vgw11810490 - - cp_vgw_mux_gw_private_net.dependency - vgw11810490.llu_vnf.virtual_link: - - vgw11810490 - - llu_vnf.virtual_link - vgw11810490.vl_mux_gw_private_net.dependency: - - vgw11810490 - - vl_mux_gw_private_net.dependency - vgw11810490.vdu_vgw_0.dependency: - - vgw11810490 - - vdu_vgw_0.dependency - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_binding diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/TOSCA-Metadata/TOSCA.meta b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/TOSCA-Metadata/TOSCA.meta deleted file mode 100644 index e65ed508..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,7 +0,0 @@ -TOSCA-Meta-File-Version: 1.0 -CSAR-Version: 1.1 -Created-By: Carlos Santana -Entry-Definitions: Definitions/service-Testns8-template.yml - -Name: csar.meta -Content-Type: text/plain diff --git a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/csar.meta b/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/csar.meta deleted file mode 100644 index bc3359ce..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/numberOfPages/csar.meta +++ /dev/null @@ -1,2 +0,0 @@ -SDC-TOSCA-Meta-File-Version: 1.0 -SDC-TOSCA-Definitions-Version: 9.0 diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa deleted file mode 100644 index 60597577..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxsekiqwLgs9VfChnr2bnpLC3VqD1iT+s969vWe05j1RDozPu -zyD3krNgVUcd65x2QQJWrDK2fnyQUtubbPb3wviLXs0Gof4a/b65JsMQkeeC2/OK -aFvrE6D3heouXmWO1vo1iXy2hUhcfXdr6eM3rP3zpU9zb2Al25/90Ha8kKBpe1RS -PKHpmcqVXIpGVxJSXnioAFXUsJ687qrTv7Zm13AHkm2L1Y5IvMsGHLFjFTGFlFoY -ftQQAepF507CFqs66tD378vvNVg8LYqrKpnfdx2PIRNLHAa1xQWc0EvwGHyBQZRL -hTXS3M3IZ7Y22dJ+3Zg15PMx7QmWDZO5MG/JPwIDAQABAoIBAE5KS1AiutXmezDP -aSb4TLvcrhj8hDhuT92txxmQCV+ePJWG2sPRpDCvXX246NvnX9vy49gmkSH4RY+c -1vZvvt2XrqzD65zZzB+sgpf1tA0DNdMTdKvtqASvHU4tEd4z+bJKEdP4vpp4CZWQ -93vC9ia4TsIJLNns8Hwz42+7lEEResKYZA2djGnzHl+83vR1dm0GGBD6BKR1C3Cx -HbEhqx42EV61+8nAweQNjWKxeAc2hg+H8o8qWJM1aKy0TnqW6kudOYRyYIpX0rJA -siE2HwvDA1mDd5M8ntZ/Cx0pnTc/cuZB8BQJ0jN1JXbrJGbWspBNXformw7isbyO -WIOjvEECgYEA84XKV3aPrTE2JBs5vzzs59NMPV+5frw+xzDyPxqK5Q7+jjVKDwxh -/WRatCaTdRxhOI905HfVsDYjrsPOpmF9MHsLxmBhwk8zBFOu/xtYr7zBNkJhmCsq -kZMdxf8bpu08E7kMQJ2MvT7OhM5HRlWIUR0jdja8Hz51Ro4oOb/po7kCgYEA0Pb5 -v12ZsaSHMF0r4l983PifNwYmI22iQIEtRT2DxgTkDKgBTjbRzqZmEhaADMAO48o9 -sIZy+KJ/a8G9fPQVwMgBID8zOHnWsrFmM3qkj5hhrAQdtq7OE71zgaP0tyE1TG4u -Zs3a7eSyuoildHHFqX88oXSYsTlfV8vn23UpwLcCgYEAwXiCuBger8dQL0FeEJwz -zz5k7MG3WoPuEEzHuPC6dp8CCDM4IlqBI1JuaX/YWQtyBgCbKsQ2BigNE1THQhJj -5ndrdHCwWjKX4pElj9HHFN+OVTBJ3x40VLGfzuUNsAH8X+L9Y/yHivZyFrrXj352 -rZLL0KhNrzjs7WAVf0QEOCkCgYBe2s1xnZZnueyX+qMyBfBTChST0Jm9WUXejAS1 -un+3gn7Wc+jrzRyd9pC8wzPrFb9sjWBFYjKMRI8cpfxS3SWGtgM01Rt2FnBr+vUO -hyxt9ljX0aJ/S4hGE6h7/6XU/yEHibhMeENZ24d5/w9D9WUpVJV8IMYzJHzwCKI9 -z0hdrwKBgQDMKvY3DBpZjhZe9YnOgdj4SRpNwaasUSf3a3SZYY1JyOZVUzeSSzoX -rYLfxBRDjkJ8Nnod+nR/JSRqYa/SJYEMZEZFsC+k/pvBiaP6tk694IlpLD/2MXN6 -14FUV5LH/rGSbZJMSfZ9yNX1XZDowH8nOu+qlmlU4lmgiOuityTmtw== ------END RSA PRIVATE KEY----- diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image deleted file mode 100644 index f31d15df..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image +++ /dev/null @@ -1 +0,0 @@ -ubuntu_16.04 diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml deleted file mode 100644 index c49c2c69..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendorecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F118291.0entitlement pool12341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB39089 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml deleted file mode 100644 index db573afd..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendor2455e00dddf84eedaaed6eb412d39a7eentitlement poolecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F1182912341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB390891.0feature groupd3780d334c4c42d38c7ab1ec23a65cfd4444 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/annotations.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/annotations.yml deleted file mode 100644 index 2f146061..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/annotations.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -annotation_types: - org.openecomp.annotations.Source: - description: Indicates the origin source of an input - properties: - source_type: - type: string - vf_module_label: - type: list - description: List of VF Modules this input was originated from - entry_schema: - type: string - param_name: - type: string - description: Source parameter name diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/artifacts.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/artifacts.yml deleted file mode 100644 index 175615c7..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/artifacts.yml +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -artifact_types: - tosca.artifacts.Root: - description: This is the default (root) TOSCA Artifact Type definition that all other TOSCA base Artifact Types derive from. - tosca.artifacts.Deployment.Image: - derived_from: tosca.artifacts.Deployment - description: This artifact type represents a parent type for any "image" which is an opaque packaging of a TOSCA Node's deployment (whether real or virtual) whose contents are typically already installed and pre-configured (i.e., "stateful") and prepared to be run on a known target container. - tosca.artifacts.Implementation.Bash: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Bash script type that contains Bash commands that can be executed on the Unix Bash shell. - tosca.artifacts.Deployment.Image.VM: - derived_from: tosca.artifacts.Deployment - description: This artifact represents the parent type for all Virtual Machine (VM) image and container formatted deployment artifacts. These images contain a stateful capture of a machine (e.g., server) including operating system and installed software along with any configurations and can be run on another machine using a hypervisor which virtualizes typical server (i.e., hardware) resources. - tosca.artifacts.Implementation.Python: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Python file that contains Python language constructs that can be executed within a Python interpreter. - tosca.artifacts.Deployment: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all deployment artifacts in TOSCA. This class of artifacts typically represents a binary packaging of an application or service that is used to install/create or deploy it as part of a node's lifecycle. - tosca.artifacts.File: - derived_from: tosca.artifacts.Root - description: This artifact type is used when an artifact definition needs to have its associated file simply treated as a file and no special handling/handlers are invoked (i.e., it is not treated as either an implementation or deployment artifact type). - tosca.artifacts.Implementation: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all implementation artifacts in TOSCA. These artifacts are used to implement operations of TOSCA interfaces either directly (e.g., scripts) or indirectly (e.g., config. files). - tosca.artifacts.nfv.SwImage: - derived_from: tosca.artifacts.Deployment.Image diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/capabilities.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/capabilities.yml deleted file mode 100644 index 734c2012..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/capabilities.yml +++ /dev/null @@ -1,293 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -capability_types: - tosca.capabilities.Root: - description: The TOSCA root Capability Type all other TOSCA base Capability Types derive from - tosca.capabilities.Attachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.Node: - derived_from: tosca.capabilities.Root - tosca.capabilities.Container: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: integer - required: false - constraints: - - greater_or_equal: 1 - cpu_frequency: - type: scalar-unit.frequency - required: false - constraints: - - greater_or_equal: 0.1 GHz - disk_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - mem_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - org.openecomp.capabilities.PortMirroring: - derived_from: tosca.capabilities.Root - properties: - connection_point: - type: org.openecomp.datatypes.PortMirroringConnectionPointDescription - tosca.capabilities.Endpoint: - derived_from: tosca.capabilities.Root - properties: - protocol: - type: string - default: tcp - port: - type: PortDef - required: false - secure: - type: boolean - default: false - url_path: - type: string - required: false - port_name: - type: string - required: false - network_name: - type: string - required: false - default: PRIVATE - initiator: - type: string - default: source - constraints: - - valid_values: - - source - - target - - peer - ports: - type: map - required: false - constraints: - - min_length: 1 - entry_schema: - type: PortSpec - attributes: - ip_address: - type: string - tosca.capabilities.DatabaseEndpoint: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.Endpoint.Public: - derived_from: tosca.capabilities.Endpoint - properties: - network_name: PUBLIC - floating: - description: | - indicates that the public address should be allocated from a pool of floating IPs that are associated with the network. - type: boolean - default: false - status: experimental - dns_name: - description: The optional name to register with DNS - type: string - required: false - status: experimental - tosca.capabilities.Endpoint.Admin: - derived_from: tosca.capabilities.Endpoint - properties: - secure: true - tosca.capabilities.Endpoint.Database: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.OperatingSystem: - derived_from: tosca.capabilities.Root - properties: - architecture: - type: string - required: false - type: - type: string - required: false - distribution: - type: string - required: false - version: - type: version - required: false - tosca.capabilities.Scalable: - derived_from: tosca.capabilities.Root - properties: - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - default_instances: - type: integer - tosca.capabilities.network.Bindable: - derived_from: tosca.capabilities.Node - tosca.capabilities.Container.Docker: - derived_from: tosca.capabilities.Container - properties: - version: - type: list - required: false - entry_schema: version - publish_all: - type: boolean - default: false - required: false - publish_ports: - type: list - entry_schema: PortSpec - required: false - expose_ports: - type: list - entry_schema: PortSpec - required: false - volumes: - type: list - entry_schema: string - required: false - tosca.capabilities.network.Linkable: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.AllottedResource: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Metric: - derived_from: tosca.capabilities.Endpoint - org.openecomp.capabilities.Metric: - derived_from: tosca.capabilities.nfv.Metric - description: A node type that includes the Metric capability indicates that it can be monitored. - properties: - unit: - type: string - description: Unit of the metric value - required: true - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - status: SUPPORTED - attributes: - value: - type: string - description: Runtime monitored value - status: SUPPORTED - 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: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - org.openecomp.capabilities.Forwarder: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.VLANAssignment: - derived_from: tosca.capabilities.Root - description: ability to expose routing information of the internal network - properties: - vfc_instance_group_reference: - type: string - description: Ability to recognize capability per vfc instance group on vnf instance - required: true - org.openecomp.capabilities.RoutingConfiguration: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.FabricConfiguration: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualStorage: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualCompute: - derived_from: tosca.capabilities.Root - properties: - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - compute_requirements: - type: map - entry_schema: - type: string - required: false - requested_additional_capabilities: - type: map - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - required: false - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - tosca.capabilities.nfv.VirtualBindable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ExtVirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Forwarder: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.GuestOs: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.ImageFile: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.LocalAttachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.Compute.Container.Architecture: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: string - required: false - flavor_extra_specs: - type: map - required: false - entry_schema: - type: string - mem_size: - type: string - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/data.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/data.yml deleted file mode 100644 index 0ff71791..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/data.yml +++ /dev/null @@ -1,1733 +0,0 @@ -# -# 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_yaml_1_1 -data_types: - tosca.datatypes.Root: - description: The TOSCA root Data Type all other TOSCA base Data Types derive from - integer: - derived_from: tosca.datatypes.Root - string: - derived_from: tosca.datatypes.Root - boolean: - derived_from: tosca.datatypes.Root - float: - derived_from: tosca.datatypes.Root - list: - derived_from: tosca.datatypes.Root - map: - derived_from: tosca.datatypes.Root - json: - derived_from: tosca.datatypes.Root - scalar-unit: - derived_from: tosca.datatypes.Root - scalar-unit.size: - derived_from: scalar-unit - scalar-unit.time: - derived_from: scalar-unit - scalar-unit.frequency: - derived_from: scalar-unit - tosca.datatypes.Credential: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: false - token_type: - type: string - default: password - token: - type: string - keys: - type: map - required: false - entry_schema: - type: string - user: - type: string - required: false - org.openecomp.datatypes.PortMirroringConnectionPointDescription: - derived_from: tosca.datatypes.Root - properties: - nf_naming_code: - type: string - nfc_naming_code: - type: string - network_role: - type: string - pps_capacity: - type: string - nf_type: - type: string - description: deprecated - nfc_type: - type: string - description: deprecated - tosca.datatypes.TimeInterval: - derived_from: tosca.datatypes.Root - properties: - start_time: - type: timestamp - required: true - end_time: - type: timestamp - required: true - tosca.datatypes.network.NetworkInfo: - derived_from: tosca.datatypes.Root - properties: - network_name: - type: string - network_id: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortInfo: - derived_from: tosca.datatypes.Root - properties: - port_name: - type: string - port_id: - type: string - network_id: - type: string - mac_address: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortDef: - derived_from: integer - constraints: - - in_range: - - 1 - - 65535 - tosca.datatypes.network.PortSpec: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: true - default: tcp - constraints: - - valid_values: - - udp - - tcp - - igmp - target: - type: tosca.datatypes.network.PortDef - target_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - source: - type: tosca.datatypes.network.PortDef - source_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - org.openecomp.datatypes.heat.network.AddressPair: - derived_from: tosca.datatypes.Root - description: MAC/IP address pairs - properties: - mac_address: - type: string - description: MAC address - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.subnet.HostRoute: - derived_from: tosca.datatypes.Root - description: Host route info for the subnet - properties: - destination: - type: string - description: The destination for static route - required: false - status: SUPPORTED - nexthop: - type: string - description: The next hop for the destination - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.AllocationPool: - derived_from: tosca.datatypes.Root - description: The start and end addresses for the allocation pool - properties: - start: - type: string - description: Start address for the allocation pool - required: false - status: SUPPORTED - end: - type: string - description: End address for the allocation pool - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.Subnet: - derived_from: tosca.datatypes.Root - description: A subnet represents an IP address block that can be used for assigning IP addresses to virtual instances - properties: - tenant_id: - type: string - description: The ID of the tenant who owns the network - required: false - status: SUPPORTED - enable_dhcp: - type: boolean - description: Set to true if DHCP is enabled and false if DHCP is disabled - required: false - default: true - status: SUPPORTED - ipv6_address_mode: - type: string - description: IPv6 address mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - ipv6_ra_mode: - type: string - description: IPv6 RA (Router Advertisement) mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - allocation_pools: - type: list - description: The start and end addresses for the allocation pools - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.AllocationPool - subnetpool: - type: string - description: The name or ID of the subnet pool - required: false - status: SUPPORTED - dns_nameservers: - type: list - description: A specified set of DNS name servers to be used - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - host_routes: - type: list - description: The gateway IP address - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.subnet.HostRoute - ip_version: - type: integer - description: The gateway IP address - required: false - default: 4 - status: SUPPORTED - constraints: - - valid_values: - - '4' - - '6' - name: - type: string - description: The name of the subnet - required: false - status: SUPPORTED - prefixlen: - type: integer - description: Prefix length for subnet allocation from subnet pool - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 0 - cidr: - type: string - description: The CIDR - required: false - status: SUPPORTED - gateway_ip: - type: string - description: The gateway IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.novaServer.network.PortExtraProperties: - derived_from: tosca.datatypes.Root - description: Nova server network expand properties for port - properties: - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the port - required: false - status: SUPPORTED - mac_address: - type: string - description: MAC address to give to this port - required: false - status: SUPPORTED - admin_state_up: - type: boolean - description: The administrative state of this port - required: false - default: true - status: SUPPORTED - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this port - 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 - org.openecomp.datatypes.heat.novaServer.network.AddressInfo: - derived_from: tosca.datatypes.network.NetworkInfo - description: Network addresses with corresponding port id - properties: - port_id: - type: string - description: Port id - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.neutron.port.FixedIps: - derived_from: tosca.datatypes.Root - description: subnet/ip_address - properties: - subnet: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address desired in the subnet for this port - required: false - status: SUPPORTED - subnet_id: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.FileInfo: - derived_from: tosca.datatypes.Root - description: Heat File Info - properties: - file: - type: string - description: The required URI string (relative or absolute) which can be used to locate the file - required: true - status: SUPPORTED - file_type: - type: string - description: The type of the file - required: true - status: SUPPORTED - constraints: - - valid_values: - - base - - env - - volume - - network - org.openecomp.datatypes.heat.contrail.network.rule.PortPairs: - derived_from: tosca.datatypes.Root - description: source and destination port pairs - properties: - start_port: - type: string - description: Start port - required: false - status: SUPPORTED - end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - apply_service: - type: string - description: Service to apply - required: false - status: SUPPORTED - dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - direction: - type: string - description: Direction - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.Rule - org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork: - derived_from: tosca.datatypes.Root - description: source and destination addresses - properties: - virtual_network: - type: string - description: Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule: - derived_from: tosca.datatypes.Root - description: Rules Pairs - properties: - remote_group_id: - type: string - description: The remote group ID to be associated with this security group rule - required: false - status: SUPPORTED - protocol: - type: string - description: The protocol that is matched by the security group rule - required: false - status: SUPPORTED - constraints: - - valid_values: - - tcp - - udp - - icmp - ethertype: - type: string - description: Ethertype of the traffic - required: false - default: IPv4 - status: SUPPORTED - constraints: - - valid_values: - - IPv4 - - IPv6 - port_range_max: - type: integer - description: 'The maximum port number in the range that is matched by the - security group rule. ' - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - remote_ip_prefix: - type: string - description: The remote IP prefix (CIDR) to be associated with this security group rule - required: false - status: SUPPORTED - remote_mode: - type: string - description: Whether to specify a remote group or a remote IP prefix - required: false - default: remote_ip_prefix - status: SUPPORTED - constraints: - - valid_values: - - remote_ip_prefix - - remote_group_id - direction: - type: string - description: The direction in which the security group rule is applied - required: false - default: ingress - status: SUPPORTED - constraints: - - valid_values: - - egress - - ingress - port_range_min: - type: integer - description: The minimum port number in the range that is matched by the security group rule. - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - org.openecomp.datatypes.heat.substitution.SubstitutionFiltering: - derived_from: tosca.datatypes.Root - description: Substitution Filter - properties: - substitute_service_template: - type: string - description: Substitute Service Template - required: true - status: SUPPORTED - index_value: - type: integer - description: Index value of the substitution service template runtime instance - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - count: - type: string - description: Count - required: false - default: 1 - status: SUPPORTED - scaling_enabled: - type: boolean - description: Indicates whether service scaling is enabled - required: false - default: true - status: SUPPORTED - mandatory: - type: boolean - description: Mandatory - required: false - default: true - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence: - derived_from: tosca.datatypes.Root - description: network policy refs data sequence - properties: - network_policy_refs_data_sequence_major: - type: integer - description: Network Policy ref data sequence Major - required: false - status: SUPPORTED - network_policy_refs_data_sequence_minor: - type: integer - description: Network Policy ref data sequence Minor - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData: - derived_from: tosca.datatypes.Root - description: network policy refs data - properties: - network_policy_refs_data_sequence: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence - description: Network Policy ref data sequence - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet - properties: - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len: - type: string - description: Network ipam refs data ipam subnets ip prefix len - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix: - type: string - description: Network ipam refs data ipam subnets ip prefix - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet List - properties: - network_ipam_refs_data_ipam_subnets_subnet: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_addr_from_start: - type: string - description: Network ipam refs data ipam subnets addr from start - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data - properties: - network_ipam_refs_data_ipam_subnets: - type: list - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork: - derived_from: tosca.datatypes.Root - description: source addresses - properties: - network_policy_entries_policy_rule_src_addresses_virtual_network: - type: string - description: Source addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork: - derived_from: tosca.datatypes.Root - description: destination addresses - properties: - network_policy_entries_policy_rule_dst_addresses_virtual_network: - type: string - description: Destination addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs: - derived_from: tosca.datatypes.Root - description: destination port pairs - properties: - network_policy_entries_policy_rule_dst_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_dst_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs: - derived_from: tosca.datatypes.Root - description: source port pairs - properties: - network_policy_entries_policy_rule_src_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList: - derived_from: tosca.datatypes.Root - description: Action List - properties: - network_policy_entries_policy_rule_action_list_simple_action: - type: string - description: Simple Action - required: false - status: SUPPORTED - network_policy_entries_policy_rule_action_list_apply_service: - type: list - description: Apply Service - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - network_policy_entries_policy_rule_dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork - network_policy_entries_policy_rule_dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs - network_policy_entries_policy_rule_protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork - network_policy_entries_policy_rule_direction: - type: string - description: Direction - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs - network_policy_entries_policy_rule_action_list: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList - description: Action list - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - network_policy_entries_policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.Rule - org.openecomp.datatypes.heat.network.contrail.port.StaticRoute: - derived_from: tosca.datatypes.Root - description: static route - properties: - prefix: - type: string - description: Route prefix - required: false - status: SUPPORTED - next_hop: - type: string - description: Next hop - required: false - status: SUPPORTED - next_hop_type: - type: string - description: Next hop type - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.AddressPair: - derived_from: tosca.datatypes.Root - description: Address Pair - properties: - address_mode: - type: string - description: Address mode active-active or active-standy - required: false - status: SUPPORTED - constraints: - - valid_values: - - active-active - - active-standby - prefix: - type: string - description: IP address prefix - required: false - status: SUPPORTED - mac_address: - type: string - description: Mac address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.InterfaceData: - derived_from: tosca.datatypes.Root - description: Interface Data - 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 - 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 - ip_address: - type: string - description: IP for this interface - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Interface Properties. - properties: - virtual_machine_interface_properties_service_interface_type: - type: string - description: Service Interface Type. - required: false - status: SUPPORTED - org.openecomp.datatypes.Root: - derived_from: tosca.datatypes.Root - description: | - The ECOMP root Data Type all other Data Types derive from - properties: - supplemental_data: - type: map - entry_schema: - description: | - A placeholder for missing properties that would be included in future ecomp model versions. fromat : - type: string - org.openecomp.datatypes.AssignmentRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - is_required: - description: | - "true" indicates that assignment is required - type: boolean - default: false - required: true - count: - description: number of assignments required - type: integer - required: false - org.openecomp.datatypes.network.SubnetAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ip_network_address_plan: - type: string - required: false - description: Reference to EIPAM, VLAN or other address plan ID used to assign subnets to this network - dhcp_enabled: - type: boolean - required: false - description: \"true\" indicates the network has 1 or more policies - ip_version: - type: integer - constraints: - - valid_values: - - 4 - - 6 - required: true - description: The IP version of the subnet - cidr_mask: - type: integer - required: true - description: The default subnet CIDR mask - min_subnets_count: - type: integer - default: 1 - required: true - description: Quantity of subnets that must be initially assigned - org.openecomp.datatypes.network.IPv4SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv4: - type: boolean - required: true - description: Indicates IPv4 subnet assignments - org.openecomp.datatypes.network.IPv6SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv6: - type: boolean - required: true - description: Indicates IPv6 subnet assignments - org.openecomp.datatypes.network.NetworkAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_network_assignment: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the network assignments will be auto-generated by ECOMP \"false\" indicates operator-supplied Network assignments file upload is required (e.g. VID will present prompt to operator to upload operator-supplied Network assignments file). - is_shared_network: - type: boolean - required: true - description: \"true\" means this network is shared by multiple Openstack tenants - is_external_network: - type: boolean - required: true - default: false - description: | - \"true\" means this Contrail external network - ipv4_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv4SubnetAssignments - required: true - description: IPv4 defualt subnet assignments - ipv6_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv6SubnetAssignments - required: true - description: IPv6 defualt subnet assignments - related_networks: - type: list - required: false - description: Related Networks List. - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - is_trunked: - type: boolean - required: true - description: \"true\" indicates that network is trunked - default: false - org.openecomp.datatypes.network.ProviderNetwork: - derived_from: org.openecomp.datatypes.Root - properties: - is_provider_network: - type: boolean - required: true - description: \"true\" indicates that this a Neutron provider type of network - physical_network_name: - type: string - required: false - constraints: - - valid_values: - - Physnet41 - - Physnet42 - - Physnet43 - - Physnet44 - - Physnet21 - - Physnet22 - - sriovnet1 - - sriovnet2 - - oam - description: | - Identifies the NUMA processor cluster to which this physical network interface belongs. NUMA instance correlates to the first digit of the Physical Network Name suffix (e.g. \"01\" = NUMA 0, \"11\" = NUMA 1) - numa: - type: string - required: false - constraints: - - valid_values: - - NUMA 0 - - NUMA 1 - description: | - PNIC instance within the NUMA processor cluster PNIC Instance correlates to the second digit of the Physical Network Name suffix (e.g. "01" = PNIC 1, "02" = "PNIC 2) - pnic_instance: - type: integer - required: false - description: PNIC instance within the NUMA processor cluster - org.openecomp.datatypes.network.NetworkFlows: - derived_from: org.openecomp.datatypes.Root - properties: - is_network_policy: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more policies - network_policy: - type: string - required: false - description: 'Identifies the specific Cloud network policy that must be applied - to this network (source: from Policy Manager).' - is_bound_to_vpn: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more vpn bindings - vpn_binding: - type: string - required: false - description: 'Identifies the specific VPN Binding entry in A&AI that must - be applied when creating this network (source: A&AI)' - org.openecomp.datatypes.network.VlanRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - vlan_range_plan: - type: string - required: true - description: reference to a vlan range plan - vlan_type: - type: string - required: true - constraints: - - valid_values: - - c-tag - - s-tag - description: identifies the vlan type (e.g., c-tag) - vlan_count: - type: integer - required: true - description: identifies the number of vlan tags to assign to the CP from the plan - org.openecomp.datatypes.network.IpRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - ip_version: - type: integer - required: true - constraints: - - valid_values: - - 4 - - 6 - ip_count: - description: identifies the number of ip address to assign to the CP from the plan - type: integer - required: false - floating_ip_count: - type: integer - required: false - subnet_role: - type: string - required: false - assingment_method: - type: string - required: true - constraints: - - valid_values: - - fixed - - dhcp - dhcp_enabled: - type: boolean - required: false - ip_count_required: - description: identifies the number of ip address to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - required: false - floating_ip_count_required: - type: org.openecomp.datatypes.AssignmentRequirements - required: false - ip_address_plan_name: - type: string - required: false - vrf_name: - type: string - required: false - org.openecomp.datatypes.network.MacAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - type: string - required: true - description: reference to a MAC address range plan - mac_count: - type: integer - required: true - description: identifies the number of MAC addresses to assign to the CP from the plan - org.openecomp.datatypes.EcompHoming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_selected_instance_node_target: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the target deployment node for this instance will be auto-selected by ECOMP \"false\" indicates operator-supplied instance target deployment node required (e.g. VID will present a prompt to operator and collect the operator-selected target node for the deployment of this Network instance). - homing_policy: - type: string - required: false - description: Referenc to a service level homing policy that ECOMP will use for instance deployment target node - instance_node_target: - type: string - required: false - description: Instance target deployment node - org.openecomp.datatypes.EcompNaming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - type: boolean - required: true - default: true - description: | - \"true\" indicates that the name for the instance will be auto-generated by ECOMP. \"false\" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - naming_policy: - type: string - required: false - description: Referenc to naming policy that ECOMP will use when the name is auto-generated - org.openecomp.datatypes.network.MacRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - description: reference to a MAC address range plan - type: string - required: false - mac_count: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: integer - required: false - mac_count_required: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair IP. - properties: - ip_prefix: - type: string - description: IP Prefix. - required: false - status: SUPPORTED - ip_prefix_len: - type: integer - description: IP Prefix Len. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Mac Address. - properties: - mac_address: - type: list - description: Mac Addresses List. - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface VLAN Properties. - properties: - sub_interface_vlan_tag: - type: string - description: Sub Interface VLAN Tag. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair. - properties: - address_mode: - type: string - description: Address Mode. - required: false - status: SUPPORTED - ip: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp - description: IP. - required: false - status: SUPPORTED - mac: - type: string - description: Mac. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pairs. - properties: - allowed_address_pair: - type: list - description: Addresses pair List. - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair - org.openecomp.datatypes.Naming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - description: | - "true" indicates that the name for the instance will be auto-generated by ECOMP. "false" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: boolean - default: true - required: true - naming_policy: - description: Reference to naming policy that ECOMP will use when the name is auto-generated - type: string - required: false - instance_name: - description: indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: string - required: false - org.openecomp.datatypes.flavors.ComputeFlavor: - derived_from: tosca.datatypes.Root - properties: - num_cpus: - type: integer - disk_size: - type: scalar-unit.size - mem_size: - type: scalar-unit.size - org.openecomp.datatypes.flavors.LicenseFlavor: - derived_from: tosca.datatypes.Root - properties: - feature_group_uuid: - type: string - org.openecomp.datatypes.flavors.VendorInfo: - derived_from: tosca.datatypes.Root - properties: - manufacturer_reference_number: - type: string - vendor_model: - type: string - org.openecomp.datatypes.flavors.DeploymentFlavor: - derived_from: tosca.datatypes.Root - properties: - sp_part_number: - type: string - vendor_info: - type: org.openecomp.datatypes.flavors.VendorInfo - compute_flavor: - type: org.openecomp.datatypes.flavors.ComputeFlavor - license_flavor: - type: org.openecomp.datatypes.flavors.LicenseFlavor - required: false - org.openecomp.datatypes.ImageInfo: - derived_from: tosca.datatypes.Root - properties: - software_version: - type: string - file_name: - type: string - file_hash: - type: string - description: checksum/signature - file_hash_type: - type: string - required: false - default: md5 - org.openecomp.datatypes.network.RelatedNetworksAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - related_network_role: - type: string - description: The network role of the related network, sharing provider network. - required: false - tosca.datatypes.nfv.VnfcConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - additional_vnfc_configurable_properties: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.RequestedAdditionalCapability: - derived_from: tosca.datatypes.Root - properties: - support_mandatory: - type: boolean - required: true - min_requested_additional_capability_version: - type: string - required: false - preferred_requested_additional_capability_version: - type: string - required: false - requested_additional_capability_name: - type: string - required: true - target_performance_parameters: - type: map - entry_schema: - type: string - required: true - tosca.datatypes.nfv.VirtualMemory: - derived_from: tosca.datatypes.Root - properties: - virtual_mem_size: - type: scalar-unit.size - required: true - virtual_mem_oversubscription_policy: - type: string - required: false - vdu_memory_requirements: - type: map - entry_schema: - type: string - required: false - numa_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VirtualCpuPinning: - derived_from: tosca.datatypes.Root - properties: - cpu_pinning_policy: - type: string - constraints: - - valid_values: - - static - - dynamic - required: false - cpu_pinning_map: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualCpu: - derived_from: tosca.datatypes.Root - properties: - cpu_architecture: - type: string - required: false - num_virtual_cpu: - type: integer - required: true - virtual_cpu_clock: - type: scalar-unit.frequency - required: false - virtual_cpu_oversubscription_policy: - type: string - required: false - vdu_cpu_requirements: - type: map - entry_schema: - type: string - required: false - virtual_cpu_pinning: - type: tosca.datatypes.nfv.VirtualCpuPinning - required: false - tosca.datatypes.nfv.LogicalNodeData: - derived_from: tosca.datatypes.Root - properties: - logical_node_requirements: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: false - description: - type: string - required: false - support_mandatory: - type: boolean - required: true - requirement: - type: string - required: false - network_interface_requirements: - type: map - entry_schema: - type: string - required: true - nic_io_requirements: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - tosca.datatypes.nfv.injectFile: - derived_from: tosca.datatypes.Root - properties: - source_path: - type: string - required: true - dest_path: - type: string - required: true - tosca.datatypes.nfv.L2AddressData: - derived_from: tosca.datatypes.Root - properties: - mac_address_assignment: - type: boolean - required: true - address: - type: string - required: false - tosca.datatypes.nfv.L3AddressData: - derived_from: tosca.datatypes.Root - properties: - ip_address_assignment: - type: boolean - required: true - floating_ip_activated: - type: boolean - required: true - ip_address_type: - type: string - required: false - constraints: - - valid_values: - - ipv4 - - ipv6 - number_of_ip_address: - type: integer - required: false - fixed_ip_address: - type: list - entry_schema: - type: string - required: false - tosca.datatypes.nfv.AddressData: - properties: - address_type: - constraints: - - valid_values: - - mac_address - - ip_address - type: string - required: true - l2_address_data: - required: false - type: tosca.datatypes.nfv.L2AddressData - l3_address_data: - required: false - type: tosca.datatypes.nfv.L3AddressData - tosca.datatypes.nfv.ConnectivityType: - derived_from: tosca.datatypes.Root - properties: - layer_protocol: - type: string - required: true - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - flow_pattern: - type: string - required: false - constraints: - - valid_values: - - Line - - Tree - - Mesh - tosca.datatypes.nfv.VlFlavour: - derived_from: tosca.datatypes.Root - properties: - flavourId: - type: string - tosca.datatypes.nfv.ext.AddressPairs: - properties: - ip: - type: string - required: false - mac: - type: string - required: false - tosca.datatypes.nfv.ext.FloatingIP: - properties: - external_network: - type: string - required: false - ip_address: - type: string - required: false - tosca.datatypes.nfv.ext.LocationInfo: - properties: - availability_zone: - type: string - required: false - vimid: - type: integer - required: false - tenant: - type: string - required: false - tosca.datatypes.nfv.ext.HostRouteInfo: - properties: - destination: - type: string - required: false - nexthop: - type: string - required: false - tosca.datatypes.nfv.ext.InjectData: - properties: - file_name: - type: string - required: false - file_data: - type: string - required: false - tosca.datatypes.nfv.ext.zte.WatchDog: - properties: - enable_delay: - type: integer - required: false - action: - type: string - required: false - tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule: - properties: - scope: - type: string - required: false - affinity_antiaffinity: - type: string - required: false - tosca.datatypes.nfv.VduProfile: - derived_from: tosca.datatypes.Root - properties: - min_number_of_instances: - type: integer - required: true - max_number_of_instances: - type: integer - required: true - watchdog: - type: string - required: true - vmBootUpTimeOut: - type: integer - required: false - tosca.datatypes.nfv.LinkBitRateRequirements: - derived_from: tosca.datatypes.Root - properties: - root: - type: integer - required: true - leaf: - type: integer - required: true - tosca.datatypes.nfv.Qos: - derived_from: tosca.datatypes.Root - properties: - latency: - type: integer - required: true - packet_delay_variation: - type: integer - required: true - packet_loss_ratio: - type: float - constraints: - - in_range: - - 0.0 - - 1.0 - required: false - tosca.datatypes.nfv.VlProfile: - derived_from: tosca.datatypes.Root - properties: - max_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - min_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - qos: - type: tosca.datatypes.nfv.Qos - required: false - initiationParameters: - type: map - entry_schema: - type: string - required: false - cidr: - type: string - required: false - networkName: - type: string - required: false - startIp: - type: string - required: false - endIp: - type: string - required: false - gatewayIp: - type: string - required: false - segmentationId: - type: integer - required: false - physicalNetwork: - type: string - required: false - networkType: - type: string - required: false - constraints: - - valid_values: - - VLAN - - VXLAN - dhcpEnabled: - type: boolean - required: false - vlanTransparent: - type: boolean - required: false - tosca.datatypes.nfv.VduLevel: - derived_from: tosca.datatypes.Root - properties: - number_of_instances: - type: integer - required: true - tosca.datatypes.nfv.ScaleInfo: - derived_from: tosca.datatypes.Root - properties: - scaleLevel: - type: integer - required: true - tosca.datatypes.nfv.ScaleAspect: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - associated_group: - type: string - required: false - max_scale_level: - type: integer - required: true - tosca.datatypes.nfv.InstantiationLevel: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: true - vdu_levels: - type: map - required: true - entry_schema: - type: tosca.datatypes.nfv.VduLevel - scale_info: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.ScaleInfo - tosca.datatypes.nfv.VnfScaleOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - scaling_by_more_than_one_step_supported: - type: boolean - tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - arbitrary_target_levels_supported: - type: boolean - tosca.datatypes.nfv.VnfHealOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - causes: - type: list - entry_schema: - type: string - tosca.datatypes.nfv.VnfTerminateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfOperateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfLcmOperationsConfiguration: - derived_from: tosca.datatypes.Root - properties: - scale: - type: tosca.datatypes.nfv.VnfScaleOperationConfiguration - scale_to_level: - type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration - heal: - type: tosca.datatypes.nfv.VnfHealOperationConfiguration - terminate: - type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration - operate: - type: tosca.datatypes.nfv.VnfOperateOperationConfiguration - tosca.datatypes.nfv.CpProtocolData: - derived_from: tosca.datatypes.Root - properties: - asscociated_layer_protocol: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo-wire - required: true - address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.datatypes.nfv.VnfConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - is_autoscale_enabled: - type: boolean - required: false - is_autoheal_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributes: - derived_from: tosca.datatypes.Root - properties: - extensions: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions - required: false - metadata: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/groups.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/groups.yml deleted file mode 100644 index f8be60db..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/groups.yml +++ /dev/null @@ -1,133 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -group_types: - tosca.groups.Root: - description: The TOSCA Group Type all other TOSCA Group Types derive from - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - org.openecomp.groups.heat.HeatStack: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same heat stack - properties: - heat_file: - type: string - description: Heat file which associate to this group/heat stack - required: true - status: SUPPORTED - description: - type: string - description: group description - required: true - status: SUPPORTED - org.openecomp.groups.VfModule: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same VF Module - properties: - isBase: - type: boolean - description: Whether this module should be deployed before other modules - required: true - default: false - status: SUPPORTED - vf_module_label: - type: string - required: true - description: | - Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model - vf_module_description: - type: string - required: true - description: | - Description of the VF-modules contents and purpose (e.g. "Front-End" or "Database Cluster") - min_vf_module_instances: - type: integer - required: true - description: The minimum instances of this VF-Module - max_vf_module_instances: - type: integer - required: false - description: The maximum instances of this VF-Module - initial_count: - type: integer - required: false - description: | - The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances. - vf_module_type: - type: string - required: true - constraint: - - valid_values: - - Base - - Expansion - volume_group: - type: boolean - required: true - default: false - description: | - "true" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time. - availability_zone_count: - type: integer - required: false - description: | - Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template) - vfc_list: - type: map - entry_schema: - description: : - type: string - required: false - description: | - Identifies the set of VM types and their count included in the VF-Module - org.openecomp.groups.NetworkCollection: - derived_from: tosca.groups.Root - description: groups l3-networks in network collection - properties: - network_collection_function: - type: string - required: true - description: network collection function - network_collection_description: - type: string - required: true - description: network collection description, free format text - org.openecomp.groups.VfcInstanceGroup: - derived_from: tosca.groups.Root - description: groups VFCs with same parent port role - properties: - vfc_instance_group_function: - type: string - required: true - description: function of this VFC group - vfc_parent_port_role: - type: string - required: true - description: common role of parent ports of VFCs in this group - network_collection_function: - type: string - required: true - description: network collection function assigned to this group - subinterface_role: - type: string - required: true - description: common role of subinterfaces of VFCs in this group, criteria the group is created - capabilities: - vlan_assignment: - type: org.openecomp.capabilities.VLANAssignment - properties: - vfc_instance_group_reference: - type: string diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/interfaces.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/interfaces.yml deleted file mode 100644 index a11c7169..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/interfaces.yml +++ /dev/null @@ -1,83 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -interface_types: - tosca.interfaces.nfv.vnf.lifecycle.Nfv: - instantiate: - description: Invoked upon receipt of an Instantiate VNF request - instantiate_start: - description: Invoked before instantiate - instantiate_end: - description: Invoked after instantiate - terminate: - description: Invoked upon receipt Terminate VNF request - terminate_start: - description: Invoked before terminate - terminate_end: - description: Invoked after terminate - modify_information: - description: Invoked upon receipt of a Modify VNF Information request - modify_information_start: - description: Invoked before modify_information - modify_information_end: - description: Invoked after modify_information - change_flavour: - description: Invoked upon receipt of a Change VNF Flavour request - change_flavour_start: - description: Invoked before change_flavour - change_flavour_end: - description: Invoked after change_flavour - change_external_connectivity: - description: Invoked upon receipt of a Change External VNF Connectivity request - change_external_connectivity_start: - description: Invoked before change_external_connectivity - change_external_connectivity_end: - description: Invoked after change_external_connectivity - operate: - description: Invoked upon receipt of an Operate VNF request - operate_start: - description: Invoked before operate - operate_end: - description: Invoked after operate - heal: - description: Invoked upon receipt of a Heal VNF request - heal_start: - description: Invoked before heal - heal_end: - description: Invoked after heal - scale: - description: Invoked upon receipt of a Scale VNF request - scale_start: - description: Invoked before scale - scale_end: - description: Invoked after scale - scale_to_level: - description: Invoked upon receipt of a Scale VNF to Level request - scale_to_level_start: - description: Invoked before scale_to_level - scale_to_level_end: - description: Invoked after scale_to_level - tosca.interfaces.node.lifecycle.Standard: - create: - description: Standard lifecycle create operation. - configure: - description: Standard lifecycle configure operation. - start: - description: Standard lifecycle start operation. - stop: - description: Standard lifecycle stop operation. - delete: - description: Standard lifecycle delete operation. diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/nodes.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/nodes.yml deleted file mode 100644 index 62d77f4c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/nodes.yml +++ /dev/null @@ -1,4781 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -- artifacts.yml -- capabilities.yml -- interfaces.yml -- relationships.yml -node_types: - tosca.nodes.BlockStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 1 MB - volume_id: - type: string - required: false - snapshot_id: - type: string - required: false - capabilities: - attachment: - type: tosca.capabilities.Attachment - tosca.nodes.WebApplication: - derived_from: tosca.nodes.Root - properties: - context_root: - type: string - capabilities: - app_endpoint: - type: tosca.capabilities.Endpoint - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.WebServer - relationship: tosca.relationships.HostedOn - tosca.nodes.Database: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: the logical name of the database - port: - type: integer - description: the port the underlying database service will listen to for data - user: - type: string - description: the optional user account name for DB administration - required: false - password: - type: string - description: the optional password for the DB user account - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.DBMS - relationship: tosca.relationships.HostedOn - capabilities: - database_endpoint: - type: tosca.capabilities.Endpoint.Database - tosca.nodes.Container.Runtime: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - host: - type: tosca.capabilities.Container - scalable: - type: tosca.capabilities.Scalable - tosca.nodes.network.Port: - derived_from: tosca.nodes.Root - properties: - ip_address: - type: string - required: false - order: - type: integer - required: true - default: 0 - constraints: - - greater_or_equal: 0 - is_default: - type: boolean - required: false - default: false - ip_range_start: - type: string - required: false - ip_range_end: - type: string - required: false - requirements: - - link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - tosca.nodes.Root: - description: The TOSCA Node Type all other TOSCA base Node Types derive from - attributes: - tosca_id: - type: string - tosca_name: - type: string - state: - type: string - capabilities: - feature: - type: tosca.capabilities.Node - requirements: - - dependency: - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - occurrences: - - 0 - - UNBOUNDED - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - tosca.nodes.network.Network: - derived_from: tosca.nodes.Root - properties: - ip_version: - type: integer - required: false - default: 4 - constraints: - - valid_values: - - 4 - - 6 - cidr: - type: string - required: false - start_ip: - type: string - required: false - end_ip: - type: string - required: false - gateway_ip: - type: string - required: false - network_name: - type: string - required: false - network_id: - type: string - required: false - segmentation_id: - type: string - required: false - network_type: - type: string - required: false - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - default: true - capabilities: - link: - type: tosca.capabilities.network.Linkable - tosca.nodes.Compute: - derived_from: tosca.nodes.Root - attributes: - private_address: - type: string - public_address: - type: string - networks: - type: map - entry_schema: - type: tosca.datatypes.network.NetworkInfo - ports: - type: map - entry_schema: - type: tosca.datatypes.network.PortInfo - requirements: - - local_storage: - capability: tosca.capabilities.Attachment - node: tosca.nodes.BlockStorage - relationship: tosca.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.SoftwareComponent - endpoint: - type: tosca.capabilities.Endpoint.Admin - os: - type: tosca.capabilities.OperatingSystem - scalable: - type: tosca.capabilities.Scalable - binding: - type: tosca.capabilities.network.Bindable - tosca.nodes.LoadBalancer: - derived_from: tosca.nodes.Root - properties: - algorithm: - type: string - required: false - status: experimental - capabilities: - client: - type: tosca.capabilities.Endpoint.Public - occurrences: - - 0 - - UNBOUNDED - description: the Floating (IP) client’s on the public network can connect to - requirements: - - application: - capability: tosca.capabilities.Endpoint - relationship: tosca.relationships.RoutesTo - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.DBMS: - derived_from: tosca.nodes.SoftwareComponent - properties: - root_password: - type: string - required: false - description: the optional root password for the DBMS service - port: - type: integer - required: false - description: the port the DBMS service will listen to for data and requests - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.Database - tosca.nodes.WebServer: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - data_endpoint: tosca.capabilities.Endpoint - admin_endpoint: tosca.capabilities.Endpoint.Admin - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.WebApplication - tosca.nodes.Container.Application: - derived_from: tosca.nodes.Root - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Container - relationship: tosca.relationships.HostedOn - tosca.nodes.SoftwareComponent: - derived_from: tosca.nodes.Root - properties: - component_version: - type: version - required: false - admin_credential: - type: tosca.datatypes.Credential - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.ObjectStorage: - derived_from: tosca.nodes.Root - properties: - name: - type: string - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - maxsize: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - capabilities: - storage_endpoint: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.ServiceProxy: - derived_from: tosca.nodes.Root - org.openecomp.resource.vfc.rules.nodes.heat.network.contrailV2.NetworkRules: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - network_policy_entries: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - shared: - type: string - description: Is virtual network shared - required: false - status: SUPPORTED - forwarding_mode: - type: string - description: forwarding mode of the virtual network - required: false - status: SUPPORTED - external: - type: string - description: Is virtual network external - required: false - status: SUPPORTED - allow_transit: - type: string - description: Whether this network should be transitive. - required: false - status: SUPPORTED - flood_unknown_unicast: - type: string - description: flood L2 packets on network - required: false - status: SUPPORTED - route_targets: - type: list - description: route targets associated with the virtual network - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - 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 - org.openecomp.resource.abstract.nodes.service: - derived_from: tosca.nodes.Root - org.openecomp.resource.cp.v2.extVirtualMachineInterfaceCP: - derived_from: org.openecomp.resource.cp.v2.extCP - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.v2.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.vfc.nodes.volume: - derived_from: tosca.nodes.BlockStorage - org.openecomp.nodes.VLANNetworkReceptor: - derived_from: tosca.nodes.Root - capabilities: - routing_configuration_internal: - type: org.openecomp.capabilities.RoutingConfiguration - requirements: - - vlan_assignment: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.VLANAssignment - relationship: org.openecomp.relationships.AssignsTo - org.openecomp.resource.vl.nodes.heat.network.neutron.Net: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - dhcp_agent_ids: - type: list - description: The IDs of the DHCP agent to schedule the network - required: false - status: SUPPORTED - entry_schema: - type: string - tenant_id: - type: string - description: The ID of the tenant which will own the network - required: false - status: SUPPORTED - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the network - required: false - status: SUPPORTED - shared: - type: boolean - description: Whether this network should be shared across all tenants - required: false - default: 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 - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this network - required: false - status: SUPPORTED - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - attributes: - 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_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - mtu: - type: scalar-unit.size - description: The maximum transmission unit size(in bytes) for the network - status: SUPPORTED - status: - type: string - description: The status of the network - status: SUPPORTED - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.nova.Server: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - admin_pass: - type: string - description: The administrator password for the server - required: false - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - image: - type: string - description: The ID or name of the image to boot with - required: false - status: SUPPORTED - image_update_policy: - type: string - description: Policy on how to apply an image-id update - required: false - default: REBUILD - status: SUPPORTED - constraints: - - valid_values: - - REBUILD_PRESERVE_EPHEMERAL - - REPLACE - - REBUILD - metadata: - type: json - description: Arbitrary JSON metadata to store for this server - required: false - status: SUPPORTED - contrail_service_instance_ind: - type: boolean - description: Nova server related to service instance indicator - required: false - default: false - status: SUPPORTED - user_data_update_policy: - type: string - description: Policy on how to apply a user_data update - required: false - default: REPLACE - status: SUPPORTED - constraints: - - valid_values: - - REPLACE - - IGNORE - flavor_update_policy: - type: string - description: Policy on how to apply a flavor update - required: false - default: RESIZE - status: SUPPORTED - constraints: - - valid_values: - - RESIZE - - REPLACE - user_data: - type: string - description: User data script to be executed by cloud-init - required: false - default: '' - status: SUPPORTED - flavor: - type: string - description: The ID or name of the flavor to boot onto - required: true - status: SUPPORTED - key_name: - type: string - description: Name of keypair to inject into the server - required: false - status: SUPPORTED - reservation_id: - type: string - description: A UUID for the set of servers being requested - required: false - status: SUPPORTED - security_groups: - type: list - description: List of security group names or IDs - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - config_drive: - type: boolean - description: enable config drive on the server - required: false - status: SUPPORTED - personality: - type: map - description: A map of files to create/overwrite on the server upon boot - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - software_config_transport: - type: string - description: How the server should receive the metadata required for software configuration - required: false - default: POLL_SERVER_CFN - status: SUPPORTED - constraints: - - valid_values: - - POLL_SERVER_CFN - - POLL_SERVER_HEAT - - POLL_TEMP_URL - - ZAQAR_MESSAGE - user_data_format: - type: string - description: How the user_data should be formatted for the server - required: false - default: HEAT_CFNTOOLS - status: SUPPORTED - constraints: - - valid_values: - - SOFTWARE_CONFIG - - RAW - - HEAT_CFNTOOLS - diskConfig: - type: string - description: Control how the disk is partitioned when the server is created - required: false - status: SUPPORTED - constraints: - - valid_values: - - AUTO - - MANUAL - name: - type: string - description: Server name - required: false - status: SUPPORTED - scheduler_hints: - type: map - description: Arbitrary key-value pairs specified by the client to help boot a server - required: false - status: SUPPORTED - entry_schema: - type: string - attributes: - accessIPv4: - type: string - description: The manually assigned alternative public IPv4 address of the server - status: SUPPORTED - addresses: - type: map - description: A dict of all network addresses with corresponding port_id - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.novaServer.network.AddressInfo - accessIPv6: - type: string - description: The manually assigned alternative public IPv6 address of the server - status: SUPPORTED - instance_name: - type: string - description: AWS compatible instance name - status: SUPPORTED - name: - type: string - description: Name of the server - status: SUPPORTED - show: - type: string - description: Detailed information about resource - status: SUPPORTED - console_urls: - type: string - description: URLs of servers consoles - status: SUPPORTED - org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules: - derived_from: tosca.nodes.Root - properties: - description: - type: string - description: Description of the security group - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this security group, which is not required to be unique. - required: false - status: SUPPORTED - rules: - type: list - description: List of security group rules - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule - attributes: - show: - type: string - description: Detailed information about resource - status: SUPPORTED - requirements: - - port: - capability: tosca.capabilities.Attachment - node: org.openecomp.resource.cp.nodes.heat.network.neutron.Port - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.cinder.Volume: - derived_from: org.openecomp.resource.vfc.nodes.volume - properties: - availability_zone: - description: The availability zone in which the volume will be created - type: string - status: SUPPORTED - required: false - image: - description: If specified, the name or ID of the image to create the volume from - type: string - status: SUPPORTED - required: false - metadata: - description: Key/value pairs to associate with the volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - volume_type: - description: If specified, the type of volume to use, mapping to a specific backend - type: string - status: SUPPORTED - required: false - description: - description: A description of the volume - type: string - status: SUPPORTED - required: false - device_type: - description: Device type - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - cdrom - - disk - disk_bus: - description: 'Bus of the device: hypervisor driver chooses a suitable default - if omitted' - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - ide - - lame_bus - - scsi - - usb - - virtio - backup_id: - description: If specified, the backup to create the volume from - type: string - status: SUPPORTED - required: false - source_volid: - description: If specified, the volume to use as source - type: string - status: SUPPORTED - required: false - boot_index: - description: Integer used for ordering the boot disks - type: integer - status: SUPPORTED - required: false - size: - description: The requested storage size (default unit is MB) - type: scalar-unit.size - status: SUPPORTED - required: false - constraints: - - greater_or_equal: 1 GB - read_only: - description: Enables or disables read-only access mode of volume - type: boolean - status: SUPPORTED - required: false - name: - description: A name used to distinguish the volume - type: string - status: SUPPORTED - required: false - scheduler_hints: - description: Arbitrary key-value pairs specified by the client to help the Cinder scheduler creating a volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - swap_size: - description: The size of the swap, in MB - type: scalar-unit.size - status: SUPPORTED - required: false - delete_on_termination: - description: Indicate whether the volume should be deleted when the server is terminated - type: boolean - status: SUPPORTED - required: false - multiattach: - description: Whether allow the volume to be attached more than once - type: boolean - status: SUPPORTED - required: false - attributes: - display_description: - description: Description of the volume - type: string - status: SUPPORTED - attachments: - description: The list of attachments of the volume - type: string - status: SUPPORTED - entry_schema: - type: string - encrypted: - description: Boolean indicating if the volume is encrypted or not - type: boolean - status: SUPPORTED - show: - description: Detailed information about resource - type: string - status: SUPPORTED - created_at: - description: The timestamp indicating volume creation - type: timestamp - status: SUPPORTED - display_name: - description: Name of the volume - type: string - status: SUPPORTED - metadata_values: - description: Key/value pairs associated with the volume in raw dict form - type: map - status: SUPPORTED - entry_schema: - type: string - bootable: - description: Boolean indicating if the volume can be booted or not - type: boolean - status: SUPPORTED - status: - description: The current status of the volume - type: string - status: SUPPORTED - org.openecomp.resource.abstract.nodes.CR: - derived_from: tosca.nodes.Root - properties: - cr_function: - type: string - cr_role: - type: string - cr_type: - type: string - org.openecomp.resource.vl.extVL: - derived_from: tosca.nodes.Root - description: VF Tenant oam protected network - properties: - network_type: - type: string - required: true - description: ECOMP supported network types. - network_role: - type: string - required: true - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_scope: - type: string - constraints: - valid_values: - - VF - - SERVICE - - GLOBAL - 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 - network_technology: - type: string - required: true - description: ECOMP supported network technology - exVL_naming: - type: org.openecomp.datatypes.Naming - 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 - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.abstract.nodes.PNF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_type: - type: string - software_versions: - type: list - entry_schema: - type: string - org.openecomp.resource.vfc.rules.nodes.heat.network.contrail.NetworkRules: - derived_from: tosca.nodes.Root - properties: - entries: - type: org.openecomp.datatypes.heat.contrail.network.rule.RuleList - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - attributes: - tenant_id: - type: string - description: tenant_id - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - rules: - type: list - description: List of rules - status: SUPPORTED - entry_schema: - type: string - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - 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.nodes.VRFObject: - derived_from: tosca.nodes.Root - description: provides capability to connect WAN Transport Service Proxy to VRF Entry - capabilities: - routing_configuration_external: - type: org.openecomp.capabilities.RoutingConfiguration - org.openecomp.resource.abstract.nodes.VFC: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - nfc_function: - type: string - high_availablity: - type: string - description: high_availablity - required: false - status: SUPPORTED - vm_image_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - vm_flavor_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - nfc_naming_code: - type: string - description: nfc code for instance naming - required: false - status: SUPPORTED - vm_type_tag: - type: string - description: vm type based on naming Convention - required: false - status: SUPPORTED - nfc_naming: - type: org.openecomp.datatypes.Naming - description: vfc naming - min_instances: - type: integer - description: Minimum number of VFC Instances - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - max_instances: - type: integer - description: Maximum number of VFC Instances - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 1 - org.openecomp.resource.cp.nodes.heat.contrailV2.VirtualMachineInterface: - derived_from: org.openecomp.resource.cp.nodes.network.Port - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.abstract.nodes.VnfConfiguration: - derived_from: tosca.nodes.Root - properties: - allowed_flavors: - description: a collection of all flavor valuesets available for a given VFC - type: map - entry_schema: - type: org.openecomp.datatypes.flavors.DeploymentFlavor - org.openecomp.resource.vl.nodes.heat.network.contrailV2.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - network_ipam_refs_data: - type: list - description: IPAM references Data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData - network_policy_refs_data: - type: list - description: Policy references data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData - network_ipam_refs: - type: list - description: IPAM references - required: false - status: SUPPORTED - entry_schema: - type: string - network_policy_refs: - type: list - description: Policy references - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vl.internalVL: - derived_from: tosca.nodes.network.Network - description: The AT&T internal (VF-level) Virtual Link - org.openecomp.resource.vl.ELine: - derived_from: org.openecomp.resource.vl.VL - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 0 - - 2 - org.openecomp.resource.vl.VL: - derived_from: tosca.nodes.network.Network - properties: - vendor: - type: string - required: false - vl_name: - type: string - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - end_point: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.Configuration: - derived_from: tosca.nodes.Root - properties: - type: - type: string - description: The type of the node, the configuration will be defined for it. Ex. SBC - required: false - role: - type: string - description: The role of the node, the configuration will be defined for it. Ex. Active, Standby - required: false - function: - type: string - description: The function of the node, the configuration will be defined for it. Ex. NAT Traversal - required: false - org.openecomp.resource.cp.nodes.network.v2.SubInterface: - derived_from: tosca.nodes.Root - properties: - ip_address: - description: Allow the user to set a fixed IP address. Note that this address is a request to the provider which they will attempt to fulfill but may not be able to dependent on the network the port is associated with. - type: string - required: false - order: - description: 'The order of the NIC on the compute instance (e.g. eth2). Note: - when binding more than one port to a single compute (aka multi vNICs) and - ordering is desired, it is *mandatory* that all ports will be set with an - order value and. The order values must represent a positive, arithmetic - progression that starts with 0 (e.g. 0, 1, 2, ..., n).' - type: integer - default: 0 - required: false - constraints: - - greater_or_equal: 0 - is_default: - description: Set is_default=true to apply a default gateway route on the running compute instance to the associated network gateway. Only one port that is associated to single compute node can set as default=true. - type: boolean - default: false - required: false - ip_range_start: - description: Defines the starting IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - ip_range_end: - description: Defines the ending IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - attributes: - ip_address: - description: The IP address would be assigned to the associated compute instance. - type: string - requirements: - - subinterface_link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - 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.vfc.nodes.Compute: - derived_from: tosca.nodes.Compute - capabilities: - disk.ephemeral.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.ephemeral.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of ephemeral disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - instance: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: instance - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: instance - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Existence of instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu.delta: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu.delta - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used since previous datapoint - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Delta - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu_util: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: '%' - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu_util - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average CPU utilization - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.root.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.root.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of root disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - vcpus: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: vcpu - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: vcpus - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of virtual CPUs allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance from the amount of its allocated memory - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.resident: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.resident - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance on the physical machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.MultiFlavorVFC: - derived_from: org.openecomp.resource.abstract.nodes.VFC - properties: - images: - type: map - entry_schema: - type: org.openecomp.datatypes.ImageInfo - required: false - org.openecomp.nodes.PortMirroringConfigurationByPolicy: - derived_from: tosca.nodes.Root - properties: - collector_node: - type: string - description: The name of the Collector Proxy - required: true - policy_name: - type: string - description: The name of the policy for selection of the collector interfaces - required: true - equip_model: - type: string - description: The name of the equipment type of the collector, i.e. Cisco 4500x - required: true - equip_vendor: - type: string - description: The name of the equipment vendor of the collector, i.e. Cisco - required: true - requirements: - - source: - capability: org.openecomp.capabilities.PortMirroring - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.VF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_naming_code: - type: string - nf_type: - type: string - nf_naming: - type: org.openecomp.datatypes.Naming - Default: true - availability_zone_max_count: - type: integer - default: 1 - constraints: - - valid_values: - - 0 - - 1 - - 2 - min_instances: - type: integer - max_instances: - type: integer - multi_stage_design: - type: boolean - default: false - 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.nodes.ForwardingPath: - derived_from: tosca.nodes.Root - properties: - target_range: - type: list - required: true - status: SUPPORTED - 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 - required: true - status: SUPPORTED - requirements: - - forwarder: - capability: org.openecomp.capabilities.Forwarder - relationship: org.openecomp.relationships.ForwardsTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.cp.nodes.heat.network.contrail.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - org.openecomp.resource.cp.nodes.network.SubInterface: - derived_from: tosca.nodes.network.Port - org.openecomp.resource.vfc.nodes.heat.contrail.Compute: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - attributes: - tenant_id: - type: string - description: Tenant id of the VM - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of active VMs - status: SUPPORTED - virtual_machines: - type: string - description: VMs of this compute - status: SUPPORTED - status: - type: string - description: status of the compute - status: SUPPORTED - org.openecomp.resource.cp.nodes.network.Port: - derived_from: tosca.nodes.network.Port - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - 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 - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - subinterface_indicator: - description: identifies if Port is having Sub Interface - type: boolean - required: false - default: false - related_networks: - type: list - description: Related Networks List. - required: false - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - capabilities: - network.incoming.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - forwarder: - type: org.openecomp.capabilities.Forwarder - network.outgoing.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outpoing.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outpoing.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.nodes.VRFEntry: - derived_from: tosca.nodes.Root - requirements: - - routing_configuration_internal: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - - routing_configuration_external: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.cp.extCP: - derived_from: tosca.nodes.Root - description: The SDC Connection Point base type all other CP derive from - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - network_role_tag: - type: string - required: true - description: Must correlate to the set of defined “network-role” tag identifiers from the associated HEAT template - mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements - required: false - description: identifies MAC address assignments to the CP - vlan_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.VlanRequirements - required: false - description: identifies vlan address assignments to the CP - ip_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.IpRequirements - required: true - description: identifies IP requirements to the CP - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - 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 - relationship: tosca.relationships.network.LinksTo - node: org.openecomp.resource.vl.VL - capabilities: - internal_connectionPoint: - type: tosca.capabilities.Node - valid_source_type: - - tosca.nodes.network.Port - org.openecomp.nodes.FabricConfiguration: - derived_from: org.openecomp.nodes.Configuration - requirements: - - fabric_configuration_monitoring: - capability: org.openecomp.capabilities.FabricConfiguration - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.contrail.AbstractSubstitute: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - static_routes_list: - type: list - description: Static routes enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - ordered_interfaces: - type: boolean - description: Indicates if service interface are ordered - required: false - default: false - status: SUPPORTED - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - service_interface_type_list: - type: list - description: List of interface types - required: true - status: SUPPORTED - entry_schema: - type: string - constraints: - - valid_values: - - management - - left - - right - - other - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - interface_list: - type: list - description: List of interfaces - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.contrail.InterfaceData - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - shared_ip_list: - type: list - description: Shared ips enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - attributes: - tenant_id: - type: string - description: Tenant id of the Service Instance - status: SUPPORTED - fq_name: - type: string - description: The FQ name of the service instance - status: SUPPORTED - service_template_name: - type: string - description: Service Template of the Service Instance - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of service VMs active for this Service Instance - status: SUPPORTED - service_instance_name: - type: string - description: The name of the service instance - status: SUPPORTED - virtual_machines: - type: string - description: Service VMs for the Service Instance - status: SUPPORTED - status: - type: string - description: Status of the service instance - status: SUPPORTED - org.openecomp.resource.abstract.nodes.AbstractSubstitute: - derived_from: tosca.nodes.Root - properties: - service_template_filter: - type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering - description: Substitution Filter - required: true - status: SUPPORTED - org.openecomp.resource.cp.nodes.heat.network.neutron.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_profile: - type: tosca.datatypes.nfv.VlProfile - required: true - capabilities: - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.Cp: - derived_from: tosca.nodes.Root - properties: - layer_protocol: - type: list - entry_schema: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - required: true - role: - type: string - constraints: - - valid_values: - - root - - leaf - required: false - description: - type: string - required: false - protocol_data: - type: list - entry_schema: - type: tosca.datatypes.nfv.CpProtocolData - required: true - trunk_mode: - type: boolean - required: true - allowed_address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.nodes.nfv.VnfVirtualLinkDesc: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_flavours: - type: map - entry_schema: - type: tosca.datatypes.nfv.VlFlavour - required: true - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - org.openecomp.resource.vfc.AllottedResource: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - role: - type: string - required: true - description: Unique label that defines the role that this allotted resource performs - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - target_network_role: - type: string - required: true - description: Target network role - requirements: - - service_dependency: - capability: org.openecomp.capabilities.AllottedResource - relationship: tosca.relationships.DependsOn - node: tosca.services.Root - tosca.nodes.nfv.ext.zte.VDU: - derived_from: tosca.nodes.Root - properties: - manual_scale_select_vim: - type: boolean - required: false - vdu_type: - type: string - required: false - watchdog: - type: tosca.datatypes.nfv.ext.zte.WatchDog - required: false - name: - type: string - required: false - local_affinity_antiaffinity_rule: - type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule - required: false - support_scaling: - type: boolean - required: false - storage_policy: - type: string - required: false - key_vdu: - type: boolean - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - inject_data_list: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.InjectData - 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 - 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 - tosca.nodes.nfv.VDU: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - Virtualbinding: - type: tosca.capabilities.nfv.VirtualBindable - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - properties: - bitrate_requirement: - type: integer - required: false - vnic_name: - type: string - required: false - vnic_order: - type: integer - required: false - vnic_type: - type: string - constraints: - - valid_values: - - normal - - macvtap - - direct - - baremetal - - direct-physical - - virtio-forwarder - required: false - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - required: false - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - - virtual_binding: - capability: tosca.capabilities.nfv.VirtualBindable - relationship: tosca.relationships.nfv.VirtualBindsTo - node: tosca.nodes.nfv.Vdu.Compute - org.openecomp.resource.vfc.NSD: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - nsd_id: - type: string - required: true - description: ID of the NSD - nsd_designer: - type: string - required: true - description: Designer of the NSD - nsd_version: - type: string - required: true - description: Version of the NSD - nsd_name: - type: string - required: true - description: Name of the NSD - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - boot_order: - type: map - entry_schema: - type: string - required: false - nfvi_constraints: - type: map - entry_schema: - type: string - required: false - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - required: true - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - required: true - inject_files: - type: tosca.datatypes.nfv.injectFile - required: false - meta_data: - type: map - entry_schema: - type: string - required: false - user_data: - type: string - required: false - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - requirements: - - virtual_storage: - capability: tosca.capabilities.nfv.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - node: tosca.nodes.nfv.Vdu.VirtualStorage - occurences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.GenericNeutronNet: - derived_from: org.openecomp.resource.vl.extVL - description: Generic Neutron Network - properties: - network_role: - type: string - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_assignments: - type: org.openecomp.datatypes.network.NetworkAssignments - network_flows: - type: org.openecomp.datatypes.network.NetworkFlows - network_scope: - type: string - network_ecomp_naming: - type: org.openecomp.datatypes.EcompNaming - network_type: - type: string - description: ECOMP supported network types. - default: NEUTRON - provider_network: - type: org.openecomp.datatypes.network.ProviderNetwork - network_technology: - type: string - description: ECOMP supported network technology - default: NEUTRON - network_homing: - type: org.openecomp.datatypes.EcompHoming - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 1 - - UNBOUNDED - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - properties: - type_of_storage: - type: string - constraints: - - valid_values: - - volume - - object - - root - - block - required: true - size_of_storage: - type: scalar-unit.size - required: true - vdu_storage_requirements: - type: map - entry_schema: - type: string - required: false - rdma_enabled: - type: boolean - required: false - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - tosca.nodes.nfv.ext.zte.VL: - derived_from: tosca.nodes.Root - properties: - segmentation_id: - type: string - required: false - network_name: - type: string - required: false - is_predefined: - type: boolean - required: false - mtu: - type: integer - required: false - dns_nameservers: - type: list - required: false - entry_schema: - type: string - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - network_id: - type: string - required: false - host_routes: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.HostRouteInfo - ip_version: - type: integer - required: false - vendor: - type: string - required: false - name: - type: string - required: false - start_ip: - type: string - required: false - vlan_transparent: - type: boolean - required: false - cidr: - type: string - required: false - gateway_ip: - type: string - required: false - network_type: - type: string - required: false - end_ip: - type: string - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.ext.LocalStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: string - required: false - disk_type: - type: string - required: false - capabilities: - local_attachment: - type: tosca.capabilities.nfv.ext.LocalAttachment - tosca.nodes.nfv.ext.zte.CP: - derived_from: tosca.nodes.Root - properties: - guest_os_mtu: - type: integer - required: false - bandwidth: - type: integer - required: false - interface_name: - type: string - required: false - allowed_address_pairs: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.AddressPairs - ip_address: - type: string - required: false - bond: - type: string - required: false - proxiedVNFs: - type: list - required: false - entry_schema: - type: string - sfc_encapsulation: - type: string - required: false - floating_ip_address: - type: tosca.datatypes.nfv.ext.FloatingIP - required: false - service_ip_address: - required: false - type: string - mac_address: - type: string - required: false - proxiedVNFtype: - type: string - required: false - macbond: - type: string - required: false - vnic_type: - type: string - required: false - direction: - type: string - required: false - order: - type: integer - required: false - requirements: - - forwarder: - capability: tosca.capabilities.nfv.Forwarder - occurrences: - - 0 - - UNBOUNDED - - virtualbinding: - capability: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 0 - - UNBOUNDED - - virtualLink: - capability: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 0 - - UNBOUNDED - capabilities: - forwarder: - type: tosca.capabilities.nfv.Forwarder - tosca.nodes.nfv.ext.ImageFile: - derived_from: tosca.nodes.Root - properties: - file_url: - type: string - required: false - container_type: - type: string - required: false - name: - type: string - required: false - disk_format: - type: string - required: false - version: - type: string - required: false - capabilities: - guest_os: - type: tosca.capabilities.nfv.ext.GuestOs - image_fle: - type: tosca.capabilities.nfv.ext.ImageFile - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - properties: - descriptor_id: - type: string - required: true - descriptor_version: - type: string - required: true - provider: - type: string - required: true - product_name: - type: string - required: true - software_version: - type: string - required: true - product_info_name: - type: string - required: false - product_info_description: - type: string - required: false - vnfm_info: - type: list - entry_schema: - type: string - required: true - localization_languages: - type: list - entry_schema: - type: string - required: false - default_localization_language: - type: string - required: false - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - required: false - modifiable_attributes: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributes - required: false - flavour_id: - type: string - required: true - flavour_description: - type: string - required: true - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - occurrences: - - 0 - - UNBOUNDED - interfaces: - Nfv: - type: tosca.interfaces.nfv.vnf.lifecycle.Nfv - org.openecomp.resource.vl.overlaytunnel: - derived_from: tosca.nodes.Root - description: This entity represents abstract overlay tunnel end point. - properties: - id: - type: string - description: Identifier of the Tunnel Endpoint node. - required: false - template_name: - type: string - required: false - version: - type: string - required: false - name: - type: string - description: Overlay tunnel name used by for reference by the administrator. - required: false - description: - type: string - description: Additional comments/information about overlay tunnel. - required: false - tunnelType: - type: string - constraints: - - valid_values: - - L3-DCI - - L2-DCI - description: type defines if the overlay tunnel is L3-DCI tunnel or L2-DCI tunnel. - required: true - site1_id: - type: string - description: Identifier of first DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site1_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site1_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site1_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site1_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site1_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site1_vni: - type: integer - description: VXLAN ID - required: false - site1_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site1_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site1_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - site2_id: - type: string - description: Identifier of second DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site2_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site2_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site2_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site2_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site2_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site2_vni: - type: integer - description: VXLAN ID - required: false - site2_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site2_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site2_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.vl.underlayvpn: - derived_from: tosca.nodes.Root - description: undelay vpn type definitions - properties: - id: - type: string - required: false - template_name: - type: string - required: false - version: - type: string - required: false - vendor: - type: string - required: false - template_author: - type: string - required: false - name: - type: string - required: false - description: - type: string - required: false - serviceType: - type: string - description: type of VPN service - required: false - default: l3vpn_sptn - topology: - type: string - description: type of VPN topology - constraints: - - valid_values: - - full-mesh - - point_to_multipoint - - point_to_point - - singlePoint - - hubspoke - - hubspoke_via_hubce - - hubspoke_disjoint - - ADD_DROP_Z - required: false - default: full-mesh - technology: - type: string - description: type of VPN technology - constraints: - - valid_values: - - mpls - - rosen multivpn - - vxlan overlay l3vpn - - eth over sdh - - vlan - required: false - default: mpls - site1_name: - type: string - description: name of first site - required: false - site2_name: - type: string - description: name of second site - required: false - sna1_name: - type: string - description: name of site network accesses associated with the site1 - required: false - sna2_name: - type: string - description: name of site network accesses associated with the site2 - required: false - pe1_id: - type: string - description: id of provider edge1, it can be name or ip or uuid - required: false - pe2_id: - type: string - description: id of provider edge2, it can be name or ip or uuid - required: false - ac1_id: - type: string - description: id of attachment circuit1, it can be port name or uuid - required: false - ac1_svlan: - type: integer - description: ac1 svlan - required: false - ac1_ip: - type: string - description: ip of ac1, only for layer3 vpn, it should contain mask - required: false - ac1_peer_ip: - type: string - description: ip of ac1 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac1_route: - type: string - description: route configure of ac1, only for layer3 vpn - required: false - ac1_protocol: - type: string - description: routing protocol type of ac1, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - required: false - ac1_protocol_bgp_as: - type: string - description: autonomous-system number of ac1, , only required for ebgp protocol - required: false - ac2_id: - type: string - description: id of attachment circuit2, it can be port name or uuid - required: false - ac2_svlan: - type: integer - description: ac2 svlan - required: false - ac2_ip: - type: string - description: ip of ac2, only for layer3 vpn, it should contain mask - required: false - ac2_peer_ip: - type: string - description: ip of ac2 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac2_route: - type: string - description: route configure of ac2, only for layer3 vpn - required: false - ac2_protocol: - type: string - description: routing protocol type of ac2, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - default: STATIC - required: false - ac2_protocol_bgp_as: - type: string - description: autonomous-system number of ac2, , only required for ebgp protocol - required: false - af_type: - type: string - description: address family type - default: ipv4 - required: false - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/policies.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/policies.yml deleted file mode 100644 index 6063d085..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/policies.yml +++ /dev/null @@ -1,134 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -policy_types: - tosca.policies.Root: - description: The TOSCA Policy Type all other TOSCA Policy Types derive from - tosca.policies.Placement: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern placement of TOSCA nodes or groups of nodes. - tosca.policies.Scaling: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern scaling of TOSCA nodes or groups of nodes. - tosca.policies.Update: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern update of TOSCA nodes or groups of nodes. - tosca.policies.Performance: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to declare performance requirements for TOSCA nodes or groups of nodes. - org.openecomp.policies.placement.Antilocate: - derived_from: tosca.policies.Placement - description: My placement policy for separation based upon container type value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - container_type: - type: string - description: container type - required: false - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.Colocate: - derived_from: tosca.policies.Placement - description: Keep associated nodes (groups of nodes) based upon affinity value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - affinity: - type: string - description: affinity - required: true - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.valet.Diversity: - derived_from: tosca.policies.Placement - description: Valet Diversity - properties: - level: - type: string - description: diversity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Exclusivity: - derived_from: tosca.policies.Placement - description: Valet Exclusivity - properties: - level: - type: string - description: exclusivity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Affinity: - derived_from: tosca.policies.Placement - description: Valet Affinity - properties: - level: - type: string - description: affinity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.scaling.Fixed: - derived_from: tosca.policies.Scaling - properties: - quantity: - description: the exact number of instances to keep up - type: integer - required: true - org.openecomp.policies.External: - derived_from: tosca.policies.Root - description: externally managed policy (for example, type="network assignment", source="Policy Manager", name="route target") - properties: - source: - type: string - description: The name of the server that exposes the policy with predefined type and name. - required: false - type: - type: string - description: The type (category) of the policy same as it is defined in the source. - required: false - name: - type: string - description: The name of the policy, that related to specific type, same as it is defined in the source. - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/relationships.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/relationships.yml deleted file mode 100644 index b1b554d1..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/relationships.yml +++ /dev/null @@ -1,142 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- capabilities.yml -- data.yml -- interfaces.yml -relationship_types: - tosca.relationships.Root: - description: This is the default (root) TOSCA Relationship Type definition that all other TOSCA Relationship Types derive from. - attributes: - tosca_id: - description: A unique identifier of the realized instance of a Relationship Template that derives from any TOSCA normative type. - type: string - tosca_name: - description: This attribute reflects the name of the Relationship Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment. - type: string - state: - description: The state of the relationship instance. - type: string - default: initial - interfaces: - Configure: - type: tosca.interfaces.relationship.Configure - tosca.relationships.RoutesTo: - derived_from: tosca.relationships.ConnectsTo - description: This type represents an intentional network routing between two Endpoints in different networks. - valid_target_types: - - tosca.capabilities.Endpoint - tosca.relationships.network.LinksTo: - derived_from: tosca.relationships.DependsOn - description: This relationship type represents an association relationship between Port and Network node types. - valid_target_types: - - tosca.capabilities.network.Linkable - tosca.relationships.AttachesTo: - derived_from: tosca.relationships.Root - description: This type represents an attachment relationship between two nodes. For example, an AttachesTo relationship type would be used for attaching a storage node to a Compute node. - valid_target_types: - - tosca.capabilities.Attachment - properties: - location: - description: 'The relative location (e.g., path on the file system), which - provides the root location to address an attached node. e.g., a mount point - / path such as ''/usr/data''. Note: The user must provide it and it cannot - be "root".' - type: string - constraints: - - min_length: 1 - device: - description: The logical device name which for the attached device (which is represented by the target node in the model). e.g., '/dev/hda1'. - type: string - required: false - attributes: - device: - description: 'The logical name of the device as exposed to the instance. Note: - A runtime property that gets set when the model gets instantiated by the - orchestrator.' - type: string - tosca.relationships.network.BindsTo: - derived_from: tosca.relationships.DependsOn - description: This type represents a network association relationship between Port and Compute node types. - valid_target_types: - - tosca.capabilities.network.Bindable - tosca.relationships.HostedOn: - derived_from: tosca.relationships.Root - description: This type represents a hosting relationship between two nodes. - valid_target_types: - - tosca.capabilities.Container - tosca.relationships.DependsOn: - derived_from: tosca.relationships.Root - description: This type represents a general dependency relationship between two nodes. - valid_target_types: - - tosca.capabilities.Node - tosca.relationships.ConnectsTo: - derived_from: tosca.relationships.Root - description: This type represents a network connection relationship between two nodes. - valid_target_types: - - tosca.capabilities.Endpoint - properties: - credential: - type: tosca.datatypes.Credential - required: false - 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 - org.openecomp.relationships.ForwardsTo: - derived_from: tosca.relationships.Root - valid_target_types: - - org.openecomp.capabilities.Forwarder - org.openecomp.relationships.AssignsTo: - derived_from: tosca.relationships.Root - org.openecomp.relationships.RoutesTo: - derived_from: tosca.relationships.RoutesTo - description: This type represents an intentional network routing between internal and external network - tosca.relationships.nfv.VirtualBindsTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualBindable - tosca.relationships.nfv.VirtualLinksTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualLinkable - tosca.relationships.nfv.Vdu.AttachedTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualStorage diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCompute-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCompute-template.yml deleted file mode 100644 index 546f88a8..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCompute-template.yml +++ /dev/null @@ -1,103 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - description: VDU Compute - properties: - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - inject_files: - type: tosca.datatypes.nfv.injectFile - name: - type: string - nfvi_constraints: - type: map - entry_schema: - type: string - meta_data: - type: map - entry_schema: - type: string - description: - type: string - user_data: - type: string - boot_order: - type: map - entry_schema: - type: string - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCp-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCp-template.yml deleted file mode 100644 index ec266374..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduCp-template.yml +++ /dev/null @@ -1,59 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - description: VDU Cp - properties: - vnic_name: - type: string - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - bitrate_requirement: - type: integer - vnic_order: - type: integer - vnic_type: - type: string - requirements: - - virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduVirtualstorage-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduVirtualstorage-template.yml deleted file mode 100644 index 566f7054..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-VduVirtualstorage-template.yml +++ /dev/null @@ -1,50 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - description: VDU VirtualStorage - properties: - vdu_storage_requirements: - type: map - entry_schema: - type: string - size_of_storage: - type: scalar-unit.size - rdma_enabled: - type: boolean - type_of_storage: - type: string - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template-interface.yml deleted file mode 100644 index 93cb070e..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template-interface.yml +++ /dev/null @@ -1,208 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.resource.vf.Vgw1181049: - derived_from: org.openecomp.resource.abstract.nodes.VF - properties: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - capabilities: - vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template.yml deleted file mode 100644 index 76087a6e..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vgw1181049-template.yml +++ /dev/null @@ -1,288 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -- resource-VNF: - file: resource-Vnf-template.yml -- resource-VnfVirtualLink: - file: resource-Vnfvirtuallink-template.yml -- resource-VDU Cp: - file: resource-VduCp-template.yml -- resource-VDU VirtualStorage: - file: resource-VduVirtualstorage-template.yml -- resource-VDU Compute: - file: resource-VduCompute-template.yml -topology_template: - inputs: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - node_templates: - LLU_VNF: - type: tosca.nodes.nfv.VNF - metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - customizationUUID: 06bffc87-30c7-42ad-b99d-19c6c13405dc - version: '1.0' - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - descriptor_id: b1bb0ce7-2222-4fa7-95ed-4840d70a1177 - provider: onap - vnfm_info: - - gvnfm - flavour_id: simple - descriptor_version: '1.0' - software_version: '1.0' - flavour_description: simple - product_name: vcpe_vgw - VL_mux_gw_private_net: - type: tosca.nodes.nfv.VnfVirtualLink - metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - customizationUUID: fbea54ef-8f8b-4f35-81d6-997a47282698 - version: '1.0' - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - vl_profile: - min_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - max_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - networkName: mux_gw_private_net_id - cidr: 192.168.0.0/24 - dhcpEnabled: false - connectivity_type: - layer_protocol: ipv4 - VDU_vgw_0: - type: tosca.nodes.nfv.Vdu.Compute - metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - customizationUUID: 93c3f2e3-67e7-4bb4-be11-8a48df924c4c - version: '1.0' - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - configurable_properties: - additional_vnfc_configurable_properties: { - } - name: vdu_vgw_0 - description: vgw - vdu_profile: - watchdog: none - min_number_of_instances: 1 - max_number_of_instances: 1 - requirements: - - virtual_storage: - capability: virtual_storage - node: VirtualStorage_root_all - capabilities: - virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - VirtualStorage_root_all: - type: tosca.nodes.nfv.Vdu.VirtualStorage - metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - customizationUUID: dc20e1ad-aed9-4154-b2b4-3a702eee49a7 - version: '1.0' - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - size_of_storage: 40 GB - type_of_storage: root - Cp_vgw_mux_gw_private_net: - type: tosca.nodes.nfv.VduCp - metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - customizationUUID: b5ff315f-effc-46e9-a0c5-aec1954845e0 - version: '1.0' - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - trunk_mode: false - protocol_data: - - asscociated_layer_protocol: ipv4 - address_data: - address_type: ip_address - l3_address_data: - fixed_ip_address: - - 192.168.0.1 - ip_address_assignment: false - floating_ip_activated: false - layer_protocol: - - ipv4 - virtual_network_interface_requirements: - - name: "sriov-support" - support_mandatory: true - network_interface_requirements: - interfaceType: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform":"generic", "mandatory": "true", "configurationValue": "PCI-Passthrough"}' - nic_io_requirements: - logical_node_requirements: - pciDeviceId: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": "generic", "mandatory": "true", "configurationValue": "5678"}' - requirements: - - virtual_link: - capability: virtual_linkable - node: VL_mux_gw_private_net - - virtual_binding: - capability: virtual_binding - node: VDU_vgw_0 - substitution_mappings: - node_type: org.openecomp.resource.vf.Vgw1181049 - capabilities: - vl_mux_gw_private_net.feature: - - vl_mux_gw_private_net - - feature - cp_vgw_mux_gw_private_net.feature: - - cp_vgw_mux_gw_private_net - - feature - vdu_vgw_0.virtual_compute: - - vdu_vgw_0 - - virtual_compute - vdu_vgw_0.virtual_binding: - - vdu_vgw_0 - - virtual_binding - virtualstorage_root_all.virtual_storage: - - virtualstorage_root_all - - virtual_storage - llu_vnf.feature: - - llu_vnf - - feature - vl_mux_gw_private_net.virtual_linkable: - - vl_mux_gw_private_net - - virtual_linkable - vl_mux_gw_private_net.monitoring_parameter: - - vl_mux_gw_private_net - - monitoring_parameter - vdu_vgw_0.monitoring_parameter: - - vdu_vgw_0 - - monitoring_parameter - virtualstorage_root_all.feature: - - virtualstorage_root_all - - feature - vdu_vgw_0.feature: - - vdu_vgw_0 - - feature - requirements: - vdu_vgw_0.virtual_storage: - - vdu_vgw_0 - - virtual_storage - vl_mux_gw_private_net.dependency: - - vl_mux_gw_private_net - - dependency - virtualstorage_root_all.dependency: - - virtualstorage_root_all - - dependency - vdu_vgw_0.dependency: - - vdu_vgw_0 - - dependency - cp_vgw_mux_gw_private_net.virtual_binding: - - cp_vgw_mux_gw_private_net - - virtual_binding - cp_vgw_mux_gw_private_net.dependency: - - cp_vgw_mux_gw_private_net - - dependency - llu_vnf.dependency: - - llu_vnf - - dependency - llu_vnf.virtual_link: - - llu_vnf - - virtual_link - cp_vgw_mux_gw_private_net.virtual_link: - - cp_vgw_mux_gw_private_net - - virtual_link diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnf-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnf-template.yml deleted file mode 100644 index 121aba2c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnf-template.yml +++ /dev/null @@ -1,70 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - description: VNF - properties: - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - product_info_name: - type: string - default_localization_language: - type: string - flavour_id: - type: string - flavour_description: - type: string - product_name: - type: string - descriptor_id: - type: string - product_info_description: - type: string - provider: - type: string - descriptor_version: - type: string - vnfm_info: - type: list - entry_schema: - type: string - software_version: - type: string - localization_languages: - type: list - entry_schema: - type: string - requirements: - - virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnfvirtuallink-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnfvirtuallink-template.yml deleted file mode 100644 index d39b1b3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/resource-Vnfvirtuallink-template.yml +++ /dev/null @@ -1,57 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - description: VnfVirtualLink - properties: - vl_profile: - type: tosca.datatypes.nfv.VlProfile - description: - type: string - test_access: - type: list - entry_schema: - type: string - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template-interface.yml deleted file mode 100644 index 45fc3065..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template-interface.yml +++ /dev/null @@ -1,176 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.service.Testns8: - derived_from: org.openecomp.resource.abstract.nodes.service - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - requirements: - - vgw11810490.llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - vgw11810490.llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template.yml deleted file mode 100644 index 9d9bdc3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/Definitions/service-Testns8-template.yml +++ /dev/null @@ -1,135 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 5be056bd-1ecd-4c14-9465-3bbc994190ee - UUID: 188ed3c6-1573-4b2d-9d3f-a03693bed79b - name: TestNs8 - description: test - type: Service - category: Network Service - serviceType: '' - serviceRole: '' - instantiationType: A-la-carte - serviceEcompNaming: true - ecompGeneratedNaming: true - namingPolicy: '' - environmentContext: General_Revenue-Bearing -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- service-TestNs8-interface: - file: service-Testns8-template-interface.yml -- resource-vgw1181049: - file: resource-Vgw1181049-template.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -topology_template: - node_templates: - vgw1181049 0: - type: org.openecomp.resource.vf.Vgw1181049 - metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - customizationUUID: 32efc3ac-6fd2-4cda-9f15-592e54f41560 - version: '1.0' - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' - properties: - nf_naming: - ecomp_generated_naming: true - multi_stage_design: false - availability_zone_max_count: 1 - capabilities: - vdu_vgw_0.virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform": - "generic","mandatory": "true", "configurationValue": "1024"}' - memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": - "generic", "mandatory": "true", "configurationValue": "2 MB"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - substitution_mappings: - node_type: org.openecomp.service.Testns8 - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - - vgw11810490 - - virtualstorage_root_all.virtual_storage - vgw11810490.llu_vnf.feature: - - vgw11810490 - - llu_vnf.feature - vgw11810490.vdu_vgw_0.monitoring_parameter: - - vgw11810490 - - vdu_vgw_0.monitoring_parameter - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - - vgw11810490 - - vl_mux_gw_private_net.monitoring_parameter - vgw11810490.cp_vgw_mux_gw_private_net.feature: - - vgw11810490 - - cp_vgw_mux_gw_private_net.feature - vgw11810490.vl_mux_gw_private_net.feature: - - vgw11810490 - - vl_mux_gw_private_net.feature - vgw11810490.vdu_vgw_0.feature: - - vgw11810490 - - vdu_vgw_0.feature - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - - vgw11810490 - - vl_mux_gw_private_net.virtual_linkable - vgw11810490.vdu_vgw_0.virtual_binding: - - vgw11810490 - - vdu_vgw_0.virtual_binding - vgw11810490.virtualstorage_root_all.feature: - - vgw11810490 - - virtualstorage_root_all.feature - vgw11810490.vdu_vgw_0.virtual_compute: - - vgw11810490 - - vdu_vgw_0.virtual_compute - requirements: - vgw11810490.vdu_vgw_0.virtual_storage: - - vgw11810490 - - vdu_vgw_0.virtual_storage - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_link - vgw11810490.llu_vnf.dependency: - - vgw11810490 - - llu_vnf.dependency - vgw11810490.virtualstorage_root_all.dependency: - - vgw11810490 - - virtualstorage_root_all.dependency - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - - vgw11810490 - - cp_vgw_mux_gw_private_net.dependency - vgw11810490.llu_vnf.virtual_link: - - vgw11810490 - - llu_vnf.virtual_link - vgw11810490.vl_mux_gw_private_net.dependency: - - vgw11810490 - - vl_mux_gw_private_net.dependency - vgw11810490.vdu_vgw_0.dependency: - - vgw11810490 - - vdu_vgw_0.dependency - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_binding diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/TOSCA-Metadata/TOSCA.meta b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/TOSCA-Metadata/TOSCA.meta deleted file mode 100644 index e65ed508..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,7 +0,0 @@ -TOSCA-Meta-File-Version: 1.0 -CSAR-Version: 1.1 -Created-By: Carlos Santana -Entry-Definitions: Definitions/service-Testns8-template.yml - -Name: csar.meta -Content-Type: text/plain diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/csar.meta b/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/csar.meta deleted file mode 100644 index bc3359ce..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciDeviceId/csar.meta +++ /dev/null @@ -1,2 +0,0 @@ -SDC-TOSCA-Meta-File-Version: 1.0 -SDC-TOSCA-Definitions-Version: 9.0 diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa deleted file mode 100644 index 60597577..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxsekiqwLgs9VfChnr2bnpLC3VqD1iT+s969vWe05j1RDozPu -zyD3krNgVUcd65x2QQJWrDK2fnyQUtubbPb3wviLXs0Gof4a/b65JsMQkeeC2/OK -aFvrE6D3heouXmWO1vo1iXy2hUhcfXdr6eM3rP3zpU9zb2Al25/90Ha8kKBpe1RS -PKHpmcqVXIpGVxJSXnioAFXUsJ687qrTv7Zm13AHkm2L1Y5IvMsGHLFjFTGFlFoY -ftQQAepF507CFqs66tD378vvNVg8LYqrKpnfdx2PIRNLHAa1xQWc0EvwGHyBQZRL -hTXS3M3IZ7Y22dJ+3Zg15PMx7QmWDZO5MG/JPwIDAQABAoIBAE5KS1AiutXmezDP -aSb4TLvcrhj8hDhuT92txxmQCV+ePJWG2sPRpDCvXX246NvnX9vy49gmkSH4RY+c -1vZvvt2XrqzD65zZzB+sgpf1tA0DNdMTdKvtqASvHU4tEd4z+bJKEdP4vpp4CZWQ -93vC9ia4TsIJLNns8Hwz42+7lEEResKYZA2djGnzHl+83vR1dm0GGBD6BKR1C3Cx -HbEhqx42EV61+8nAweQNjWKxeAc2hg+H8o8qWJM1aKy0TnqW6kudOYRyYIpX0rJA -siE2HwvDA1mDd5M8ntZ/Cx0pnTc/cuZB8BQJ0jN1JXbrJGbWspBNXformw7isbyO -WIOjvEECgYEA84XKV3aPrTE2JBs5vzzs59NMPV+5frw+xzDyPxqK5Q7+jjVKDwxh -/WRatCaTdRxhOI905HfVsDYjrsPOpmF9MHsLxmBhwk8zBFOu/xtYr7zBNkJhmCsq -kZMdxf8bpu08E7kMQJ2MvT7OhM5HRlWIUR0jdja8Hz51Ro4oOb/po7kCgYEA0Pb5 -v12ZsaSHMF0r4l983PifNwYmI22iQIEtRT2DxgTkDKgBTjbRzqZmEhaADMAO48o9 -sIZy+KJ/a8G9fPQVwMgBID8zOHnWsrFmM3qkj5hhrAQdtq7OE71zgaP0tyE1TG4u -Zs3a7eSyuoildHHFqX88oXSYsTlfV8vn23UpwLcCgYEAwXiCuBger8dQL0FeEJwz -zz5k7MG3WoPuEEzHuPC6dp8CCDM4IlqBI1JuaX/YWQtyBgCbKsQ2BigNE1THQhJj -5ndrdHCwWjKX4pElj9HHFN+OVTBJ3x40VLGfzuUNsAH8X+L9Y/yHivZyFrrXj352 -rZLL0KhNrzjs7WAVf0QEOCkCgYBe2s1xnZZnueyX+qMyBfBTChST0Jm9WUXejAS1 -un+3gn7Wc+jrzRyd9pC8wzPrFb9sjWBFYjKMRI8cpfxS3SWGtgM01Rt2FnBr+vUO -hyxt9ljX0aJ/S4hGE6h7/6XU/yEHibhMeENZ24d5/w9D9WUpVJV8IMYzJHzwCKI9 -z0hdrwKBgQDMKvY3DBpZjhZe9YnOgdj4SRpNwaasUSf3a3SZYY1JyOZVUzeSSzoX -rYLfxBRDjkJ8Nnod+nR/JSRqYa/SJYEMZEZFsC+k/pvBiaP6tk694IlpLD/2MXN6 -14FUV5LH/rGSbZJMSfZ9yNX1XZDowH8nOu+qlmlU4lmgiOuityTmtw== ------END RSA PRIVATE KEY----- diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image deleted file mode 100644 index f31d15df..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image +++ /dev/null @@ -1 +0,0 @@ -ubuntu_16.04 diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml deleted file mode 100644 index c49c2c69..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendorecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F118291.0entitlement pool12341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB39089 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml deleted file mode 100644 index db573afd..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendor2455e00dddf84eedaaed6eb412d39a7eentitlement poolecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F1182912341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB390891.0feature groupd3780d334c4c42d38c7ab1ec23a65cfd4444 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/annotations.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/annotations.yml deleted file mode 100644 index 2f146061..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/annotations.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -annotation_types: - org.openecomp.annotations.Source: - description: Indicates the origin source of an input - properties: - source_type: - type: string - vf_module_label: - type: list - description: List of VF Modules this input was originated from - entry_schema: - type: string - param_name: - type: string - description: Source parameter name diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/artifacts.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/artifacts.yml deleted file mode 100644 index 175615c7..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/artifacts.yml +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -artifact_types: - tosca.artifacts.Root: - description: This is the default (root) TOSCA Artifact Type definition that all other TOSCA base Artifact Types derive from. - tosca.artifacts.Deployment.Image: - derived_from: tosca.artifacts.Deployment - description: This artifact type represents a parent type for any "image" which is an opaque packaging of a TOSCA Node's deployment (whether real or virtual) whose contents are typically already installed and pre-configured (i.e., "stateful") and prepared to be run on a known target container. - tosca.artifacts.Implementation.Bash: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Bash script type that contains Bash commands that can be executed on the Unix Bash shell. - tosca.artifacts.Deployment.Image.VM: - derived_from: tosca.artifacts.Deployment - description: This artifact represents the parent type for all Virtual Machine (VM) image and container formatted deployment artifacts. These images contain a stateful capture of a machine (e.g., server) including operating system and installed software along with any configurations and can be run on another machine using a hypervisor which virtualizes typical server (i.e., hardware) resources. - tosca.artifacts.Implementation.Python: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Python file that contains Python language constructs that can be executed within a Python interpreter. - tosca.artifacts.Deployment: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all deployment artifacts in TOSCA. This class of artifacts typically represents a binary packaging of an application or service that is used to install/create or deploy it as part of a node's lifecycle. - tosca.artifacts.File: - derived_from: tosca.artifacts.Root - description: This artifact type is used when an artifact definition needs to have its associated file simply treated as a file and no special handling/handlers are invoked (i.e., it is not treated as either an implementation or deployment artifact type). - tosca.artifacts.Implementation: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all implementation artifacts in TOSCA. These artifacts are used to implement operations of TOSCA interfaces either directly (e.g., scripts) or indirectly (e.g., config. files). - tosca.artifacts.nfv.SwImage: - derived_from: tosca.artifacts.Deployment.Image diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/capabilities.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/capabilities.yml deleted file mode 100644 index 734c2012..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/capabilities.yml +++ /dev/null @@ -1,293 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -capability_types: - tosca.capabilities.Root: - description: The TOSCA root Capability Type all other TOSCA base Capability Types derive from - tosca.capabilities.Attachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.Node: - derived_from: tosca.capabilities.Root - tosca.capabilities.Container: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: integer - required: false - constraints: - - greater_or_equal: 1 - cpu_frequency: - type: scalar-unit.frequency - required: false - constraints: - - greater_or_equal: 0.1 GHz - disk_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - mem_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - org.openecomp.capabilities.PortMirroring: - derived_from: tosca.capabilities.Root - properties: - connection_point: - type: org.openecomp.datatypes.PortMirroringConnectionPointDescription - tosca.capabilities.Endpoint: - derived_from: tosca.capabilities.Root - properties: - protocol: - type: string - default: tcp - port: - type: PortDef - required: false - secure: - type: boolean - default: false - url_path: - type: string - required: false - port_name: - type: string - required: false - network_name: - type: string - required: false - default: PRIVATE - initiator: - type: string - default: source - constraints: - - valid_values: - - source - - target - - peer - ports: - type: map - required: false - constraints: - - min_length: 1 - entry_schema: - type: PortSpec - attributes: - ip_address: - type: string - tosca.capabilities.DatabaseEndpoint: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.Endpoint.Public: - derived_from: tosca.capabilities.Endpoint - properties: - network_name: PUBLIC - floating: - description: | - indicates that the public address should be allocated from a pool of floating IPs that are associated with the network. - type: boolean - default: false - status: experimental - dns_name: - description: The optional name to register with DNS - type: string - required: false - status: experimental - tosca.capabilities.Endpoint.Admin: - derived_from: tosca.capabilities.Endpoint - properties: - secure: true - tosca.capabilities.Endpoint.Database: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.OperatingSystem: - derived_from: tosca.capabilities.Root - properties: - architecture: - type: string - required: false - type: - type: string - required: false - distribution: - type: string - required: false - version: - type: version - required: false - tosca.capabilities.Scalable: - derived_from: tosca.capabilities.Root - properties: - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - default_instances: - type: integer - tosca.capabilities.network.Bindable: - derived_from: tosca.capabilities.Node - tosca.capabilities.Container.Docker: - derived_from: tosca.capabilities.Container - properties: - version: - type: list - required: false - entry_schema: version - publish_all: - type: boolean - default: false - required: false - publish_ports: - type: list - entry_schema: PortSpec - required: false - expose_ports: - type: list - entry_schema: PortSpec - required: false - volumes: - type: list - entry_schema: string - required: false - tosca.capabilities.network.Linkable: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.AllottedResource: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Metric: - derived_from: tosca.capabilities.Endpoint - org.openecomp.capabilities.Metric: - derived_from: tosca.capabilities.nfv.Metric - description: A node type that includes the Metric capability indicates that it can be monitored. - properties: - unit: - type: string - description: Unit of the metric value - required: true - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - status: SUPPORTED - attributes: - value: - type: string - description: Runtime monitored value - status: SUPPORTED - 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: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - org.openecomp.capabilities.Forwarder: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.VLANAssignment: - derived_from: tosca.capabilities.Root - description: ability to expose routing information of the internal network - properties: - vfc_instance_group_reference: - type: string - description: Ability to recognize capability per vfc instance group on vnf instance - required: true - org.openecomp.capabilities.RoutingConfiguration: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.FabricConfiguration: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualStorage: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualCompute: - derived_from: tosca.capabilities.Root - properties: - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - compute_requirements: - type: map - entry_schema: - type: string - required: false - requested_additional_capabilities: - type: map - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - required: false - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - tosca.capabilities.nfv.VirtualBindable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ExtVirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Forwarder: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.GuestOs: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.ImageFile: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.LocalAttachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.Compute.Container.Architecture: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: string - required: false - flavor_extra_specs: - type: map - required: false - entry_schema: - type: string - mem_size: - type: string - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/data.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/data.yml deleted file mode 100644 index 0ff71791..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/data.yml +++ /dev/null @@ -1,1733 +0,0 @@ -# -# 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_yaml_1_1 -data_types: - tosca.datatypes.Root: - description: The TOSCA root Data Type all other TOSCA base Data Types derive from - integer: - derived_from: tosca.datatypes.Root - string: - derived_from: tosca.datatypes.Root - boolean: - derived_from: tosca.datatypes.Root - float: - derived_from: tosca.datatypes.Root - list: - derived_from: tosca.datatypes.Root - map: - derived_from: tosca.datatypes.Root - json: - derived_from: tosca.datatypes.Root - scalar-unit: - derived_from: tosca.datatypes.Root - scalar-unit.size: - derived_from: scalar-unit - scalar-unit.time: - derived_from: scalar-unit - scalar-unit.frequency: - derived_from: scalar-unit - tosca.datatypes.Credential: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: false - token_type: - type: string - default: password - token: - type: string - keys: - type: map - required: false - entry_schema: - type: string - user: - type: string - required: false - org.openecomp.datatypes.PortMirroringConnectionPointDescription: - derived_from: tosca.datatypes.Root - properties: - nf_naming_code: - type: string - nfc_naming_code: - type: string - network_role: - type: string - pps_capacity: - type: string - nf_type: - type: string - description: deprecated - nfc_type: - type: string - description: deprecated - tosca.datatypes.TimeInterval: - derived_from: tosca.datatypes.Root - properties: - start_time: - type: timestamp - required: true - end_time: - type: timestamp - required: true - tosca.datatypes.network.NetworkInfo: - derived_from: tosca.datatypes.Root - properties: - network_name: - type: string - network_id: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortInfo: - derived_from: tosca.datatypes.Root - properties: - port_name: - type: string - port_id: - type: string - network_id: - type: string - mac_address: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortDef: - derived_from: integer - constraints: - - in_range: - - 1 - - 65535 - tosca.datatypes.network.PortSpec: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: true - default: tcp - constraints: - - valid_values: - - udp - - tcp - - igmp - target: - type: tosca.datatypes.network.PortDef - target_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - source: - type: tosca.datatypes.network.PortDef - source_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - org.openecomp.datatypes.heat.network.AddressPair: - derived_from: tosca.datatypes.Root - description: MAC/IP address pairs - properties: - mac_address: - type: string - description: MAC address - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.subnet.HostRoute: - derived_from: tosca.datatypes.Root - description: Host route info for the subnet - properties: - destination: - type: string - description: The destination for static route - required: false - status: SUPPORTED - nexthop: - type: string - description: The next hop for the destination - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.AllocationPool: - derived_from: tosca.datatypes.Root - description: The start and end addresses for the allocation pool - properties: - start: - type: string - description: Start address for the allocation pool - required: false - status: SUPPORTED - end: - type: string - description: End address for the allocation pool - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.Subnet: - derived_from: tosca.datatypes.Root - description: A subnet represents an IP address block that can be used for assigning IP addresses to virtual instances - properties: - tenant_id: - type: string - description: The ID of the tenant who owns the network - required: false - status: SUPPORTED - enable_dhcp: - type: boolean - description: Set to true if DHCP is enabled and false if DHCP is disabled - required: false - default: true - status: SUPPORTED - ipv6_address_mode: - type: string - description: IPv6 address mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - ipv6_ra_mode: - type: string - description: IPv6 RA (Router Advertisement) mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - allocation_pools: - type: list - description: The start and end addresses for the allocation pools - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.AllocationPool - subnetpool: - type: string - description: The name or ID of the subnet pool - required: false - status: SUPPORTED - dns_nameservers: - type: list - description: A specified set of DNS name servers to be used - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - host_routes: - type: list - description: The gateway IP address - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.subnet.HostRoute - ip_version: - type: integer - description: The gateway IP address - required: false - default: 4 - status: SUPPORTED - constraints: - - valid_values: - - '4' - - '6' - name: - type: string - description: The name of the subnet - required: false - status: SUPPORTED - prefixlen: - type: integer - description: Prefix length for subnet allocation from subnet pool - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 0 - cidr: - type: string - description: The CIDR - required: false - status: SUPPORTED - gateway_ip: - type: string - description: The gateway IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.novaServer.network.PortExtraProperties: - derived_from: tosca.datatypes.Root - description: Nova server network expand properties for port - properties: - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the port - required: false - status: SUPPORTED - mac_address: - type: string - description: MAC address to give to this port - required: false - status: SUPPORTED - admin_state_up: - type: boolean - description: The administrative state of this port - required: false - default: true - status: SUPPORTED - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this port - 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 - org.openecomp.datatypes.heat.novaServer.network.AddressInfo: - derived_from: tosca.datatypes.network.NetworkInfo - description: Network addresses with corresponding port id - properties: - port_id: - type: string - description: Port id - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.neutron.port.FixedIps: - derived_from: tosca.datatypes.Root - description: subnet/ip_address - properties: - subnet: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address desired in the subnet for this port - required: false - status: SUPPORTED - subnet_id: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.FileInfo: - derived_from: tosca.datatypes.Root - description: Heat File Info - properties: - file: - type: string - description: The required URI string (relative or absolute) which can be used to locate the file - required: true - status: SUPPORTED - file_type: - type: string - description: The type of the file - required: true - status: SUPPORTED - constraints: - - valid_values: - - base - - env - - volume - - network - org.openecomp.datatypes.heat.contrail.network.rule.PortPairs: - derived_from: tosca.datatypes.Root - description: source and destination port pairs - properties: - start_port: - type: string - description: Start port - required: false - status: SUPPORTED - end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - apply_service: - type: string - description: Service to apply - required: false - status: SUPPORTED - dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - direction: - type: string - description: Direction - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.Rule - org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork: - derived_from: tosca.datatypes.Root - description: source and destination addresses - properties: - virtual_network: - type: string - description: Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule: - derived_from: tosca.datatypes.Root - description: Rules Pairs - properties: - remote_group_id: - type: string - description: The remote group ID to be associated with this security group rule - required: false - status: SUPPORTED - protocol: - type: string - description: The protocol that is matched by the security group rule - required: false - status: SUPPORTED - constraints: - - valid_values: - - tcp - - udp - - icmp - ethertype: - type: string - description: Ethertype of the traffic - required: false - default: IPv4 - status: SUPPORTED - constraints: - - valid_values: - - IPv4 - - IPv6 - port_range_max: - type: integer - description: 'The maximum port number in the range that is matched by the - security group rule. ' - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - remote_ip_prefix: - type: string - description: The remote IP prefix (CIDR) to be associated with this security group rule - required: false - status: SUPPORTED - remote_mode: - type: string - description: Whether to specify a remote group or a remote IP prefix - required: false - default: remote_ip_prefix - status: SUPPORTED - constraints: - - valid_values: - - remote_ip_prefix - - remote_group_id - direction: - type: string - description: The direction in which the security group rule is applied - required: false - default: ingress - status: SUPPORTED - constraints: - - valid_values: - - egress - - ingress - port_range_min: - type: integer - description: The minimum port number in the range that is matched by the security group rule. - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - org.openecomp.datatypes.heat.substitution.SubstitutionFiltering: - derived_from: tosca.datatypes.Root - description: Substitution Filter - properties: - substitute_service_template: - type: string - description: Substitute Service Template - required: true - status: SUPPORTED - index_value: - type: integer - description: Index value of the substitution service template runtime instance - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - count: - type: string - description: Count - required: false - default: 1 - status: SUPPORTED - scaling_enabled: - type: boolean - description: Indicates whether service scaling is enabled - required: false - default: true - status: SUPPORTED - mandatory: - type: boolean - description: Mandatory - required: false - default: true - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence: - derived_from: tosca.datatypes.Root - description: network policy refs data sequence - properties: - network_policy_refs_data_sequence_major: - type: integer - description: Network Policy ref data sequence Major - required: false - status: SUPPORTED - network_policy_refs_data_sequence_minor: - type: integer - description: Network Policy ref data sequence Minor - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData: - derived_from: tosca.datatypes.Root - description: network policy refs data - properties: - network_policy_refs_data_sequence: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence - description: Network Policy ref data sequence - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet - properties: - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len: - type: string - description: Network ipam refs data ipam subnets ip prefix len - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix: - type: string - description: Network ipam refs data ipam subnets ip prefix - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet List - properties: - network_ipam_refs_data_ipam_subnets_subnet: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_addr_from_start: - type: string - description: Network ipam refs data ipam subnets addr from start - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data - properties: - network_ipam_refs_data_ipam_subnets: - type: list - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork: - derived_from: tosca.datatypes.Root - description: source addresses - properties: - network_policy_entries_policy_rule_src_addresses_virtual_network: - type: string - description: Source addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork: - derived_from: tosca.datatypes.Root - description: destination addresses - properties: - network_policy_entries_policy_rule_dst_addresses_virtual_network: - type: string - description: Destination addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs: - derived_from: tosca.datatypes.Root - description: destination port pairs - properties: - network_policy_entries_policy_rule_dst_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_dst_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs: - derived_from: tosca.datatypes.Root - description: source port pairs - properties: - network_policy_entries_policy_rule_src_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList: - derived_from: tosca.datatypes.Root - description: Action List - properties: - network_policy_entries_policy_rule_action_list_simple_action: - type: string - description: Simple Action - required: false - status: SUPPORTED - network_policy_entries_policy_rule_action_list_apply_service: - type: list - description: Apply Service - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - network_policy_entries_policy_rule_dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork - network_policy_entries_policy_rule_dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs - network_policy_entries_policy_rule_protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork - network_policy_entries_policy_rule_direction: - type: string - description: Direction - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs - network_policy_entries_policy_rule_action_list: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList - description: Action list - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - network_policy_entries_policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.Rule - org.openecomp.datatypes.heat.network.contrail.port.StaticRoute: - derived_from: tosca.datatypes.Root - description: static route - properties: - prefix: - type: string - description: Route prefix - required: false - status: SUPPORTED - next_hop: - type: string - description: Next hop - required: false - status: SUPPORTED - next_hop_type: - type: string - description: Next hop type - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.AddressPair: - derived_from: tosca.datatypes.Root - description: Address Pair - properties: - address_mode: - type: string - description: Address mode active-active or active-standy - required: false - status: SUPPORTED - constraints: - - valid_values: - - active-active - - active-standby - prefix: - type: string - description: IP address prefix - required: false - status: SUPPORTED - mac_address: - type: string - description: Mac address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.InterfaceData: - derived_from: tosca.datatypes.Root - description: Interface Data - 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 - 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 - ip_address: - type: string - description: IP for this interface - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Interface Properties. - properties: - virtual_machine_interface_properties_service_interface_type: - type: string - description: Service Interface Type. - required: false - status: SUPPORTED - org.openecomp.datatypes.Root: - derived_from: tosca.datatypes.Root - description: | - The ECOMP root Data Type all other Data Types derive from - properties: - supplemental_data: - type: map - entry_schema: - description: | - A placeholder for missing properties that would be included in future ecomp model versions. fromat : - type: string - org.openecomp.datatypes.AssignmentRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - is_required: - description: | - "true" indicates that assignment is required - type: boolean - default: false - required: true - count: - description: number of assignments required - type: integer - required: false - org.openecomp.datatypes.network.SubnetAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ip_network_address_plan: - type: string - required: false - description: Reference to EIPAM, VLAN or other address plan ID used to assign subnets to this network - dhcp_enabled: - type: boolean - required: false - description: \"true\" indicates the network has 1 or more policies - ip_version: - type: integer - constraints: - - valid_values: - - 4 - - 6 - required: true - description: The IP version of the subnet - cidr_mask: - type: integer - required: true - description: The default subnet CIDR mask - min_subnets_count: - type: integer - default: 1 - required: true - description: Quantity of subnets that must be initially assigned - org.openecomp.datatypes.network.IPv4SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv4: - type: boolean - required: true - description: Indicates IPv4 subnet assignments - org.openecomp.datatypes.network.IPv6SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv6: - type: boolean - required: true - description: Indicates IPv6 subnet assignments - org.openecomp.datatypes.network.NetworkAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_network_assignment: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the network assignments will be auto-generated by ECOMP \"false\" indicates operator-supplied Network assignments file upload is required (e.g. VID will present prompt to operator to upload operator-supplied Network assignments file). - is_shared_network: - type: boolean - required: true - description: \"true\" means this network is shared by multiple Openstack tenants - is_external_network: - type: boolean - required: true - default: false - description: | - \"true\" means this Contrail external network - ipv4_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv4SubnetAssignments - required: true - description: IPv4 defualt subnet assignments - ipv6_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv6SubnetAssignments - required: true - description: IPv6 defualt subnet assignments - related_networks: - type: list - required: false - description: Related Networks List. - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - is_trunked: - type: boolean - required: true - description: \"true\" indicates that network is trunked - default: false - org.openecomp.datatypes.network.ProviderNetwork: - derived_from: org.openecomp.datatypes.Root - properties: - is_provider_network: - type: boolean - required: true - description: \"true\" indicates that this a Neutron provider type of network - physical_network_name: - type: string - required: false - constraints: - - valid_values: - - Physnet41 - - Physnet42 - - Physnet43 - - Physnet44 - - Physnet21 - - Physnet22 - - sriovnet1 - - sriovnet2 - - oam - description: | - Identifies the NUMA processor cluster to which this physical network interface belongs. NUMA instance correlates to the first digit of the Physical Network Name suffix (e.g. \"01\" = NUMA 0, \"11\" = NUMA 1) - numa: - type: string - required: false - constraints: - - valid_values: - - NUMA 0 - - NUMA 1 - description: | - PNIC instance within the NUMA processor cluster PNIC Instance correlates to the second digit of the Physical Network Name suffix (e.g. "01" = PNIC 1, "02" = "PNIC 2) - pnic_instance: - type: integer - required: false - description: PNIC instance within the NUMA processor cluster - org.openecomp.datatypes.network.NetworkFlows: - derived_from: org.openecomp.datatypes.Root - properties: - is_network_policy: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more policies - network_policy: - type: string - required: false - description: 'Identifies the specific Cloud network policy that must be applied - to this network (source: from Policy Manager).' - is_bound_to_vpn: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more vpn bindings - vpn_binding: - type: string - required: false - description: 'Identifies the specific VPN Binding entry in A&AI that must - be applied when creating this network (source: A&AI)' - org.openecomp.datatypes.network.VlanRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - vlan_range_plan: - type: string - required: true - description: reference to a vlan range plan - vlan_type: - type: string - required: true - constraints: - - valid_values: - - c-tag - - s-tag - description: identifies the vlan type (e.g., c-tag) - vlan_count: - type: integer - required: true - description: identifies the number of vlan tags to assign to the CP from the plan - org.openecomp.datatypes.network.IpRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - ip_version: - type: integer - required: true - constraints: - - valid_values: - - 4 - - 6 - ip_count: - description: identifies the number of ip address to assign to the CP from the plan - type: integer - required: false - floating_ip_count: - type: integer - required: false - subnet_role: - type: string - required: false - assingment_method: - type: string - required: true - constraints: - - valid_values: - - fixed - - dhcp - dhcp_enabled: - type: boolean - required: false - ip_count_required: - description: identifies the number of ip address to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - required: false - floating_ip_count_required: - type: org.openecomp.datatypes.AssignmentRequirements - required: false - ip_address_plan_name: - type: string - required: false - vrf_name: - type: string - required: false - org.openecomp.datatypes.network.MacAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - type: string - required: true - description: reference to a MAC address range plan - mac_count: - type: integer - required: true - description: identifies the number of MAC addresses to assign to the CP from the plan - org.openecomp.datatypes.EcompHoming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_selected_instance_node_target: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the target deployment node for this instance will be auto-selected by ECOMP \"false\" indicates operator-supplied instance target deployment node required (e.g. VID will present a prompt to operator and collect the operator-selected target node for the deployment of this Network instance). - homing_policy: - type: string - required: false - description: Referenc to a service level homing policy that ECOMP will use for instance deployment target node - instance_node_target: - type: string - required: false - description: Instance target deployment node - org.openecomp.datatypes.EcompNaming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - type: boolean - required: true - default: true - description: | - \"true\" indicates that the name for the instance will be auto-generated by ECOMP. \"false\" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - naming_policy: - type: string - required: false - description: Referenc to naming policy that ECOMP will use when the name is auto-generated - org.openecomp.datatypes.network.MacRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - description: reference to a MAC address range plan - type: string - required: false - mac_count: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: integer - required: false - mac_count_required: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair IP. - properties: - ip_prefix: - type: string - description: IP Prefix. - required: false - status: SUPPORTED - ip_prefix_len: - type: integer - description: IP Prefix Len. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Mac Address. - properties: - mac_address: - type: list - description: Mac Addresses List. - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface VLAN Properties. - properties: - sub_interface_vlan_tag: - type: string - description: Sub Interface VLAN Tag. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair. - properties: - address_mode: - type: string - description: Address Mode. - required: false - status: SUPPORTED - ip: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp - description: IP. - required: false - status: SUPPORTED - mac: - type: string - description: Mac. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pairs. - properties: - allowed_address_pair: - type: list - description: Addresses pair List. - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair - org.openecomp.datatypes.Naming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - description: | - "true" indicates that the name for the instance will be auto-generated by ECOMP. "false" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: boolean - default: true - required: true - naming_policy: - description: Reference to naming policy that ECOMP will use when the name is auto-generated - type: string - required: false - instance_name: - description: indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: string - required: false - org.openecomp.datatypes.flavors.ComputeFlavor: - derived_from: tosca.datatypes.Root - properties: - num_cpus: - type: integer - disk_size: - type: scalar-unit.size - mem_size: - type: scalar-unit.size - org.openecomp.datatypes.flavors.LicenseFlavor: - derived_from: tosca.datatypes.Root - properties: - feature_group_uuid: - type: string - org.openecomp.datatypes.flavors.VendorInfo: - derived_from: tosca.datatypes.Root - properties: - manufacturer_reference_number: - type: string - vendor_model: - type: string - org.openecomp.datatypes.flavors.DeploymentFlavor: - derived_from: tosca.datatypes.Root - properties: - sp_part_number: - type: string - vendor_info: - type: org.openecomp.datatypes.flavors.VendorInfo - compute_flavor: - type: org.openecomp.datatypes.flavors.ComputeFlavor - license_flavor: - type: org.openecomp.datatypes.flavors.LicenseFlavor - required: false - org.openecomp.datatypes.ImageInfo: - derived_from: tosca.datatypes.Root - properties: - software_version: - type: string - file_name: - type: string - file_hash: - type: string - description: checksum/signature - file_hash_type: - type: string - required: false - default: md5 - org.openecomp.datatypes.network.RelatedNetworksAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - related_network_role: - type: string - description: The network role of the related network, sharing provider network. - required: false - tosca.datatypes.nfv.VnfcConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - additional_vnfc_configurable_properties: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.RequestedAdditionalCapability: - derived_from: tosca.datatypes.Root - properties: - support_mandatory: - type: boolean - required: true - min_requested_additional_capability_version: - type: string - required: false - preferred_requested_additional_capability_version: - type: string - required: false - requested_additional_capability_name: - type: string - required: true - target_performance_parameters: - type: map - entry_schema: - type: string - required: true - tosca.datatypes.nfv.VirtualMemory: - derived_from: tosca.datatypes.Root - properties: - virtual_mem_size: - type: scalar-unit.size - required: true - virtual_mem_oversubscription_policy: - type: string - required: false - vdu_memory_requirements: - type: map - entry_schema: - type: string - required: false - numa_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VirtualCpuPinning: - derived_from: tosca.datatypes.Root - properties: - cpu_pinning_policy: - type: string - constraints: - - valid_values: - - static - - dynamic - required: false - cpu_pinning_map: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualCpu: - derived_from: tosca.datatypes.Root - properties: - cpu_architecture: - type: string - required: false - num_virtual_cpu: - type: integer - required: true - virtual_cpu_clock: - type: scalar-unit.frequency - required: false - virtual_cpu_oversubscription_policy: - type: string - required: false - vdu_cpu_requirements: - type: map - entry_schema: - type: string - required: false - virtual_cpu_pinning: - type: tosca.datatypes.nfv.VirtualCpuPinning - required: false - tosca.datatypes.nfv.LogicalNodeData: - derived_from: tosca.datatypes.Root - properties: - logical_node_requirements: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: false - description: - type: string - required: false - support_mandatory: - type: boolean - required: true - requirement: - type: string - required: false - network_interface_requirements: - type: map - entry_schema: - type: string - required: true - nic_io_requirements: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - tosca.datatypes.nfv.injectFile: - derived_from: tosca.datatypes.Root - properties: - source_path: - type: string - required: true - dest_path: - type: string - required: true - tosca.datatypes.nfv.L2AddressData: - derived_from: tosca.datatypes.Root - properties: - mac_address_assignment: - type: boolean - required: true - address: - type: string - required: false - tosca.datatypes.nfv.L3AddressData: - derived_from: tosca.datatypes.Root - properties: - ip_address_assignment: - type: boolean - required: true - floating_ip_activated: - type: boolean - required: true - ip_address_type: - type: string - required: false - constraints: - - valid_values: - - ipv4 - - ipv6 - number_of_ip_address: - type: integer - required: false - fixed_ip_address: - type: list - entry_schema: - type: string - required: false - tosca.datatypes.nfv.AddressData: - properties: - address_type: - constraints: - - valid_values: - - mac_address - - ip_address - type: string - required: true - l2_address_data: - required: false - type: tosca.datatypes.nfv.L2AddressData - l3_address_data: - required: false - type: tosca.datatypes.nfv.L3AddressData - tosca.datatypes.nfv.ConnectivityType: - derived_from: tosca.datatypes.Root - properties: - layer_protocol: - type: string - required: true - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - flow_pattern: - type: string - required: false - constraints: - - valid_values: - - Line - - Tree - - Mesh - tosca.datatypes.nfv.VlFlavour: - derived_from: tosca.datatypes.Root - properties: - flavourId: - type: string - tosca.datatypes.nfv.ext.AddressPairs: - properties: - ip: - type: string - required: false - mac: - type: string - required: false - tosca.datatypes.nfv.ext.FloatingIP: - properties: - external_network: - type: string - required: false - ip_address: - type: string - required: false - tosca.datatypes.nfv.ext.LocationInfo: - properties: - availability_zone: - type: string - required: false - vimid: - type: integer - required: false - tenant: - type: string - required: false - tosca.datatypes.nfv.ext.HostRouteInfo: - properties: - destination: - type: string - required: false - nexthop: - type: string - required: false - tosca.datatypes.nfv.ext.InjectData: - properties: - file_name: - type: string - required: false - file_data: - type: string - required: false - tosca.datatypes.nfv.ext.zte.WatchDog: - properties: - enable_delay: - type: integer - required: false - action: - type: string - required: false - tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule: - properties: - scope: - type: string - required: false - affinity_antiaffinity: - type: string - required: false - tosca.datatypes.nfv.VduProfile: - derived_from: tosca.datatypes.Root - properties: - min_number_of_instances: - type: integer - required: true - max_number_of_instances: - type: integer - required: true - watchdog: - type: string - required: true - vmBootUpTimeOut: - type: integer - required: false - tosca.datatypes.nfv.LinkBitRateRequirements: - derived_from: tosca.datatypes.Root - properties: - root: - type: integer - required: true - leaf: - type: integer - required: true - tosca.datatypes.nfv.Qos: - derived_from: tosca.datatypes.Root - properties: - latency: - type: integer - required: true - packet_delay_variation: - type: integer - required: true - packet_loss_ratio: - type: float - constraints: - - in_range: - - 0.0 - - 1.0 - required: false - tosca.datatypes.nfv.VlProfile: - derived_from: tosca.datatypes.Root - properties: - max_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - min_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - qos: - type: tosca.datatypes.nfv.Qos - required: false - initiationParameters: - type: map - entry_schema: - type: string - required: false - cidr: - type: string - required: false - networkName: - type: string - required: false - startIp: - type: string - required: false - endIp: - type: string - required: false - gatewayIp: - type: string - required: false - segmentationId: - type: integer - required: false - physicalNetwork: - type: string - required: false - networkType: - type: string - required: false - constraints: - - valid_values: - - VLAN - - VXLAN - dhcpEnabled: - type: boolean - required: false - vlanTransparent: - type: boolean - required: false - tosca.datatypes.nfv.VduLevel: - derived_from: tosca.datatypes.Root - properties: - number_of_instances: - type: integer - required: true - tosca.datatypes.nfv.ScaleInfo: - derived_from: tosca.datatypes.Root - properties: - scaleLevel: - type: integer - required: true - tosca.datatypes.nfv.ScaleAspect: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - associated_group: - type: string - required: false - max_scale_level: - type: integer - required: true - tosca.datatypes.nfv.InstantiationLevel: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: true - vdu_levels: - type: map - required: true - entry_schema: - type: tosca.datatypes.nfv.VduLevel - scale_info: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.ScaleInfo - tosca.datatypes.nfv.VnfScaleOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - scaling_by_more_than_one_step_supported: - type: boolean - tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - arbitrary_target_levels_supported: - type: boolean - tosca.datatypes.nfv.VnfHealOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - causes: - type: list - entry_schema: - type: string - tosca.datatypes.nfv.VnfTerminateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfOperateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfLcmOperationsConfiguration: - derived_from: tosca.datatypes.Root - properties: - scale: - type: tosca.datatypes.nfv.VnfScaleOperationConfiguration - scale_to_level: - type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration - heal: - type: tosca.datatypes.nfv.VnfHealOperationConfiguration - terminate: - type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration - operate: - type: tosca.datatypes.nfv.VnfOperateOperationConfiguration - tosca.datatypes.nfv.CpProtocolData: - derived_from: tosca.datatypes.Root - properties: - asscociated_layer_protocol: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo-wire - required: true - address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.datatypes.nfv.VnfConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - is_autoscale_enabled: - type: boolean - required: false - is_autoheal_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributes: - derived_from: tosca.datatypes.Root - properties: - extensions: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions - required: false - metadata: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/groups.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/groups.yml deleted file mode 100644 index f8be60db..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/groups.yml +++ /dev/null @@ -1,133 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -group_types: - tosca.groups.Root: - description: The TOSCA Group Type all other TOSCA Group Types derive from - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - org.openecomp.groups.heat.HeatStack: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same heat stack - properties: - heat_file: - type: string - description: Heat file which associate to this group/heat stack - required: true - status: SUPPORTED - description: - type: string - description: group description - required: true - status: SUPPORTED - org.openecomp.groups.VfModule: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same VF Module - properties: - isBase: - type: boolean - description: Whether this module should be deployed before other modules - required: true - default: false - status: SUPPORTED - vf_module_label: - type: string - required: true - description: | - Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model - vf_module_description: - type: string - required: true - description: | - Description of the VF-modules contents and purpose (e.g. "Front-End" or "Database Cluster") - min_vf_module_instances: - type: integer - required: true - description: The minimum instances of this VF-Module - max_vf_module_instances: - type: integer - required: false - description: The maximum instances of this VF-Module - initial_count: - type: integer - required: false - description: | - The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances. - vf_module_type: - type: string - required: true - constraint: - - valid_values: - - Base - - Expansion - volume_group: - type: boolean - required: true - default: false - description: | - "true" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time. - availability_zone_count: - type: integer - required: false - description: | - Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template) - vfc_list: - type: map - entry_schema: - description: : - type: string - required: false - description: | - Identifies the set of VM types and their count included in the VF-Module - org.openecomp.groups.NetworkCollection: - derived_from: tosca.groups.Root - description: groups l3-networks in network collection - properties: - network_collection_function: - type: string - required: true - description: network collection function - network_collection_description: - type: string - required: true - description: network collection description, free format text - org.openecomp.groups.VfcInstanceGroup: - derived_from: tosca.groups.Root - description: groups VFCs with same parent port role - properties: - vfc_instance_group_function: - type: string - required: true - description: function of this VFC group - vfc_parent_port_role: - type: string - required: true - description: common role of parent ports of VFCs in this group - network_collection_function: - type: string - required: true - description: network collection function assigned to this group - subinterface_role: - type: string - required: true - description: common role of subinterfaces of VFCs in this group, criteria the group is created - capabilities: - vlan_assignment: - type: org.openecomp.capabilities.VLANAssignment - properties: - vfc_instance_group_reference: - type: string diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/interfaces.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/interfaces.yml deleted file mode 100644 index a11c7169..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/interfaces.yml +++ /dev/null @@ -1,83 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -interface_types: - tosca.interfaces.nfv.vnf.lifecycle.Nfv: - instantiate: - description: Invoked upon receipt of an Instantiate VNF request - instantiate_start: - description: Invoked before instantiate - instantiate_end: - description: Invoked after instantiate - terminate: - description: Invoked upon receipt Terminate VNF request - terminate_start: - description: Invoked before terminate - terminate_end: - description: Invoked after terminate - modify_information: - description: Invoked upon receipt of a Modify VNF Information request - modify_information_start: - description: Invoked before modify_information - modify_information_end: - description: Invoked after modify_information - change_flavour: - description: Invoked upon receipt of a Change VNF Flavour request - change_flavour_start: - description: Invoked before change_flavour - change_flavour_end: - description: Invoked after change_flavour - change_external_connectivity: - description: Invoked upon receipt of a Change External VNF Connectivity request - change_external_connectivity_start: - description: Invoked before change_external_connectivity - change_external_connectivity_end: - description: Invoked after change_external_connectivity - operate: - description: Invoked upon receipt of an Operate VNF request - operate_start: - description: Invoked before operate - operate_end: - description: Invoked after operate - heal: - description: Invoked upon receipt of a Heal VNF request - heal_start: - description: Invoked before heal - heal_end: - description: Invoked after heal - scale: - description: Invoked upon receipt of a Scale VNF request - scale_start: - description: Invoked before scale - scale_end: - description: Invoked after scale - scale_to_level: - description: Invoked upon receipt of a Scale VNF to Level request - scale_to_level_start: - description: Invoked before scale_to_level - scale_to_level_end: - description: Invoked after scale_to_level - tosca.interfaces.node.lifecycle.Standard: - create: - description: Standard lifecycle create operation. - configure: - description: Standard lifecycle configure operation. - start: - description: Standard lifecycle start operation. - stop: - description: Standard lifecycle stop operation. - delete: - description: Standard lifecycle delete operation. diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/nodes.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/nodes.yml deleted file mode 100644 index 62d77f4c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/nodes.yml +++ /dev/null @@ -1,4781 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -- artifacts.yml -- capabilities.yml -- interfaces.yml -- relationships.yml -node_types: - tosca.nodes.BlockStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 1 MB - volume_id: - type: string - required: false - snapshot_id: - type: string - required: false - capabilities: - attachment: - type: tosca.capabilities.Attachment - tosca.nodes.WebApplication: - derived_from: tosca.nodes.Root - properties: - context_root: - type: string - capabilities: - app_endpoint: - type: tosca.capabilities.Endpoint - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.WebServer - relationship: tosca.relationships.HostedOn - tosca.nodes.Database: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: the logical name of the database - port: - type: integer - description: the port the underlying database service will listen to for data - user: - type: string - description: the optional user account name for DB administration - required: false - password: - type: string - description: the optional password for the DB user account - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.DBMS - relationship: tosca.relationships.HostedOn - capabilities: - database_endpoint: - type: tosca.capabilities.Endpoint.Database - tosca.nodes.Container.Runtime: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - host: - type: tosca.capabilities.Container - scalable: - type: tosca.capabilities.Scalable - tosca.nodes.network.Port: - derived_from: tosca.nodes.Root - properties: - ip_address: - type: string - required: false - order: - type: integer - required: true - default: 0 - constraints: - - greater_or_equal: 0 - is_default: - type: boolean - required: false - default: false - ip_range_start: - type: string - required: false - ip_range_end: - type: string - required: false - requirements: - - link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - tosca.nodes.Root: - description: The TOSCA Node Type all other TOSCA base Node Types derive from - attributes: - tosca_id: - type: string - tosca_name: - type: string - state: - type: string - capabilities: - feature: - type: tosca.capabilities.Node - requirements: - - dependency: - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - occurrences: - - 0 - - UNBOUNDED - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - tosca.nodes.network.Network: - derived_from: tosca.nodes.Root - properties: - ip_version: - type: integer - required: false - default: 4 - constraints: - - valid_values: - - 4 - - 6 - cidr: - type: string - required: false - start_ip: - type: string - required: false - end_ip: - type: string - required: false - gateway_ip: - type: string - required: false - network_name: - type: string - required: false - network_id: - type: string - required: false - segmentation_id: - type: string - required: false - network_type: - type: string - required: false - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - default: true - capabilities: - link: - type: tosca.capabilities.network.Linkable - tosca.nodes.Compute: - derived_from: tosca.nodes.Root - attributes: - private_address: - type: string - public_address: - type: string - networks: - type: map - entry_schema: - type: tosca.datatypes.network.NetworkInfo - ports: - type: map - entry_schema: - type: tosca.datatypes.network.PortInfo - requirements: - - local_storage: - capability: tosca.capabilities.Attachment - node: tosca.nodes.BlockStorage - relationship: tosca.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.SoftwareComponent - endpoint: - type: tosca.capabilities.Endpoint.Admin - os: - type: tosca.capabilities.OperatingSystem - scalable: - type: tosca.capabilities.Scalable - binding: - type: tosca.capabilities.network.Bindable - tosca.nodes.LoadBalancer: - derived_from: tosca.nodes.Root - properties: - algorithm: - type: string - required: false - status: experimental - capabilities: - client: - type: tosca.capabilities.Endpoint.Public - occurrences: - - 0 - - UNBOUNDED - description: the Floating (IP) client’s on the public network can connect to - requirements: - - application: - capability: tosca.capabilities.Endpoint - relationship: tosca.relationships.RoutesTo - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.DBMS: - derived_from: tosca.nodes.SoftwareComponent - properties: - root_password: - type: string - required: false - description: the optional root password for the DBMS service - port: - type: integer - required: false - description: the port the DBMS service will listen to for data and requests - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.Database - tosca.nodes.WebServer: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - data_endpoint: tosca.capabilities.Endpoint - admin_endpoint: tosca.capabilities.Endpoint.Admin - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.WebApplication - tosca.nodes.Container.Application: - derived_from: tosca.nodes.Root - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Container - relationship: tosca.relationships.HostedOn - tosca.nodes.SoftwareComponent: - derived_from: tosca.nodes.Root - properties: - component_version: - type: version - required: false - admin_credential: - type: tosca.datatypes.Credential - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.ObjectStorage: - derived_from: tosca.nodes.Root - properties: - name: - type: string - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - maxsize: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - capabilities: - storage_endpoint: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.ServiceProxy: - derived_from: tosca.nodes.Root - org.openecomp.resource.vfc.rules.nodes.heat.network.contrailV2.NetworkRules: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - network_policy_entries: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - shared: - type: string - description: Is virtual network shared - required: false - status: SUPPORTED - forwarding_mode: - type: string - description: forwarding mode of the virtual network - required: false - status: SUPPORTED - external: - type: string - description: Is virtual network external - required: false - status: SUPPORTED - allow_transit: - type: string - description: Whether this network should be transitive. - required: false - status: SUPPORTED - flood_unknown_unicast: - type: string - description: flood L2 packets on network - required: false - status: SUPPORTED - route_targets: - type: list - description: route targets associated with the virtual network - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - 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 - org.openecomp.resource.abstract.nodes.service: - derived_from: tosca.nodes.Root - org.openecomp.resource.cp.v2.extVirtualMachineInterfaceCP: - derived_from: org.openecomp.resource.cp.v2.extCP - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.v2.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.vfc.nodes.volume: - derived_from: tosca.nodes.BlockStorage - org.openecomp.nodes.VLANNetworkReceptor: - derived_from: tosca.nodes.Root - capabilities: - routing_configuration_internal: - type: org.openecomp.capabilities.RoutingConfiguration - requirements: - - vlan_assignment: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.VLANAssignment - relationship: org.openecomp.relationships.AssignsTo - org.openecomp.resource.vl.nodes.heat.network.neutron.Net: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - dhcp_agent_ids: - type: list - description: The IDs of the DHCP agent to schedule the network - required: false - status: SUPPORTED - entry_schema: - type: string - tenant_id: - type: string - description: The ID of the tenant which will own the network - required: false - status: SUPPORTED - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the network - required: false - status: SUPPORTED - shared: - type: boolean - description: Whether this network should be shared across all tenants - required: false - default: 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 - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this network - required: false - status: SUPPORTED - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - attributes: - 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_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - mtu: - type: scalar-unit.size - description: The maximum transmission unit size(in bytes) for the network - status: SUPPORTED - status: - type: string - description: The status of the network - status: SUPPORTED - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.nova.Server: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - admin_pass: - type: string - description: The administrator password for the server - required: false - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - image: - type: string - description: The ID or name of the image to boot with - required: false - status: SUPPORTED - image_update_policy: - type: string - description: Policy on how to apply an image-id update - required: false - default: REBUILD - status: SUPPORTED - constraints: - - valid_values: - - REBUILD_PRESERVE_EPHEMERAL - - REPLACE - - REBUILD - metadata: - type: json - description: Arbitrary JSON metadata to store for this server - required: false - status: SUPPORTED - contrail_service_instance_ind: - type: boolean - description: Nova server related to service instance indicator - required: false - default: false - status: SUPPORTED - user_data_update_policy: - type: string - description: Policy on how to apply a user_data update - required: false - default: REPLACE - status: SUPPORTED - constraints: - - valid_values: - - REPLACE - - IGNORE - flavor_update_policy: - type: string - description: Policy on how to apply a flavor update - required: false - default: RESIZE - status: SUPPORTED - constraints: - - valid_values: - - RESIZE - - REPLACE - user_data: - type: string - description: User data script to be executed by cloud-init - required: false - default: '' - status: SUPPORTED - flavor: - type: string - description: The ID or name of the flavor to boot onto - required: true - status: SUPPORTED - key_name: - type: string - description: Name of keypair to inject into the server - required: false - status: SUPPORTED - reservation_id: - type: string - description: A UUID for the set of servers being requested - required: false - status: SUPPORTED - security_groups: - type: list - description: List of security group names or IDs - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - config_drive: - type: boolean - description: enable config drive on the server - required: false - status: SUPPORTED - personality: - type: map - description: A map of files to create/overwrite on the server upon boot - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - software_config_transport: - type: string - description: How the server should receive the metadata required for software configuration - required: false - default: POLL_SERVER_CFN - status: SUPPORTED - constraints: - - valid_values: - - POLL_SERVER_CFN - - POLL_SERVER_HEAT - - POLL_TEMP_URL - - ZAQAR_MESSAGE - user_data_format: - type: string - description: How the user_data should be formatted for the server - required: false - default: HEAT_CFNTOOLS - status: SUPPORTED - constraints: - - valid_values: - - SOFTWARE_CONFIG - - RAW - - HEAT_CFNTOOLS - diskConfig: - type: string - description: Control how the disk is partitioned when the server is created - required: false - status: SUPPORTED - constraints: - - valid_values: - - AUTO - - MANUAL - name: - type: string - description: Server name - required: false - status: SUPPORTED - scheduler_hints: - type: map - description: Arbitrary key-value pairs specified by the client to help boot a server - required: false - status: SUPPORTED - entry_schema: - type: string - attributes: - accessIPv4: - type: string - description: The manually assigned alternative public IPv4 address of the server - status: SUPPORTED - addresses: - type: map - description: A dict of all network addresses with corresponding port_id - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.novaServer.network.AddressInfo - accessIPv6: - type: string - description: The manually assigned alternative public IPv6 address of the server - status: SUPPORTED - instance_name: - type: string - description: AWS compatible instance name - status: SUPPORTED - name: - type: string - description: Name of the server - status: SUPPORTED - show: - type: string - description: Detailed information about resource - status: SUPPORTED - console_urls: - type: string - description: URLs of servers consoles - status: SUPPORTED - org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules: - derived_from: tosca.nodes.Root - properties: - description: - type: string - description: Description of the security group - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this security group, which is not required to be unique. - required: false - status: SUPPORTED - rules: - type: list - description: List of security group rules - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule - attributes: - show: - type: string - description: Detailed information about resource - status: SUPPORTED - requirements: - - port: - capability: tosca.capabilities.Attachment - node: org.openecomp.resource.cp.nodes.heat.network.neutron.Port - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.cinder.Volume: - derived_from: org.openecomp.resource.vfc.nodes.volume - properties: - availability_zone: - description: The availability zone in which the volume will be created - type: string - status: SUPPORTED - required: false - image: - description: If specified, the name or ID of the image to create the volume from - type: string - status: SUPPORTED - required: false - metadata: - description: Key/value pairs to associate with the volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - volume_type: - description: If specified, the type of volume to use, mapping to a specific backend - type: string - status: SUPPORTED - required: false - description: - description: A description of the volume - type: string - status: SUPPORTED - required: false - device_type: - description: Device type - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - cdrom - - disk - disk_bus: - description: 'Bus of the device: hypervisor driver chooses a suitable default - if omitted' - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - ide - - lame_bus - - scsi - - usb - - virtio - backup_id: - description: If specified, the backup to create the volume from - type: string - status: SUPPORTED - required: false - source_volid: - description: If specified, the volume to use as source - type: string - status: SUPPORTED - required: false - boot_index: - description: Integer used for ordering the boot disks - type: integer - status: SUPPORTED - required: false - size: - description: The requested storage size (default unit is MB) - type: scalar-unit.size - status: SUPPORTED - required: false - constraints: - - greater_or_equal: 1 GB - read_only: - description: Enables or disables read-only access mode of volume - type: boolean - status: SUPPORTED - required: false - name: - description: A name used to distinguish the volume - type: string - status: SUPPORTED - required: false - scheduler_hints: - description: Arbitrary key-value pairs specified by the client to help the Cinder scheduler creating a volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - swap_size: - description: The size of the swap, in MB - type: scalar-unit.size - status: SUPPORTED - required: false - delete_on_termination: - description: Indicate whether the volume should be deleted when the server is terminated - type: boolean - status: SUPPORTED - required: false - multiattach: - description: Whether allow the volume to be attached more than once - type: boolean - status: SUPPORTED - required: false - attributes: - display_description: - description: Description of the volume - type: string - status: SUPPORTED - attachments: - description: The list of attachments of the volume - type: string - status: SUPPORTED - entry_schema: - type: string - encrypted: - description: Boolean indicating if the volume is encrypted or not - type: boolean - status: SUPPORTED - show: - description: Detailed information about resource - type: string - status: SUPPORTED - created_at: - description: The timestamp indicating volume creation - type: timestamp - status: SUPPORTED - display_name: - description: Name of the volume - type: string - status: SUPPORTED - metadata_values: - description: Key/value pairs associated with the volume in raw dict form - type: map - status: SUPPORTED - entry_schema: - type: string - bootable: - description: Boolean indicating if the volume can be booted or not - type: boolean - status: SUPPORTED - status: - description: The current status of the volume - type: string - status: SUPPORTED - org.openecomp.resource.abstract.nodes.CR: - derived_from: tosca.nodes.Root - properties: - cr_function: - type: string - cr_role: - type: string - cr_type: - type: string - org.openecomp.resource.vl.extVL: - derived_from: tosca.nodes.Root - description: VF Tenant oam protected network - properties: - network_type: - type: string - required: true - description: ECOMP supported network types. - network_role: - type: string - required: true - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_scope: - type: string - constraints: - valid_values: - - VF - - SERVICE - - GLOBAL - 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 - network_technology: - type: string - required: true - description: ECOMP supported network technology - exVL_naming: - type: org.openecomp.datatypes.Naming - 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 - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.abstract.nodes.PNF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_type: - type: string - software_versions: - type: list - entry_schema: - type: string - org.openecomp.resource.vfc.rules.nodes.heat.network.contrail.NetworkRules: - derived_from: tosca.nodes.Root - properties: - entries: - type: org.openecomp.datatypes.heat.contrail.network.rule.RuleList - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - attributes: - tenant_id: - type: string - description: tenant_id - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - rules: - type: list - description: List of rules - status: SUPPORTED - entry_schema: - type: string - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - 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.nodes.VRFObject: - derived_from: tosca.nodes.Root - description: provides capability to connect WAN Transport Service Proxy to VRF Entry - capabilities: - routing_configuration_external: - type: org.openecomp.capabilities.RoutingConfiguration - org.openecomp.resource.abstract.nodes.VFC: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - nfc_function: - type: string - high_availablity: - type: string - description: high_availablity - required: false - status: SUPPORTED - vm_image_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - vm_flavor_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - nfc_naming_code: - type: string - description: nfc code for instance naming - required: false - status: SUPPORTED - vm_type_tag: - type: string - description: vm type based on naming Convention - required: false - status: SUPPORTED - nfc_naming: - type: org.openecomp.datatypes.Naming - description: vfc naming - min_instances: - type: integer - description: Minimum number of VFC Instances - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - max_instances: - type: integer - description: Maximum number of VFC Instances - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 1 - org.openecomp.resource.cp.nodes.heat.contrailV2.VirtualMachineInterface: - derived_from: org.openecomp.resource.cp.nodes.network.Port - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.abstract.nodes.VnfConfiguration: - derived_from: tosca.nodes.Root - properties: - allowed_flavors: - description: a collection of all flavor valuesets available for a given VFC - type: map - entry_schema: - type: org.openecomp.datatypes.flavors.DeploymentFlavor - org.openecomp.resource.vl.nodes.heat.network.contrailV2.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - network_ipam_refs_data: - type: list - description: IPAM references Data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData - network_policy_refs_data: - type: list - description: Policy references data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData - network_ipam_refs: - type: list - description: IPAM references - required: false - status: SUPPORTED - entry_schema: - type: string - network_policy_refs: - type: list - description: Policy references - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vl.internalVL: - derived_from: tosca.nodes.network.Network - description: The AT&T internal (VF-level) Virtual Link - org.openecomp.resource.vl.ELine: - derived_from: org.openecomp.resource.vl.VL - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 0 - - 2 - org.openecomp.resource.vl.VL: - derived_from: tosca.nodes.network.Network - properties: - vendor: - type: string - required: false - vl_name: - type: string - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - end_point: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.Configuration: - derived_from: tosca.nodes.Root - properties: - type: - type: string - description: The type of the node, the configuration will be defined for it. Ex. SBC - required: false - role: - type: string - description: The role of the node, the configuration will be defined for it. Ex. Active, Standby - required: false - function: - type: string - description: The function of the node, the configuration will be defined for it. Ex. NAT Traversal - required: false - org.openecomp.resource.cp.nodes.network.v2.SubInterface: - derived_from: tosca.nodes.Root - properties: - ip_address: - description: Allow the user to set a fixed IP address. Note that this address is a request to the provider which they will attempt to fulfill but may not be able to dependent on the network the port is associated with. - type: string - required: false - order: - description: 'The order of the NIC on the compute instance (e.g. eth2). Note: - when binding more than one port to a single compute (aka multi vNICs) and - ordering is desired, it is *mandatory* that all ports will be set with an - order value and. The order values must represent a positive, arithmetic - progression that starts with 0 (e.g. 0, 1, 2, ..., n).' - type: integer - default: 0 - required: false - constraints: - - greater_or_equal: 0 - is_default: - description: Set is_default=true to apply a default gateway route on the running compute instance to the associated network gateway. Only one port that is associated to single compute node can set as default=true. - type: boolean - default: false - required: false - ip_range_start: - description: Defines the starting IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - ip_range_end: - description: Defines the ending IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - attributes: - ip_address: - description: The IP address would be assigned to the associated compute instance. - type: string - requirements: - - subinterface_link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - 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.vfc.nodes.Compute: - derived_from: tosca.nodes.Compute - capabilities: - disk.ephemeral.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.ephemeral.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of ephemeral disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - instance: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: instance - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: instance - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Existence of instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu.delta: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu.delta - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used since previous datapoint - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Delta - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu_util: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: '%' - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu_util - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average CPU utilization - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.root.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.root.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of root disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - vcpus: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: vcpu - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: vcpus - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of virtual CPUs allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance from the amount of its allocated memory - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.resident: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.resident - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance on the physical machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.MultiFlavorVFC: - derived_from: org.openecomp.resource.abstract.nodes.VFC - properties: - images: - type: map - entry_schema: - type: org.openecomp.datatypes.ImageInfo - required: false - org.openecomp.nodes.PortMirroringConfigurationByPolicy: - derived_from: tosca.nodes.Root - properties: - collector_node: - type: string - description: The name of the Collector Proxy - required: true - policy_name: - type: string - description: The name of the policy for selection of the collector interfaces - required: true - equip_model: - type: string - description: The name of the equipment type of the collector, i.e. Cisco 4500x - required: true - equip_vendor: - type: string - description: The name of the equipment vendor of the collector, i.e. Cisco - required: true - requirements: - - source: - capability: org.openecomp.capabilities.PortMirroring - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.VF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_naming_code: - type: string - nf_type: - type: string - nf_naming: - type: org.openecomp.datatypes.Naming - Default: true - availability_zone_max_count: - type: integer - default: 1 - constraints: - - valid_values: - - 0 - - 1 - - 2 - min_instances: - type: integer - max_instances: - type: integer - multi_stage_design: - type: boolean - default: false - 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.nodes.ForwardingPath: - derived_from: tosca.nodes.Root - properties: - target_range: - type: list - required: true - status: SUPPORTED - 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 - required: true - status: SUPPORTED - requirements: - - forwarder: - capability: org.openecomp.capabilities.Forwarder - relationship: org.openecomp.relationships.ForwardsTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.cp.nodes.heat.network.contrail.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - org.openecomp.resource.cp.nodes.network.SubInterface: - derived_from: tosca.nodes.network.Port - org.openecomp.resource.vfc.nodes.heat.contrail.Compute: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - attributes: - tenant_id: - type: string - description: Tenant id of the VM - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of active VMs - status: SUPPORTED - virtual_machines: - type: string - description: VMs of this compute - status: SUPPORTED - status: - type: string - description: status of the compute - status: SUPPORTED - org.openecomp.resource.cp.nodes.network.Port: - derived_from: tosca.nodes.network.Port - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - 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 - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - subinterface_indicator: - description: identifies if Port is having Sub Interface - type: boolean - required: false - default: false - related_networks: - type: list - description: Related Networks List. - required: false - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - capabilities: - network.incoming.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - forwarder: - type: org.openecomp.capabilities.Forwarder - network.outgoing.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outpoing.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outpoing.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.nodes.VRFEntry: - derived_from: tosca.nodes.Root - requirements: - - routing_configuration_internal: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - - routing_configuration_external: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.cp.extCP: - derived_from: tosca.nodes.Root - description: The SDC Connection Point base type all other CP derive from - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - network_role_tag: - type: string - required: true - description: Must correlate to the set of defined “network-role” tag identifiers from the associated HEAT template - mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements - required: false - description: identifies MAC address assignments to the CP - vlan_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.VlanRequirements - required: false - description: identifies vlan address assignments to the CP - ip_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.IpRequirements - required: true - description: identifies IP requirements to the CP - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - 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 - relationship: tosca.relationships.network.LinksTo - node: org.openecomp.resource.vl.VL - capabilities: - internal_connectionPoint: - type: tosca.capabilities.Node - valid_source_type: - - tosca.nodes.network.Port - org.openecomp.nodes.FabricConfiguration: - derived_from: org.openecomp.nodes.Configuration - requirements: - - fabric_configuration_monitoring: - capability: org.openecomp.capabilities.FabricConfiguration - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.contrail.AbstractSubstitute: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - static_routes_list: - type: list - description: Static routes enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - ordered_interfaces: - type: boolean - description: Indicates if service interface are ordered - required: false - default: false - status: SUPPORTED - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - service_interface_type_list: - type: list - description: List of interface types - required: true - status: SUPPORTED - entry_schema: - type: string - constraints: - - valid_values: - - management - - left - - right - - other - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - interface_list: - type: list - description: List of interfaces - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.contrail.InterfaceData - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - shared_ip_list: - type: list - description: Shared ips enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - attributes: - tenant_id: - type: string - description: Tenant id of the Service Instance - status: SUPPORTED - fq_name: - type: string - description: The FQ name of the service instance - status: SUPPORTED - service_template_name: - type: string - description: Service Template of the Service Instance - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of service VMs active for this Service Instance - status: SUPPORTED - service_instance_name: - type: string - description: The name of the service instance - status: SUPPORTED - virtual_machines: - type: string - description: Service VMs for the Service Instance - status: SUPPORTED - status: - type: string - description: Status of the service instance - status: SUPPORTED - org.openecomp.resource.abstract.nodes.AbstractSubstitute: - derived_from: tosca.nodes.Root - properties: - service_template_filter: - type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering - description: Substitution Filter - required: true - status: SUPPORTED - org.openecomp.resource.cp.nodes.heat.network.neutron.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_profile: - type: tosca.datatypes.nfv.VlProfile - required: true - capabilities: - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.Cp: - derived_from: tosca.nodes.Root - properties: - layer_protocol: - type: list - entry_schema: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - required: true - role: - type: string - constraints: - - valid_values: - - root - - leaf - required: false - description: - type: string - required: false - protocol_data: - type: list - entry_schema: - type: tosca.datatypes.nfv.CpProtocolData - required: true - trunk_mode: - type: boolean - required: true - allowed_address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.nodes.nfv.VnfVirtualLinkDesc: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_flavours: - type: map - entry_schema: - type: tosca.datatypes.nfv.VlFlavour - required: true - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - org.openecomp.resource.vfc.AllottedResource: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - role: - type: string - required: true - description: Unique label that defines the role that this allotted resource performs - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - target_network_role: - type: string - required: true - description: Target network role - requirements: - - service_dependency: - capability: org.openecomp.capabilities.AllottedResource - relationship: tosca.relationships.DependsOn - node: tosca.services.Root - tosca.nodes.nfv.ext.zte.VDU: - derived_from: tosca.nodes.Root - properties: - manual_scale_select_vim: - type: boolean - required: false - vdu_type: - type: string - required: false - watchdog: - type: tosca.datatypes.nfv.ext.zte.WatchDog - required: false - name: - type: string - required: false - local_affinity_antiaffinity_rule: - type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule - required: false - support_scaling: - type: boolean - required: false - storage_policy: - type: string - required: false - key_vdu: - type: boolean - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - inject_data_list: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.InjectData - 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 - 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 - tosca.nodes.nfv.VDU: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - Virtualbinding: - type: tosca.capabilities.nfv.VirtualBindable - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - properties: - bitrate_requirement: - type: integer - required: false - vnic_name: - type: string - required: false - vnic_order: - type: integer - required: false - vnic_type: - type: string - constraints: - - valid_values: - - normal - - macvtap - - direct - - baremetal - - direct-physical - - virtio-forwarder - required: false - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - required: false - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - - virtual_binding: - capability: tosca.capabilities.nfv.VirtualBindable - relationship: tosca.relationships.nfv.VirtualBindsTo - node: tosca.nodes.nfv.Vdu.Compute - org.openecomp.resource.vfc.NSD: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - nsd_id: - type: string - required: true - description: ID of the NSD - nsd_designer: - type: string - required: true - description: Designer of the NSD - nsd_version: - type: string - required: true - description: Version of the NSD - nsd_name: - type: string - required: true - description: Name of the NSD - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - boot_order: - type: map - entry_schema: - type: string - required: false - nfvi_constraints: - type: map - entry_schema: - type: string - required: false - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - required: true - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - required: true - inject_files: - type: tosca.datatypes.nfv.injectFile - required: false - meta_data: - type: map - entry_schema: - type: string - required: false - user_data: - type: string - required: false - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - requirements: - - virtual_storage: - capability: tosca.capabilities.nfv.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - node: tosca.nodes.nfv.Vdu.VirtualStorage - occurences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.GenericNeutronNet: - derived_from: org.openecomp.resource.vl.extVL - description: Generic Neutron Network - properties: - network_role: - type: string - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_assignments: - type: org.openecomp.datatypes.network.NetworkAssignments - network_flows: - type: org.openecomp.datatypes.network.NetworkFlows - network_scope: - type: string - network_ecomp_naming: - type: org.openecomp.datatypes.EcompNaming - network_type: - type: string - description: ECOMP supported network types. - default: NEUTRON - provider_network: - type: org.openecomp.datatypes.network.ProviderNetwork - network_technology: - type: string - description: ECOMP supported network technology - default: NEUTRON - network_homing: - type: org.openecomp.datatypes.EcompHoming - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 1 - - UNBOUNDED - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - properties: - type_of_storage: - type: string - constraints: - - valid_values: - - volume - - object - - root - - block - required: true - size_of_storage: - type: scalar-unit.size - required: true - vdu_storage_requirements: - type: map - entry_schema: - type: string - required: false - rdma_enabled: - type: boolean - required: false - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - tosca.nodes.nfv.ext.zte.VL: - derived_from: tosca.nodes.Root - properties: - segmentation_id: - type: string - required: false - network_name: - type: string - required: false - is_predefined: - type: boolean - required: false - mtu: - type: integer - required: false - dns_nameservers: - type: list - required: false - entry_schema: - type: string - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - network_id: - type: string - required: false - host_routes: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.HostRouteInfo - ip_version: - type: integer - required: false - vendor: - type: string - required: false - name: - type: string - required: false - start_ip: - type: string - required: false - vlan_transparent: - type: boolean - required: false - cidr: - type: string - required: false - gateway_ip: - type: string - required: false - network_type: - type: string - required: false - end_ip: - type: string - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.ext.LocalStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: string - required: false - disk_type: - type: string - required: false - capabilities: - local_attachment: - type: tosca.capabilities.nfv.ext.LocalAttachment - tosca.nodes.nfv.ext.zte.CP: - derived_from: tosca.nodes.Root - properties: - guest_os_mtu: - type: integer - required: false - bandwidth: - type: integer - required: false - interface_name: - type: string - required: false - allowed_address_pairs: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.AddressPairs - ip_address: - type: string - required: false - bond: - type: string - required: false - proxiedVNFs: - type: list - required: false - entry_schema: - type: string - sfc_encapsulation: - type: string - required: false - floating_ip_address: - type: tosca.datatypes.nfv.ext.FloatingIP - required: false - service_ip_address: - required: false - type: string - mac_address: - type: string - required: false - proxiedVNFtype: - type: string - required: false - macbond: - type: string - required: false - vnic_type: - type: string - required: false - direction: - type: string - required: false - order: - type: integer - required: false - requirements: - - forwarder: - capability: tosca.capabilities.nfv.Forwarder - occurrences: - - 0 - - UNBOUNDED - - virtualbinding: - capability: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 0 - - UNBOUNDED - - virtualLink: - capability: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 0 - - UNBOUNDED - capabilities: - forwarder: - type: tosca.capabilities.nfv.Forwarder - tosca.nodes.nfv.ext.ImageFile: - derived_from: tosca.nodes.Root - properties: - file_url: - type: string - required: false - container_type: - type: string - required: false - name: - type: string - required: false - disk_format: - type: string - required: false - version: - type: string - required: false - capabilities: - guest_os: - type: tosca.capabilities.nfv.ext.GuestOs - image_fle: - type: tosca.capabilities.nfv.ext.ImageFile - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - properties: - descriptor_id: - type: string - required: true - descriptor_version: - type: string - required: true - provider: - type: string - required: true - product_name: - type: string - required: true - software_version: - type: string - required: true - product_info_name: - type: string - required: false - product_info_description: - type: string - required: false - vnfm_info: - type: list - entry_schema: - type: string - required: true - localization_languages: - type: list - entry_schema: - type: string - required: false - default_localization_language: - type: string - required: false - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - required: false - modifiable_attributes: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributes - required: false - flavour_id: - type: string - required: true - flavour_description: - type: string - required: true - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - occurrences: - - 0 - - UNBOUNDED - interfaces: - Nfv: - type: tosca.interfaces.nfv.vnf.lifecycle.Nfv - org.openecomp.resource.vl.overlaytunnel: - derived_from: tosca.nodes.Root - description: This entity represents abstract overlay tunnel end point. - properties: - id: - type: string - description: Identifier of the Tunnel Endpoint node. - required: false - template_name: - type: string - required: false - version: - type: string - required: false - name: - type: string - description: Overlay tunnel name used by for reference by the administrator. - required: false - description: - type: string - description: Additional comments/information about overlay tunnel. - required: false - tunnelType: - type: string - constraints: - - valid_values: - - L3-DCI - - L2-DCI - description: type defines if the overlay tunnel is L3-DCI tunnel or L2-DCI tunnel. - required: true - site1_id: - type: string - description: Identifier of first DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site1_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site1_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site1_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site1_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site1_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site1_vni: - type: integer - description: VXLAN ID - required: false - site1_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site1_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site1_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - site2_id: - type: string - description: Identifier of second DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site2_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site2_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site2_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site2_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site2_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site2_vni: - type: integer - description: VXLAN ID - required: false - site2_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site2_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site2_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.vl.underlayvpn: - derived_from: tosca.nodes.Root - description: undelay vpn type definitions - properties: - id: - type: string - required: false - template_name: - type: string - required: false - version: - type: string - required: false - vendor: - type: string - required: false - template_author: - type: string - required: false - name: - type: string - required: false - description: - type: string - required: false - serviceType: - type: string - description: type of VPN service - required: false - default: l3vpn_sptn - topology: - type: string - description: type of VPN topology - constraints: - - valid_values: - - full-mesh - - point_to_multipoint - - point_to_point - - singlePoint - - hubspoke - - hubspoke_via_hubce - - hubspoke_disjoint - - ADD_DROP_Z - required: false - default: full-mesh - technology: - type: string - description: type of VPN technology - constraints: - - valid_values: - - mpls - - rosen multivpn - - vxlan overlay l3vpn - - eth over sdh - - vlan - required: false - default: mpls - site1_name: - type: string - description: name of first site - required: false - site2_name: - type: string - description: name of second site - required: false - sna1_name: - type: string - description: name of site network accesses associated with the site1 - required: false - sna2_name: - type: string - description: name of site network accesses associated with the site2 - required: false - pe1_id: - type: string - description: id of provider edge1, it can be name or ip or uuid - required: false - pe2_id: - type: string - description: id of provider edge2, it can be name or ip or uuid - required: false - ac1_id: - type: string - description: id of attachment circuit1, it can be port name or uuid - required: false - ac1_svlan: - type: integer - description: ac1 svlan - required: false - ac1_ip: - type: string - description: ip of ac1, only for layer3 vpn, it should contain mask - required: false - ac1_peer_ip: - type: string - description: ip of ac1 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac1_route: - type: string - description: route configure of ac1, only for layer3 vpn - required: false - ac1_protocol: - type: string - description: routing protocol type of ac1, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - required: false - ac1_protocol_bgp_as: - type: string - description: autonomous-system number of ac1, , only required for ebgp protocol - required: false - ac2_id: - type: string - description: id of attachment circuit2, it can be port name or uuid - required: false - ac2_svlan: - type: integer - description: ac2 svlan - required: false - ac2_ip: - type: string - description: ip of ac2, only for layer3 vpn, it should contain mask - required: false - ac2_peer_ip: - type: string - description: ip of ac2 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac2_route: - type: string - description: route configure of ac2, only for layer3 vpn - required: false - ac2_protocol: - type: string - description: routing protocol type of ac2, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - default: STATIC - required: false - ac2_protocol_bgp_as: - type: string - description: autonomous-system number of ac2, , only required for ebgp protocol - required: false - af_type: - type: string - description: address family type - default: ipv4 - required: false - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/policies.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/policies.yml deleted file mode 100644 index 6063d085..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/policies.yml +++ /dev/null @@ -1,134 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -policy_types: - tosca.policies.Root: - description: The TOSCA Policy Type all other TOSCA Policy Types derive from - tosca.policies.Placement: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern placement of TOSCA nodes or groups of nodes. - tosca.policies.Scaling: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern scaling of TOSCA nodes or groups of nodes. - tosca.policies.Update: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern update of TOSCA nodes or groups of nodes. - tosca.policies.Performance: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to declare performance requirements for TOSCA nodes or groups of nodes. - org.openecomp.policies.placement.Antilocate: - derived_from: tosca.policies.Placement - description: My placement policy for separation based upon container type value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - container_type: - type: string - description: container type - required: false - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.Colocate: - derived_from: tosca.policies.Placement - description: Keep associated nodes (groups of nodes) based upon affinity value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - affinity: - type: string - description: affinity - required: true - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.valet.Diversity: - derived_from: tosca.policies.Placement - description: Valet Diversity - properties: - level: - type: string - description: diversity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Exclusivity: - derived_from: tosca.policies.Placement - description: Valet Exclusivity - properties: - level: - type: string - description: exclusivity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Affinity: - derived_from: tosca.policies.Placement - description: Valet Affinity - properties: - level: - type: string - description: affinity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.scaling.Fixed: - derived_from: tosca.policies.Scaling - properties: - quantity: - description: the exact number of instances to keep up - type: integer - required: true - org.openecomp.policies.External: - derived_from: tosca.policies.Root - description: externally managed policy (for example, type="network assignment", source="Policy Manager", name="route target") - properties: - source: - type: string - description: The name of the server that exposes the policy with predefined type and name. - required: false - type: - type: string - description: The type (category) of the policy same as it is defined in the source. - required: false - name: - type: string - description: The name of the policy, that related to specific type, same as it is defined in the source. - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/relationships.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/relationships.yml deleted file mode 100644 index b1b554d1..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/relationships.yml +++ /dev/null @@ -1,142 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- capabilities.yml -- data.yml -- interfaces.yml -relationship_types: - tosca.relationships.Root: - description: This is the default (root) TOSCA Relationship Type definition that all other TOSCA Relationship Types derive from. - attributes: - tosca_id: - description: A unique identifier of the realized instance of a Relationship Template that derives from any TOSCA normative type. - type: string - tosca_name: - description: This attribute reflects the name of the Relationship Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment. - type: string - state: - description: The state of the relationship instance. - type: string - default: initial - interfaces: - Configure: - type: tosca.interfaces.relationship.Configure - tosca.relationships.RoutesTo: - derived_from: tosca.relationships.ConnectsTo - description: This type represents an intentional network routing between two Endpoints in different networks. - valid_target_types: - - tosca.capabilities.Endpoint - tosca.relationships.network.LinksTo: - derived_from: tosca.relationships.DependsOn - description: This relationship type represents an association relationship between Port and Network node types. - valid_target_types: - - tosca.capabilities.network.Linkable - tosca.relationships.AttachesTo: - derived_from: tosca.relationships.Root - description: This type represents an attachment relationship between two nodes. For example, an AttachesTo relationship type would be used for attaching a storage node to a Compute node. - valid_target_types: - - tosca.capabilities.Attachment - properties: - location: - description: 'The relative location (e.g., path on the file system), which - provides the root location to address an attached node. e.g., a mount point - / path such as ''/usr/data''. Note: The user must provide it and it cannot - be "root".' - type: string - constraints: - - min_length: 1 - device: - description: The logical device name which for the attached device (which is represented by the target node in the model). e.g., '/dev/hda1'. - type: string - required: false - attributes: - device: - description: 'The logical name of the device as exposed to the instance. Note: - A runtime property that gets set when the model gets instantiated by the - orchestrator.' - type: string - tosca.relationships.network.BindsTo: - derived_from: tosca.relationships.DependsOn - description: This type represents a network association relationship between Port and Compute node types. - valid_target_types: - - tosca.capabilities.network.Bindable - tosca.relationships.HostedOn: - derived_from: tosca.relationships.Root - description: This type represents a hosting relationship between two nodes. - valid_target_types: - - tosca.capabilities.Container - tosca.relationships.DependsOn: - derived_from: tosca.relationships.Root - description: This type represents a general dependency relationship between two nodes. - valid_target_types: - - tosca.capabilities.Node - tosca.relationships.ConnectsTo: - derived_from: tosca.relationships.Root - description: This type represents a network connection relationship between two nodes. - valid_target_types: - - tosca.capabilities.Endpoint - properties: - credential: - type: tosca.datatypes.Credential - required: false - 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 - org.openecomp.relationships.ForwardsTo: - derived_from: tosca.relationships.Root - valid_target_types: - - org.openecomp.capabilities.Forwarder - org.openecomp.relationships.AssignsTo: - derived_from: tosca.relationships.Root - org.openecomp.relationships.RoutesTo: - derived_from: tosca.relationships.RoutesTo - description: This type represents an intentional network routing between internal and external network - tosca.relationships.nfv.VirtualBindsTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualBindable - tosca.relationships.nfv.VirtualLinksTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualLinkable - tosca.relationships.nfv.Vdu.AttachedTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualStorage diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCompute-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCompute-template.yml deleted file mode 100644 index 546f88a8..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCompute-template.yml +++ /dev/null @@ -1,103 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - description: VDU Compute - properties: - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - inject_files: - type: tosca.datatypes.nfv.injectFile - name: - type: string - nfvi_constraints: - type: map - entry_schema: - type: string - meta_data: - type: map - entry_schema: - type: string - description: - type: string - user_data: - type: string - boot_order: - type: map - entry_schema: - type: string - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCp-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCp-template.yml deleted file mode 100644 index ec266374..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduCp-template.yml +++ /dev/null @@ -1,59 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - description: VDU Cp - properties: - vnic_name: - type: string - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - bitrate_requirement: - type: integer - vnic_order: - type: integer - vnic_type: - type: string - requirements: - - virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduVirtualstorage-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduVirtualstorage-template.yml deleted file mode 100644 index 566f7054..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-VduVirtualstorage-template.yml +++ /dev/null @@ -1,50 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - description: VDU VirtualStorage - properties: - vdu_storage_requirements: - type: map - entry_schema: - type: string - size_of_storage: - type: scalar-unit.size - rdma_enabled: - type: boolean - type_of_storage: - type: string - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template-interface.yml deleted file mode 100644 index 93cb070e..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template-interface.yml +++ /dev/null @@ -1,208 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.resource.vf.Vgw1181049: - derived_from: org.openecomp.resource.abstract.nodes.VF - properties: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - capabilities: - vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template.yml deleted file mode 100644 index 62f4cae7..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vgw1181049-template.yml +++ /dev/null @@ -1,288 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -- resource-VNF: - file: resource-Vnf-template.yml -- resource-VnfVirtualLink: - file: resource-Vnfvirtuallink-template.yml -- resource-VDU Cp: - file: resource-VduCp-template.yml -- resource-VDU VirtualStorage: - file: resource-VduVirtualstorage-template.yml -- resource-VDU Compute: - file: resource-VduCompute-template.yml -topology_template: - inputs: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - node_templates: - LLU_VNF: - type: tosca.nodes.nfv.VNF - metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - customizationUUID: 06bffc87-30c7-42ad-b99d-19c6c13405dc - version: '1.0' - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - descriptor_id: b1bb0ce7-2222-4fa7-95ed-4840d70a1177 - provider: onap - vnfm_info: - - gvnfm - flavour_id: simple - descriptor_version: '1.0' - software_version: '1.0' - flavour_description: simple - product_name: vcpe_vgw - VL_mux_gw_private_net: - type: tosca.nodes.nfv.VnfVirtualLink - metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - customizationUUID: fbea54ef-8f8b-4f35-81d6-997a47282698 - version: '1.0' - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - vl_profile: - min_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - max_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - networkName: mux_gw_private_net_id - cidr: 192.168.0.0/24 - dhcpEnabled: false - connectivity_type: - layer_protocol: ipv4 - VDU_vgw_0: - type: tosca.nodes.nfv.Vdu.Compute - metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - customizationUUID: 93c3f2e3-67e7-4bb4-be11-8a48df924c4c - version: '1.0' - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - configurable_properties: - additional_vnfc_configurable_properties: { - } - name: vdu_vgw_0 - description: vgw - vdu_profile: - watchdog: none - min_number_of_instances: 1 - max_number_of_instances: 1 - requirements: - - virtual_storage: - capability: virtual_storage - node: VirtualStorage_root_all - capabilities: - virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - VirtualStorage_root_all: - type: tosca.nodes.nfv.Vdu.VirtualStorage - metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - customizationUUID: dc20e1ad-aed9-4154-b2b4-3a702eee49a7 - version: '1.0' - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - size_of_storage: 40 GB - type_of_storage: root - Cp_vgw_mux_gw_private_net: - type: tosca.nodes.nfv.VduCp - metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - customizationUUID: b5ff315f-effc-46e9-a0c5-aec1954845e0 - version: '1.0' - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - trunk_mode: false - protocol_data: - - asscociated_layer_protocol: ipv4 - address_data: - address_type: ip_address - l3_address_data: - fixed_ip_address: - - 192.168.0.1 - ip_address_assignment: false - floating_ip_activated: false - layer_protocol: - - ipv4 - virtual_network_interface_requirements: - - name: "sriov-support" - support_mandatory: true - network_interface_requirements: - interfaceType: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform":"generic", "mandatory": "true", "configurationValue": "PCI-Passthrough"}' - nic_io_requirements: - logical_node_requirements: - pciNumDevices: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": "generic", "mandatory": "true", "configurationValue": "1"}' - requirements: - - virtual_link: - capability: virtual_linkable - node: VL_mux_gw_private_net - - virtual_binding: - capability: virtual_binding - node: VDU_vgw_0 - substitution_mappings: - node_type: org.openecomp.resource.vf.Vgw1181049 - capabilities: - vl_mux_gw_private_net.feature: - - vl_mux_gw_private_net - - feature - cp_vgw_mux_gw_private_net.feature: - - cp_vgw_mux_gw_private_net - - feature - vdu_vgw_0.virtual_compute: - - vdu_vgw_0 - - virtual_compute - vdu_vgw_0.virtual_binding: - - vdu_vgw_0 - - virtual_binding - virtualstorage_root_all.virtual_storage: - - virtualstorage_root_all - - virtual_storage - llu_vnf.feature: - - llu_vnf - - feature - vl_mux_gw_private_net.virtual_linkable: - - vl_mux_gw_private_net - - virtual_linkable - vl_mux_gw_private_net.monitoring_parameter: - - vl_mux_gw_private_net - - monitoring_parameter - vdu_vgw_0.monitoring_parameter: - - vdu_vgw_0 - - monitoring_parameter - virtualstorage_root_all.feature: - - virtualstorage_root_all - - feature - vdu_vgw_0.feature: - - vdu_vgw_0 - - feature - requirements: - vdu_vgw_0.virtual_storage: - - vdu_vgw_0 - - virtual_storage - vl_mux_gw_private_net.dependency: - - vl_mux_gw_private_net - - dependency - virtualstorage_root_all.dependency: - - virtualstorage_root_all - - dependency - vdu_vgw_0.dependency: - - vdu_vgw_0 - - dependency - cp_vgw_mux_gw_private_net.virtual_binding: - - cp_vgw_mux_gw_private_net - - virtual_binding - cp_vgw_mux_gw_private_net.dependency: - - cp_vgw_mux_gw_private_net - - dependency - llu_vnf.dependency: - - llu_vnf - - dependency - llu_vnf.virtual_link: - - llu_vnf - - virtual_link - cp_vgw_mux_gw_private_net.virtual_link: - - cp_vgw_mux_gw_private_net - - virtual_link diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnf-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnf-template.yml deleted file mode 100644 index 121aba2c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnf-template.yml +++ /dev/null @@ -1,70 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - description: VNF - properties: - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - product_info_name: - type: string - default_localization_language: - type: string - flavour_id: - type: string - flavour_description: - type: string - product_name: - type: string - descriptor_id: - type: string - product_info_description: - type: string - provider: - type: string - descriptor_version: - type: string - vnfm_info: - type: list - entry_schema: - type: string - software_version: - type: string - localization_languages: - type: list - entry_schema: - type: string - requirements: - - virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnfvirtuallink-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnfvirtuallink-template.yml deleted file mode 100644 index d39b1b3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/resource-Vnfvirtuallink-template.yml +++ /dev/null @@ -1,57 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - description: VnfVirtualLink - properties: - vl_profile: - type: tosca.datatypes.nfv.VlProfile - description: - type: string - test_access: - type: list - entry_schema: - type: string - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template-interface.yml deleted file mode 100644 index 45fc3065..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template-interface.yml +++ /dev/null @@ -1,176 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.service.Testns8: - derived_from: org.openecomp.resource.abstract.nodes.service - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - requirements: - - vgw11810490.llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - vgw11810490.llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template.yml deleted file mode 100644 index 9d9bdc3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/Definitions/service-Testns8-template.yml +++ /dev/null @@ -1,135 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 5be056bd-1ecd-4c14-9465-3bbc994190ee - UUID: 188ed3c6-1573-4b2d-9d3f-a03693bed79b - name: TestNs8 - description: test - type: Service - category: Network Service - serviceType: '' - serviceRole: '' - instantiationType: A-la-carte - serviceEcompNaming: true - ecompGeneratedNaming: true - namingPolicy: '' - environmentContext: General_Revenue-Bearing -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- service-TestNs8-interface: - file: service-Testns8-template-interface.yml -- resource-vgw1181049: - file: resource-Vgw1181049-template.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -topology_template: - node_templates: - vgw1181049 0: - type: org.openecomp.resource.vf.Vgw1181049 - metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - customizationUUID: 32efc3ac-6fd2-4cda-9f15-592e54f41560 - version: '1.0' - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' - properties: - nf_naming: - ecomp_generated_naming: true - multi_stage_design: false - availability_zone_max_count: 1 - capabilities: - vdu_vgw_0.virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform": - "generic","mandatory": "true", "configurationValue": "1024"}' - memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": - "generic", "mandatory": "true", "configurationValue": "2 MB"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - substitution_mappings: - node_type: org.openecomp.service.Testns8 - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - - vgw11810490 - - virtualstorage_root_all.virtual_storage - vgw11810490.llu_vnf.feature: - - vgw11810490 - - llu_vnf.feature - vgw11810490.vdu_vgw_0.monitoring_parameter: - - vgw11810490 - - vdu_vgw_0.monitoring_parameter - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - - vgw11810490 - - vl_mux_gw_private_net.monitoring_parameter - vgw11810490.cp_vgw_mux_gw_private_net.feature: - - vgw11810490 - - cp_vgw_mux_gw_private_net.feature - vgw11810490.vl_mux_gw_private_net.feature: - - vgw11810490 - - vl_mux_gw_private_net.feature - vgw11810490.vdu_vgw_0.feature: - - vgw11810490 - - vdu_vgw_0.feature - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - - vgw11810490 - - vl_mux_gw_private_net.virtual_linkable - vgw11810490.vdu_vgw_0.virtual_binding: - - vgw11810490 - - vdu_vgw_0.virtual_binding - vgw11810490.virtualstorage_root_all.feature: - - vgw11810490 - - virtualstorage_root_all.feature - vgw11810490.vdu_vgw_0.virtual_compute: - - vgw11810490 - - vdu_vgw_0.virtual_compute - requirements: - vgw11810490.vdu_vgw_0.virtual_storage: - - vgw11810490 - - vdu_vgw_0.virtual_storage - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_link - vgw11810490.llu_vnf.dependency: - - vgw11810490 - - llu_vnf.dependency - vgw11810490.virtualstorage_root_all.dependency: - - vgw11810490 - - virtualstorage_root_all.dependency - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - - vgw11810490 - - cp_vgw_mux_gw_private_net.dependency - vgw11810490.llu_vnf.virtual_link: - - vgw11810490 - - llu_vnf.virtual_link - vgw11810490.vl_mux_gw_private_net.dependency: - - vgw11810490 - - vl_mux_gw_private_net.dependency - vgw11810490.vdu_vgw_0.dependency: - - vgw11810490 - - vdu_vgw_0.dependency - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_binding diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/TOSCA-Metadata/TOSCA.meta b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/TOSCA-Metadata/TOSCA.meta deleted file mode 100644 index e65ed508..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,7 +0,0 @@ -TOSCA-Meta-File-Version: 1.0 -CSAR-Version: 1.1 -Created-By: Carlos Santana -Entry-Definitions: Definitions/service-Testns8-template.yml - -Name: csar.meta -Content-Type: text/plain diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/csar.meta b/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/csar.meta deleted file mode 100644 index bc3359ce..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciNumDevices/csar.meta +++ /dev/null @@ -1,2 +0,0 @@ -SDC-TOSCA-Meta-File-Version: 1.0 -SDC-TOSCA-Definitions-Version: 9.0 diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/authorized_keys +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa deleted file mode 100644 index 60597577..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN RSA PRIVATE KEY----- -MIIEpAIBAAKCAQEAxsekiqwLgs9VfChnr2bnpLC3VqD1iT+s969vWe05j1RDozPu -zyD3krNgVUcd65x2QQJWrDK2fnyQUtubbPb3wviLXs0Gof4a/b65JsMQkeeC2/OK -aFvrE6D3heouXmWO1vo1iXy2hUhcfXdr6eM3rP3zpU9zb2Al25/90Ha8kKBpe1RS -PKHpmcqVXIpGVxJSXnioAFXUsJ687qrTv7Zm13AHkm2L1Y5IvMsGHLFjFTGFlFoY -ftQQAepF507CFqs66tD378vvNVg8LYqrKpnfdx2PIRNLHAa1xQWc0EvwGHyBQZRL -hTXS3M3IZ7Y22dJ+3Zg15PMx7QmWDZO5MG/JPwIDAQABAoIBAE5KS1AiutXmezDP -aSb4TLvcrhj8hDhuT92txxmQCV+ePJWG2sPRpDCvXX246NvnX9vy49gmkSH4RY+c -1vZvvt2XrqzD65zZzB+sgpf1tA0DNdMTdKvtqASvHU4tEd4z+bJKEdP4vpp4CZWQ -93vC9ia4TsIJLNns8Hwz42+7lEEResKYZA2djGnzHl+83vR1dm0GGBD6BKR1C3Cx -HbEhqx42EV61+8nAweQNjWKxeAc2hg+H8o8qWJM1aKy0TnqW6kudOYRyYIpX0rJA -siE2HwvDA1mDd5M8ntZ/Cx0pnTc/cuZB8BQJ0jN1JXbrJGbWspBNXformw7isbyO -WIOjvEECgYEA84XKV3aPrTE2JBs5vzzs59NMPV+5frw+xzDyPxqK5Q7+jjVKDwxh -/WRatCaTdRxhOI905HfVsDYjrsPOpmF9MHsLxmBhwk8zBFOu/xtYr7zBNkJhmCsq -kZMdxf8bpu08E7kMQJ2MvT7OhM5HRlWIUR0jdja8Hz51Ro4oOb/po7kCgYEA0Pb5 -v12ZsaSHMF0r4l983PifNwYmI22iQIEtRT2DxgTkDKgBTjbRzqZmEhaADMAO48o9 -sIZy+KJ/a8G9fPQVwMgBID8zOHnWsrFmM3qkj5hhrAQdtq7OE71zgaP0tyE1TG4u -Zs3a7eSyuoildHHFqX88oXSYsTlfV8vn23UpwLcCgYEAwXiCuBger8dQL0FeEJwz -zz5k7MG3WoPuEEzHuPC6dp8CCDM4IlqBI1JuaX/YWQtyBgCbKsQ2BigNE1THQhJj -5ndrdHCwWjKX4pElj9HHFN+OVTBJ3x40VLGfzuUNsAH8X+L9Y/yHivZyFrrXj352 -rZLL0KhNrzjs7WAVf0QEOCkCgYBe2s1xnZZnueyX+qMyBfBTChST0Jm9WUXejAS1 -un+3gn7Wc+jrzRyd9pC8wzPrFb9sjWBFYjKMRI8cpfxS3SWGtgM01Rt2FnBr+vUO -hyxt9ljX0aJ/S4hGE6h7/6XU/yEHibhMeENZ24d5/w9D9WUpVJV8IMYzJHzwCKI9 -z0hdrwKBgQDMKvY3DBpZjhZe9YnOgdj4SRpNwaasUSf3a3SZYY1JyOZVUzeSSzoX -rYLfxBRDjkJ8Nnod+nR/JSRqYa/SJYEMZEZFsC+k/pvBiaP6tk694IlpLD/2MXN6 -14FUV5LH/rGSbZJMSfZ9yNX1XZDowH8nOu+qlmlU4lmgiOuityTmtw== ------END RSA PRIVATE KEY----- diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub deleted file mode 100644 index 444ca79c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/id_rsa.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGx6SKrAuCz1V8KGevZueksLdWoPWJP6z3r29Z7TmPVEOjM+7PIPeSs2BVRx3rnHZBAlasMrZ+fJBS25ts9vfC+ItezQah/hr9vrkmwxCR54Lb84poW+sToPeF6i5eZY7W+jWJfLaFSFx9d2vp4zes/fOlT3NvYCXbn/3QdryQoGl7VFI8oemZypVcikZXElJeeKgAVdSwnrzuqtO/tmbXcAeSbYvVjki8ywYcsWMVMYWUWhh+1BAB6kXnTsIWqzrq0Pfvy+81WDwtiqsqmd93HY8hE0scBrXFBZzQS/AYfIFBlEuFNdLczchntjbZ0n7dmDXk8zHtCZYNk7kwb8k/ diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image deleted file mode 100644 index f31d15df..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/OTHER/image +++ /dev/null @@ -1 +0,0 @@ -ubuntu_16.04 diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml deleted file mode 100644 index c49c2c69..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VENDOR_LICENSE/vendor-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendorecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F118291.0entitlement pool12341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB39089 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml deleted file mode 100644 index db573afd..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Artifacts/org.openecomp.resource.vf.Vgw1181049_v1.0/Deployment/VF_LICENSE/vf-license-model.xml +++ /dev/null @@ -1 +0,0 @@ -vendor2455e00dddf84eedaaed6eb412d39a7eentitlement poolecfc3a2d7d9841d1b5fc09316c457a4816C58016E38246E3963132B4E9F1182912341.0license keyUniversalbbc43c8138a0441b9c85fcd7dd50a8fe1266FB83A4614370B59FF6923CB390891.0feature groupd3780d334c4c42d38c7ab1ec23a65cfd4444 \ No newline at end of file diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/annotations.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/annotations.yml deleted file mode 100644 index 2f146061..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/annotations.yml +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -annotation_types: - org.openecomp.annotations.Source: - description: Indicates the origin source of an input - properties: - source_type: - type: string - vf_module_label: - type: list - description: List of VF Modules this input was originated from - entry_schema: - type: string - param_name: - type: string - description: Source parameter name diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/artifacts.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/artifacts.yml deleted file mode 100644 index 175615c7..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/artifacts.yml +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -artifact_types: - tosca.artifacts.Root: - description: This is the default (root) TOSCA Artifact Type definition that all other TOSCA base Artifact Types derive from. - tosca.artifacts.Deployment.Image: - derived_from: tosca.artifacts.Deployment - description: This artifact type represents a parent type for any "image" which is an opaque packaging of a TOSCA Node's deployment (whether real or virtual) whose contents are typically already installed and pre-configured (i.e., "stateful") and prepared to be run on a known target container. - tosca.artifacts.Implementation.Bash: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Bash script type that contains Bash commands that can be executed on the Unix Bash shell. - tosca.artifacts.Deployment.Image.VM: - derived_from: tosca.artifacts.Deployment - description: This artifact represents the parent type for all Virtual Machine (VM) image and container formatted deployment artifacts. These images contain a stateful capture of a machine (e.g., server) including operating system and installed software along with any configurations and can be run on another machine using a hypervisor which virtualizes typical server (i.e., hardware) resources. - tosca.artifacts.Implementation.Python: - derived_from: tosca.artifacts.Implementation - description: This artifact type represents a Python file that contains Python language constructs that can be executed within a Python interpreter. - tosca.artifacts.Deployment: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all deployment artifacts in TOSCA. This class of artifacts typically represents a binary packaging of an application or service that is used to install/create or deploy it as part of a node's lifecycle. - tosca.artifacts.File: - derived_from: tosca.artifacts.Root - description: This artifact type is used when an artifact definition needs to have its associated file simply treated as a file and no special handling/handlers are invoked (i.e., it is not treated as either an implementation or deployment artifact type). - tosca.artifacts.Implementation: - derived_from: tosca.artifacts.Root - description: This artifact type represents the parent type for all implementation artifacts in TOSCA. These artifacts are used to implement operations of TOSCA interfaces either directly (e.g., scripts) or indirectly (e.g., config. files). - tosca.artifacts.nfv.SwImage: - derived_from: tosca.artifacts.Deployment.Image diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/capabilities.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/capabilities.yml deleted file mode 100644 index 734c2012..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/capabilities.yml +++ /dev/null @@ -1,293 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -capability_types: - tosca.capabilities.Root: - description: The TOSCA root Capability Type all other TOSCA base Capability Types derive from - tosca.capabilities.Attachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.Node: - derived_from: tosca.capabilities.Root - tosca.capabilities.Container: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: integer - required: false - constraints: - - greater_or_equal: 1 - cpu_frequency: - type: scalar-unit.frequency - required: false - constraints: - - greater_or_equal: 0.1 GHz - disk_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - mem_size: - type: scalar-unit.size - required: false - constraints: - - greater_or_equal: 0 MB - org.openecomp.capabilities.PortMirroring: - derived_from: tosca.capabilities.Root - properties: - connection_point: - type: org.openecomp.datatypes.PortMirroringConnectionPointDescription - tosca.capabilities.Endpoint: - derived_from: tosca.capabilities.Root - properties: - protocol: - type: string - default: tcp - port: - type: PortDef - required: false - secure: - type: boolean - default: false - url_path: - type: string - required: false - port_name: - type: string - required: false - network_name: - type: string - required: false - default: PRIVATE - initiator: - type: string - default: source - constraints: - - valid_values: - - source - - target - - peer - ports: - type: map - required: false - constraints: - - min_length: 1 - entry_schema: - type: PortSpec - attributes: - ip_address: - type: string - tosca.capabilities.DatabaseEndpoint: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.Endpoint.Public: - derived_from: tosca.capabilities.Endpoint - properties: - network_name: PUBLIC - floating: - description: | - indicates that the public address should be allocated from a pool of floating IPs that are associated with the network. - type: boolean - default: false - status: experimental - dns_name: - description: The optional name to register with DNS - type: string - required: false - status: experimental - tosca.capabilities.Endpoint.Admin: - derived_from: tosca.capabilities.Endpoint - properties: - secure: true - tosca.capabilities.Endpoint.Database: - derived_from: tosca.capabilities.Endpoint - tosca.capabilities.OperatingSystem: - derived_from: tosca.capabilities.Root - properties: - architecture: - type: string - required: false - type: - type: string - required: false - distribution: - type: string - required: false - version: - type: version - required: false - tosca.capabilities.Scalable: - derived_from: tosca.capabilities.Root - properties: - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - default_instances: - type: integer - tosca.capabilities.network.Bindable: - derived_from: tosca.capabilities.Node - tosca.capabilities.Container.Docker: - derived_from: tosca.capabilities.Container - properties: - version: - type: list - required: false - entry_schema: version - publish_all: - type: boolean - default: false - required: false - publish_ports: - type: list - entry_schema: PortSpec - required: false - expose_ports: - type: list - entry_schema: PortSpec - required: false - volumes: - type: list - entry_schema: string - required: false - tosca.capabilities.network.Linkable: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.AllottedResource: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Metric: - derived_from: tosca.capabilities.Endpoint - org.openecomp.capabilities.Metric: - derived_from: tosca.capabilities.nfv.Metric - description: A node type that includes the Metric capability indicates that it can be monitored. - properties: - unit: - type: string - description: Unit of the metric value - required: true - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - status: SUPPORTED - attributes: - value: - type: string - description: Runtime monitored value - status: SUPPORTED - 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: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - 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: - type: string - description: Object Id of the metric - required: true - status: SUPPORTED - org.openecomp.capabilities.Forwarder: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.VLANAssignment: - derived_from: tosca.capabilities.Root - description: ability to expose routing information of the internal network - properties: - vfc_instance_group_reference: - type: string - description: Ability to recognize capability per vfc instance group on vnf instance - required: true - org.openecomp.capabilities.RoutingConfiguration: - derived_from: tosca.capabilities.Root - org.openecomp.capabilities.FabricConfiguration: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualStorage: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualCompute: - derived_from: tosca.capabilities.Root - properties: - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - compute_requirements: - type: map - entry_schema: - type: string - required: false - requested_additional_capabilities: - type: map - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - required: false - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - tosca.capabilities.nfv.VirtualBindable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.VirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ExtVirtualLinkable: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.Forwarder: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.GuestOs: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.ImageFile: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.LocalAttachment: - derived_from: tosca.capabilities.Root - tosca.capabilities.nfv.ext.Compute.Container.Architecture: - derived_from: tosca.capabilities.Root - properties: - num_cpus: - type: string - required: false - flavor_extra_specs: - type: map - required: false - entry_schema: - type: string - mem_size: - type: string - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/data.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/data.yml deleted file mode 100644 index 0ff71791..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/data.yml +++ /dev/null @@ -1,1733 +0,0 @@ -# -# 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_yaml_1_1 -data_types: - tosca.datatypes.Root: - description: The TOSCA root Data Type all other TOSCA base Data Types derive from - integer: - derived_from: tosca.datatypes.Root - string: - derived_from: tosca.datatypes.Root - boolean: - derived_from: tosca.datatypes.Root - float: - derived_from: tosca.datatypes.Root - list: - derived_from: tosca.datatypes.Root - map: - derived_from: tosca.datatypes.Root - json: - derived_from: tosca.datatypes.Root - scalar-unit: - derived_from: tosca.datatypes.Root - scalar-unit.size: - derived_from: scalar-unit - scalar-unit.time: - derived_from: scalar-unit - scalar-unit.frequency: - derived_from: scalar-unit - tosca.datatypes.Credential: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: false - token_type: - type: string - default: password - token: - type: string - keys: - type: map - required: false - entry_schema: - type: string - user: - type: string - required: false - org.openecomp.datatypes.PortMirroringConnectionPointDescription: - derived_from: tosca.datatypes.Root - properties: - nf_naming_code: - type: string - nfc_naming_code: - type: string - network_role: - type: string - pps_capacity: - type: string - nf_type: - type: string - description: deprecated - nfc_type: - type: string - description: deprecated - tosca.datatypes.TimeInterval: - derived_from: tosca.datatypes.Root - properties: - start_time: - type: timestamp - required: true - end_time: - type: timestamp - required: true - tosca.datatypes.network.NetworkInfo: - derived_from: tosca.datatypes.Root - properties: - network_name: - type: string - network_id: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortInfo: - derived_from: tosca.datatypes.Root - properties: - port_name: - type: string - port_id: - type: string - network_id: - type: string - mac_address: - type: string - addresses: - type: list - entry_schema: - type: string - tosca.datatypes.network.PortDef: - derived_from: integer - constraints: - - in_range: - - 1 - - 65535 - tosca.datatypes.network.PortSpec: - derived_from: tosca.datatypes.Root - properties: - protocol: - type: string - required: true - default: tcp - constraints: - - valid_values: - - udp - - tcp - - igmp - target: - type: tosca.datatypes.network.PortDef - target_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - source: - type: tosca.datatypes.network.PortDef - source_range: - type: range - constraints: - - in_range: - - 1 - - 65535 - org.openecomp.datatypes.heat.network.AddressPair: - derived_from: tosca.datatypes.Root - description: MAC/IP address pairs - properties: - mac_address: - type: string - description: MAC address - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.subnet.HostRoute: - derived_from: tosca.datatypes.Root - description: Host route info for the subnet - properties: - destination: - type: string - description: The destination for static route - required: false - status: SUPPORTED - nexthop: - type: string - description: The next hop for the destination - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.AllocationPool: - derived_from: tosca.datatypes.Root - description: The start and end addresses for the allocation pool - properties: - start: - type: string - description: Start address for the allocation pool - required: false - status: SUPPORTED - end: - type: string - description: End address for the allocation pool - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.Subnet: - derived_from: tosca.datatypes.Root - description: A subnet represents an IP address block that can be used for assigning IP addresses to virtual instances - properties: - tenant_id: - type: string - description: The ID of the tenant who owns the network - required: false - status: SUPPORTED - enable_dhcp: - type: boolean - description: Set to true if DHCP is enabled and false if DHCP is disabled - required: false - default: true - status: SUPPORTED - ipv6_address_mode: - type: string - description: IPv6 address mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - ipv6_ra_mode: - type: string - description: IPv6 RA (Router Advertisement) mode - required: false - status: SUPPORTED - constraints: - - valid_values: - - dhcpv6-stateful - - dhcpv6-stateless - - slaac - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - allocation_pools: - type: list - description: The start and end addresses for the allocation pools - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.AllocationPool - subnetpool: - type: string - description: The name or ID of the subnet pool - required: false - status: SUPPORTED - dns_nameservers: - type: list - description: A specified set of DNS name servers to be used - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - host_routes: - type: list - description: The gateway IP address - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.subnet.HostRoute - ip_version: - type: integer - description: The gateway IP address - required: false - default: 4 - status: SUPPORTED - constraints: - - valid_values: - - '4' - - '6' - name: - type: string - description: The name of the subnet - required: false - status: SUPPORTED - prefixlen: - type: integer - description: Prefix length for subnet allocation from subnet pool - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 0 - cidr: - type: string - description: The CIDR - required: false - status: SUPPORTED - gateway_ip: - type: string - description: The gateway IP address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.novaServer.network.PortExtraProperties: - derived_from: tosca.datatypes.Root - description: Nova server network expand properties for port - properties: - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the port - required: false - status: SUPPORTED - mac_address: - type: string - description: MAC address to give to this port - required: false - status: SUPPORTED - admin_state_up: - type: boolean - description: The administrative state of this port - required: false - default: true - status: SUPPORTED - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this port - 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 - org.openecomp.datatypes.heat.novaServer.network.AddressInfo: - derived_from: tosca.datatypes.network.NetworkInfo - description: Network addresses with corresponding port id - properties: - port_id: - type: string - description: Port id - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.neutron.port.FixedIps: - derived_from: tosca.datatypes.Root - description: subnet/ip_address - properties: - subnet: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - ip_address: - type: string - description: IP address desired in the subnet for this port - required: false - status: SUPPORTED - subnet_id: - type: string - description: Subnet in which to allocate the IP address for this port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.FileInfo: - derived_from: tosca.datatypes.Root - description: Heat File Info - properties: - file: - type: string - description: The required URI string (relative or absolute) which can be used to locate the file - required: true - status: SUPPORTED - file_type: - type: string - description: The type of the file - required: true - status: SUPPORTED - constraints: - - valid_values: - - base - - env - - volume - - network - org.openecomp.datatypes.heat.contrail.network.rule.PortPairs: - derived_from: tosca.datatypes.Root - description: source and destination port pairs - properties: - start_port: - type: string - description: Start port - required: false - status: SUPPORTED - end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - apply_service: - type: string - description: Service to apply - required: false - status: SUPPORTED - dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.PortPairs - src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork - direction: - type: string - description: Direction - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrail.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrail.network.rule.Rule - org.openecomp.datatypes.heat.contrail.network.rule.VirtualNetwork: - derived_from: tosca.datatypes.Root - description: source and destination addresses - properties: - virtual_network: - type: string - description: Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule: - derived_from: tosca.datatypes.Root - description: Rules Pairs - properties: - remote_group_id: - type: string - description: The remote group ID to be associated with this security group rule - required: false - status: SUPPORTED - protocol: - type: string - description: The protocol that is matched by the security group rule - required: false - status: SUPPORTED - constraints: - - valid_values: - - tcp - - udp - - icmp - ethertype: - type: string - description: Ethertype of the traffic - required: false - default: IPv4 - status: SUPPORTED - constraints: - - valid_values: - - IPv4 - - IPv6 - port_range_max: - type: integer - description: 'The maximum port number in the range that is matched by the - security group rule. ' - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - remote_ip_prefix: - type: string - description: The remote IP prefix (CIDR) to be associated with this security group rule - required: false - status: SUPPORTED - remote_mode: - type: string - description: Whether to specify a remote group or a remote IP prefix - required: false - default: remote_ip_prefix - status: SUPPORTED - constraints: - - valid_values: - - remote_ip_prefix - - remote_group_id - direction: - type: string - description: The direction in which the security group rule is applied - required: false - default: ingress - status: SUPPORTED - constraints: - - valid_values: - - egress - - ingress - port_range_min: - type: integer - description: The minimum port number in the range that is matched by the security group rule. - required: false - status: SUPPORTED - constraints: - - in_range: - - 0 - - 65535 - org.openecomp.datatypes.heat.substitution.SubstitutionFiltering: - derived_from: tosca.datatypes.Root - description: Substitution Filter - properties: - substitute_service_template: - type: string - description: Substitute Service Template - required: true - status: SUPPORTED - index_value: - type: integer - description: Index value of the substitution service template runtime instance - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - count: - type: string - description: Count - required: false - default: 1 - status: SUPPORTED - scaling_enabled: - type: boolean - description: Indicates whether service scaling is enabled - required: false - default: true - status: SUPPORTED - mandatory: - type: boolean - description: Mandatory - required: false - default: true - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence: - derived_from: tosca.datatypes.Root - description: network policy refs data sequence - properties: - network_policy_refs_data_sequence_major: - type: integer - description: Network Policy ref data sequence Major - required: false - status: SUPPORTED - network_policy_refs_data_sequence_minor: - type: integer - description: Network Policy ref data sequence Minor - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData: - derived_from: tosca.datatypes.Root - description: network policy refs data - properties: - network_policy_refs_data_sequence: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefDataSequence - description: Network Policy ref data sequence - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet - properties: - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix_len: - type: string - description: Network ipam refs data ipam subnets ip prefix len - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_subnet_ip_prefix: - type: string - description: Network ipam refs data ipam subnets ip prefix - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data Subnet List - properties: - network_ipam_refs_data_ipam_subnets_subnet: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnet - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - network_ipam_refs_data_ipam_subnets_addr_from_start: - type: string - description: Network ipam refs data ipam subnets addr from start - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData: - derived_from: tosca.datatypes.Root - description: Network Ipam Ref Data - properties: - network_ipam_refs_data_ipam_subnets: - type: list - description: Network ipam refs data ipam subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.ref.data.IpamSubnetList - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork: - derived_from: tosca.datatypes.Root - description: source addresses - properties: - network_policy_entries_policy_rule_src_addresses_virtual_network: - type: string - description: Source addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork: - derived_from: tosca.datatypes.Root - description: destination addresses - properties: - network_policy_entries_policy_rule_dst_addresses_virtual_network: - type: string - description: Destination addresses Virtual network - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs: - derived_from: tosca.datatypes.Root - description: destination port pairs - properties: - network_policy_entries_policy_rule_dst_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_dst_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs: - derived_from: tosca.datatypes.Root - description: source port pairs - properties: - network_policy_entries_policy_rule_src_ports_start_port: - type: string - description: Start port - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports_end_port: - type: string - description: End port - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList: - derived_from: tosca.datatypes.Root - description: Action List - properties: - network_policy_entries_policy_rule_action_list_simple_action: - type: string - description: Simple Action - required: false - status: SUPPORTED - network_policy_entries_policy_rule_action_list_apply_service: - type: list - description: Apply Service - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.network.rule.Rule: - derived_from: tosca.datatypes.Root - description: policy rule - properties: - network_policy_entries_policy_rule_dst_addresses: - type: list - description: Destination addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstVirtualNetwork - network_policy_entries_policy_rule_dst_ports: - type: list - description: Destination ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.DstPortPairs - network_policy_entries_policy_rule_protocol: - type: string - description: Protocol - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_addresses: - type: list - description: Source addresses - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcVirtualNetwork - network_policy_entries_policy_rule_direction: - type: string - description: Direction - required: false - status: SUPPORTED - network_policy_entries_policy_rule_src_ports: - type: list - description: Source ports - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.SrcPortPairs - network_policy_entries_policy_rule_action_list: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.ActionList - description: Action list - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList: - derived_from: tosca.datatypes.Root - description: list of policy rules - properties: - network_policy_entries_policy_rule: - type: list - description: Contrail network rule - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.Rule - org.openecomp.datatypes.heat.network.contrail.port.StaticRoute: - derived_from: tosca.datatypes.Root - description: static route - properties: - prefix: - type: string - description: Route prefix - required: false - status: SUPPORTED - next_hop: - type: string - description: Next hop - required: false - status: SUPPORTED - next_hop_type: - type: string - description: Next hop type - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.AddressPair: - derived_from: tosca.datatypes.Root - description: Address Pair - properties: - address_mode: - type: string - description: Address mode active-active or active-standy - required: false - status: SUPPORTED - constraints: - - valid_values: - - active-active - - active-standby - prefix: - type: string - description: IP address prefix - required: false - status: SUPPORTED - mac_address: - type: string - description: Mac address - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.network.contrail.InterfaceData: - derived_from: tosca.datatypes.Root - description: Interface Data - 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 - 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 - ip_address: - type: string - description: IP for this interface - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Interface Properties. - properties: - virtual_machine_interface_properties_service_interface_type: - type: string - description: Service Interface Type. - required: false - status: SUPPORTED - org.openecomp.datatypes.Root: - derived_from: tosca.datatypes.Root - description: | - The ECOMP root Data Type all other Data Types derive from - properties: - supplemental_data: - type: map - entry_schema: - description: | - A placeholder for missing properties that would be included in future ecomp model versions. fromat : - type: string - org.openecomp.datatypes.AssignmentRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - is_required: - description: | - "true" indicates that assignment is required - type: boolean - default: false - required: true - count: - description: number of assignments required - type: integer - required: false - org.openecomp.datatypes.network.SubnetAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ip_network_address_plan: - type: string - required: false - description: Reference to EIPAM, VLAN or other address plan ID used to assign subnets to this network - dhcp_enabled: - type: boolean - required: false - description: \"true\" indicates the network has 1 or more policies - ip_version: - type: integer - constraints: - - valid_values: - - 4 - - 6 - required: true - description: The IP version of the subnet - cidr_mask: - type: integer - required: true - description: The default subnet CIDR mask - min_subnets_count: - type: integer - default: 1 - required: true - description: Quantity of subnets that must be initially assigned - org.openecomp.datatypes.network.IPv4SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv4: - type: boolean - required: true - description: Indicates IPv4 subnet assignments - org.openecomp.datatypes.network.IPv6SubnetAssignments: - derived_from: org.openecomp.datatypes.network.SubnetAssignments - properties: - use_ipv6: - type: boolean - required: true - description: Indicates IPv6 subnet assignments - org.openecomp.datatypes.network.NetworkAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_network_assignment: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the network assignments will be auto-generated by ECOMP \"false\" indicates operator-supplied Network assignments file upload is required (e.g. VID will present prompt to operator to upload operator-supplied Network assignments file). - is_shared_network: - type: boolean - required: true - description: \"true\" means this network is shared by multiple Openstack tenants - is_external_network: - type: boolean - required: true - default: false - description: | - \"true\" means this Contrail external network - ipv4_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv4SubnetAssignments - required: true - description: IPv4 defualt subnet assignments - ipv6_subnet_default_assignment: - type: org.openecomp.datatypes.network.IPv6SubnetAssignments - required: true - description: IPv6 defualt subnet assignments - related_networks: - type: list - required: false - description: Related Networks List. - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - is_trunked: - type: boolean - required: true - description: \"true\" indicates that network is trunked - default: false - org.openecomp.datatypes.network.ProviderNetwork: - derived_from: org.openecomp.datatypes.Root - properties: - is_provider_network: - type: boolean - required: true - description: \"true\" indicates that this a Neutron provider type of network - physical_network_name: - type: string - required: false - constraints: - - valid_values: - - Physnet41 - - Physnet42 - - Physnet43 - - Physnet44 - - Physnet21 - - Physnet22 - - sriovnet1 - - sriovnet2 - - oam - description: | - Identifies the NUMA processor cluster to which this physical network interface belongs. NUMA instance correlates to the first digit of the Physical Network Name suffix (e.g. \"01\" = NUMA 0, \"11\" = NUMA 1) - numa: - type: string - required: false - constraints: - - valid_values: - - NUMA 0 - - NUMA 1 - description: | - PNIC instance within the NUMA processor cluster PNIC Instance correlates to the second digit of the Physical Network Name suffix (e.g. "01" = PNIC 1, "02" = "PNIC 2) - pnic_instance: - type: integer - required: false - description: PNIC instance within the NUMA processor cluster - org.openecomp.datatypes.network.NetworkFlows: - derived_from: org.openecomp.datatypes.Root - properties: - is_network_policy: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more policies - network_policy: - type: string - required: false - description: 'Identifies the specific Cloud network policy that must be applied - to this network (source: from Policy Manager).' - is_bound_to_vpn: - type: boolean - required: false - default: false - description: \"true\" indicates the network has 1 or more vpn bindings - vpn_binding: - type: string - required: false - description: 'Identifies the specific VPN Binding entry in A&AI that must - be applied when creating this network (source: A&AI)' - org.openecomp.datatypes.network.VlanRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - vlan_range_plan: - type: string - required: true - description: reference to a vlan range plan - vlan_type: - type: string - required: true - constraints: - - valid_values: - - c-tag - - s-tag - description: identifies the vlan type (e.g., c-tag) - vlan_count: - type: integer - required: true - description: identifies the number of vlan tags to assign to the CP from the plan - org.openecomp.datatypes.network.IpRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - ip_version: - type: integer - required: true - constraints: - - valid_values: - - 4 - - 6 - ip_count: - description: identifies the number of ip address to assign to the CP from the plan - type: integer - required: false - floating_ip_count: - type: integer - required: false - subnet_role: - type: string - required: false - assingment_method: - type: string - required: true - constraints: - - valid_values: - - fixed - - dhcp - dhcp_enabled: - type: boolean - required: false - ip_count_required: - description: identifies the number of ip address to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - required: false - floating_ip_count_required: - type: org.openecomp.datatypes.AssignmentRequirements - required: false - ip_address_plan_name: - type: string - required: false - vrf_name: - type: string - required: false - org.openecomp.datatypes.network.MacAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - type: string - required: true - description: reference to a MAC address range plan - mac_count: - type: integer - required: true - description: identifies the number of MAC addresses to assign to the CP from the plan - org.openecomp.datatypes.EcompHoming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_selected_instance_node_target: - type: boolean - required: true - default: false - description: | - \"true\" indicates that the target deployment node for this instance will be auto-selected by ECOMP \"false\" indicates operator-supplied instance target deployment node required (e.g. VID will present a prompt to operator and collect the operator-selected target node for the deployment of this Network instance). - homing_policy: - type: string - required: false - description: Referenc to a service level homing policy that ECOMP will use for instance deployment target node - instance_node_target: - type: string - required: false - description: Instance target deployment node - org.openecomp.datatypes.EcompNaming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - type: boolean - required: true - default: true - description: | - \"true\" indicates that the name for the instance will be auto-generated by ECOMP. \"false\" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - naming_policy: - type: string - required: false - description: Referenc to naming policy that ECOMP will use when the name is auto-generated - org.openecomp.datatypes.network.MacRequirements: - derived_from: org.openecomp.datatypes.Root - properties: - mac_range_plan: - description: reference to a MAC address range plan - type: string - required: false - mac_count: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: integer - required: false - mac_count_required: - description: identifies the number of MAC addresses to assign to the CP from the plan - type: org.openecomp.datatypes.AssignmentRequirements - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair IP. - properties: - ip_prefix: - type: string - description: IP Prefix. - required: false - status: SUPPORTED - ip_prefix_len: - type: integer - description: IP Prefix Len. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Mac Address. - properties: - mac_address: - type: list - description: Mac Addresses List. - required: false - status: SUPPORTED - entry_schema: - type: string - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface VLAN Properties. - properties: - sub_interface_vlan_tag: - type: string - description: Sub Interface VLAN Tag. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pair. - properties: - address_mode: - type: string - description: Address Mode. - required: false - status: SUPPORTED - ip: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairIp - description: IP. - required: false - status: SUPPORTED - mac: - type: string - description: Mac. - required: false - status: SUPPORTED - org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs: - derived_from: tosca.datatypes.Root - description: Virtual Machine Sub Interface Address Pairs. - properties: - allowed_address_pair: - type: list - description: Addresses pair List. - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPair - org.openecomp.datatypes.Naming: - derived_from: org.openecomp.datatypes.Root - properties: - ecomp_generated_naming: - description: | - "true" indicates that the name for the instance will be auto-generated by ECOMP. "false" indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: boolean - default: true - required: true - naming_policy: - description: Reference to naming policy that ECOMP will use when the name is auto-generated - type: string - required: false - instance_name: - description: indicates operator-supplied name required (e.g. VID will present prompt to operator and collect the operator-supplied instance name). - type: string - required: false - org.openecomp.datatypes.flavors.ComputeFlavor: - derived_from: tosca.datatypes.Root - properties: - num_cpus: - type: integer - disk_size: - type: scalar-unit.size - mem_size: - type: scalar-unit.size - org.openecomp.datatypes.flavors.LicenseFlavor: - derived_from: tosca.datatypes.Root - properties: - feature_group_uuid: - type: string - org.openecomp.datatypes.flavors.VendorInfo: - derived_from: tosca.datatypes.Root - properties: - manufacturer_reference_number: - type: string - vendor_model: - type: string - org.openecomp.datatypes.flavors.DeploymentFlavor: - derived_from: tosca.datatypes.Root - properties: - sp_part_number: - type: string - vendor_info: - type: org.openecomp.datatypes.flavors.VendorInfo - compute_flavor: - type: org.openecomp.datatypes.flavors.ComputeFlavor - license_flavor: - type: org.openecomp.datatypes.flavors.LicenseFlavor - required: false - org.openecomp.datatypes.ImageInfo: - derived_from: tosca.datatypes.Root - properties: - software_version: - type: string - file_name: - type: string - file_hash: - type: string - description: checksum/signature - file_hash_type: - type: string - required: false - default: md5 - org.openecomp.datatypes.network.RelatedNetworksAssignments: - derived_from: org.openecomp.datatypes.Root - properties: - related_network_role: - type: string - description: The network role of the related network, sharing provider network. - required: false - tosca.datatypes.nfv.VnfcConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - additional_vnfc_configurable_properties: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.RequestedAdditionalCapability: - derived_from: tosca.datatypes.Root - properties: - support_mandatory: - type: boolean - required: true - min_requested_additional_capability_version: - type: string - required: false - preferred_requested_additional_capability_version: - type: string - required: false - requested_additional_capability_name: - type: string - required: true - target_performance_parameters: - type: map - entry_schema: - type: string - required: true - tosca.datatypes.nfv.VirtualMemory: - derived_from: tosca.datatypes.Root - properties: - virtual_mem_size: - type: scalar-unit.size - required: true - virtual_mem_oversubscription_policy: - type: string - required: false - vdu_memory_requirements: - type: map - entry_schema: - type: string - required: false - numa_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VirtualCpuPinning: - derived_from: tosca.datatypes.Root - properties: - cpu_pinning_policy: - type: string - constraints: - - valid_values: - - static - - dynamic - required: false - cpu_pinning_map: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualCpu: - derived_from: tosca.datatypes.Root - properties: - cpu_architecture: - type: string - required: false - num_virtual_cpu: - type: integer - required: true - virtual_cpu_clock: - type: scalar-unit.frequency - required: false - virtual_cpu_oversubscription_policy: - type: string - required: false - vdu_cpu_requirements: - type: map - entry_schema: - type: string - required: false - virtual_cpu_pinning: - type: tosca.datatypes.nfv.VirtualCpuPinning - required: false - tosca.datatypes.nfv.LogicalNodeData: - derived_from: tosca.datatypes.Root - properties: - logical_node_requirements: - type: map - entry_schema: - type: string - required: false - tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: false - description: - type: string - required: false - support_mandatory: - type: boolean - required: true - requirement: - type: string - required: false - network_interface_requirements: - type: map - entry_schema: - type: string - required: true - nic_io_requirements: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - tosca.datatypes.nfv.injectFile: - derived_from: tosca.datatypes.Root - properties: - source_path: - type: string - required: true - dest_path: - type: string - required: true - tosca.datatypes.nfv.L2AddressData: - derived_from: tosca.datatypes.Root - properties: - mac_address_assignment: - type: boolean - required: true - address: - type: string - required: false - tosca.datatypes.nfv.L3AddressData: - derived_from: tosca.datatypes.Root - properties: - ip_address_assignment: - type: boolean - required: true - floating_ip_activated: - type: boolean - required: true - ip_address_type: - type: string - required: false - constraints: - - valid_values: - - ipv4 - - ipv6 - number_of_ip_address: - type: integer - required: false - fixed_ip_address: - type: list - entry_schema: - type: string - required: false - tosca.datatypes.nfv.AddressData: - properties: - address_type: - constraints: - - valid_values: - - mac_address - - ip_address - type: string - required: true - l2_address_data: - required: false - type: tosca.datatypes.nfv.L2AddressData - l3_address_data: - required: false - type: tosca.datatypes.nfv.L3AddressData - tosca.datatypes.nfv.ConnectivityType: - derived_from: tosca.datatypes.Root - properties: - layer_protocol: - type: string - required: true - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - flow_pattern: - type: string - required: false - constraints: - - valid_values: - - Line - - Tree - - Mesh - tosca.datatypes.nfv.VlFlavour: - derived_from: tosca.datatypes.Root - properties: - flavourId: - type: string - tosca.datatypes.nfv.ext.AddressPairs: - properties: - ip: - type: string - required: false - mac: - type: string - required: false - tosca.datatypes.nfv.ext.FloatingIP: - properties: - external_network: - type: string - required: false - ip_address: - type: string - required: false - tosca.datatypes.nfv.ext.LocationInfo: - properties: - availability_zone: - type: string - required: false - vimid: - type: integer - required: false - tenant: - type: string - required: false - tosca.datatypes.nfv.ext.HostRouteInfo: - properties: - destination: - type: string - required: false - nexthop: - type: string - required: false - tosca.datatypes.nfv.ext.InjectData: - properties: - file_name: - type: string - required: false - file_data: - type: string - required: false - tosca.datatypes.nfv.ext.zte.WatchDog: - properties: - enable_delay: - type: integer - required: false - action: - type: string - required: false - tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule: - properties: - scope: - type: string - required: false - affinity_antiaffinity: - type: string - required: false - tosca.datatypes.nfv.VduProfile: - derived_from: tosca.datatypes.Root - properties: - min_number_of_instances: - type: integer - required: true - max_number_of_instances: - type: integer - required: true - watchdog: - type: string - required: true - vmBootUpTimeOut: - type: integer - required: false - tosca.datatypes.nfv.LinkBitRateRequirements: - derived_from: tosca.datatypes.Root - properties: - root: - type: integer - required: true - leaf: - type: integer - required: true - tosca.datatypes.nfv.Qos: - derived_from: tosca.datatypes.Root - properties: - latency: - type: integer - required: true - packet_delay_variation: - type: integer - required: true - packet_loss_ratio: - type: float - constraints: - - in_range: - - 0.0 - - 1.0 - required: false - tosca.datatypes.nfv.VlProfile: - derived_from: tosca.datatypes.Root - properties: - max_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - min_bit_rate_requirements: - type: tosca.datatypes.nfv.LinkBitRateRequirements - required: true - qos: - type: tosca.datatypes.nfv.Qos - required: false - initiationParameters: - type: map - entry_schema: - type: string - required: false - cidr: - type: string - required: false - networkName: - type: string - required: false - startIp: - type: string - required: false - endIp: - type: string - required: false - gatewayIp: - type: string - required: false - segmentationId: - type: integer - required: false - physicalNetwork: - type: string - required: false - networkType: - type: string - required: false - constraints: - - valid_values: - - VLAN - - VXLAN - dhcpEnabled: - type: boolean - required: false - vlanTransparent: - type: boolean - required: false - tosca.datatypes.nfv.VduLevel: - derived_from: tosca.datatypes.Root - properties: - number_of_instances: - type: integer - required: true - tosca.datatypes.nfv.ScaleInfo: - derived_from: tosca.datatypes.Root - properties: - scaleLevel: - type: integer - required: true - tosca.datatypes.nfv.ScaleAspect: - derived_from: tosca.datatypes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - associated_group: - type: string - required: false - max_scale_level: - type: integer - required: true - tosca.datatypes.nfv.InstantiationLevel: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: true - vdu_levels: - type: map - required: true - entry_schema: - type: tosca.datatypes.nfv.VduLevel - scale_info: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.ScaleInfo - tosca.datatypes.nfv.VnfScaleOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - scaling_by_more_than_one_step_supported: - type: boolean - tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - arbitrary_target_levels_supported: - type: boolean - tosca.datatypes.nfv.VnfHealOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - causes: - type: list - entry_schema: - type: string - tosca.datatypes.nfv.VnfTerminateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfOperateOperationConfiguration: - derived_from: tosca.datatypes.Root - properties: - min_graceful_termination_timeout: - type: integer - max_recommended_graceful_termination_timeout: - type: integer - tosca.datatypes.nfv.VnfLcmOperationsConfiguration: - derived_from: tosca.datatypes.Root - properties: - scale: - type: tosca.datatypes.nfv.VnfScaleOperationConfiguration - scale_to_level: - type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration - heal: - type: tosca.datatypes.nfv.VnfHealOperationConfiguration - terminate: - type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration - operate: - type: tosca.datatypes.nfv.VnfOperateOperationConfiguration - tosca.datatypes.nfv.CpProtocolData: - derived_from: tosca.datatypes.Root - properties: - asscociated_layer_protocol: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo-wire - required: true - address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.datatypes.nfv.VnfConfigurableProperties: - derived_from: tosca.datatypes.Root - properties: - is_autoscale_enabled: - type: boolean - required: false - is_autoheal_enabled: - type: boolean - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata: - derived_from: tosca.datatypes.Root - properties: - description: - type: string - required: false - tosca.datatypes.nfv.VnfInfoModifiableAttributes: - derived_from: tosca.datatypes.Root - properties: - extensions: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions - required: false - metadata: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/groups.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/groups.yml deleted file mode 100644 index f8be60db..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/groups.yml +++ /dev/null @@ -1,133 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -group_types: - tosca.groups.Root: - description: The TOSCA Group Type all other TOSCA Group Types derive from - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - org.openecomp.groups.heat.HeatStack: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same heat stack - properties: - heat_file: - type: string - description: Heat file which associate to this group/heat stack - required: true - status: SUPPORTED - description: - type: string - description: group description - required: true - status: SUPPORTED - org.openecomp.groups.VfModule: - derived_from: tosca.groups.Root - description: Grouped all heat resources which are in the same VF Module - properties: - isBase: - type: boolean - description: Whether this module should be deployed before other modules - required: true - default: false - status: SUPPORTED - vf_module_label: - type: string - required: true - description: | - Alternate textual key used to reference this VF-Module model. Must be unique within the VNF model - vf_module_description: - type: string - required: true - description: | - Description of the VF-modules contents and purpose (e.g. "Front-End" or "Database Cluster") - min_vf_module_instances: - type: integer - required: true - description: The minimum instances of this VF-Module - max_vf_module_instances: - type: integer - required: false - description: The maximum instances of this VF-Module - initial_count: - type: integer - required: false - description: | - The initial count of instances of the VF-Module. The value must be in the range between min_vfmodule_instances and max_vfmodule_instances. If no value provided the initial count is the min_vfmodule_instances. - vf_module_type: - type: string - required: true - constraint: - - valid_values: - - Base - - Expansion - volume_group: - type: boolean - required: true - default: false - description: | - "true" indicates that this VF Module model requires attachment to a Volume Group. VID operator must select the Volume Group instance to attach to a VF-Module at deployment time. - availability_zone_count: - type: integer - required: false - description: | - Quantity of Availability Zones needed for this VF-Module (source: Extracted from VF-Module HEAT template) - vfc_list: - type: map - entry_schema: - description: : - type: string - required: false - description: | - Identifies the set of VM types and their count included in the VF-Module - org.openecomp.groups.NetworkCollection: - derived_from: tosca.groups.Root - description: groups l3-networks in network collection - properties: - network_collection_function: - type: string - required: true - description: network collection function - network_collection_description: - type: string - required: true - description: network collection description, free format text - org.openecomp.groups.VfcInstanceGroup: - derived_from: tosca.groups.Root - description: groups VFCs with same parent port role - properties: - vfc_instance_group_function: - type: string - required: true - description: function of this VFC group - vfc_parent_port_role: - type: string - required: true - description: common role of parent ports of VFCs in this group - network_collection_function: - type: string - required: true - description: network collection function assigned to this group - subinterface_role: - type: string - required: true - description: common role of subinterfaces of VFCs in this group, criteria the group is created - capabilities: - vlan_assignment: - type: org.openecomp.capabilities.VLANAssignment - properties: - vfc_instance_group_reference: - type: string diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/interfaces.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/interfaces.yml deleted file mode 100644 index a11c7169..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/interfaces.yml +++ /dev/null @@ -1,83 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -interface_types: - tosca.interfaces.nfv.vnf.lifecycle.Nfv: - instantiate: - description: Invoked upon receipt of an Instantiate VNF request - instantiate_start: - description: Invoked before instantiate - instantiate_end: - description: Invoked after instantiate - terminate: - description: Invoked upon receipt Terminate VNF request - terminate_start: - description: Invoked before terminate - terminate_end: - description: Invoked after terminate - modify_information: - description: Invoked upon receipt of a Modify VNF Information request - modify_information_start: - description: Invoked before modify_information - modify_information_end: - description: Invoked after modify_information - change_flavour: - description: Invoked upon receipt of a Change VNF Flavour request - change_flavour_start: - description: Invoked before change_flavour - change_flavour_end: - description: Invoked after change_flavour - change_external_connectivity: - description: Invoked upon receipt of a Change External VNF Connectivity request - change_external_connectivity_start: - description: Invoked before change_external_connectivity - change_external_connectivity_end: - description: Invoked after change_external_connectivity - operate: - description: Invoked upon receipt of an Operate VNF request - operate_start: - description: Invoked before operate - operate_end: - description: Invoked after operate - heal: - description: Invoked upon receipt of a Heal VNF request - heal_start: - description: Invoked before heal - heal_end: - description: Invoked after heal - scale: - description: Invoked upon receipt of a Scale VNF request - scale_start: - description: Invoked before scale - scale_end: - description: Invoked after scale - scale_to_level: - description: Invoked upon receipt of a Scale VNF to Level request - scale_to_level_start: - description: Invoked before scale_to_level - scale_to_level_end: - description: Invoked after scale_to_level - tosca.interfaces.node.lifecycle.Standard: - create: - description: Standard lifecycle create operation. - configure: - description: Standard lifecycle configure operation. - start: - description: Standard lifecycle start operation. - stop: - description: Standard lifecycle stop operation. - delete: - description: Standard lifecycle delete operation. diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/nodes.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/nodes.yml deleted file mode 100644 index 62d77f4c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/nodes.yml +++ /dev/null @@ -1,4781 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -- artifacts.yml -- capabilities.yml -- interfaces.yml -- relationships.yml -node_types: - tosca.nodes.BlockStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 1 MB - volume_id: - type: string - required: false - snapshot_id: - type: string - required: false - capabilities: - attachment: - type: tosca.capabilities.Attachment - tosca.nodes.WebApplication: - derived_from: tosca.nodes.Root - properties: - context_root: - type: string - capabilities: - app_endpoint: - type: tosca.capabilities.Endpoint - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.WebServer - relationship: tosca.relationships.HostedOn - tosca.nodes.Database: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: the logical name of the database - port: - type: integer - description: the port the underlying database service will listen to for data - user: - type: string - description: the optional user account name for DB administration - required: false - password: - type: string - description: the optional password for the DB user account - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.DBMS - relationship: tosca.relationships.HostedOn - capabilities: - database_endpoint: - type: tosca.capabilities.Endpoint.Database - tosca.nodes.Container.Runtime: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - host: - type: tosca.capabilities.Container - scalable: - type: tosca.capabilities.Scalable - tosca.nodes.network.Port: - derived_from: tosca.nodes.Root - properties: - ip_address: - type: string - required: false - order: - type: integer - required: true - default: 0 - constraints: - - greater_or_equal: 0 - is_default: - type: boolean - required: false - default: false - ip_range_start: - type: string - required: false - ip_range_end: - type: string - required: false - requirements: - - link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - tosca.nodes.Root: - description: The TOSCA Node Type all other TOSCA base Node Types derive from - attributes: - tosca_id: - type: string - tosca_name: - type: string - state: - type: string - capabilities: - feature: - type: tosca.capabilities.Node - requirements: - - dependency: - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - occurrences: - - 0 - - UNBOUNDED - interfaces: - Standard: - type: tosca.interfaces.node.lifecycle.Standard - tosca.nodes.network.Network: - derived_from: tosca.nodes.Root - properties: - ip_version: - type: integer - required: false - default: 4 - constraints: - - valid_values: - - 4 - - 6 - cidr: - type: string - required: false - start_ip: - type: string - required: false - end_ip: - type: string - required: false - gateway_ip: - type: string - required: false - network_name: - type: string - required: false - network_id: - type: string - required: false - segmentation_id: - type: string - required: false - network_type: - type: string - required: false - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - default: true - capabilities: - link: - type: tosca.capabilities.network.Linkable - tosca.nodes.Compute: - derived_from: tosca.nodes.Root - attributes: - private_address: - type: string - public_address: - type: string - networks: - type: map - entry_schema: - type: tosca.datatypes.network.NetworkInfo - ports: - type: map - entry_schema: - type: tosca.datatypes.network.PortInfo - requirements: - - local_storage: - capability: tosca.capabilities.Attachment - node: tosca.nodes.BlockStorage - relationship: tosca.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.SoftwareComponent - endpoint: - type: tosca.capabilities.Endpoint.Admin - os: - type: tosca.capabilities.OperatingSystem - scalable: - type: tosca.capabilities.Scalable - binding: - type: tosca.capabilities.network.Bindable - tosca.nodes.LoadBalancer: - derived_from: tosca.nodes.Root - properties: - algorithm: - type: string - required: false - status: experimental - capabilities: - client: - type: tosca.capabilities.Endpoint.Public - occurrences: - - 0 - - UNBOUNDED - description: the Floating (IP) client’s on the public network can connect to - requirements: - - application: - capability: tosca.capabilities.Endpoint - relationship: tosca.relationships.RoutesTo - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.DBMS: - derived_from: tosca.nodes.SoftwareComponent - properties: - root_password: - type: string - required: false - description: the optional root password for the DBMS service - port: - type: integer - required: false - description: the port the DBMS service will listen to for data and requests - capabilities: - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.Database - tosca.nodes.WebServer: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - data_endpoint: tosca.capabilities.Endpoint - admin_endpoint: tosca.capabilities.Endpoint.Admin - host: - type: tosca.capabilities.Container - valid_source_types: - - tosca.nodes.WebApplication - tosca.nodes.Container.Application: - derived_from: tosca.nodes.Root - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Container - relationship: tosca.relationships.HostedOn - tosca.nodes.SoftwareComponent: - derived_from: tosca.nodes.Root - properties: - component_version: - type: version - required: false - admin_credential: - type: tosca.datatypes.Credential - required: false - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.ObjectStorage: - derived_from: tosca.nodes.Root - properties: - name: - type: string - size: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - maxsize: - type: scalar-unit.size - constraints: - - greater_or_equal: 0 GB - capabilities: - storage_endpoint: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.ServiceProxy: - derived_from: tosca.nodes.Root - org.openecomp.resource.vfc.rules.nodes.heat.network.contrailV2.NetworkRules: - derived_from: tosca.nodes.Root - properties: - name: - type: string - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - network_policy_entries: - type: org.openecomp.datatypes.heat.contrailV2.network.rule.RuleList - description: A symbolic name for this contrail v2 network rule - required: false - status: SUPPORTED - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.nodes.heat.network.contrail.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - shared: - type: string - description: Is virtual network shared - required: false - status: SUPPORTED - forwarding_mode: - type: string - description: forwarding mode of the virtual network - required: false - status: SUPPORTED - external: - type: string - description: Is virtual network external - required: false - status: SUPPORTED - allow_transit: - type: string - description: Whether this network should be transitive. - required: false - status: SUPPORTED - flood_unknown_unicast: - type: string - description: flood L2 packets on network - required: false - status: SUPPORTED - route_targets: - type: list - description: route targets associated with the virtual network - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - 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 - org.openecomp.resource.abstract.nodes.service: - derived_from: tosca.nodes.Root - org.openecomp.resource.cp.v2.extVirtualMachineInterfaceCP: - derived_from: org.openecomp.resource.cp.v2.extCP - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.v2.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.vfc.nodes.volume: - derived_from: tosca.nodes.BlockStorage - org.openecomp.nodes.VLANNetworkReceptor: - derived_from: tosca.nodes.Root - capabilities: - routing_configuration_internal: - type: org.openecomp.capabilities.RoutingConfiguration - requirements: - - vlan_assignment: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.VLANAssignment - relationship: org.openecomp.relationships.AssignsTo - org.openecomp.resource.vl.nodes.heat.network.neutron.Net: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - dhcp_agent_ids: - type: list - description: The IDs of the DHCP agent to schedule the network - required: false - status: SUPPORTED - entry_schema: - type: string - tenant_id: - type: string - description: The ID of the tenant which will own the network - required: false - status: SUPPORTED - port_security_enabled: - type: boolean - description: Flag to enable/disable port security on the network - required: false - status: SUPPORTED - shared: - type: boolean - description: Whether this network should be shared across all tenants - required: false - default: 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 - qos_policy: - type: string - description: The name or ID of QoS policy to attach to this network - required: false - status: SUPPORTED - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - value_specs: - type: map - description: Extra parameters to include in the request - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - attributes: - 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_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - mtu: - type: scalar-unit.size - description: The maximum transmission unit size(in bytes) for the network - status: SUPPORTED - status: - type: string - description: The status of the network - status: SUPPORTED - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.nova.Server: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - admin_pass: - type: string - description: The administrator password for the server - required: false - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - image: - type: string - description: The ID or name of the image to boot with - required: false - status: SUPPORTED - image_update_policy: - type: string - description: Policy on how to apply an image-id update - required: false - default: REBUILD - status: SUPPORTED - constraints: - - valid_values: - - REBUILD_PRESERVE_EPHEMERAL - - REPLACE - - REBUILD - metadata: - type: json - description: Arbitrary JSON metadata to store for this server - required: false - status: SUPPORTED - contrail_service_instance_ind: - type: boolean - description: Nova server related to service instance indicator - required: false - default: false - status: SUPPORTED - user_data_update_policy: - type: string - description: Policy on how to apply a user_data update - required: false - default: REPLACE - status: SUPPORTED - constraints: - - valid_values: - - REPLACE - - IGNORE - flavor_update_policy: - type: string - description: Policy on how to apply a flavor update - required: false - default: RESIZE - status: SUPPORTED - constraints: - - valid_values: - - RESIZE - - REPLACE - user_data: - type: string - description: User data script to be executed by cloud-init - required: false - default: '' - status: SUPPORTED - flavor: - type: string - description: The ID or name of the flavor to boot onto - required: true - status: SUPPORTED - key_name: - type: string - description: Name of keypair to inject into the server - required: false - status: SUPPORTED - reservation_id: - type: string - description: A UUID for the set of servers being requested - required: false - status: SUPPORTED - security_groups: - type: list - description: List of security group names or IDs - required: false - default: [] - status: SUPPORTED - entry_schema: - type: string - config_drive: - type: boolean - description: enable config drive on the server - required: false - status: SUPPORTED - personality: - type: map - description: A map of files to create/overwrite on the server upon boot - required: false - default: {} - status: SUPPORTED - entry_schema: - type: string - software_config_transport: - type: string - description: How the server should receive the metadata required for software configuration - required: false - default: POLL_SERVER_CFN - status: SUPPORTED - constraints: - - valid_values: - - POLL_SERVER_CFN - - POLL_SERVER_HEAT - - POLL_TEMP_URL - - ZAQAR_MESSAGE - user_data_format: - type: string - description: How the user_data should be formatted for the server - required: false - default: HEAT_CFNTOOLS - status: SUPPORTED - constraints: - - valid_values: - - SOFTWARE_CONFIG - - RAW - - HEAT_CFNTOOLS - diskConfig: - type: string - description: Control how the disk is partitioned when the server is created - required: false - status: SUPPORTED - constraints: - - valid_values: - - AUTO - - MANUAL - name: - type: string - description: Server name - required: false - status: SUPPORTED - scheduler_hints: - type: map - description: Arbitrary key-value pairs specified by the client to help boot a server - required: false - status: SUPPORTED - entry_schema: - type: string - attributes: - accessIPv4: - type: string - description: The manually assigned alternative public IPv4 address of the server - status: SUPPORTED - addresses: - type: map - description: A dict of all network addresses with corresponding port_id - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.novaServer.network.AddressInfo - accessIPv6: - type: string - description: The manually assigned alternative public IPv6 address of the server - status: SUPPORTED - instance_name: - type: string - description: AWS compatible instance name - status: SUPPORTED - name: - type: string - description: Name of the server - status: SUPPORTED - show: - type: string - description: Detailed information about resource - status: SUPPORTED - console_urls: - type: string - description: URLs of servers consoles - status: SUPPORTED - org.openecomp.resource.vfc.rules.nodes.heat.network.neutron.SecurityRules: - derived_from: tosca.nodes.Root - properties: - description: - type: string - description: Description of the security group - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this security group, which is not required to be unique. - required: false - status: SUPPORTED - rules: - type: list - description: List of security group rules - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.SecurityRules.Rule - attributes: - show: - type: string - description: Detailed information about resource - status: SUPPORTED - requirements: - - port: - capability: tosca.capabilities.Attachment - node: org.openecomp.resource.cp.nodes.heat.network.neutron.Port - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.vfc.nodes.heat.cinder.Volume: - derived_from: org.openecomp.resource.vfc.nodes.volume - properties: - availability_zone: - description: The availability zone in which the volume will be created - type: string - status: SUPPORTED - required: false - image: - description: If specified, the name or ID of the image to create the volume from - type: string - status: SUPPORTED - required: false - metadata: - description: Key/value pairs to associate with the volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - volume_type: - description: If specified, the type of volume to use, mapping to a specific backend - type: string - status: SUPPORTED - required: false - description: - description: A description of the volume - type: string - status: SUPPORTED - required: false - device_type: - description: Device type - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - cdrom - - disk - disk_bus: - description: 'Bus of the device: hypervisor driver chooses a suitable default - if omitted' - type: string - status: SUPPORTED - required: false - constraints: - - valid_values: - - ide - - lame_bus - - scsi - - usb - - virtio - backup_id: - description: If specified, the backup to create the volume from - type: string - status: SUPPORTED - required: false - source_volid: - description: If specified, the volume to use as source - type: string - status: SUPPORTED - required: false - boot_index: - description: Integer used for ordering the boot disks - type: integer - status: SUPPORTED - required: false - size: - description: The requested storage size (default unit is MB) - type: scalar-unit.size - status: SUPPORTED - required: false - constraints: - - greater_or_equal: 1 GB - read_only: - description: Enables or disables read-only access mode of volume - type: boolean - status: SUPPORTED - required: false - name: - description: A name used to distinguish the volume - type: string - status: SUPPORTED - required: false - scheduler_hints: - description: Arbitrary key-value pairs specified by the client to help the Cinder scheduler creating a volume - type: map - status: SUPPORTED - entry_schema: - type: string - required: false - swap_size: - description: The size of the swap, in MB - type: scalar-unit.size - status: SUPPORTED - required: false - delete_on_termination: - description: Indicate whether the volume should be deleted when the server is terminated - type: boolean - status: SUPPORTED - required: false - multiattach: - description: Whether allow the volume to be attached more than once - type: boolean - status: SUPPORTED - required: false - attributes: - display_description: - description: Description of the volume - type: string - status: SUPPORTED - attachments: - description: The list of attachments of the volume - type: string - status: SUPPORTED - entry_schema: - type: string - encrypted: - description: Boolean indicating if the volume is encrypted or not - type: boolean - status: SUPPORTED - show: - description: Detailed information about resource - type: string - status: SUPPORTED - created_at: - description: The timestamp indicating volume creation - type: timestamp - status: SUPPORTED - display_name: - description: Name of the volume - type: string - status: SUPPORTED - metadata_values: - description: Key/value pairs associated with the volume in raw dict form - type: map - status: SUPPORTED - entry_schema: - type: string - bootable: - description: Boolean indicating if the volume can be booted or not - type: boolean - status: SUPPORTED - status: - description: The current status of the volume - type: string - status: SUPPORTED - org.openecomp.resource.abstract.nodes.CR: - derived_from: tosca.nodes.Root - properties: - cr_function: - type: string - cr_role: - type: string - cr_type: - type: string - org.openecomp.resource.vl.extVL: - derived_from: tosca.nodes.Root - description: VF Tenant oam protected network - properties: - network_type: - type: string - required: true - description: ECOMP supported network types. - network_role: - type: string - required: true - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_scope: - type: string - constraints: - valid_values: - - VF - - SERVICE - - GLOBAL - 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 - network_technology: - type: string - required: true - description: ECOMP supported network technology - exVL_naming: - type: org.openecomp.datatypes.Naming - 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 - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.abstract.nodes.PNF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_type: - type: string - software_versions: - type: list - entry_schema: - type: string - org.openecomp.resource.vfc.rules.nodes.heat.network.contrail.NetworkRules: - derived_from: tosca.nodes.Root - properties: - entries: - type: org.openecomp.datatypes.heat.contrail.network.rule.RuleList - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - name: - type: string - description: A symbolic name for this contrail network rule - required: false - status: SUPPORTED - attributes: - tenant_id: - type: string - description: tenant_id - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes. - status: SUPPORTED - rules: - type: list - description: List of rules - status: SUPPORTED - entry_schema: - type: string - requirements: - - network: - capability: tosca.capabilities.Attachment - node: tosca.nodes.network.Network - relationship: org.openecomp.relationships.AttachesTo - occurrences: - - 0 - - UNBOUNDED - 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.nodes.VRFObject: - derived_from: tosca.nodes.Root - description: provides capability to connect WAN Transport Service Proxy to VRF Entry - capabilities: - routing_configuration_external: - type: org.openecomp.capabilities.RoutingConfiguration - org.openecomp.resource.abstract.nodes.VFC: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - nfc_function: - type: string - high_availablity: - type: string - description: high_availablity - required: false - status: SUPPORTED - vm_image_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - vm_flavor_name: - type: string - description: Master image_name volume id - required: true - status: SUPPORTED - nfc_naming_code: - type: string - description: nfc code for instance naming - required: false - status: SUPPORTED - vm_type_tag: - type: string - description: vm type based on naming Convention - required: false - status: SUPPORTED - nfc_naming: - type: org.openecomp.datatypes.Naming - description: vfc naming - min_instances: - type: integer - description: Minimum number of VFC Instances - required: false - default: 0 - status: SUPPORTED - constraints: - - greater_or_equal: 0 - max_instances: - type: integer - description: Maximum number of VFC Instances - required: false - status: SUPPORTED - constraints: - - greater_or_equal: 1 - org.openecomp.resource.cp.nodes.heat.contrailV2.VirtualMachineInterface: - derived_from: org.openecomp.resource.cp.nodes.network.Port - properties: - name: - description: Virtual Machine Interface name - type: string - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.interface.Properties - status: SUPPORTED - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - capabilities: - binding: - type: tosca.capabilities.network.Bindable - occurrences: - - 0 - - UNBOUNDED - valid_source_types: - - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - org.openecomp.resource.abstract.nodes.VnfConfiguration: - derived_from: tosca.nodes.Root - properties: - allowed_flavors: - description: a collection of all flavor valuesets available for a given VFC - type: map - entry_schema: - type: org.openecomp.datatypes.flavors.DeploymentFlavor - org.openecomp.resource.vl.nodes.heat.network.contrailV2.VirtualNetwork: - derived_from: org.openecomp.resource.vl.nodes.network.Network - properties: - network_ipam_refs_data: - type: list - description: IPAM references Data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.IpamRefData - network_policy_refs_data: - type: list - description: Policy references data - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.contrailV2.virtual.network.rule.RefData - network_ipam_refs: - type: list - description: IPAM references - required: false - status: SUPPORTED - entry_schema: - type: string - network_policy_refs: - type: list - description: Policy references - required: false - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - attributes: - fq_name: - type: string - description: fq_name - status: SUPPORTED - subnets_name: - type: list - description: Subnets name of this network - status: SUPPORTED - entry_schema: - type: string - subnets_show: - type: map - description: Detailed information about each subnet - status: SUPPORTED - entry_schema: - type: string - subnets: - type: map - description: Network related subnets - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.neutron.Subnet - capabilities: - attachment: - type: tosca.capabilities.Attachment - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.vl.internalVL: - derived_from: tosca.nodes.network.Network - description: The AT&T internal (VF-level) Virtual Link - org.openecomp.resource.vl.ELine: - derived_from: org.openecomp.resource.vl.VL - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 0 - - 2 - org.openecomp.resource.vl.VL: - derived_from: tosca.nodes.network.Network - properties: - vendor: - type: string - required: false - vl_name: - type: string - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - end_point: - type: tosca.capabilities.Endpoint - org.openecomp.nodes.Configuration: - derived_from: tosca.nodes.Root - properties: - type: - type: string - description: The type of the node, the configuration will be defined for it. Ex. SBC - required: false - role: - type: string - description: The role of the node, the configuration will be defined for it. Ex. Active, Standby - required: false - function: - type: string - description: The function of the node, the configuration will be defined for it. Ex. NAT Traversal - required: false - org.openecomp.resource.cp.nodes.network.v2.SubInterface: - derived_from: tosca.nodes.Root - properties: - ip_address: - description: Allow the user to set a fixed IP address. Note that this address is a request to the provider which they will attempt to fulfill but may not be able to dependent on the network the port is associated with. - type: string - required: false - order: - description: 'The order of the NIC on the compute instance (e.g. eth2). Note: - when binding more than one port to a single compute (aka multi vNICs) and - ordering is desired, it is *mandatory* that all ports will be set with an - order value and. The order values must represent a positive, arithmetic - progression that starts with 0 (e.g. 0, 1, 2, ..., n).' - type: integer - default: 0 - required: false - constraints: - - greater_or_equal: 0 - is_default: - description: Set is_default=true to apply a default gateway route on the running compute instance to the associated network gateway. Only one port that is associated to single compute node can set as default=true. - type: boolean - default: false - required: false - ip_range_start: - description: Defines the starting IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - ip_range_end: - description: Defines the ending IP of a range to be allocated for the compute instances that are associated by this Port. Without setting this property the IP allocation is done from the entire CIDR block of the network. - type: string - required: false - attributes: - ip_address: - description: The IP address would be assigned to the associated compute instance. - type: string - requirements: - - subinterface_link: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - - binding: - capability: tosca.capabilities.network.Bindable - relationship: tosca.relationships.network.BindsTo - 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.vfc.nodes.Compute: - derived_from: tosca.nodes.Compute - capabilities: - disk.ephemeral.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.ephemeral.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of ephemeral disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - instance: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: instance - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: instance - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Existence of instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu.delta: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu.delta - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used since previous datapoint - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Delta - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu_util: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: '%' - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu_util - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average CPU utilization - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.latency: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ms - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.latency - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk latency per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - cpu: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: ns - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: cpu - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: CPU time used - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.root.size: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: GB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.root.size - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Size of root disk - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of writes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - vcpus: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: vcpu - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: vcpus - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of virtual CPUs allocated to the instance - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.iops: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: count/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.iops - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average disk iops per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The physical size in bytes of the image container on the host per device - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.read.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.read.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of read requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.write.requests.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.write.requests.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.allocation: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.allocation - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk occupied by the instance on the host machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.read.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.read.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of reads - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.usage: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.usage - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance from the amount of its allocated memory - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.device.capacity: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.device.capacity - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: The amount of disk per device that the instance can see - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: disk - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - memory.resident: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: MB - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: memory.resident - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Volume of RAM used by the instance on the physical machine - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - disk.write.requests: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: request - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: disk.write.requests - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of write requests - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: compute - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.MultiFlavorVFC: - derived_from: org.openecomp.resource.abstract.nodes.VFC - properties: - images: - type: map - entry_schema: - type: org.openecomp.datatypes.ImageInfo - required: false - org.openecomp.nodes.PortMirroringConfigurationByPolicy: - derived_from: tosca.nodes.Root - properties: - collector_node: - type: string - description: The name of the Collector Proxy - required: true - policy_name: - type: string - description: The name of the policy for selection of the collector interfaces - required: true - equip_model: - type: string - description: The name of the equipment type of the collector, i.e. Cisco 4500x - required: true - equip_vendor: - type: string - description: The name of the equipment vendor of the collector, i.e. Cisco - required: true - requirements: - - source: - capability: org.openecomp.capabilities.PortMirroring - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.VF: - derived_from: tosca.nodes.Root - properties: - nf_function: - type: string - nf_role: - type: string - nf_naming_code: - type: string - nf_type: - type: string - nf_naming: - type: org.openecomp.datatypes.Naming - Default: true - availability_zone_max_count: - type: integer - default: 1 - constraints: - - valid_values: - - 0 - - 1 - - 2 - min_instances: - type: integer - max_instances: - type: integer - multi_stage_design: - type: boolean - default: false - 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.nodes.ForwardingPath: - derived_from: tosca.nodes.Root - properties: - target_range: - type: list - required: true - status: SUPPORTED - 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 - required: true - status: SUPPORTED - requirements: - - forwarder: - capability: org.openecomp.capabilities.Forwarder - relationship: org.openecomp.relationships.ForwardsTo - occurrences: - - 0 - - UNBOUNDED - org.openecomp.resource.cp.nodes.heat.network.contrail.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - org.openecomp.resource.cp.nodes.network.SubInterface: - derived_from: tosca.nodes.network.Port - org.openecomp.resource.vfc.nodes.heat.contrail.Compute: - derived_from: org.openecomp.resource.vfc.nodes.Compute - properties: - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - attributes: - tenant_id: - type: string - description: Tenant id of the VM - status: SUPPORTED - fq_name: - type: string - description: fq_name - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of active VMs - status: SUPPORTED - virtual_machines: - type: string - description: VMs of this compute - status: SUPPORTED - status: - type: string - description: status of the compute - status: SUPPORTED - org.openecomp.resource.cp.nodes.network.Port: - derived_from: tosca.nodes.network.Port - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - 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 - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - subinterface_indicator: - description: identifies if Port is having Sub Interface - type: boolean - required: false - default: false - related_networks: - type: list - description: Related Networks List. - required: false - entry_schema: - type: org.openecomp.datatypes.network.RelatedNetworksAssignments - capabilities: - network.incoming.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - forwarder: - type: org.openecomp.capabilities.Forwarder - network.outgoing.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.packets.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.packets.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outpoing.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outpoing.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of outgoing packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.bytes: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.bytes - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.outgoing.bytes.rate: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: B/s - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.outgoing.bytes.rate - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Average rate of outgoing bytes - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Gauge - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - network.incoming.packets: - type: org.openecomp.capabilities.metric.Ceilometer - description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. - properties: - unit: - type: string - description: Unit of the metric value - required: true - default: packet - status: SUPPORTED - name: - type: string - description: Ceilometer metric type name to monitor. (The name ceilometer is using) - required: true - default: network.incoming.packets - status: SUPPORTED - description: - type: string - description: Description of the metric - required: false - default: Number of incoming packets - status: SUPPORTED - type: - type: string - description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. - required: true - default: Cumulative - status: SUPPORTED - category: - type: string - description: Category of the metric, for an example, compute, disk, network, storage and etc. - required: false - default: network - status: SUPPORTED - occurrences: - - 1 - - UNBOUNDED - org.openecomp.nodes.VRFEntry: - derived_from: tosca.nodes.Root - requirements: - - routing_configuration_internal: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - - routing_configuration_external: - occurrences: - - 1 - - UNBOUNDED - capability: org.openecomp.capabilities.RoutingConfiguration - relationship: org.openecomp.relationships.RoutesTo - org.openecomp.resource.cp.nodes.heat.network.contrailV2.VLANSubInterface: - derived_from: org.openecomp.resource.cp.nodes.network.SubInterface - properties: - virtual_machine_interface_refs: - description: List of virtual machine interface. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - name: - description: Virtual Machine Sub Interface VLAN name - type: string - status: SUPPORTED - required: false - virtual_network_refs: - description: List of virtual networks. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - virtual_machine_interface_properties: - description: virtual machine interface properties. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.Properties - status: SUPPORTED - required: false - virtual_machine_interface_allowed_address_pairs: - description: Virtual Machine Sub Interface allowed address pairs. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.AddressPairs - status: SUPPORTED - required: false - virtual_machine_interface_mac_addresses: - description: List of mac addresses. - type: org.openecomp.datatypes.heat.contrailV2.virtual.machine.subInterface.MacAddress - status: SUPPORTED - required: false - security_group_refs: - description: List of security groups. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - port_tuple_refs: - description: List of port tuples. - type: list - status: SUPPORTED - entry_schema: - type: string - required: false - attributes: - fq_name: - description: The FQ name of the Virtual Network. - type: string - status: SUPPORTED - show: - description: All attributes. - type: string - status: SUPPORTED - requirements: - - binding: - capability: tosca.capabilities.network.Bindable - node: org.openecomp.resource.cp.nodes.network.Port - relationship: tosca.relationships.network.BindsTo - occurrences: - - 1 - - 1 - org.openecomp.resource.cp.extCP: - derived_from: tosca.nodes.Root - description: The SDC Connection Point base type all other CP derive from - properties: - network_role: - type: string - required: true - description: identical to VL network_role - order: - type: integer - required: true - description: The order of the CP on the compute instance (e.g. eth2). - network_role_tag: - type: string - required: true - description: Must correlate to the set of defined “network-role” tag identifiers from the associated HEAT template - mac_requirements: - type: org.openecomp.datatypes.network.MacRequirements - required: false - description: identifies MAC address assignments to the CP - vlan_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.VlanRequirements - required: false - description: identifies vlan address assignments to the CP - ip_requirements: - type: list - entry_schema: - type: org.openecomp.datatypes.network.IpRequirements - required: true - description: identifies IP requirements to the CP - exCP_naming: - type: org.openecomp.datatypes.Naming - subnetpoolid: - type: string - 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 - relationship: tosca.relationships.network.LinksTo - node: org.openecomp.resource.vl.VL - capabilities: - internal_connectionPoint: - type: tosca.capabilities.Node - valid_source_type: - - tosca.nodes.network.Port - org.openecomp.nodes.FabricConfiguration: - derived_from: org.openecomp.nodes.Configuration - requirements: - - fabric_configuration_monitoring: - capability: org.openecomp.capabilities.FabricConfiguration - occurrences: - - 1 - - UNBOUNDED - org.openecomp.resource.abstract.nodes.contrail.AbstractSubstitute: - derived_from: org.openecomp.resource.abstract.nodes.AbstractSubstitute - properties: - availability_zone: - type: string - description: Availability zone to create servers in - required: false - status: SUPPORTED - static_routes_list: - type: list - description: Static routes enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - availability_zone_enable: - type: boolean - description: Indicates availability zone is enabled - required: false - default: false - status: SUPPORTED - service_template_name: - type: string - description: Service template name - required: false - status: SUPPORTED - ordered_interfaces: - type: boolean - description: Indicates if service interface are ordered - required: false - default: false - status: SUPPORTED - flavor: - type: string - description: flavor - required: false - status: SUPPORTED - image_name: - type: string - description: Image name - required: true - status: SUPPORTED - service_type: - type: string - description: Service type - required: true - status: SUPPORTED - constraints: - - valid_values: - - firewall - - analyzer - - source-nat - - loadbalancer - service_interface_type_list: - type: list - description: List of interface types - required: true - status: SUPPORTED - entry_schema: - type: string - constraints: - - valid_values: - - management - - left - - right - - other - service_instance_name: - type: string - description: Service instance name - required: true - status: SUPPORTED - interface_list: - type: list - description: List of interfaces - required: false - status: SUPPORTED - entry_schema: - type: org.openecomp.datatypes.heat.network.contrail.InterfaceData - service_mode: - type: string - description: Service mode - required: true - status: SUPPORTED - constraints: - - valid_values: - - transparent - - in-network - - in-network-nat - shared_ip_list: - type: list - description: Shared ips enabled - required: false - status: SUPPORTED - entry_schema: - type: boolean - attributes: - tenant_id: - type: string - description: Tenant id of the Service Instance - status: SUPPORTED - fq_name: - type: string - description: The FQ name of the service instance - status: SUPPORTED - service_template_name: - type: string - description: Service Template of the Service Instance - status: SUPPORTED - show: - type: string - description: All attributes - status: SUPPORTED - active_vms: - type: string - description: Number of service VMs active for this Service Instance - status: SUPPORTED - service_instance_name: - type: string - description: The name of the service instance - status: SUPPORTED - virtual_machines: - type: string - description: Service VMs for the Service Instance - status: SUPPORTED - status: - type: string - description: Status of the service instance - status: SUPPORTED - org.openecomp.resource.abstract.nodes.AbstractSubstitute: - derived_from: tosca.nodes.Root - properties: - service_template_filter: - type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering - description: Substitution Filter - required: true - status: SUPPORTED - org.openecomp.resource.cp.nodes.heat.network.neutron.Port: - derived_from: org.openecomp.resource.cp.nodes.network.Port - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - 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 - - org.openecomp.resource.cp.nodes.heat.network.v2.contrailV2.VLANSubInterface - occurrences: - - 0 - - UNBOUNDED - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_profile: - type: tosca.datatypes.nfv.VlProfile - required: true - capabilities: - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.Cp: - derived_from: tosca.nodes.Root - properties: - layer_protocol: - type: list - entry_schema: - type: string - constraints: - - valid_values: - - ethernet - - mpls - - odu2 - - ipv4 - - ipv6 - - pseudo_wire - required: true - role: - type: string - constraints: - - valid_values: - - root - - leaf - required: false - description: - type: string - required: false - protocol_data: - type: list - entry_schema: - type: tosca.datatypes.nfv.CpProtocolData - required: true - trunk_mode: - type: boolean - required: true - allowed_address_data: - type: tosca.datatypes.nfv.AddressData - required: false - tosca.nodes.nfv.VnfVirtualLinkDesc: - derived_from: tosca.nodes.Root - properties: - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - required: true - description: - type: string - required: false - test_access: - type: list - entry_schema: - type: string - required: false - vl_flavours: - type: map - entry_schema: - type: tosca.datatypes.nfv.VlFlavour - required: true - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - org.openecomp.resource.vfc.AllottedResource: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - role: - type: string - required: true - description: Unique label that defines the role that this allotted resource performs - min_instances: - type: integer - default: 1 - max_instances: - type: integer - default: 1 - target_network_role: - type: string - required: true - description: Target network role - requirements: - - service_dependency: - capability: org.openecomp.capabilities.AllottedResource - relationship: tosca.relationships.DependsOn - node: tosca.services.Root - tosca.nodes.nfv.ext.zte.VDU: - derived_from: tosca.nodes.Root - properties: - manual_scale_select_vim: - type: boolean - required: false - vdu_type: - type: string - required: false - watchdog: - type: tosca.datatypes.nfv.ext.zte.WatchDog - required: false - name: - type: string - required: false - local_affinity_antiaffinity_rule: - type: tosca.datatypes.nfv.ext.LocalAffinityOrAntiAffinityRule - required: false - support_scaling: - type: boolean - required: false - storage_policy: - type: string - required: false - key_vdu: - type: boolean - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - inject_data_list: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.InjectData - 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 - 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 - tosca.nodes.nfv.VDU: - derived_from: tosca.nodes.SoftwareComponent - capabilities: - Virtualbinding: - type: tosca.capabilities.nfv.VirtualBindable - requirements: - - host: - capability: tosca.capabilities.Container - node: tosca.nodes.Compute - relationship: tosca.relationships.HostedOn - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - properties: - bitrate_requirement: - type: integer - required: false - vnic_name: - type: string - required: false - vnic_order: - type: integer - required: false - vnic_type: - type: string - constraints: - - valid_values: - - normal - - macvtap - - direct - - baremetal - - direct-physical - - virtio-forwarder - required: false - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - required: false - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - - virtual_binding: - capability: tosca.capabilities.nfv.VirtualBindable - relationship: tosca.relationships.nfv.VirtualBindsTo - node: tosca.nodes.nfv.Vdu.Compute - org.openecomp.resource.vfc.NSD: - derived_from: tosca.nodes.Root - description: ECOMP Allotted Resource base type all other allotted resources node types derive from - properties: - nsd_id: - type: string - required: true - description: ID of the NSD - nsd_designer: - type: string - required: true - description: Designer of the NSD - nsd_version: - type: string - required: true - description: Version of the NSD - nsd_name: - type: string - required: true - description: Name of the NSD - providing_service_uuid: - type: string - required: true - description: The depending service uuid in order to map the allotted resource to the specific service version - providing_service_invariant_uuid: - type: string - required: true - description: The depending service invariant uuid in order to map the allotted resource to the specific service version - providing_service_name: - type: string - required: true - description: The depending service name in order to map the allotted resource to the specific service version - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - properties: - name: - type: string - required: true - description: - type: string - required: true - boot_order: - type: map - entry_schema: - type: string - required: false - nfvi_constraints: - type: map - entry_schema: - type: string - required: false - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - required: true - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - required: true - inject_files: - type: tosca.datatypes.nfv.injectFile - required: false - meta_data: - type: map - entry_schema: - type: string - required: false - user_data: - type: string - required: false - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - requirements: - - virtual_storage: - capability: tosca.capabilities.nfv.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - node: tosca.nodes.nfv.Vdu.VirtualStorage - occurences: - - 0 - - UNBOUNDED - org.openecomp.resource.vl.GenericNeutronNet: - derived_from: org.openecomp.resource.vl.extVL - description: Generic Neutron Network - properties: - network_role: - type: string - description: | - Unique label that defines the role that this network performs. example: vce oam network, vnat sr-iov1 network - network_assignments: - type: org.openecomp.datatypes.network.NetworkAssignments - network_flows: - type: org.openecomp.datatypes.network.NetworkFlows - network_scope: - type: string - network_ecomp_naming: - type: org.openecomp.datatypes.EcompNaming - network_type: - type: string - description: ECOMP supported network types. - default: NEUTRON - provider_network: - type: org.openecomp.datatypes.network.ProviderNetwork - network_technology: - type: string - description: ECOMP supported network technology - default: NEUTRON - network_homing: - type: org.openecomp.datatypes.EcompHoming - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - occurrences: - - 1 - - UNBOUNDED - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - properties: - type_of_storage: - type: string - constraints: - - valid_values: - - volume - - object - - root - - block - required: true - size_of_storage: - type: scalar-unit.size - required: true - vdu_storage_requirements: - type: map - entry_schema: - type: string - required: false - rdma_enabled: - type: boolean - required: false - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - tosca.nodes.nfv.ext.zte.VL: - derived_from: tosca.nodes.Root - properties: - segmentation_id: - type: string - required: false - network_name: - type: string - required: false - is_predefined: - type: boolean - required: false - mtu: - type: integer - required: false - dns_nameservers: - type: list - required: false - entry_schema: - type: string - physical_network: - type: string - required: false - dhcp_enabled: - type: boolean - required: false - network_id: - type: string - required: false - host_routes: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.HostRouteInfo - ip_version: - type: integer - required: false - vendor: - type: string - required: false - name: - type: string - required: false - start_ip: - type: string - required: false - vlan_transparent: - type: boolean - required: false - cidr: - type: string - required: false - gateway_ip: - type: string - required: false - network_type: - type: string - required: false - end_ip: - type: string - required: false - location_info: - type: tosca.datatypes.nfv.ext.LocationInfo - required: false - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - tosca.nodes.nfv.ext.LocalStorage: - derived_from: tosca.nodes.Root - properties: - size: - type: string - required: false - disk_type: - type: string - required: false - capabilities: - local_attachment: - type: tosca.capabilities.nfv.ext.LocalAttachment - tosca.nodes.nfv.ext.zte.CP: - derived_from: tosca.nodes.Root - properties: - guest_os_mtu: - type: integer - required: false - bandwidth: - type: integer - required: false - interface_name: - type: string - required: false - allowed_address_pairs: - type: list - required: false - entry_schema: - type: tosca.datatypes.nfv.ext.AddressPairs - ip_address: - type: string - required: false - bond: - type: string - required: false - proxiedVNFs: - type: list - required: false - entry_schema: - type: string - sfc_encapsulation: - type: string - required: false - floating_ip_address: - type: tosca.datatypes.nfv.ext.FloatingIP - required: false - service_ip_address: - required: false - type: string - mac_address: - type: string - required: false - proxiedVNFtype: - type: string - required: false - macbond: - type: string - required: false - vnic_type: - type: string - required: false - direction: - type: string - required: false - order: - type: integer - required: false - requirements: - - forwarder: - capability: tosca.capabilities.nfv.Forwarder - occurrences: - - 0 - - UNBOUNDED - - virtualbinding: - capability: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 0 - - UNBOUNDED - - virtualLink: - capability: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 0 - - UNBOUNDED - capabilities: - forwarder: - type: tosca.capabilities.nfv.Forwarder - tosca.nodes.nfv.ext.ImageFile: - derived_from: tosca.nodes.Root - properties: - file_url: - type: string - required: false - container_type: - type: string - required: false - name: - type: string - required: false - disk_format: - type: string - required: false - version: - type: string - required: false - capabilities: - guest_os: - type: tosca.capabilities.nfv.ext.GuestOs - image_fle: - type: tosca.capabilities.nfv.ext.ImageFile - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - properties: - descriptor_id: - type: string - required: true - descriptor_version: - type: string - required: true - provider: - type: string - required: true - product_name: - type: string - required: true - software_version: - type: string - required: true - product_info_name: - type: string - required: false - product_info_description: - type: string - required: false - vnfm_info: - type: list - entry_schema: - type: string - required: true - localization_languages: - type: list - entry_schema: - type: string - required: false - default_localization_language: - type: string - required: false - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - required: false - modifiable_attributes: - type: tosca.datatypes.nfv.VnfInfoModifiableAttributes - required: false - flavour_id: - type: string - required: true - flavour_description: - type: string - required: true - requirements: - - virtual_link: - capability: tosca.capabilities.nfv.VirtualLinkable - relationship: tosca.relationships.nfv.VirtualLinksTo - node: tosca.nodes.nfv.VnfVirtualLink - occurrences: - - 0 - - UNBOUNDED - interfaces: - Nfv: - type: tosca.interfaces.nfv.vnf.lifecycle.Nfv - org.openecomp.resource.vl.overlaytunnel: - derived_from: tosca.nodes.Root - description: This entity represents abstract overlay tunnel end point. - properties: - id: - type: string - description: Identifier of the Tunnel Endpoint node. - required: false - template_name: - type: string - required: false - version: - type: string - required: false - name: - type: string - description: Overlay tunnel name used by for reference by the administrator. - required: false - description: - type: string - description: Additional comments/information about overlay tunnel. - required: false - tunnelType: - type: string - constraints: - - valid_values: - - L3-DCI - - L2-DCI - description: type defines if the overlay tunnel is L3-DCI tunnel or L2-DCI tunnel. - required: true - site1_id: - type: string - description: Identifier of first DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site1_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site1_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site1_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site1_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site1_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site1_vni: - type: integer - description: VXLAN ID - required: false - site1_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site1_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site1_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - site2_id: - type: string - description: Identifier of second DCI overlay tunnel endpoint. This could be IP address of domain controller. - required: true - site2_description: - type: string - description: Additional comments/information about overlay tunnel. Description can also be used to identify domain controller. - required: false - site2_networkName: - type: string - description: Name of the network that is being associated with overlay tunnel. - required: true - site2_routerId: - type: string - description: Identifier of router connected to L3 tunnel end point, while configuring L3-DCI tunnel. - required: false - site2_importRT1: - type: string - description: List of Route targets imported by the local router. - required: false - site2_exportRT1: - type: string - description: List of Route targets exported by the local router. - required: false - site2_vni: - type: integer - description: VXLAN ID - required: false - site2_fireWallEnable: - type: boolean - required: false - description: Identifies if a firewall exists in the path of overlay tunnel. - default: false - site2_fireWallId: - type: string - description: Identifier of Firewall that is in overlay tunnel path - required: false - site2_localNetworkAll: - type: boolean - description: Identifies whether all the local networks associate with the tunnel or not. - required: false - default: 'false' - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable - org.openecomp.resource.vl.underlayvpn: - derived_from: tosca.nodes.Root - description: undelay vpn type definitions - properties: - id: - type: string - required: false - template_name: - type: string - required: false - version: - type: string - required: false - vendor: - type: string - required: false - template_author: - type: string - required: false - name: - type: string - required: false - description: - type: string - required: false - serviceType: - type: string - description: type of VPN service - required: false - default: l3vpn_sptn - topology: - type: string - description: type of VPN topology - constraints: - - valid_values: - - full-mesh - - point_to_multipoint - - point_to_point - - singlePoint - - hubspoke - - hubspoke_via_hubce - - hubspoke_disjoint - - ADD_DROP_Z - required: false - default: full-mesh - technology: - type: string - description: type of VPN technology - constraints: - - valid_values: - - mpls - - rosen multivpn - - vxlan overlay l3vpn - - eth over sdh - - vlan - required: false - default: mpls - site1_name: - type: string - description: name of first site - required: false - site2_name: - type: string - description: name of second site - required: false - sna1_name: - type: string - description: name of site network accesses associated with the site1 - required: false - sna2_name: - type: string - description: name of site network accesses associated with the site2 - required: false - pe1_id: - type: string - description: id of provider edge1, it can be name or ip or uuid - required: false - pe2_id: - type: string - description: id of provider edge2, it can be name or ip or uuid - required: false - ac1_id: - type: string - description: id of attachment circuit1, it can be port name or uuid - required: false - ac1_svlan: - type: integer - description: ac1 svlan - required: false - ac1_ip: - type: string - description: ip of ac1, only for layer3 vpn, it should contain mask - required: false - ac1_peer_ip: - type: string - description: ip of ac1 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac1_route: - type: string - description: route configure of ac1, only for layer3 vpn - required: false - ac1_protocol: - type: string - description: routing protocol type of ac1, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - required: false - ac1_protocol_bgp_as: - type: string - description: autonomous-system number of ac1, , only required for ebgp protocol - required: false - ac2_id: - type: string - description: id of attachment circuit2, it can be port name or uuid - required: false - ac2_svlan: - type: integer - description: ac2 svlan - required: false - ac2_ip: - type: string - description: ip of ac2, only for layer3 vpn, it should contain mask - required: false - ac2_peer_ip: - type: string - description: ip of ac2 peer CE tp, only for layer3 vpn, it should contain mask - required: false - ac2_route: - type: string - description: route configure of ac2, only for layer3 vpn - required: false - ac2_protocol: - type: string - description: routing protocol type of ac2, only for layer3 vpn - constraints: - - valid_values: - - STATIC - - OSPF - - ISIS - - BGP - - other - default: STATIC - required: false - ac2_protocol_bgp_as: - type: string - description: autonomous-system number of ac2, , only required for ebgp protocol - required: false - af_type: - type: string - description: address family type - default: ipv4 - required: false - requirements: - - virtualLink: - capability: tosca.capabilities.network.Linkable - relationship: tosca.relationships.network.LinksTo - capabilities: - virtual_linkable: - type: tosca.capabilities.network.Linkable diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/policies.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/policies.yml deleted file mode 100644 index 6063d085..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/policies.yml +++ /dev/null @@ -1,134 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- data.yml -policy_types: - tosca.policies.Root: - description: The TOSCA Policy Type all other TOSCA Policy Types derive from - tosca.policies.Placement: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern placement of TOSCA nodes or groups of nodes. - tosca.policies.Scaling: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern scaling of TOSCA nodes or groups of nodes. - tosca.policies.Update: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to govern update of TOSCA nodes or groups of nodes. - tosca.policies.Performance: - derived_from: tosca.policies.Root - description: The TOSCA Policy Type definition that is used to declare performance requirements for TOSCA nodes or groups of nodes. - org.openecomp.policies.placement.Antilocate: - derived_from: tosca.policies.Placement - description: My placement policy for separation based upon container type value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - container_type: - type: string - description: container type - required: false - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.Colocate: - derived_from: tosca.policies.Placement - description: Keep associated nodes (groups of nodes) based upon affinity value - properties: - name: - type: string - description: The name of the policy - required: false - status: SUPPORTED - affinity: - type: string - description: affinity - required: true - status: SUPPORTED - constraints: - - valid_values: - - host - - region - - compute - org.openecomp.policies.placement.valet.Diversity: - derived_from: tosca.policies.Placement - description: Valet Diversity - properties: - level: - type: string - description: diversity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Exclusivity: - derived_from: tosca.policies.Placement - description: Valet Exclusivity - properties: - level: - type: string - description: exclusivity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.placement.valet.Affinity: - derived_from: tosca.policies.Placement - description: Valet Affinity - properties: - level: - type: string - description: affinity - required: false - default: host - status: SUPPORTED - constraints: - - valid_values: - - host - - rack - org.openecomp.policies.scaling.Fixed: - derived_from: tosca.policies.Scaling - properties: - quantity: - description: the exact number of instances to keep up - type: integer - required: true - org.openecomp.policies.External: - derived_from: tosca.policies.Root - description: externally managed policy (for example, type="network assignment", source="Policy Manager", name="route target") - properties: - source: - type: string - description: The name of the server that exposes the policy with predefined type and name. - required: false - type: - type: string - description: The type (category) of the policy same as it is defined in the source. - required: false - name: - type: string - description: The name of the policy, that related to specific type, same as it is defined in the source. - required: false diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/relationships.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/relationships.yml deleted file mode 100644 index b1b554d1..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/relationships.yml +++ /dev/null @@ -1,142 +0,0 @@ -# -# 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_yaml_1_1 -imports: -- capabilities.yml -- data.yml -- interfaces.yml -relationship_types: - tosca.relationships.Root: - description: This is the default (root) TOSCA Relationship Type definition that all other TOSCA Relationship Types derive from. - attributes: - tosca_id: - description: A unique identifier of the realized instance of a Relationship Template that derives from any TOSCA normative type. - type: string - tosca_name: - description: This attribute reflects the name of the Relationship Template as defined in the TOSCA service template. This name is not unique to the realized instance model of corresponding deployed application as each template in the model can result in one or more instances (e.g., scaled) when orchestrated to a provider environment. - type: string - state: - description: The state of the relationship instance. - type: string - default: initial - interfaces: - Configure: - type: tosca.interfaces.relationship.Configure - tosca.relationships.RoutesTo: - derived_from: tosca.relationships.ConnectsTo - description: This type represents an intentional network routing between two Endpoints in different networks. - valid_target_types: - - tosca.capabilities.Endpoint - tosca.relationships.network.LinksTo: - derived_from: tosca.relationships.DependsOn - description: This relationship type represents an association relationship between Port and Network node types. - valid_target_types: - - tosca.capabilities.network.Linkable - tosca.relationships.AttachesTo: - derived_from: tosca.relationships.Root - description: This type represents an attachment relationship between two nodes. For example, an AttachesTo relationship type would be used for attaching a storage node to a Compute node. - valid_target_types: - - tosca.capabilities.Attachment - properties: - location: - description: 'The relative location (e.g., path on the file system), which - provides the root location to address an attached node. e.g., a mount point - / path such as ''/usr/data''. Note: The user must provide it and it cannot - be "root".' - type: string - constraints: - - min_length: 1 - device: - description: The logical device name which for the attached device (which is represented by the target node in the model). e.g., '/dev/hda1'. - type: string - required: false - attributes: - device: - description: 'The logical name of the device as exposed to the instance. Note: - A runtime property that gets set when the model gets instantiated by the - orchestrator.' - type: string - tosca.relationships.network.BindsTo: - derived_from: tosca.relationships.DependsOn - description: This type represents a network association relationship between Port and Compute node types. - valid_target_types: - - tosca.capabilities.network.Bindable - tosca.relationships.HostedOn: - derived_from: tosca.relationships.Root - description: This type represents a hosting relationship between two nodes. - valid_target_types: - - tosca.capabilities.Container - tosca.relationships.DependsOn: - derived_from: tosca.relationships.Root - description: This type represents a general dependency relationship between two nodes. - valid_target_types: - - tosca.capabilities.Node - tosca.relationships.ConnectsTo: - derived_from: tosca.relationships.Root - description: This type represents a network connection relationship between two nodes. - valid_target_types: - - tosca.capabilities.Endpoint - properties: - credential: - type: tosca.datatypes.Credential - required: false - 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 - org.openecomp.relationships.ForwardsTo: - derived_from: tosca.relationships.Root - valid_target_types: - - org.openecomp.capabilities.Forwarder - org.openecomp.relationships.AssignsTo: - derived_from: tosca.relationships.Root - org.openecomp.relationships.RoutesTo: - derived_from: tosca.relationships.RoutesTo - description: This type represents an intentional network routing between internal and external network - tosca.relationships.nfv.VirtualBindsTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualBindable - tosca.relationships.nfv.VirtualLinksTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualLinkable - tosca.relationships.nfv.Vdu.AttachedTo: - derived_from: tosca.relationships.DependsOn - valid_target_types: - - tosca.capabilities.nfv.VirtualStorage diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCompute-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCompute-template.yml deleted file mode 100644 index 546f88a8..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCompute-template.yml +++ /dev/null @@ -1,103 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.Compute: - derived_from: tosca.nodes.Root - description: VDU Compute - properties: - configurable_properties: - type: map - entry_schema: - type: tosca.datatypes.nfv.VnfcConfigurableProperties - inject_files: - type: tosca.datatypes.nfv.injectFile - name: - type: string - nfvi_constraints: - type: map - entry_schema: - type: string - meta_data: - type: map - entry_schema: - type: string - description: - type: string - user_data: - type: string - boot_order: - type: map - entry_schema: - type: string - vdu_profile: - type: tosca.datatypes.nfv.VduProfile - capabilities: - virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCp-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCp-template.yml deleted file mode 100644 index ec266374..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduCp-template.yml +++ /dev/null @@ -1,59 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VduCp: - derived_from: tosca.nodes.nfv.Cp - description: VDU Cp - properties: - vnic_name: - type: string - virtual_network_interface_requirements: - type: list - entry_schema: - type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements - bitrate_requirement: - type: integer - vnic_order: - type: integer - vnic_type: - type: string - requirements: - - virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduVirtualstorage-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduVirtualstorage-template.yml deleted file mode 100644 index 566f7054..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-VduVirtualstorage-template.yml +++ /dev/null @@ -1,50 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.Vdu.VirtualStorage: - derived_from: tosca.nodes.Root - description: VDU VirtualStorage - properties: - vdu_storage_requirements: - type: map - entry_schema: - type: string - size_of_storage: - type: scalar-unit.size - rdma_enabled: - type: boolean - type_of_storage: - type: string - capabilities: - virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template-interface.yml deleted file mode 100644 index 93cb070e..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template-interface.yml +++ /dev/null @@ -1,208 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.resource.vf.Vgw1181049: - derived_from: org.openecomp.resource.abstract.nodes.VF - properties: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - capabilities: - vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - requirements: - - llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template.yml deleted file mode 100644 index 55fe2ba8..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vgw1181049-template.yml +++ /dev/null @@ -1,288 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -- resource-VNF: - file: resource-Vnf-template.yml -- resource-VnfVirtualLink: - file: resource-Vnfvirtuallink-template.yml -- resource-VDU Cp: - file: resource-VduCp-template.yml -- resource-VDU VirtualStorage: - file: resource-VduVirtualstorage-template.yml -- resource-VDU Compute: - file: resource-VduCompute-template.yml -topology_template: - inputs: - nf_naming: - default: - ecomp_generated_naming: true - type: org.openecomp.datatypes.Naming - required: false - multi_stage_design: - default: false - type: boolean - required: false - nf_function: - type: string - required: false - nf_naming_code: - type: string - required: false - availability_zone_max_count: - default: 1 - type: integer - required: false - nf_role: - type: string - required: false - min_instances: - type: integer - required: false - max_instances: - type: integer - required: false - nf_type: - type: string - required: false - node_templates: - LLU_VNF: - type: tosca.nodes.nfv.VNF - metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - customizationUUID: 06bffc87-30c7-42ad-b99d-19c6c13405dc - version: '1.0' - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - descriptor_id: b1bb0ce7-2222-4fa7-95ed-4840d70a1177 - provider: onap - vnfm_info: - - gvnfm - flavour_id: simple - descriptor_version: '1.0' - software_version: '1.0' - flavour_description: simple - product_name: vcpe_vgw - VL_mux_gw_private_net: - type: tosca.nodes.nfv.VnfVirtualLink - metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - customizationUUID: fbea54ef-8f8b-4f35-81d6-997a47282698 - version: '1.0' - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - vl_profile: - min_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - max_bit_rate_requirements: - root: 10000000 - leaf: 10000000 - networkName: mux_gw_private_net_id - cidr: 192.168.0.0/24 - dhcpEnabled: false - connectivity_type: - layer_protocol: ipv4 - VDU_vgw_0: - type: tosca.nodes.nfv.Vdu.Compute - metadata: - invariantUUID: 545f0f07-e4b4-483c-8976-87d6b2585976 - UUID: 705026b1-0e14-4c4c-b203-9aa5002616a8 - customizationUUID: 93c3f2e3-67e7-4bb4-be11-8a48df924c4c - version: '1.0' - name: VDU Compute - description: VDU Compute - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - configurable_properties: - additional_vnfc_configurable_properties: { - } - name: vdu_vgw - description: vgw - vdu_profile: - watchdog: none - min_number_of_instances: 1 - max_number_of_instances: 1 - requirements: - - virtual_storage: - capability: virtual_storage - node: VirtualStorage_root_all - capabilities: - virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - VirtualStorage_root_all: - type: tosca.nodes.nfv.Vdu.VirtualStorage - metadata: - invariantUUID: a2b52b7f-dcc1-4ac9-9333-db87b5393841 - UUID: e7153786-05ac-4911-a125-0560f7e62ec9 - customizationUUID: dc20e1ad-aed9-4154-b2b4-3a702eee49a7 - version: '1.0' - name: VDU VirtualStorage - description: VDU VirtualStorage - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - size_of_storage: 40 GB - type_of_storage: root - Cp_vgw_mux_gw_private_net: - type: tosca.nodes.nfv.VduCp - metadata: - invariantUUID: 05cfefb0-25e0-4aa6-a5c3-bb96a34372a0 - UUID: 1da2c936-84df-4a98-a6aa-a53847cbebc9 - customizationUUID: b5ff315f-effc-46e9-a0c5-aec1954845e0 - version: '1.0' - name: VDU Cp - description: VDU Cp - type: CP - category: Generic - subcategory: Network Elements - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' - properties: - trunk_mode: false - protocol_data: - - asscociated_layer_protocol: ipv4 - address_data: - address_type: ip_address - l3_address_data: - fixed_ip_address: - - 192.168.0.1 - ip_address_assignment: false - floating_ip_activated: false - layer_protocol: - - ipv4 - virtual_network_interface_requirements: - - name: "sriov-support" - support_mandatory: true - network_interface_requirements: - interfaceType: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform":"generic", "mandatory": "true", "configurationValue": "PCI-Passthrough"}' - nic_io_requirements: - logical_node_requirements: - pciVendorId: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": "generic", "mandatory": "true", "configurationValue": "1234"}' - requirements: - - virtual_link: - capability: virtual_linkable - node: VL_mux_gw_private_net - - virtual_binding: - capability: virtual_binding - node: VDU_vgw_0 - substitution_mappings: - node_type: org.openecomp.resource.vf.Vgw1181049 - capabilities: - vl_mux_gw_private_net.feature: - - vl_mux_gw_private_net - - feature - cp_vgw_mux_gw_private_net.feature: - - cp_vgw_mux_gw_private_net - - feature - vdu_vgw_0.virtual_compute: - - vdu_vgw_0 - - virtual_compute - vdu_vgw_0.virtual_binding: - - vdu_vgw_0 - - virtual_binding - virtualstorage_root_all.virtual_storage: - - virtualstorage_root_all - - virtual_storage - llu_vnf.feature: - - llu_vnf - - feature - vl_mux_gw_private_net.virtual_linkable: - - vl_mux_gw_private_net - - virtual_linkable - vl_mux_gw_private_net.monitoring_parameter: - - vl_mux_gw_private_net - - monitoring_parameter - vdu_vgw_0.monitoring_parameter: - - vdu_vgw_0 - - monitoring_parameter - virtualstorage_root_all.feature: - - virtualstorage_root_all - - feature - vdu_vgw_0.feature: - - vdu_vgw_0 - - feature - requirements: - vdu_vgw_0.virtual_storage: - - vdu_vgw_0 - - virtual_storage - vl_mux_gw_private_net.dependency: - - vl_mux_gw_private_net - - dependency - virtualstorage_root_all.dependency: - - virtualstorage_root_all - - dependency - vdu_vgw_0.dependency: - - vdu_vgw_0 - - dependency - cp_vgw_mux_gw_private_net.virtual_binding: - - cp_vgw_mux_gw_private_net - - virtual_binding - cp_vgw_mux_gw_private_net.dependency: - - cp_vgw_mux_gw_private_net - - dependency - llu_vnf.dependency: - - llu_vnf - - dependency - llu_vnf.virtual_link: - - llu_vnf - - virtual_link - cp_vgw_mux_gw_private_net.virtual_link: - - cp_vgw_mux_gw_private_net - - virtual_link diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnf-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnf-template.yml deleted file mode 100644 index 121aba2c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnf-template.yml +++ /dev/null @@ -1,70 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 7f6227f9-771a-4d25-86bb-2b3ba809e81c - UUID: d5c50615-de40-4a8a-a2a6-9eae9bd5b30f - name: VNF - description: VNF - type: VFC - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VNF: - derived_from: tosca.nodes.Root - description: VNF - properties: - configurable_properties: - type: tosca.datatypes.nfv.VnfConfigurableProperties - product_info_name: - type: string - default_localization_language: - type: string - flavour_id: - type: string - flavour_description: - type: string - product_name: - type: string - descriptor_id: - type: string - product_info_description: - type: string - provider: - type: string - descriptor_version: - type: string - vnfm_info: - type: list - entry_schema: - type: string - software_version: - type: string - localization_languages: - type: list - entry_schema: - type: string - requirements: - - virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnfvirtuallink-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnfvirtuallink-template.yml deleted file mode 100644 index d39b1b3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/resource-Vnfvirtuallink-template.yml +++ /dev/null @@ -1,57 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: eb48e8b6-1ad6-48c1-91d2-f77c5792a624 - UUID: 4ded12c9-0565-446a-82f6-eac26b0d4031 - name: VnfVirtualLink - description: VnfVirtualLink - type: VL - category: Generic - subcategory: Infrastructure - resourceVendor: ATT (Tosca) - resourceVendorRelease: 1.0.0.wd03 - resourceVendorModelNumber: '' -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - tosca.nodes.nfv.VnfVirtualLink: - derived_from: tosca.nodes.Root - description: VnfVirtualLink - properties: - vl_profile: - type: tosca.datatypes.nfv.VlProfile - description: - type: string - test_access: - type: list - entry_schema: - type: string - connectivity_type: - type: tosca.datatypes.nfv.ConnectivityType - capabilities: - virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template-interface.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template-interface.yml deleted file mode 100644 index 45fc3065..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template-interface.yml +++ /dev/null @@ -1,176 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -node_types: - org.openecomp.service.Testns8: - derived_from: org.openecomp.resource.abstract.nodes.service - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - type: tosca.capabilities.nfv.VirtualStorage - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.llu_vnf.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - type: tosca.capabilities.nfv.Metric - occurrences: - - 0 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.cp_vgw_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - type: tosca.capabilities.nfv.VirtualLinkable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_binding: - type: tosca.capabilities.nfv.VirtualBindable - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.virtualstorage_root_all.feature: - type: tosca.capabilities.Node - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - vgw11810490.vdu_vgw_0.virtual_compute: - type: tosca.capabilities.nfv.VirtualCompute - occurrences: - - 1 - - UNBOUNDED - valid_source_types: [ - ] - properties: - virtual_memory: - type: tosca.datatypes.nfv.VirtualMemory - required: true - requested_additional_capabilities: - type: map - required: false - entry_schema: - type: tosca.datatypes.nfv.RequestedAdditionalCapability - logical_node: - type: tosca.datatypes.nfv.LogicalNodeData - required: false - virtual_cpu: - type: tosca.datatypes.nfv.VirtualCpu - required: true - requirements: - - vgw11810490.llu_vnf.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vl_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.virtualstorage_root_all.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.dependency: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.Node - node: tosca.nodes.Root - relationship: tosca.relationships.DependsOn - - vgw11810490.vdu_vgw_0.virtual_storage: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualStorage - node: tosca.nodes.nfv.VDU.VirtualStorage - relationship: tosca.relationships.nfv.Vdu.AttachedTo - - vgw11810490.llu_vnf.virtual_link: - occurrences: - - 0 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualLinkable - node: tosca.nodes.nfv.VnfVirtualLink - relationship: tosca.relationships.nfv.VirtualLinksTo - - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - occurrences: - - 1 - - UNBOUNDED - capability: tosca.capabilities.nfv.VirtualBindable - node: tosca.nodes.nfv.Vdu.Compute - relationship: tosca.relationships.nfv.VirtualBindsTo diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template.yml b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template.yml deleted file mode 100644 index 9d9bdc3c..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/Definitions/service-Testns8-template.yml +++ /dev/null @@ -1,135 +0,0 @@ -tosca_definitions_version: tosca_simple_yaml_1_1 -metadata: - invariantUUID: 5be056bd-1ecd-4c14-9465-3bbc994190ee - UUID: 188ed3c6-1573-4b2d-9d3f-a03693bed79b - name: TestNs8 - description: test - type: Service - category: Network Service - serviceType: '' - serviceRole: '' - instantiationType: A-la-carte - serviceEcompNaming: true - ecompGeneratedNaming: true - namingPolicy: '' - environmentContext: General_Revenue-Bearing -imports: -- nodes: - file: nodes.yml -- datatypes: - file: data.yml -- capabilities: - file: capabilities.yml -- relationships: - file: relationships.yml -- groups: - file: groups.yml -- policies: - file: policies.yml -- annotations: - file: annotations.yml -- service-TestNs8-interface: - file: service-Testns8-template-interface.yml -- resource-vgw1181049: - file: resource-Vgw1181049-template.yml -- resource-vgw1181049-interface: - file: resource-Vgw1181049-template-interface.yml -topology_template: - node_templates: - vgw1181049 0: - type: org.openecomp.resource.vf.Vgw1181049 - metadata: - invariantUUID: b233407f-fe4e-474e-af23-5ddca98639b2 - UUID: 9119a7bd-859b-46ae-825f-47aa7570220d - customizationUUID: 32efc3ac-6fd2-4cda-9f15-592e54f41560 - version: '1.0' - name: ##RANDOM_RESOURCE_NAME## - description: test - type: VF - category: Generic - subcategory: Infrastructure - resourceVendor: vendor - resourceVendorRelease: '1.0' - resourceVendorModelNumber: '' - properties: - nf_naming: - ecomp_generated_naming: true - multi_stage_design: false - availability_zone_max_count: 1 - capabilities: - vdu_vgw_0.virtual_compute: - properties: - virtual_memory: - virtual_mem_size: 4096 MB - vdu_memory_requirements: - numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform": - "generic","mandatory": "true", "configurationValue": "1024"}' - memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform": - "generic", "mandatory": "true", "configurationValue": "2 MB"}' - virtual_cpu: - cpu_architecture: generic - num_virtual_cpu: 2 - substitution_mappings: - node_type: org.openecomp.service.Testns8 - capabilities: - vgw11810490.virtualstorage_root_all.virtual_storage: - - vgw11810490 - - virtualstorage_root_all.virtual_storage - vgw11810490.llu_vnf.feature: - - vgw11810490 - - llu_vnf.feature - vgw11810490.vdu_vgw_0.monitoring_parameter: - - vgw11810490 - - vdu_vgw_0.monitoring_parameter - vgw11810490.vl_mux_gw_private_net.monitoring_parameter: - - vgw11810490 - - vl_mux_gw_private_net.monitoring_parameter - vgw11810490.cp_vgw_mux_gw_private_net.feature: - - vgw11810490 - - cp_vgw_mux_gw_private_net.feature - vgw11810490.vl_mux_gw_private_net.feature: - - vgw11810490 - - vl_mux_gw_private_net.feature - vgw11810490.vdu_vgw_0.feature: - - vgw11810490 - - vdu_vgw_0.feature - vgw11810490.vl_mux_gw_private_net.virtual_linkable: - - vgw11810490 - - vl_mux_gw_private_net.virtual_linkable - vgw11810490.vdu_vgw_0.virtual_binding: - - vgw11810490 - - vdu_vgw_0.virtual_binding - vgw11810490.virtualstorage_root_all.feature: - - vgw11810490 - - virtualstorage_root_all.feature - vgw11810490.vdu_vgw_0.virtual_compute: - - vgw11810490 - - vdu_vgw_0.virtual_compute - requirements: - vgw11810490.vdu_vgw_0.virtual_storage: - - vgw11810490 - - vdu_vgw_0.virtual_storage - vgw11810490.cp_vgw_mux_gw_private_net.virtual_link: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_link - vgw11810490.llu_vnf.dependency: - - vgw11810490 - - llu_vnf.dependency - vgw11810490.virtualstorage_root_all.dependency: - - vgw11810490 - - virtualstorage_root_all.dependency - vgw11810490.cp_vgw_mux_gw_private_net.dependency: - - vgw11810490 - - cp_vgw_mux_gw_private_net.dependency - vgw11810490.llu_vnf.virtual_link: - - vgw11810490 - - llu_vnf.virtual_link - vgw11810490.vl_mux_gw_private_net.dependency: - - vgw11810490 - - vl_mux_gw_private_net.dependency - vgw11810490.vdu_vgw_0.dependency: - - vgw11810490 - - vdu_vgw_0.dependency - vgw11810490.cp_vgw_mux_gw_private_net.virtual_binding: - - vgw11810490 - - cp_vgw_mux_gw_private_net.virtual_binding diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/TOSCA-Metadata/TOSCA.meta b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/TOSCA-Metadata/TOSCA.meta deleted file mode 100644 index e65ed508..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/TOSCA-Metadata/TOSCA.meta +++ /dev/null @@ -1,7 +0,0 @@ -TOSCA-Meta-File-Version: 1.0 -CSAR-Version: 1.1 -Created-By: Carlos Santana -Entry-Definitions: Definitions/service-Testns8-template.yml - -Name: csar.meta -Content-Type: text/plain diff --git a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/csar.meta b/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/csar.meta deleted file mode 100644 index bc3359ce..00000000 --- a/testsuites/performance/src/main/resources/testplans/templates/pciVendorId/csar.meta +++ /dev/null @@ -1,2 +0,0 @@ -SDC-TOSCA-Meta-File-Version: 1.0 -SDC-TOSCA-Definitions-Version: 9.0 diff --git a/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_1.csar b/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_1.csar new file mode 100644 index 0000000000000000000000000000000000000000..8fbe9e3b7912e66a43a3b51b9cb3efc7c034b7a5 GIT binary patch literal 93619 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≶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 literal 0 HcmV?d00001 diff --git a/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_10.csar b/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_10.csar new file mode 100644 index 0000000000000000000000000000000000000000..49d7cbeb907953dd8df555c6fdc90be938e7e65e GIT binary patch literal 93618 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≶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 literal 0 HcmV?d00001 diff --git a/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_2.csar b/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_2.csar new file mode 100644 index 0000000000000000000000000000000000000000..d9e49a95c9a20feca42e0d61327e7b39f5d9a1e6 GIT binary patch literal 93622 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≶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 D=Gkp| literal 0 HcmV?d00001 diff --git a/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_3.csar b/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_3.csar new file mode 100644 index 0000000000000000000000000000000000000000..16260a69d2576054f5ec1fc1b9fdd746c7b7c7e0 GIT binary patch literal 93622 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≶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 JB=;zg{|EY5V`=~Z literal 0 HcmV?d00001 diff --git a/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_4.csar b/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_4.csar new file mode 100644 index 0000000000000000000000000000000000000000..228c710db7bcc7fb7054565d89730beba5a808da GIT binary patch literal 93622 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≶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≶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≶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≶Bmmzf|)r6$0SAhh5Z^*hr_CU?u~;m^t$b#e2Z{-Ns> zU;f9Hrlq7-rl%%;fdEftFh{C3?5+zkI%lG)%14ol5IuJEY7B6r0Y~PH@k?_ENnhJ4 zJkE`ihV*4HnJ29m(h8%=-0!R=&Ga8%*#QZWWAi6!y$NUHAd^B*E~obw@rsRvn?{t$ z6En9z=?C%StgGmRF?zk#1V0S!Heh@c8`w1-xrKKBqWNM^FS_7k51%9M;Wyv}D(1V?DPACZSR z!kfOX7cbmbj=(GjXX;!r9cl4np8xQmExxI%t!83LlcH$mQK;Jq2) zXs9SfdR6D1xhrk@R2{)C8=G);#tU)nbm!5^J)bzc67@Pl+$W=UMpo3C=WDbowba72 ze4=MeC!ghRX$vYeHT z*TTlZ0&k?gEOL<;9B$J`sM+ilYn8}&LP>|Cf+D3;7!m_)?ZLlLn39t5SY4S5A5lKKlmID(sDlA?*E=4Fy zrXhv~D`kZxLX_<=8;<+1R*7#L2ke9lcHF;I>t{j&=5cUPs8jUOF@tmH*+?EA8dH_j zhU&j*<*7Q$ni5&`4!2-Tg+hksiwK3uoGG2BLk%+9!1uzMLeUX~3_s*n)vuhfe~8j{ zpbG`dYs@-19SnI(-8d4F*cHH+I;oam7}izWe(h zT$8D&uvx-HzA*u;UL%veZ(zdKg)`}uswyXBd=c*4$Heo06N;lBF)tPWO4X0AuR4>X z?R~@ML#Zrvn}6G#-%CkNyJYFR>9=_{d*pr>Ah^g}M$8e;S|BA5H5R_26i!Xfdx1ab zlOd~Ezvx6#<}aM$>q)xR*`&yg`!m zfREi8=Dk5x8IjFVtQmv9+92>rAJs!B+%fQWxrSLcEumxNSC$(YyuQk{v2mrwPpZxOd?W`?~{)f2*S6T|c0b@wMFEzcb@G`}0xFxB4 zuf_1?SC7sz)^S%w3vF$C0t6%m(m)UZEZ+p`Hzz(+nNS%>Hjg*F84*t!vZmK z0Wdnfi~l8bHs*Nb3<2WD+6%_PMXU(DPQZfGW-`b|44MaBw;T)-X@L~bQ%)S%#y#7? zP0aOl`|2Rxy|eoH)?3NF9;@lv*w|k3`MHnP-bsA8sEGRZ`FV%(?IQ20*cqk&s)!=) z7gS?_&9w}=4~hqR8f8{q$2|!E_@e@8%xY#xfl(==PVkyO`%dw-ky#rsKXc! z#Zf3BCYro%7-lEg?zqF45%lzJUuMI4(_s8v)c5)ckKXpUz$dkjZL1HBdRp|&QO7*( zcuUvHm^p^c9%5hTtH$4ja_bv0ukGmE2u*lWE9E&Kpi=$EfZFa80f(Cnb#5T^km!}O?%y~ZF^;{9F9E&%nd^Sf9Js9C@iU*4@?9S?YD1=!xGHL$HUHOY4sgcnqjIO?S*M z`Y(d!sobi`XhvNFodtsrC?Sw+5O}aqhQP7<88BXtV}Xip-_>lUe|%c$cmXfp4EZ%8!nTkC>Usths-hGxydTo7N0)z@-_K zU3y|OJ4Dk{;Y#Vbwk?OggoeHFZTJ7{oN`lbFf_qCq>U8<-FO!(D1`Gi}Pz8D|pL78YnHoGslq4=C z9@>o9X65rZ^|C9cOT5AS=h_%y4dx;9uP@4xW+DUj1f@iw4uw|~+nL6XCwYyR?9r=E zC5klX7G5$p&v07VFcFs%695O}!jC5uA9A>&z`TEb`vg^`%HtaGFC{aApF)TZ+Dyqr zVe0`yEBkhD@O(j6+UcuI#xzIl9;CQMrbnKQzmIxSM|6BrH;gb>{cn~gk@x-<1gUWo zN=t_I!}Ras&q=t>+EPdHOY7Pc3kl-1*DQ?$Skusd_T zrlQMheNoy>L~AAl4YIN%l!?|XDNPU@czv`;VnwiJm-MEJ)I-sO=b*(snMVWA6N88* zEeV^k;1d)zU97`TcSm;ya-S+o!(u%nz4?Zg>SbrC`s?jb?6V>|ku!X*BZtKMwj1YO zoB}?B>1sAyfz)rI4T$|*Z+WOu0OWE=%AW_KU12YG)B$fG_`i6O+e2{c&H$>LAKihe z4%rpy{A6%WTmgvNpb(Il!l4U``BrNzc=wwqQ_mW$FEeU4Gk@^mffxq9Hd$7gQ(xSC z?jLa5Jb&I=f4arCvvLxDvcB0h&YclhB2&3N~=q#W-Img9bED|5f=7sV=|*Z#I_mo*wtH zi#nqDSJy2E5U^%@VYz^A4H3YfJB@%> zAKj*)B70in=bOW4v&-LawzmxQ&{L$hvHflJe3%OvCNu9gElIq2Y1T>GL;J9WSK!=Q zRqLe_G92w1{Z?mWBn-gd#K4%%PZK2i0~0fT34&|)1kJ+pNNVk}4~?Y$G_*jZq!_p` zG*GPSzSoEivtF@5H2hUT15g>dFvf)?J71*MPdX#8RG5Td=6KQwHIos0t%@3oImKaNc=g9lB>=gZw8T^QxgVW@Wk~RJg z6jl%J&j2QLUGa(nhLc}JFz1~^*Y!ldA*lwcn|1&R%6C9ipTcH-V6gDX#8Pzhs%n2> z#_N*~*{M*DZuwV9`p6!H1#GE;>`7`&>X5FDm^1sXX=&;=%1iDWk^QsQcnZ2+bTw7o z_NQ2vqOGr_2#!%jLMQe4uGp?wA3?|P$xE$Egq%+nFyB-xn4H+3)9`8m^mB>-2g1*3 zL{}i!=wCA2O(Q6^^D09mmMC%8HpLumn-L)|b}K~NUGUybpFnYFU1Rw6^=O1_2tEd08e!&BAn{|}APBv6Tqww5&LSCKu zXEyT*PFzvrZptDiM7Qu(g&>u(h5S1K>>wUxamK^4#ssKd@^)o$TuP$)ranOrAI<@9|qPAsN^_P-8KLyXEK%44!P#5$KRI0WXT3!e z#m)buO(^aU^8SFz=z#9}MlJG3uQWs1c%EiL@%fAAC$#Q9C9T1`%18$kYRCyl5YUUMEtE3%b$JQ zh}D8M2?pUnqWH$0l5dxnVbhhT@V^$$5RdwU=pl^;PHwtiYelQnu3tA2TaX+xS!mQ_ zp~14i5X`{!^0()x)}bh}=#j4Z3!_dJUeP?7!o@Z<4Ng{Hp`9_7;!+*O;MOy`Fht=X zWb~oZEx~M$U92qMaZrh)bEM4f^Vm-0dIRSpLBk1E*{nL}>GJ{BPrRCsM9U?V#D@p^ z4F*N*^+g^NZ?YCGTJAkIo8qp%)o;U; zzFC8XUuT$SrQ-eY*74l?rQTAtY)+jAxSmfHCDb`gu3~)!!Juv46T;(qJ4Ivc+>WQt z)a_6~eu?hu3(#b8rE0kIR&L%q#Q2WYyu}vO=+mw0D*yEt2T`QItRFX#iMRdmZOk=5 zbq&9v_9^?FP|(;WB_3kIRPhnW9U^44?zoOSd-~%ZikLiAtq2l#s9lo{t#QK9l`~GP z_$k?l3pGsov4y#qM!H-yLuz{NF+DVEcI4+&&#uSGDAsE-gYz>{cm`FY1xtfyU5H0DmQ8C#Gt@`)eVyB#6q zENYa;bMZmDO|zmiJd#aQz8&G5drsL`Kw@%}ES%+an(+6N{11nC65di7}BXo-vvsamY!ZMM(OZ zTD(c$Lq2Q?M4onD({d?mD#~%E3+48#sv$$hjfZqYq=VR!e4>BTR%Vtuhw@E%Lf)=u_W~fHA=4~u9~<^ z(N4BC)Ub#b>bmcf30b6$NG_;5X{A?_@B7CoTKK7$*9pbuBM=rk{0T+uoYon&9Lx)# z~Kep4Sab7%}Hj zjycwNQU`WMCf&wU7JqqpBR5^rlhqJ6z2?V`KrazCEBRoY2}>_-RHL1bZSHE@s*l6B zK?nIKEcD**z2o2gNeW`HGf@#GR7E^7myUkDVc!pO#N%2J~eE?9ORJ! z*lXE`)Zk>yshqqM)&-RgE#!#Nl&CZt>P{SQDi9^G{;A>}duhM)f$gL-tF94aex4EF zE=5t3tIRf|&q5JxVP<;$k|W`=64+|J&nIl~UV@-{3??ie{B;hPnV(IbKX%eK_MPDc z1{XitG;WHGBnRM=vg-B2)4|nK@z(LfR_c}Kxb~dBWpaOb8rgNx>}BRqodj!UXmIQ$ zZLvXg|Cc)9{lV1LK#LVa?AMb3z-AltjW(sazVg(K(!mtw^COqh;4uz(~2zs+w{TL!|F&4^R2qh0t4@O&41Wj;GzfG>! zZfe=51uVOf5_N(eZJ0<3(PdEOi4r<1FaOkER zvmD1u&Damr_dfqaj~cGw13hS4WDm4xx>bvFLp_<=BAdT(j0F~{Nd}uE8qR>@SE{$D zmH2LXv3&eU-@w4vONo#}K4uDyl}|dF3NP~5a=FBGV^(J%&V7eqQdfH^@c@OEonNI| zpyBXRdzVxpVG%S}eG1P)(|UovS`@xX_R6THb=}lC-Am{{Chg+ghCgn623q30PO&L6 zhlBOdSg;=wGMRjo#!f&cu&lgaC(qx8UKnRQm{{``{ni62bZ}al zv>>qFL2XW7{@DZr5Z@qM*Y#hp!b)H~vldQS^Q?Z7RamL7dFh=hTNK+Br2)E|HL(dQ zXvs~;rM-R72)1Bb{q%K^GRJ^2V(d;Bq_8mwZu8|tER<;q^0jj9a>NpV%Euk@V;r== z=J<-_umLWK)2|i%Gwf;8A!tv;;r81vTP7=P&>Ls;wH5n>SXDJ$5$F*oEH?5g#?r8U z5YYW34?Doq;28&J2~8sM(+C@$A#H9PC>@;>jcL}bh;yM;p#U@T2`;us3y!kYTQ)m3+3_2DK!_l-bM{e@g>VF09#G^u~)OnH276gh%X>(C(FI%XwOk zLE!&tLwpZa2UfC_S7mp4_gI%&WLxeLPUngZ@O7IDuY~~%I+Lho;6GLg9a&tFC=mwMbHx%AB zf<-?HdtS%ov`VLZ4Vct7nQ+l$>@#5+J_*!nb{z&+$edQ&k}Vhjy4I=XcT`A=9X3C^ zmyNYo<>?W?*(#fd^3U;bADY zi6azM`7h!T#4Z$HbrcN;Lwj|$gD5%6eDo{etRD1sFQ81pVhBbO@cJ`;kGqnSP}$m) z|2<}r`T%$TbWJfvp4&F#w#J>~K@19h7RPd` zG=$xfL?4s>kitjH_`*)Nvlx=sIxdV-R684|Ew0US-%aM5Oz{gT?QcHsMp0M1IqLL> zFZKq7sx+Wl3d_s1<8aI!!tzq&f$d_(wRmH3{^+X8AofbUQx4z^akrkycWvf{%g|Z} z4I@UwsdI*DoFGn_wu$%?`W%q|b_s7wL55+x$r-vIx=%;YSmVSOVkfgY@OoESduit^ z=jFd_^5XnG6fu3Z&jH8Zbc4+i=}QGhWJKV|Ue*pF%oZB$Fd8iUH@=+jR1L?DxxI{%0e$+YE^9SUjZbs5=WMS_?uQ@&MbI_^wmXz~ zILC%(lz4&2QC*E_!&X%i{Fnjg^gFkR))7YeGY9|h)S}(mKuyGEn_jkI^LRFWuQvvQ zj6Y;44e>0qtO*R)NM%IFolM*r*GS^D>j*_nM?CKF8D+yyX(bdqxks5H z$^4N5KY58dfxg0%P%(uW77kc#v+Si*ssam!g@LCv6|=vi&SN!JR~{@y4@-#iG_z%C zWD+M}Y!z&;g<|Iu`08{HcY_@WwK_*@W?G z`hg@%nJ$M$4p8?ATx;|PXV*XVkqNB#_#=zignky%TcrE=bLDbzb@b<|W7M<0@V)*S z;bL)0_NoP6u~7mFdE*A{>y4IH#kzVGrrjb$$Yd%p3~yDe$OZG*PE$NxNC@@$$~8k0 zyNdXt;?CuT-c&hj&w1>jM>cs|C&Q zK?4I(uCDG1{GTF#w;GzO-hdGt+FT$UUk#&29O z9S8+oh6`vmY8VME5gbzk<&^{*SP_QoEs_3dZl& zjh*c0scml9d*u?Dl-bSD4SdW#$isXE14g$*2o3g_0x3G2PmA!XMIb-wC95zfv`oCqf=XCO*y%O8rR<3>=gEx>|~SS z&Z;G@FIbx{9&;HRg;NR}^UxRie^(wDq)(F4@COCqrawnR~>M?KJE=HEG+aE%)))zKlPdD ziQ?N17gmg2p5qV{+jP6rMGz5__>ss$IA!0!Py_f|TfynKFDLDVg*HJ!c1HPtyiz(F zj%a0LCiFz-R>lj^Lz74TG0Pc*Y6fv{YyIQA*BdXH)D5ar7 z-zcAnH<-|k&)ng@CO4TpUyWJgJ3i@K~X!*40 z64k?RV1SSJt;hPcL%)xc?ytITMjn$09s!9VfUFELQabJp&Q`GR07L`!_%K`Rx2b$6 z#LtrI8aKm>W{7)DkbL?{gZ9`5qi9pR|DI64Hycp?KGl(el>26qTOhmzX7n>A11uN7 zx^2h}#Pz2YmM7ZoDjsj>lV;rX$Wql(&zO7tak&I1QxMQT)}LreTo1O~-*bSUq=HeR z?SQ$8_7Yyl;CuRb?Ag8W>Wus!$sy4>G~kBYR&|}@oe!O5JJvNM#iy6`8s#nax5K8; zcwcoGiIj#$U*bRF?HMM4cLM*8$Jag=wmw}h>@9$C^p`jyu*yGj0|=tI>Do5CJ^1w_ zO&juqz}1a}-c`buZBZvYnB4(myIQ*E0El7ke!z$Uxcss62%s=`@y!al`^u-Jm`Y`)vp6K0=HGz6Mo zjcl!_8tg7CYPCVWBk)wcKsB>8X*Hfwes^hxPQ2+w4j8tQmdmQq)EqAR{+_l#ePaL@8kPw zIhx;wo%6C(A^hxB9-vhh4eSU=U(lI74jq|>0uHFVZ0}70D8$1mhJcxeT(@nsLK;#y z3RR5Accexg^B;R2l@rpcZ(iMLYcB_w+>E@Zk+&bUh|I5kk8V=WJKL~GFnALeJSo-9 zQ)XdsZ|fbU348V|1mI^9VgHDvePh%o1)0c6Q)WI7PH%*sjpK5bANEjQTkG|ZBq_zH zis%}Z3E6YAoy4^Rl(z!D#awp*0mx(mFt+@bJl3fkVOj$Ye#glijj>EARgMP}6l*vP z35FuD0E4+kFtuJ+VP8`WN4RSIGkcUq%n}m)28I1sw- z3#2v|By^SJZOlUXCNwlsuMqOgcGEVZh2K#o;Su1~a~~-vLHk5-STi!iLqp_^86yRX zszRzEfVi&)h{rCMl;MqaDvWSPXZ1)^piz6Wq%y^dUVfd#M&v+{NO9h5fM%)nQaR>R zTnD#va-?r23+uKO5-Mv#@mUcRB^w*f#xpX#Y0|(pJwNkskQtnz8#EDB)6mA*#FGBs z(m^QmogH<-rM67*vJ{ZkQJo@-WXnm|@@1{UQ3+sk;Ln=hW7bO*-;t-xUSSMsk(~Zh ze>UctRehatiC!CSrjvDS*FSoj0b-coV^J>2vc&U3W~xLVW?FH%J67enoXe-VJi+A` zJ~51)sb}hy($X0fuZB^}1iifI#1uCI`qTU+Yw%2WVie%VxB#x5f*{PFzkV7F1Xx{u ziD&Y@k3I8ve?K0q12hHaraVn?&kL(EFrh} z1Evai8U-TOz9{Rsyhp?DHX96&>MpdRIOE7lHSv7O<_UV zAWt^IAWu!M#R?XsZ^$H3YhoHFS|95Z00ydi^(s8bYmrAI%PXqEoUB0XPX%2|z=)snvf7w521e!<7;NB%_LSUlHhA2$wc`V(QmxsKcss^{t-E2j_-WP{{%>-x&?E zk5Eff_l0Zta|+NS$}&fdWNAIKGsMD0xnuT1$&&w|3@SvPcL`F?A)?CDNho0RjLzbM zly$|k13q1GB_QOy{w@GGiJ0K^cu%k5XFib|!9D=Q5D1On-&fAou5{z)mzxPkATP)p zRkunEa7q2fGBMi6>2-5U;z%UrYckxT3Y| zxl?uz;o{ErfQ66Sf{PA&ancw&!8i&8ylR7@KWGudOp;5@bWm;xvKXQOCp!EEroOpe z9!^6_RYu6-p#l`xw`E)JbswSJ>0Kpdak1s^nK`JSYCY5ctA_@c9GcMI5pw2rU2W+2 z>sS>EzWS>^+gUrs+RTE-BEFl$7~kjhF)e1NmUErB^CbWLMe(O$L2bT%9hnr)KK3uA|`GvRkVIbx}gOw}b_K&}$)M;Jy;Bs%G z6IfTADYRk zK=6tdS&a8p&qFUMv*h596S2B0WnZ|8!2B#l%GshA>R1_m$sg4?nLdz5oz&Gj?{;Tv z1U@u|O7}XUSx2HZQZiZWg&;QHG~YPY5-$NPbQyR|A(!g!kGG z?D(t zpniJYh1Freq_CVzy^Zu4Dz3;FkVtug?>9-c67O#S+sA}1aC9S6E>XfxY8wLZYs3=n zuJ719ezoJ_FqSpdEIgooe{b3C z@UG%ck58=4J{cXZzA#+m`-<;+Yvt9{QV};>bW+;spF3tKg7bQ0tXFVM7@|GEk;-M!(B0a zY=E$EZ@`yT|MBsR)=+ebgPi*dpUo_2S;ZuXBRk5& z*3oM1Me#wDINvy-?63nj76vcRMm$Sg+J^w(56N zJ%XOO#bK7Ap}0zdoGpi{S;&Czx7uS%j7W402LR6dNxwe1t3Ul_%57@&P{8{;Cn6mJ zTpS9?lOR$TQ1v!WBXB8YjBIA0oo)|%g_OWXm}E%{him1VuC-4o=hY!9x4O>>+U zAyU(YCLF5vEIgtEPMBnc(w-=J*AaW0h4tUtEyDV)1$czO4^jM4tb}PN5-i0YU%=y#RE8_=GSyu7pxx)J>I_u$& zc5A!tEnLQxQ4l$+T?jy*6<(2H>_o2%AqiU?)YOW{ZDhIYYxBTIuO2IaRsm{Jq5@RR z&o6)%<3w|R)oEY9R0H>!?5$cN2ysz}wEGZb`&T_8Xr?tNYk`z$Mw}_D*Gv%Wk(AQj zqQ#t=qXG}vE?e50tP!L%oy+ePjPDkRC9vOj_C~KrK(^g=h5alNV4A#FLE=Dm2#-cR zffNA!(A#;I4>^wJa+n>y9@cmWMjhCIT63F~lpKx9p;j9q-0T<6 zPRqGVPf1_3q>ZRH3)B=%?oqZxW?bp|jL6Fv-ha`ulGjNwn-11jwS}lqIDsZF(*?I) z5#))Y&`T7zqwhF++tj90;Bq#gQYckcl2D2?cjmw|y@ZHQ{{}N51{at716Q5$M#ci> zUZsW+a-jsQ#7*5X+tvGu26oBKE9l_k?04$zqzUl>?t;S>fTOd!4|I_Fx8_avvMlsK^E%Jaz9bukdPEG{m<*wO_EC>g;3x>kr!)GZy`1oXmeiKhViYM z1&$yWLcv%KMnF_d1>Q^a@Lg8%XEheihAP;Jq4aoJybWDkGbNI^5Jl5OyD@&58=FyL zm4$tXGrgQw{!y#X+p)pWMaM+0b6^YUpXil|!fM$(2UG+e;K}5s5U)+=jRVy~EzGp#g>2Hc4$|whTK5h1a_z9HNo?)A=?wHz#5Pc2_qa`j>a#lR4TlwSW34 zgjW{PZOYIzyK!%RsHnxPsp}fHmY&Rw zpmXCnpJMXTg7@30_QlQ{^)J+vNjJ|O_GqGR`m+W`7R%RxjZkHcg%*? z>{l9ztD?n z@kC44wm|xE4Pfqrx%3E1FVSO(T9U!L%<(&<*SVFP{vzKD^;VNU9}f{)ebK54q95OP zq4)YmzBKyY&Cj&fw-h_jb6}p}mk%Pqj0Vb{yWC%$4m`vcLoV6;OV6AU*nZXnjv{3jWn7VbWZk)*J~V%71=S{-tW^GY1r{u3bx3Cn>C2cT zM8IePxT5>W$G|P?<*=|$NoQ%7CwQ$qHQ1jRDC&&C1|8TOp}tP&?di~itX{vn`?JjP z1aS(&nFtEqhUElTNFQWEJIYKDLnj}*5cX?WF>#RP`qT7XLhfR1;(gXZe;XezGu`=# zAicQSnEPCHj4(Hf%>K-pe!qz%wYj+M#UdAkKYEAkrwfUW%Ii(js(o_vAZFE7LNwxq9snGEsmu z0SSUyRk`k?`kThz(VXfbB;mE7n<4|)7%V4y-7RfWZk5F07DI@YXkCush{gYqP^4Mh z=26Amv94;+3E?ku*0kCvP0r*_c+a-vt8OT6u7-6TCgMN1_cu3@Ha`SGaXp*tykSKq)>xyl47 zPdQY^4Hi2Y&&IG-qmk~=o!^CLq_sPo<{1h9TaREWeaYopFMzfvjv9YpK;6}pcM_}g$ zyxnPhDlJiu1+?HapVvp(AYa+T;j;+7&$J+Xui)usH-7%of~TQ3OHmH8aZx{QUS^^Q z``JXESw>B!g{8Z0o1?UABVP}-EI9X6?s2ZzZte?3?4Jj2neUpSGUOu)4KTP4WTB7J zvhg*hJdYC(Kog7KkyhYr8U1R_io^7aw=x%nmHIdYx;Qd?^UxP-vB&g3egK1jr0BfbhZ0#N$ZUNhn%no)co2V>`!GF+cw1L0M(oAW#EC8xhmQ z(=8=9hA;RhO8lC1ax43Xn2$k_Ul(;*>H6=*oSL(hm!xpnxL#9odG?sCmTSy1JmR7U zUQaYlpiZ;AD)mxfUh+xqQ*O_zm*SS=ag0axyJ_lTsmF=m2op}fO>qmEF0%-Zm1WOe zN*p3L8k)C%T6Mz9kotKiWktoqI7J0{{OzTDMwk%=x@70AETzLXLt>gyk8Ri+bD4r|!d){Hs*|>yMK^}OkuCIJ*?-9B%f6qcYsj$M(qn(wamIp%iQ#KQ{du6su{PhI4 z(qjfb8~I^qvy$|{Ik1xb+Q{T-^9`X@fe*>c2NO&!()V=L3h(~oO_DG4OvYg`C)4!W z({^o5X9hwURp1)5yfF*R?n}Gj4)q>~^_|Nm*7KgYBFEXnljG=W3FwXE>0+u~?N z?0R|1RW4iU!RDc(p#}$#`calJ4|TU#>AV1cfd9U$elb4y@}yCG$TBkwbkeZMyV`hM z^iuYL(9u|9s|k4Pj4kh#eyuO&;qrO7xHqZ%oO#;+Na)}`c_;Ot#VpJHa?<=gU+yd+ zKUUpoj;H4HSD;ev6CWUDv)^4mgXS^>rnR;MjGf;`|Nh-jN{QN;I#5{h#Nl`7P!gwB^*`6U!7wd^QTu}=RWSeyIGIQ^OI3+M$wbuY$Li&_R{7ZSp;Da@OyY<(5aoroZq>xeJRUy{Rlkfj zM$6YJDP;PJT-iKmpm%4R+_j+sb>h=nF}19kO)z|ERo9ehI;~8dUOq-E@OqPoP}QMd z+ldi(?0(?oV9s%6KIW+vhrrOyFe{UM3?Qv4X;g?GCVY#v3H4QU^gZH4+E?IUwoXUj z2a1iv-_5Aafn7qbhuvvkG9*kG2oPb%yNN6!HCa{8>%^+ajSt~su3t7b@)@(s#lb>D za|WF*=*>{S^;hcaIZDI%=8FMuigMw_r=^~AW_x%2TYPl3EHFhZhm_AihSKJTtj?-| z3Ulf*CH(Bhla8UsA;Dy!3Gju6lUjM7UdU(C!8$F>AK_pAXa=nT_e9LKS@JGvD;FI=>KHf+xpVN49xULCsZKR} z2sP*I+HLVcnLmlN+38hR7{#T`3>4GLPJE8_kvs_Kew0JG+qM{&@j_-VYWnO2xf`+= z3^FvdPH3k3rIm*+MFVdYy2hfuZD;If+2rcZ6cqHHbV<7o_!?`yMR{%iq$UZ$%@`kO z7zYVLJ=twX80kFC)Z{Epn{u^)?;8MP$80RZ{(WoMvwF?r+cq5Sf^KOp+&;PC7O<%Z z#<9rmEx(#B4*j6jTMNWGu*7qI|HW+O4ot~C3oh20BdkGdg}>5{zJR`2_qhsH2j z>ePdg7;tnhJsVVujDH^(S;vdUFewl*yhi%9_qA^KTctQMAcv>$YLF5^l=@1q{K!e1 z1XpC2t;kqW=HL*AiO63`UCarL%3D9w7*mCxbisVKFPAo7U{m&@oa&fN<-6xpoF!;G z1@lm52gpvV*~SFR3X@nK6DA|n7K@TEDb=`KWmV;o54`(!P~&wk%Vj%r6=5dJK8d|V zCLmur+4r3)6)Fd^y~MF-KzT=t`2CSpwz#*?b~Jko_995ZFlk~w-gv)-nxjb`SVfIu zWbwS48K4~Qxrm$i%R*`jr|P{Vk}<5Bx_7nAPXjMX;mAF1x9SdBEMkxHV8zTlU@E9O zKW!eLH8j1l5Io~c^0bAnZV1mVG%;NmN2h&5m*sx#;9J!U{`U)o%ZJcM>ze`AFkLrx z#Le9p3;52Dne(rkz43d%!;QP258Ees-TsnqT?fATxqeS1N)giQ32lgi;r_Y3A$M>J zx`Hpe(G>+~%PsReEI3|c55Z^?>%WqrB&F9yw$>(aA`-3nt7p~>s@gU2I8e8J`1EsaT zk8jTc%k;nS6J3O+k%$5dq!2kyCzxa?$|0bCfgOS0df{L^Yuu(hh9`$lCX8~hk z5R=#Y?ALt0FYEnU=Le8(_0h*Uvel~V0sI#Ol#j$s+qKrCD&t%ezs>&iqck|glh{LO z`Vs3*@{tA!xCxC9;Rf1F&=Vq%#--008ewU6 ziFCXfLyw8bkqBDL4CCX5*q2~6rbp=e==OWMK9oOCRE|dxqwp({<+MENj1=x0diikw zY}l>xVu%tPW)EB?mPC*;3o zDaC)uQcglUW2*Q)n*14USY`XaSnWgTb*NXy0{;~-#}#oMO30S4Ttz=mC@Qpfu9OWg zKl-6$6|oSjYaL_$_w}cTx>dXr_~$6~nY>FBSA1|R`%IWDgQusR;T3`gInkNo53qrw zFS5yD3o|y(Kh#1Ab0xruu?o%t7nWPwb44rQdUn!oH|??cH;KBwNhXW5V0ixHJ;U3b zy<0SoqaSN0W^DDu?&R_=pXnI2h4^CB3SqIF3zecQKBKB$@epn(I#pDYbB={{4){eX ziJ*P-Ez6kdm6xMk@x_e&qE*%ud*_+3qta;{-AJ{vJusk}-$j!2LKhi;hCR%DOUsDd z$v%?jKB-<8P`RRU^{qdThf91P!(j?|gt7Foy6rA3N?rq>P=E^(JMEG z3e#OFD}75}j~gO5XV>_aT?)^BoZnPR?3UjO`@q%I=`=5CbgB8wCI#}F zlcXKD=a=VR^{nQC#gN-!R@l$w*WeSnbuiL?w-|xZ8@O7VBN-d}{N9q7A;mQvt?9#H z-)vuR4Wf!l+DZhs(KNq5csWWunfEEpZxoiW1tfo%1ecdE{ZxE?lznv|W4;}9i!;;R zK%!CvcV3nNwFP+&MyBy2O_lq$Qah65hnO)>>o-g*{&9sV)*D-fOZO0oWWA-?<^o!E2J;Sk$D2U<)Sa(gJbebwd8_t4kGlm0*%JC{F)NHjfu zgY}#Iz`x$NX{(FUjl(GFIhcu?>H{=K6?*B8QOudueX=}>c*V<`}G=P-XU z35+bJLE=Xb6)pW5JK`E#V<>EA(tUPI(!I|X@lwYXU&3@z_CCS*fE}vu0&7y4ATn** zo@S0=SzSPkg}l1>%~yE;ii6@xA6Z7Tb5wvwUJV4VkRNkzq?MR)$t)j}neFTyT2_o0 zvOuJ$@HZ)Wk7jXc5nRZ)+6{pGK*lYl1a5Ob9@MCZ+yOZ^j}S7WEG7%d57MO(WoN-l ztp+Sc#Tn9a8bxlwRCQ_^d1g8fA_1sRh#*CoPl$>VH=|Vh)dipA^g$`%X{R0C{3KZx8XR4iy{#A_7@?U6Ci3`czvqwE3wN+gn_kQoQK)-F{Rn9uhrd>-2?jB-yb9*?<+-ZNgmXlt%}8q|%%0 zyB~Wb%lpvS>@_yUS921UV|P~4Ijk5tnGq_R*997Nsbw6d`>rM=2q#fAi|EPXdLW#M zt9?7c8nu*^HhRh}4~n(3Wz%d@P_0qWf4u#%=VM}k{l{rD74^8F6R^ya3S1nLlpYLi zkaJeRzb>0i`J;R(8Zbp386r&Ph_S~gOFeg!-m^ASDUMtu<8{Q5^W82$h7O838&2X| zXRSKT=( z3i=0(DlZqNUA;!JuyVC?OlI~Dp(2TwmmVc+7t3OH^t>CVhsdsBOjqWJ-jJL=Py|B0 zXH&V5oe#-8Fj2Z=AanPRA9)*MT?}wpsvK_V*q4IRqJ^<+az%0F)mVA6jEh8p8 zD1Ud0rwNG1zpb^vYB3e@R7H>n2FAqTD=K?}=P=avk+A?n>b7Z2Usu|p!5FbLG1%YZ z!OTkeD2~+f@ec-)=4S1}q22uMw%Jjle(c}$GqMV;qhOaGKm##S(a%P-3T-TN|HaMp ztqlVM6ME$l*q?~o`@8;wg9pvY562Z!U{%O>8}Z7GFra~2K}iRSEg%$r^dQiok7T3E zW#;|;bO#4hSnwd`elNaf(&m)py0Y#cm3E|Z>az_EGxtKsSemv=$)KhX*Ii>5F-1Q= z(C-l1`~`NdfC%4O>jFQ1`8R41y2$=8*qap&1$nvYB%W;~@YtH}Y5Bd8EzES^hh&1j z^QdAGz7^U>ClmyTgvC61^DQ&3qv9REh0O|8bznWcQzf`cpqU-)nQ(pk&Il|GPTh*# z*xCX{(8;9Kf_nG7hu*Z)nh*@+X@R)&tpE{XNR5DTVORf(G0LuQ0&9q5^-^?XXGLB- zr{yO?=P6H4S_}wi^ib;45RQ?e)A3$5yKE$-zCG=YFvj$AU9B?9*TIfeP>7`QB67q; zh~KWNIpK>6H*v$NaJfYQ_=Hw(*IfYp2MvM~XiQQTJRpV6s%&W{IWtnQ?Rd~RF$D-E zL3Rz)Uj`E>Oj2Z({7+k)x8g!bxs;B@LL@bc#;b1;A8R={h-+bncK8!<5W)OwPa%^mG0%udS7rI7Byeyj@OaQ#W@D8>0@hpN zwo_P$MI33Yr~?#Plrw(|@%cR-5EZz#nw;}j80On9kB>x%PdDodjDxQwDrj5`HuPNh z)opWNaJ%b}f*i6$o$>+)ym1`m4vnn}Px-O4X{(r2-kMG7G|QO{KR>)T&a(F~KKLVm zplv8}Y`K?VA^}<%2<_DTTB=;J=$^nBc`CK1*7BY7(Wr9WY95P>l?{RdoAhv{e32FX zuYwq>?BLvHolW+f*lYL)jlLZO&DGyX|mXT7e*e^7ZqPvV}-BEBK8tODb>7?)*%q2{w5!`u6$T(_) zq>x%ZzPHW+M*M49dct)H7qDbZE~=}ty`@2$<_1jpn^}#nEexVqmWnUIBuiKumb7!Z zU@UYf2DR2M1Fx2+ENvovg4rv~F30dDn{5#ASfP@z8?;2iwWvWd;>RQ~DmjaHlW?g3 zk`LhOE2e&MJv&TIv_CV0z%#H`LhD6a$M_qPYDB(Qp&@F85M{X3TC?2~YnCQ%eK7z% zk~vziKFY2+M^$K)p=Y>Z$*6uR{HaZmL@|AB9+vjpnn`0)4LJtKC6t|5hp>J&0|H?{ zHZfE^U{rovR=N;r!krm3-;CK@TJ^c$@ITIj2>-Bb@#y|)HCbs`b#Zt9y%-Bb|LeZLwCF_F`N>YAELK`7|9 zHsW5av8pW1-sIJ?h|C8ZH-7Ky)1eWay<2^ETD41m$u*p~n2DqHNPiV(ap68ew&&O} zU;t$>g=WedLRv#m*Ysi_ianp#Y&s4EM-4{aqft z%8>Kyhw>5g22ux5FQf+}DI+~1UBB)4wksiZY4ntJ0XqcvZI8t)aIW=hNP!tl<*uWimK)rgaC z9!{#?Wu*saGRG+I4l0Lp81X|H(I16sz|;`FZp~SGv=Z3_C6iXYl--wrot#xylcsN0tCZS|^GPw5jI5bmk+1OCtM#y2~?DB8RtWaGNz zoQ>vd<`dSH0;iRn)<<6TFYXU{7Rqr^+TlIm*`lUtY3dPycSYBR7OYcEt3AiA6BY0P z!FhJJxMWmb)wvIV^t^W8q#il{wrUmevBstA^-(^ompl=5=z7y4E{r-jtsdnw)MJ-D zo-XCuQ?E@aW^#R$@9)QNZFX8)eslkWm$XfLp$J5mz%rTmc_iH}wQ>G%4vlQc^6Y5!{hXCRM?*Da8eJFK=Wx*2>KduVOyE}2UlR- z8if+eNg)Ku^CAQ9{0u*P;9n>b$56aBjib+v zPU<8LED9BLn}nTbvwK;R+I&)GGV{4BYZ@0=6r8ZmeOItCu$iVOtf>x*tvC*?E)#RX zJ;kTSD3q+|FD8lS!w#PF5Q<2?>)ZOstl^@l9J7m4T#Suz zXV;zh({5gW(Rc*bIo+fuN5a}!Y!}zcfSCuv(IHg^0-VbweGWLaNR%F3c&;1JV8R+e z4}Y+DI$1QWrRt&3`R)mp8r)J4Qv`L!0>^mMhh7GH`}>&Alw;{#*Op=61-(TP&ffvZO+r4LMn)@IhJ9S`0yeHX(B+ zRfBros(2F1K_>LpV`h+065dle>@H=|+;-J+^m5E{HM{R^?LRkB){WnONL;K8w4ygz zViML~*Wfl=MChBT7fCI2X^!T&xLIr59h<2X#o7}sC^YdM4bd(*STft@g(o(l7d29u zCz~!QYnE&BSt$@gV>KvN6^aCu>QR#^&m7Wqvz*#9`!bVNf9+<8EHokMJ8t@vOeXZX z9Czu$W|&M*IH)#UY(Mb$Dum(zUI&EdOnGrO%TitsCOTgX z@+;dK_>d@pWw^UAL!e@e=z&xi%PzTyR5-SFF2{&%TU=+H!Duvoqc+VC&zuo(?XJsD z?^?-yHxucQEC$)RpUT1wztj#{F+QSxt}cGZ+F*c*c4=6|T3(ID{?b+;;zD`+LLHBP zz=8LMnfQa#M5bss=1_qW8U`K9XleBTy;CP0-WjiP#r!blSLKQ>{TsB1>Ygp4k%d%+!AXQX(^#PXS%J)EwS|4*GbJK>DJn^3Z%Vx-QX6x$v{hO!J9v2Jf0E)LTTsSe-+LJv zmt|p%e+5%M@kR6HD^9U4L02L=A!-l;JA7YoCe;l=*-a5Nv)B_h1%lVmX}8sOMn+$; zbMfG7-R(0_<=`Bce!tdYL{KT2 zmAf64LX%RMgPhi4OlgNOK`>OCR#0dSH3R_T9#8)@F{n zb|t4$N9_b`(?vD3PThC7?rS25dlu`j*k7#=)Bq`DA0oye8t%iLp)2MsUJxGbuap#ZB@2T6}bJLA@)x_PNdaF&B%6 zr=kxxfMJbo4n33+dql0!DzjK)YvaSV#2oKv11hf**a+m+{1|`kX8zf>x%8~IOa7QL z_r%eom;ST;OxC}Mr`9@CcvhTqxDwsMO_{r+xWSLCwo&d=qoMlv6B=tx6v$qDTNjo; zoh6^qYuQ5Bh+ILKm?fds{=tFTfn@Kt?+V<&j5;e)5N&E@5`o^0%NeCmgwMSINQGyI zX3uGLZA5vgdt)HUo!mBoCtNtTmqO>P-iC&mTUxz5)&6pSX*`u#^o?0o%gP3CFGDAF zb1n&GGv*SouQ+t9+u+;oSk{S)y2!TvT&t&Tg-%{udW9zlRbv$HhQSTfspLUijmi9s z0FDi+BQjx(uPkp;fK?LBD{H5Q2n-KzjpIOW6!nHhEF*VvMRPsnc8@G^r5rt%1dX^F zQ+Jvt-i=UA_?H7S5X+#6e3|U_&B}=eXiV_RqAs!Uj{0q1Ta39GS?FNi&+;@NEi$j! z{5ZOCViv{F$B0cFwKw;6AET!no#8V5U8wMS1Z(N6$STs_8DCbc`xg*C=b#E!dVr&} zVlUa7)NJ@1(9>jja*9*WcEChG!1wn~ai`toOeynFfP5t^73RDdNpZvnhau4v-8~)7g-})bU;97I4=);Gn~ck2!bU;s5CKK$cB2xc*KB z(c|r(ph-y{a1?}r)gnyWX%~%}LIbsy_euo?lbxBUIHWa*t|CCOoqkdH855Z^R zg^hHxHYAg1j!RA0kxsGgvrM0vg1g8%>trEEvl7z;=8_(n7P22}6plOz{1u_xckSK? z8HJATMs~_T&sb8eU9%{CA~8+43;&*va0+yZKK()roH>wzY|Bhr$N-5G%u}>FAfg^H zqu_^Zc7zQP)T>eKBG8ClrDfX`PDG1+?(uVJf=O;a2R`^0#G2LFbgwS8Nhm>K@weKH z`VNn+;@&{|(^AALLq#9UH*9WLTra_|U8+0`w&N{kE>3qiPF0efyE-th7aEW--VOs(DZe(V5kjd z6>>OwskkH8<2m{iI4l8{t*kT8>FeJ^iPdjOFLBcKB_wrFfz+P81Tzmjtq^^ciDH?p zSX^@F93tC&9Ul&NKWy_EoRCyW16T>;v`TghojZ*TYk0OF)MQ2{E=`jjmsqG7Kh~CY z6Sv=;WnzyV4E!>Zn=LQUuL&Nb(A^sOJehaeGk|N~lfIxSb zgglFJ2WwH!f28%2niu+h|IpV~8?0c&M6D6UV|9Tt_fy-D){kmR78HI{r#6GqE3kas zE_$wN%wX4SzQyxCiEWbpz*P~Cy>e4a1&;F7S<)?yUE(pbKBL_oTC6vTSTHg}w-Oto}FiS>P z5!;=_`_n1w$MZ`xoM3ytV$dbYI&?p-NtxmFv$`o9eS0sHT|X4XM!$z}KNh8kfYX$U zn|t{==Ux{A=Mrt7Xaniq{XOP!-{u7Sn?GzcBhOaEKKwQH6Ow=OCeuWDO9Cj(PLS~or8e)etQiya318yljwNj1WRPEt;DXz!kW4o~Bch|6)JDrJ{LV}yd zAlvs;{jt5AQXd%-xJvtia6mJrL!OqNy>IM6+HRJ{5MJrSMfkZ+%72C1Zv*B&0Uvn|YiZM+kph?OJ|Vq(NTh z*^V=>;x3wkWPY54>$xoTMLzVoMNK(%9c{ev&Ymdf`4pAJ&(IoX+6~jW_1qQyq`7DB z=wPA0zAirM2IvL6Ik)5fq>z&5Mw-7H@G$l;tb#hE_i#lGO=qQK=rE@|Y$G;jI{_2UL3y}1)@Cr#`_Ly>p<7{QAXzinRRAtBH` zg7nt68xU4_7_Z2hlgn1-2DY7nG0^r>#6VQa)cdQ_M1EDL$Sfx-PlP=ou}Mq1Zlzhz z#3OkJTO{V3HO=eM2GA=|^WA(a<6G&<XS8lBMO2jW1%0r4Hv?bZ?lbnsM3>rL_pibl*sXMO0&Bo+HITG?@Dn; zGd;-<6pq@g0+jBW@`_2hf)e)1G!=r}QcfXpD4FaDx^`Uu4&#J$bXv|Og(>_Oo#H2oDY~MmU1Hb{D?d>Mo&nP9a&Lmo zg0wRSyu~y`mo(5ruTc}ddf-1v-Moj_wUmB*X=S&cf2)iR1mplI6KV1?cMM0|TFQMHlDipqwUL@aCh6~aiSx+(L zVx|33p(6zmfd8+XKlVcG&-&GL;jfGA?=|1Z$-wa+YA%ec!xG#rysPWNgAA?2g3I`X z#3Gy&E!EV-bb}(p0`m@ZD7C$W%=pAO4e%HWagsVnG7!-J0`_k`fc)xMlt1I0G6jV*n$87 z5qwqP@%!%qsH!Bd_m|iG_3f_rFCH$Pv%B+Oy93)V@DBfecMzj2Fl%M3@&Q3tz7uMAmdDS&zMT>Q~dj)VpF(%sKkHb=CDA*NL~%ph>rb z1&18*eb>gs!1z}KijX_M4b6VKf4INZf_B6PWO_gygTTh1U{MuEuy2jrk&DgLl48gJ zFMVPX0g3q-tZm_1NUr?2phMPvO=n$mFKqJ8z|V+J5&H?2CKNR>oL%PDp~8x=@ZpK^ z7(r=9W|u)DJow?;aJU!!69`=vyy#iq7>M^#dz5d9qBy&I=AcZW*v7^3kj;{49!lyi z+>)nq`90Vk{Su9jK3jTXx))vn#|@C3UHD)J^@L~Sb*p_Q7FNdb;=!w}?ph$JqEt__x-U+^Mgh! zU=Va0dx*vnXWHnqlp0~x6AVSEivd1r=`(V)GZ7z+;|j@w>qCoDE|Qg2>&J^1!CO|O zm71Fwv?h+7?X(xlyXSYGNG|y}Ogd0P)YyVMzs!e&l19%Jvr;_bMN7|E1KXvsQyi=% zsGgMQkKN|g4q_p-DJ)1zoavYOUOrrJ--o$Y{Ctp2wRl|D!ypFt)a}m^qrTBkO?|lb zLD=r2$^W6hUinZ{3BWxIL${pC#p`}P3qSr-c5B(-8uK~A_kZqKHUINNMcBmN+Rnqq z#Mb$r=wtr>L%!aBDK2pl0p))f93+rR7^R#JH491ASN}2u`89C-*Ml=Oa5B+zHF46j zF)?PO^DwZn{(BRQK@|nNc?JaEUyYyk(dcm$w6MBw3>HWk%7kqZGB@U}qX0n4O3Gy+ z%8B1G4!O)6=^06!`Sw-UYuEMElt)mX)6XweKr!8X7e#9DYqM)Q@`j&@PpQXd$7Ymm z1Csj{3!Nkkf=ZyeLXl+iTnIabno4xDt&|j`$-f0jG1#MPiNxeUF5X}vG1Xi0F@C8a z0(CQw^ms_oFeXHhn!@t#e@6?B?#;~=ygz{ZU-GWR1Fjt23Q%wEH z5Lb(@h!0*o%@1qlXW4O7HIstnEB9g>79J!c0d8O3gD9A;$lWq7S6-zuHQl_DgY7H4hU%;7`>vvPIMLouSz|!WC`B21^5`>z$~#WTSC=s)%AAuRv*Ai zkE&_$09&+tN%x<`Qk)3{pLLy=h`LZ>w2MiNyDXGYgcPohO8>$AEJFnkQRGi7p+)A~ z>=mV0Z&I*HHPCK%=hRXAb;Z!tz`PddfbEdpEUx)PgsO|srVI97j}iQy`4Q&*?W|D0 zn~!tlN<(G2kk0lB1-nb8N^DIf1tKx)(Tpy9=ltP`d^89;cwP45{+@ItVlEH7y&4^4 zhg;WW>Sud-UsVjKcGc0Tk~2@K`+SDpZxH6^%@U6n!?q;LHWb_W8lWEIg5AC_TJm}j zgQ(i2E>AAW4?2|1N}S~5!?1pI z=6bzjH+kYdVx*2}Md8q~vymtCusewVbBAQ|Um9DgqI%L2LL#zC|8sir4<`w!2XgYr zU*UfZ1_b2s-v!atl=iDkl8LR839ZeSBA+##``_;d7M0gyGZ_%xlP$M3)>qi&Tg6E? z-vs#dYlopU8Aj5~pRT_)sj#6h+ymf8IEVMsZ_|SoXUS{|W@FNvJ9{73wU*m%hvx}{ zcew~*Jg*>}OJ8l>uikTd%voAFg;$t;s1^~kPkr`s`naUm3=qW|(6-yn&Zs3I3W$H9+ZFCB`o5A@ZZ7gLhG!KTD zCe3vrMes~o=<8-Et9-|Zq$+5~!3x&P_tH01E|yjAvgR#GZz**kZ0mE)0N#7E`C=uE z4oYeT^crI##UtB6%Ixkq@IF=v#EnWx){ZjamNXRA2Xs5(zFCV=IcZ^jAeLFf%dAle zW@6rZ=JfCldoyGOu_r|DV_O(KVFUbWpf@(=Z?6z-N`@hv*a!VRHP5~#HC!Ka9GB<5 zgPe8t?mx5NT_?Tu%nPWPyB?=~dNXg)%XZ?-asz@&*(yy z$s)4Ca*F?t0SA2mx!Va01hn@J2q@sc6Q-+)t+AcsKOcCL%DrEKhw_$ec|8CQ3X>eA zymGK2ROIVlhaUkLB3RFz+^z{Il)=6}S_7>&edG4cVGEqf9n>cxl@xMfh_|0FP3c)^?>8t(-tv)? zs-ei{5I@vXW|eRl#_4O}sED8q5zN+#8J!$d-GM${z{dZX223oH2?avK=IAWdTQ4$8 zD^zr3s?uDV&oi$y+>!~KHo^}9&Jrdr=L1t5iJV}H;-f3PIqJ^?Cn?OVlxU|vH|KGQ z`hvQNx-tu2oN5Kpt>oCt3mZzC&4j9PH5((ZKh0^XO_HVsy6wyPfW&OKjR9rWaNn*~^uk>j(kMgPYlVNC(kfampqxlqa z;>S%mEd<3qeZ|)Qg?nQB$9+%H#L3RZ(a7XK!a;ETznF9WpPa*ggl`c2j~V_?ne_h? z$;khH*8jWl{{q9;I4>h7tRgL6G3rkJ1 zZCsli^|*=7)tyM;SOkjyVs~n+(bcjYl&vMn254SU_#hs?rWhcNo-Rr3 z<@e0X<*GkCU9izqJxGPvWP1-x9Om8H-hR_$jG@JyK{e}Oh>Vb=2(1S)t*Xf0Jw>{T zyXRNB5$a|d6Y9MJ3Q6doq%x&8PooIHprTZ#MI5iEV#n}>Y{?PA;rxtbe7RsLNQ%oZ z$3QVpFRe2eD$C$VI-yDcD4CYL+%StIw(YUZw}vX+f6v5Fd~u*IGE`8W(}0@bNEZF} zy|TK8VG#A0gw$Wb%v=#v92lTZT)@(&0tXwCSjhqah8Y7Y^G4>&mKnCdpv0U%`_tsa zxqUu(`s8D=9Tx7>Ai;~YNwkVei)Gmi+eP=Lw7UD-?-pzG55n?Yd{ohlv~TqB=GSS# z@fM$6+RdMC+A}4HKIi*UzPO%qlMGMWKB2Bx;-BfE9@=_1O?sGJPqRj^s~TMpFHeR% za-aVf>hhmp75|P?|0QeH6OmQ@Cp~%WM=MC{7r9IH<<0v4X`cKyF#kGJHL-R5d!DN^ zEdvwCj{v^o)h*aTUIkHP8v-7vYV4|0jALTaeFO97X%Z{IS!?S!+hj-(0vh7t&*s?g z#=-Y5x6*vl<4q(7(x}eqy%b zKlHJn0H2VSn6#3Rw8ASnRV{u=MIjkEG3lS3t+?*AYy)nG3JAvisqE>mf-_~ep|jP~ zq0=+dF}I@owz;b#9Rn-lb0!8xjz2ehp<-@1$BuIUI_<%I6Es$nC}xj+PReDvojPC) zCvlobVq3S29lBC*?u%SzOy|64`6H-E2*vd8sO{%R!mNZyqK^GUGpE2gU=WsDbT{x^$mC>ON4zHlw6NW! z87Ho;2_bc9R`@?EAb(1OrK2YGauZMT7P%{+|h_hJ4vxd$SjsgL-KfnA97(b#t_~ zfrku@T_})(V$2O-&Vw;*g$WGmE)*_F8HKG;eQNAYNKc4=!N z_BJH3M1Le^^$0<#eDBPc3jS=>Wj?L6_b{w#K1;aLhI9@j2iQiH zTVs7Ao_?QKqU}2SD#}V_eGE0DfNaoPltOh!WPyBl`SEBH)(u=&alg#u2~UTn&jAxQ zpmihO8t@r8Rk3k-{U*lal3NqTbsCT#Kh4qWUwLX(7i7jcA zp^M%B1S?U$^NcD~yILJ@=!N*_XsJ)fSts(C!@1r{7|K*mI1=Xk@sZmw_K~ZR(#rXr z7u%o;em)tWgapGzSUMdme3-qy;2Kto=TR@n=s{Epu#yOL+sjrFh{Nh=EeT{pQuhZy z43%SRsrq1aQJYG+Ck}U#m3lDJ50gFb4O;Vp3J1vDw#xaK#)K=zG>~H4(fc>PchK0X z0fz$J;EX73EH5!GZ)e2DYJ(-Wh${-?s!p6Ms-Sm;Lh@Pm5_yWmtt@&x7#)FvpYB1; zSIbP%!#HFQmG#6f!JHLd5tEjkhBdIczYufn6gNYQH}*tUsRK912u`d(7o2}dCye}5 z=d3>#MY2%)12sZazc#qJF0^x%w^XH2hB?D$pAWi*EDE{NJB>zm=uD_aDO41e`B6=8 zlaXgjAc_$1Jgc;kt+U();S<<>`Fhed7fWWLIa}YhVxq3qL&Lp!*{2Fvl^i{mDjuBp zG?(2wN!9GSiEPCoSGs>^NncC^lf-J`yxqo**ln9&GEMtR!eg}wePAqDlu+cgMPE9h zZ#x~!+#G__g=5ueny2*clPSZwRlK;jXXoWJe)wD({cUK{`C&DZW>_P72)(EWn!-0L zg@Yosa62xJb?J`Pvec^YrcoHf zjWd9F@N8##ps9Izz@H$TdYyu0mL0?0(MU8lJWuo9fupHHW&*WC3B2!II!>%{H66cs zr)9!faRj$}hBU*V!+U-+jIM`WyidFC;40?-<+-P%g%-a%3Ut@|a^f5QCg_IH_j&oe zJ8|7N1DjgjVDRGIVYp6hk)ITk>&1&S--DDyz1XP}gFe_g$9RT;#WGl4UFohXR)4Qqozmg3r(I!8O*c-=Yjw3eta?U(GQsY_EdS^y&4b z7Xs*ShLxv{T0A62MD5v1KADbcIuBrO#oEhrM2id^E)eMB%(J$N(?U8G;%~nt%E8NV zf_IK0PwZjJdTw>-vF*w0{B;-0MC-lAn0dEgv#+`=lc4;TN02pJgLJhlo&X8-4JM^v zix+R!3ZX!nK;z<28cIp7xx+>}Om+2KN4i}7pm!_sGX-1eu=J=?W6335=fmXZYY;0h zTM-UKLM|8x=R+y(WkI9wSZS42_f&i}EWp5S@Z5u_n94eJ}va#^?4PkbQs~2L+b7nXf9#GcA!4|;NhBAC_r`q$Jin1rc*Pjg= zY`{NpAq+Qm!@ra{m=(^MBxQAkd}l78uI$Td4^E`D_g+(^iRz1{;@vxKc6K3uD(|aqC#>%k(yUJ70SGd z9L*4;0RUW{Kmx=7cmNw<`ebIH^|;DH%fZ;zNK41c;GNbl`4s)XY~?St+FIJ^>HK=$ zucJp80N811{p-iqFRNd+9#_9S9`-cNZRXe`?mx76tiNJb2lFL^Mv5!CT6)Xv+$_eF zH(lYZo=AuJ8h^egLOLVzviiJ*P*gUc5EC^@C?V}r(Xp9en*YIv;g?{D{;qc-NJ;vu z@!D*1+pR`n@LeBg1`Jt~;~#8}S64R7tk|&g6QS(c8vXkp+9C-zSSeSRFVB}L zmE1XQZRM3@a_=_(bskn|`Sv?@yim%V0{)?(;f&zWosy>*$v!#Dt0b=$o8+-0Y4uFu z)wiwzkmW|H-X^?eMGyN&BYk(Sye1v`37>~Hd^AmcaOM$&cf_T55xty-vimEi{k~8c z1%&iBHI`WtS_^2Rp--uuO%rtCplY0$j+aTS0VUq$jw`4}z`}2yu$xsP?A3a&wa#OxVYA{OGL~fp_ z_fz57!xpXPK_M7O#;FJZ9tEQt7XM3dJ~tV6Mp$`}x?-j>1!hKkNpY6cTcO}%qg?$` zYf=Vic*!LUlL!d;tO;8aSp8KuUhpp6)^2a&542G??~XH5?H8Q+_uGjNS1MW^jh;=F z85W4@ZAmcblA(Yid9b+AhPwp{xr_vxk zT75}=aCB6<;ARPVb}!!PUr$3ySLj5BWL$l7DJRo}{>!llDGM z;8NoHmx{HX>PqUNKA;HpU(yJee9fT_L$iUV_C&VexF;W6qTi9Ymn{<2yIhR}5}!a5 z@e_c?`9UM~4v3nq5My`+$`sOnG4J6dyC?BI4$Y;%5~(5yUVbH3jNM8`=&A=0paX%C z2So`tNrLtHSZf{OqHh_7iOVJ=Hiij>RXn%+jJbi>fUWe~B4-~a% z$CIQ8zeI}kdI>H6DPvj^)W1XUB|oc)-5tF(ux=Xb%2JF_=J$@(l1opxW_kKn|vx-IbB3z^8Ir8a&F*^y`>;T zX+5{$a64q9;x7Z#Jk~G@*a5>WaNUhsUki(5ZJ31u&=f_%umj)c4BqOz^>foj%A)Y` z@u;bkt1w1|N;4Kid1`8hA5&Fn3>OhTS(Xjy85cK#3!5#~xCZK#^aQ639GQRCeNE4q z9ngL8BqMkAW##zCx?2cx(Bn9;V!23G5fTtd6Xs}1A%0Y3U6g9@R&R0*kVVgvL`r)T z7LjDJ3>n!tV4?-7og_dX0}hR4T^QXa?vIgvvDDTjHZ#gIfV5jM{^gB$QbN@15>h}? zKanFG)zt9Xgk*Twx}KecdKvjC?g%xLn4P}fVLs$-6^+6N z>tQ*;DcSlKlL1+4a9LPkMxt<;H&m~%(#iyhbn^VObP|NcB&Y{ayWRq-rp(T}2jY8@ zhHT8xjV%fwk@M~F62{fmcDZ3e0xCfTvsuW+GX#6>k?J08$>sx(ae=7KT9`hsb z%beU_8G?wI&M5lzJS|Qi*?=^$bOCpOBoSm(2hK1RoDK@C`)JH@Y!!K++q}-Vv ztWl1H9+jXD9844v8TdxYQ&Kn;6g{L}1{g+ZRKD3Hh?q&MCw_NvPiD7Azf>~|M+p)` zijhIP;l+c;!@`AO;C%KYrk=wKkua@===dNByKid@=O@V@!>sS_0kk_Ty-%wufS^2S zjt=PK7$p;>qGb%E8%D0mv8=ju>`3T!^$}SwRDi#jOl|}+v}%%x6xLWH`Lq3eRt=Dq zPFlV9>~StT-7F(&$s3cVWNiKc{yyS8XfM%m*-?UCwu#X~dk0A@kl?jocW?-v>opq{ zN$dG_u!yPLTQi5WL&uq^tp!fOQgzAU)1W_{d;@tmKr~2PPKYXEYL^fg&e^F__Pz&W zw4+A>R9KP|HIY}2x?fbC{&mqWw}Ui(yd4^Y549&av^zXWq#uBQn%O_fKK#wb$B;| zmGW6?c4IRH3;Ytk2z65sltarT6A^I)@uPJUhnp84^an4a!QL<`SIT8EqM;!B>Lj>g z&^}!dBgY$tHbu%2-SvV68;;?TDc6O|k(my?N{@azP-H6-lzBxU;gP|xY3u7|6OY=ccp<<0jS(xQ;{DisI zjf3^`;7s8$e&AsHpmgX)Ig*d8Bs8Q4QY4}&2_T&XL^2+PT`n)Jwn!>^6s6eB^4`AP zAp5|{O7Nw5a6%&N(*f*>e!*6%9Aa^Jm8XnEUcQWC3i$@=fz!Cp-y$a*Q1;rfnlLC! zOU6XNe$qt%VbNnI3P%Hok*`vb1ZBkV=+zjbVy16@*w9e^*p=2BE}E4MEt4&Kf1C=b zzzB-=Dq{GP;#h5w!9ILqEwt3d*mgY*E0mO{yWMCqJR@!zO6h9k|W}Wad9!mj> z30wlSd<;osgiVasRe+3S?HfHi9TVfcyr)#f^fHnkLA zfG&Zsns#_~UBXol#p9{Fi{DQDf`Ley$HD+$l0QLe3{9KIc?s)&6*9 z1n&B;NM(Z*`-s3~^&<##VL;Fla;aBDQBY*1)bujUr#pm66GvF18>=%zc zJ|RI@_pnF8GUN<3@H9AKE;mTEkeHuHs!GiBT@U~j)-y`hT@DUgm!5Ts+W|bGM768j z*Z*d*xa6axjobJ*8G9Lk#hc;^Mls1%ogP%fH+@NbEUfyBU^<@zuXSaXgTql|2khx? z!2}l1TQu=O15l$V8B~V!9=1_b?TAz)9sGRgnm7=1#voEr7h5A~Eh{zUyp4!-1?CJ! z5US8*na>OlP8Q&!WQN&eXnd0xye^5Vc&%Hv5-l&t?DJeMn z`_IumYdv~eldnD>P&9q|n8g&F9-htZjh6kgAF&h}GWhKWnX(|pZZUpji}21emTu;< z+SNhcn)~LWQ>Bw+Nen2!!Lc<2_}(j&%F}ZM`XSuwuQ5_7CP6p`V~tf0M(L~eXK2lJ z=^yM?XnB||li{RV`Z}AM-f7k~8F9)fnS;_0(H1|I^{(Y$kRB9NGEUEEOfHD&d{VW? zU0ukmBmXfo@3c7k2^;yX-FyzKP$Tw}=Nc@l^M{rT(@(I9l?Db(70W=CB(`U4t(*(8 z?fUDvr?`0)cq$$1v{kEKPpN2B*P~%w?eiplF>LTWi*Y)Cq4Rbo;8}<3E;d^gx0XWj zl+FXd#hn*%}RIG z9X@_{*I!oh3ywrx28wBY(}MeOzZT4E5d^BXFDx)D@H){$z_SUC+Xw`Yo*S4;Sfuh< zidMjl>8=}nLUfc)ll&k0GUGx(r#y#0UQ1%INT6@H;5r*J4h+fBI8VbVl`Okz zz+?@BXrR(}Mff4>!f;TLHlI+k4kEv&B`vw#c||DFn(C3NRLmB;iFsK3 z%%Zq>h)3h0a#0Z)ey}?din-(}3Su$Ym9Rs{%l%5gBXIj=|C`kjW2@(QkV5|PViJZX z*Q&i^!I1bXPraJ4p;;5+`!7C_O|bOvEZ=$FI|XXP;>AS? zV!aeb`ILAZ)D!w9H70FUS$m8A+v_NUNJ6cq>*Mv$)HFCBI8zpyaRvj2UPq^ZWgjg* zz30KnSG8DpXd+xwZ4tYg>0ps&ut?z6*YY@G(XNqa)k0pWzkXvOt>Sx8^cF~ zqd6bzoW&r=v->kw&tpR?>VY`@l#FcN7|K_zP^~;u%Y#d?`12-ZR|}$(O9KYo_ST0yW8|dN z*FH00rTu&eT$9DqZ&J~Q?ln3LCf>+5zDLp+#IBEBo9G|iA#|;$SmLm`QDb&a^?e@Y z`%KgI)PH-8r{O~!T5ue1{j!eye=fStF)xmJQUC(oZl5#3=uyY!qq}u5=gDe3^@sEfDwF0Wb2(Q`+2(M5 zJlOQZ>Edj#iD05gMzw7&t|`UpiqqQz#rfX+)h`7hx?cgO1=qtiI!>dS=M%Fu`};>F zW~s{v9}D?{`|c0KtW(G~e?3$!?TT4P>l96q)j2AS#Ve;f^+zVE&&sd&nG~;?L#cA9 zKz!1DNb5WUZ}BXZQt*xO3o(PTv!HyHOjCfbNT>?ohUnd7R{`8Nn8qB&J4IYsi7TI{ z92P(b>%9Ah5Y|D-X;My*y4{!GRBV2qv;gomy|l*SK!u8XPq>c>wr(bxbMw_nN64CTJyp2K3Phg;N*~GsO99A>(@g8gw{|?0i0>m#vFdupaPR&0 zT0Xn@73Q9Pp?0S3@)b1|OFp1CW%x>5{_yOAxIAO@9BF&zy+M`U?)Og*_5HZ_Ue^KJ zNd3W5m4ds;GSE+8a?=E-vezt}KTg5t24PeLGBemTZ1f^r?DnvlO78#(ZTK zdS%H9uNm-F;&?KGGtsi7*0l_6(H{0dd8NjGXS%O1d|w`;>sYd;e3sEJ68+-FZQAtJ zjoYPd)_~gpGo()l+u?&FyKSb^PO(*rkk__ zH>6;~n3!|jVGwKvZo@MaLi5l@D*b}<_$i^#L*=bmq; zJ71h`gqsuM(l|QlsP4bJ?ixMgIXxR`;yK;Vtt7bS4lgaV=l;RE)ev1$m{gRwQku(b zn-E=GY%O#67ji#)gp+HKjM z#BRKvNG{|YY}%oMM10wjkN5&Jn{wVj>k8FmD$7=u)Rn)8vez*p>GAM|=j$0+U0>;> zX~Y-qg6;kSnHL+q19ba&)&{J~$JL&N_=TX_Wv;_3P9BSV(-ipv5`rSto}4w2IfKy? zA^D+&pr3r(7V2kw+mfTJz4%{c{lRu$m{Mm%EeoVqWgeV|D*`TMrq$UTXweAlN#`;Y zcDWmzMD(2Ulkb!^?>FJ9d#Vd`BJ|$OnJ1a==Rn-}?X1+T(n~cLB+fV=Yl`$bG`%=m zI60i8A8M&E4%}R%Gj+aC-dqHl=H}u)$PcENx$`1>i7t3w^&PMwD76Ab6oswYWfQ~K zB%X^_z=i}q5f!P1Y3P2Z5O731swS6n^Lt~gd?DyG`3Dny{Pelj?+up=n*^~z*+Mqo zE+F*|yEkRQuqCqoE%cer)O6~r{oVeN=kwX;MXC4uIncnyOsDVBOYO|Hhop>83CS%s z18jAQR~%h-V>i!cDmzcEW2#=144qtaKOWBAN;c0PE%4+z0KD5(sYLwtqy`68z?nx& zbs+l7K9VUkkZ|3MzOt!s$pNz(XoMys;rmTMBiw8HS4LRp^ampxQca{1x^y$5%d42z z@4Vw7I-ecWg!A*AU#zAwXzeVZIDbMw_fU(EQs2+O7NbmWp5t84_+K}3n7`;7_`KP|+A1dj6C_)sn^o@2@c?DqK% z&yI|@G_TbMD`tZzZg|I`qU25kb+fAC$~RG6R8-OL9`=*PLUBbR+8Uuk&s1<3C(#jD zNRbWWrvDZ=Nk8ZFSH@mqzRP4x^a&I#op>5;dK18}$~?)?Vr6Lc>Ui!sS_s^6Nqu z=O&Xf0(o6^bKAd$GouJNlHtv;q6j>T$P;2f5g_x?AZ3gq7K8H_*4?7rL|zYAMG^Rn z64G$b;+TK3Ho_8%GkZ$BSDV(}<8&!Dvy6`INNCPMGw0YrX>hkATD+*V*wguB^N>$! zf`{EAMR3{yWX1!pN1y8mX_r)8Mt&fiZZGah560R{ia7%p{U;{*+cS5=V3~HD_|Dq4 z+tG2?$}nxSvth|+gQ47Kiw1|AeX8Tz$84ut+h=a~Ef=_9_PpJAi~}R1 zcy!+mE)gHI)>DGI;z?{BjVB}BBbn3)AR+*fbJBs&!z~yyPC6#!u~o?j`rFX;FROniggKt!YvGRO>kWd2s$R z;w)Zr-mOAoH;$qa|j{Y$Jy8C$7z~59vT^hxJcKXcrk2 zg$pDOXCy3Z1A^xihBX>q>eUej>q|!FvlKAPfg%80)9J$rN5}!R zFp;)!O;W}+l6W<6Qbs}D9-swcM|6Z4k@*Z-6UY{)<#NK}D=ObefGulEm7gd?LzbVARAg2hP+*MZzXIA-I7Xg?5c29A3=UrXw3 zMOZ(!r`S}`o|!CMbHr~iWu05jSU)y^WZSwfgGvE5-a$Y%d{Sn9b#+6`%LVi6K6`WW zyR@?-y4<{tON{dj#Y=m<#b>*#Kqn#f>I6+Hz@_^7d^V-&*-4wGxV(g&->8DPJhc?7 zdO||16uMH*YbA~3ddi{nmv&X7Q!(2yunK2%P!RbX^gVHCfpny9LDT>Q#W2Qw(q(Wa z3V0ZiFh*)CDvzMv&Ne80Ndl;0FyJI~4N$XSVHK!l=&Gl?SYQ>JfF4pG^U*_=e=gXs=0Ho=EJ!7a**ELAx0)PTGK$D;|3TTPv=tRaNE|2&%{o zkuUpoK-=9UtK9+~!V_%~-EQWFBic-S87taMpy`x8<2a$vV;lF0{Z3)=hd z)dRat0A&U}xaUB1kThD@K2JaL*@Ys8cN2~Il+^CiKscpx#cSrYa?vfu!=4=(RfT2& z1q@kLL4y$v1&p&?+CHAVy7H~38GR)Cuf^%9a%uCkWh207rlh>Adw8KfrNdrrx{xIi zJroizLtlMUFy2Q6yZ@$OuD>YQN^l>EQZK%M9!|8-Yj!f?@+ZpUgUB-mD#Yb;I+s1z z;q%-mA$vICnwY)gBv|2^Bn`#LGXr6Q_CloP&M_yVS>c*b12aFnL<`lUF&+B!krbu- zxI(fjV9fK754o5XROe=!P#tbYVNgeNM`6gS2^u433BgBUy!cp2b(2{=njxhos!lnV z`wX@@dGs?ZGlcM3phjjVJm(b&yY>53;2&$)T~|GrSK(`c=fUq~eaN)PaIP|d&gLn6 zR80;F;K~Ael*B#!kZCfj76%F8MU)R)9dPlNV75#H)szzgVZKdZow zToydf_saDeF^4h3IBPG`fkTyiXTLAp{-uYYefUy!z)=KG9|Y?J-g?`@Gtl*r>@Nl` zQIFB_DuolGY)ENwcC=#3;5CZ?t7smAEIdCe^aRnH0zSb`0Uf>`gH8zIt4dB*;yLn` z>ep;as2P^LxiDhken{Yfbog%2t-fBQen^k{c zE}o5ZVwdo(zsqU?*Kgzxyz_frK z(HO2>CS=uvdj;&##&BSdt_45#sO1{4M|*JnzxAkE$m8{s4bkE7*p>jie58;Wkv5n% zMjVt7q!8I98K5czdLw%2aU-NbEn@*^d$FQ@^umtBV`-RPYnp~#cm*k&<}PdT!!s?+ z<*e0(n!`AnMi4mjigXwBycs#lSQY9H45`7!KV-ITOnhZBc9admZC++3(2i?Mv*n;H ziXsdYT|Mz=LsuIVNfXeed5V?*U0RU%s`@_iLfO*Wa18$de#j8KMRr(hOh=y+{2L11 z2$!+uGRwZOy+lF1McYS9x}iX08eK2vr(lRkz3|`^HqAX)9%`GXV^G^|JSK(ga_~XTu4#TWPN@y`*E}_{kch~ zjFOtHk}w~eXCH8vP|XD;y3^WcGjSI-EGhwOFz^^Sv@9w{r8`sFn(3|Lym`u=S=)b6p<_|`1`0mr5!A3Y`hNmtRGRtuMMhld zNuGUEr8JtJjHlvu2|zYzSPy}MAI;{aFH$E_03VtSWJVl8M%-znlMv%H-+)}~d#usD^Kx7}~LzCZfyRukKaFK`9 zUyQ1IvsfAWW^oNDuQlCxk>|y@3v9#z;m|2;PrEMs8_B|pF*f%Cmp8pGJ0+|Qq#88e>01O)6nxsQ*H#U; zJD$4#SVDOnvTVDPernbvb;l# zSskIze0r)1jYEb0eAJawL)?%sVI`Gxd0HX`?;$zS-JNMHZ}A0-{+&K8b~3{9HGG(r z%SM9L9Z!N)(<<;4NUqWHR?{x+xD;O$zy9{jWBhj4L%_0Qu#eLyy-`znk)ow-kx-a< za#Dn~W7cWC-oF<`C>aq(L}nZq@7pluf$_e2>(Myq>K~0`x@K!*kpkI?)V_MF)%jrm z`CX?KQrI)oUIG^zSG$8=1j{IwnLazzimeUP0&`1y?ZEzm;$7i(Zm;_#@bne{86NRz z&Zl(fbY9FSgwS`6crOw8T}i%>FzO=S#q%;Vp9=4J-M6j0o2y+s)3zYnik(+YRxbln z*Qc)r4$b=GT@0(tyAX^+RLAY+jU?l4-JxKVdkDeXfKk))F>1P|Jw{Ei$Fz*F_AzRH zdQ8iBk$`Dgx`qyq>sNEyE3kdxy){J8W01Kuz9nKVIx!-$8l_F)y|9gGpCS!5Mq>&s z74yW>QFBJS`r^bis4Ed(l$bDA1z>t`OZu1|+=uIU-|9W42Wy1i(t|a^Z|T7rVJ~mJ z@I9kIgezL`?J6)m=tJ*12_4dPwDkQzYJVKsSfdxH@A*u{OrD%(mlcDjwEP_Ca|;WF zfIhdQxjba83I95HT2=LA0RgjjR;_fJLLx$o2Pm_vETGKPZGkeI&Tt0Gta|I4%oa05 zju#N_g!jxwJTJa9)_e>Ro{4>ILSTk7qMHCZzw3=CJKxqTU~u4f1qKJCYa3v27*2f* z4yTmB;6QpltVMRXKWy0{y%l<4zt^zz1uwPpxsA0&2r!TDA$-i^*ATIkdI%r$c;S1Z zZwc%Dr*8@Cy&G`%j5S0ivMaEW9>Q;VJW#?&z0O>xxMh*NOHKF|qP%svA!1UY6zfm(iR; zge&c(poK)e+IxM>JKsgj)HmLXH4&F{@2}V*kKSJ@B#}J1O?c9*R20j%U51)%oVw9& z%%49YrA5zW$fKuzpCX;om<&%5s%m(Da(_ObxH~l~fIo2m0-w&4sr~Fw9jxCswVbcG zze3EDw_#}0U}bA9bhFew9YLp!9x-xpb;Ws`D?envrSZc}BiYpEn2?>qq9co;@M(hr z^=P2~_PS*rXTH|reA5R}=X1Bg_`{)(rb4Ef$C- ztb11$f&pchE9O=^!t2%0`Aw}20pQM0_WWY0r}jqMGpg>d@IJR})B%lhyO=h7@V$%L zx6c>VNah_z!lfHNvWs0LlaIO(;%`?zUa+W6GLQKE3s3UVJFH*7;00ds>iZXwj#AU{Z6(acMEaEl^Q zQYUJAiL2O_Bm0Vy!t7D-n|#cG>L`~hTuZha50fe>nP;UtjYZsZeJqEYV1uB{^Y5{S=;-`v%&yW;DZgI7)~7txqPe)(=+OO|)zzwbv$OAul;oDf7lnbRTRX9<-JM@R*^&XlZG2xtQDM3a^5CvAwQouUur8(~D^H zJc)w0;h%+`U3;@&2H(l`?&s%-Bj0Ot=5vWmA6cquk9V} z?5@nQFpopZEpIJ2<6l8WLfz5K)^X!YA1pTaGRvA6pBr#r>TzPf!l=-qBn%*QcV3=n z$WrdA$(%t9Dsjf-*1Z(c^`NB(8&|=EYYb9|ngSw?7+k7|*`=I@k{1u8KE=@#QN# zJDHKv&}}mt6KXzH@;+GOa%VEl{j#Am!j#5(gr6rJRb$LHybEgI_KR5e>}oMQbNjr3 z$(x}vk`YXM^gsb26h>N=IPOG!M!nWYEP z;)BCJA;Ju+0h|~w#9nm?v{zW*yk>D7dq|1HrW;o+?aH$K7`Cq6fpKhWaGG7527f|W zX@7x9>P>sGA8!XKa5SjdKud&5Q@P_nWrlF_T)hJBRv8wILt6E%@$#p&fY{Nid@q6; z{DYtx7x+{(2bMrPzx8?z@lRTVeA39Z%NB7G>Akj7V~s;#g~?GWhz4wDQa^PI$gRJD@yS;K-<*VeC(Tx;XI~@{UqQ|wpTEktDI?nSu~G7gIfbCq zB-S~xq&P(UgD3=5{U@6}1(iPj5QG4~spNY>|B4Zg9$Ru5@ZkRb(A_XUMNHzvAQOm& z*MVkIA4V+pXiQ&z;`V63Z}<$t9~TjT3-cl)U9~@ue-YED<0Gd#tKue!gbTfN`&4)e zyL;lxw?@^|Q>E2rUL6+DSlU<3b&531v@7Bh)ZkO2Mm#$OiNMl42q%4(jK!cn&Lyb5*RMKmPk z*K;;fG%!0k9gR^@sWl)Re8!t{3npQoS5dMgeZN*vayxO9{4@sTWAdP_r79jlP+;G2 zS-33UF+OL~i+q!DfnG!I*wiGg*SB`Z+jk9-ot;;m+B^irqb@ZkO`Pl>75xrkm}}&T zI9S}}-^(AlKn`f)x<8ds+(s6D=5A8y4o9_b9GAu1c0^r~<2l=Gsu;aoXoV3pQvBA- zQBgdk;|m%jt?`#kl3vp?4QFwgRk>I2x~;FCQ@NKZprcEa#Ucsy_;e&Jf3`K~+d4LR z;ReVFe+cR+iNboJygjNtk$v;&wH$IO`No+wrUDdaP+BYJO;nN~+$^_!4AB=S zIz$X-Kvoxzd~ux>-O6ogp8T7`uP2gm&&50iKAOK#(7tt3sH-}Ap42Y9(anI8Eq`9q zxxRM%`j|ZE1(q}J9yyGUa#gb(t-TB1fOyfMq#G*d;32;uit;`SpX^fi}# z80%PSjnA-qBZ`HOgW{9p;{{D%XPp}(s`t{z+^HOT@2iW-B|es8{?_jM=o4-NOFW)Y zvqpPebqjEo}4dE^yd=DRm1a`%xn_En#77o$=W#<(>?~q1PWf%NP3w@;SV#1t~#I{1P$I8TNpnwY5p0qkMGs~!X)?Ahy&6M4gj!~2LP0QS8b(x+s{;M z{VUrDox-o|AJRaIC>wd>$0vyN?BD3o*%|=f>ew1QbNtV&QNQ)VFBpfkdVAY}$xJ8? z0KoYJ#!2}9&Y=2SszXi1*ZidwnNS5#cn7MQO09Ez%Pe9ev zvC`2sHUoMEAcf0cusK?<9u{HX^Lf%hXUO&g3^Bu>fbkD?`b!|(KRDD>12ujc$oMP% z0|;=_p8)Z1HU6&%2ad@=2OOy9V?g)wNYeeiRJ!xq{{$|b?=;bW1%ppfk^lve0}uqL z){oDKelL~o_0B(o!NS7Q_7}JKS5OR@8sk9%!v_l($TvEd-%u!h_z4vMu=wwW^?!wr zzvrJ&O+5TR0@0Qz0staE$m}}c@1Xr#1|Ptx_re1h-PnLmllccwBym3h%Fx=j^KOEmF}}YS@WOYoZz3+zkl8n;5Q62xBsE_e|m?2-|GCM#2@MYzn42c>%0F@ z=WkEO|D7SgBT?7)a>qCI=PUj1Z3ggN6aFZX-=|P_eERo)S|WcI-0%47|J3FHzd`+1 z+XMV2$A|wl)IYmfz<0pVfPb}Jz<0ov?r9JIW7+-!`0s2U@b66Lkwfu&x#Rl`^zQ$5 z%>0|_{8>f$9p%N}v9?FbwD0APPY;;P{O@r7NxJvnG~{0qzJCW>=?(z@pM(98RPWEw zzyCX(c;wXnUheobp#GQee~MxIM~VM4$M$!~mF^G!zaak=#_fM6`A34~@8yoK7xsTD z`Jbg*{!#k>Ot}0VcBQ-3lmCyf|0@0Rzw3qH&m7(H?ZN-)=E(g7qwjZV{xNoQ{h$Qu z2!Ek^+n-?g{l9@ca{PWTcYNc256FKh4*VFeR1p7`aDIpBUoq|e`FQoqEa*RT0DqTV zrTf?aDb9cN_D?Ya|2qr#F}I~d`EN=2A1tsxE82f1rTtB`_5XcvKSt9(K~ekfMEPUl zf{gax66N1ue*JFozi910bHDy3+T#B`*uT#N`|o7``VfAr+P zpY^-rTl`D)|5=_m5Kw||KZ`*F{>T)E^{r1qfX7UCMS{N~h5wT`4&oQyxPMw=^4KZg t;rwy2%kSY3i~o1v{C?>R5YxX{_97zz0i44F0O*1LIPn00H?ofc`G39*Yu*3= literal 0 HcmV?d00001 diff --git a/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_8.csar b/testsuites/performance/src/main/resources/testplans/testCsars/test_csar_8.csar new file mode 100644 index 0000000000000000000000000000000000000000..d1047b7230ed4f9759c350a89550010e3d4d3a47 GIT binary patch literal 93622 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≶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≶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 y_t`*9QX_m0H6c@