From 706c195cb957a564ef1966dbd8f9762ad5b42b42 Mon Sep 17 00:00:00 2001 From: eHanan Date: Tue, 10 Sep 2019 11:58:41 +0100 Subject: [PATCH] Fix two bytes issue in so csit tests Change-Id: I7419c05936d42addf58b4ce45140d0474a9a0264 Issue-ID: SO-2299 Signed-off-by: eHanan --- .../distribution-test-unzipped/requestBody.json | 102 + ...service-Manualdistributiontestservice-csar.csar | Bin 0 -> 71960 bytes .../artifacts/TOSCA.meta | 7 + .../VSP_manualDistributionTestVSP_Information.txt | 50 + .../artifacts/annotations.yml | 30 + .../artifacts/artifacts.yml | 49 + .../artifacts/base_ves_med1.env | 11 + .../artifacts/base_ves_med1.yaml | 86 + .../artifacts/capabilities.yml | 310 ++ .../manualdistributiontestvnf0/artifacts/csar.meta | 2 + .../manualdistributiontestvnf0/artifacts/data.yml | 2417 ++++++++++ .../artifacts/descriptor.yaml | 66 + .../artifacts/groups.yml | 144 + .../artifacts/interfaces.yml | 138 + .../manualdistributiontestvnf0_modules.json | 25 + .../manualdistributiontestvnf0/artifacts/nodes.yml | 4980 ++++++++++++++++++++ .../artifacts/policies.yml | 492 ++ .../artifacts/relationships.yml | 149 + .../artifacts/resource-Extneutroncp-template.yml | 182 + ...anualdistributiontestvsp-template-interface.yml | 1863 ++++++++ ...resource-Manualdistributiontestvsp-template.yml | 673 +++ ...utiontestvspComputeNodesHeatSimple-template.yml | 131 + ...ontestvspNodesSimplecvfc-template-interface.yml | 1892 ++++++++ ...distributiontestvspNodesSimplecvfc-template.yml | 705 +++ ...ldistributiontestservice-template-interface.yml | 1768 +++++++ ...vice-Manualdistributiontestservice-template.yml | 537 +++ .../artifacts/vendor-license-model.xml | 1 + .../artifacts/vf-license-model.xml | 1 + .../distribution-test-zip/distributionTestZip.zip | Bin 148872 -> 0 bytes .../so/integration-etsi-testing/docker-compose.yml | 12 +- tests/so/etsi/etsi_tests.robot | 2 +- 31 files changed, 16820 insertions(+), 5 deletions(-) create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/requestBody.json create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/TOSCA.meta create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/VSP_manualDistributionTestVSP_Information.txt create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/annotations.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/artifacts.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.yaml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/capabilities.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/csar.meta create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/data.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/groups.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/interfaces.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/nodes.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/policies.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/relationships.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Extneutroncp-template.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template-interface.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template-interface.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template.yml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vendor-license-model.xml create mode 100644 plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vf-license-model.xml delete mode 100644 plans/so/integration-etsi-testing/config/distribution-test-zip/distributionTestZip.zip diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/requestBody.json b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/requestBody.json new file mode 100644 index 00000000..b1f1427f --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/requestBody.json @@ -0,0 +1,102 @@ +{ + "distributionID": "cfe30d6c-eb67-4ffb-ba98-4b654162223a", + "serviceName": "manualDistributionTestService", + "serviceVersion": "1.0", + "serviceUUID": "28d4acf3-4791-4998-8d06-1cdf6d1767a9", + "serviceDescription": "Test", + "serviceInvariantUUID": "0ddc448d-5513-44bc-8b02-5759d84600d5", + "resources": [ + { + "resourceInstanceName": "manualDistributionTestVNF 0", + "resourceCustomizationUUID": "82ad3aa0-edc6-410c-a217-655fb064323f", + "resourceName": "manualDistributionTestVNF", + "resourceVersion": "1.0", + "resoucreType": "VF", + "resourceUUID": "e8e39dc4-4761-4da7-aedf-7d1fd3637772", + "resourceInvariantUUID": "0a0b9979-863d-4b7e-b7f4-d27725a182b3", + "category": "Application L4+", + "subcategory": "Media Servers", + "artifacts": [ + { + "artifactName": "manualdistributiontestvnf0_modules.json", + "artifactType": "VF_MODULES_METADATA", + "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json", + "artifactChecksum": "NTc0NDlkNzdmYzVmMDM3ZjMxMTE2NDBmYWJiMDM1NzY\u003d", + "artifactDescription": "Auto-generated VF Modules information artifact", + "artifactTimeout": 120, + "artifactVersion": "1", + "artifactUUID": "a10f397a-6546-4a27-843f-25821955ef3e", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "base_ves_med1.yaml", + "artifactType": "HEAT", + "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.yaml", + "artifactChecksum": "YTAwNTQ3NjczY2Y5MmUwZjUzZTY1ZjNhNTA0NGQyMDY\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 120, + "artifactVersion": "2", + "artifactUUID": "e216d9da-18c4-460f-8b2b-d7f8dd9e9295", + "generatedArtifact": { + "artifactName": "base_ves_med1.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env", + "artifactChecksum": "Mjg5YTVhNTlmYTdjYTFlYjYxMDlhODYzNmJhZGJiZGE\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 120, + "artifactVersion": "2", + "artifactUUID": "6243747f-e794-4519-82b2-6399846f1951", + "generatedFromUUID": "e216d9da-18c4-460f-8b2b-d7f8dd9e9295" + }, + "relatedArtifactsInfo": [] + }, + { + "artifactName": "base_ves_med1.env", + "artifactType": "HEAT_ENV", + "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env", + "artifactChecksum": "Mjg5YTVhNTlmYTdjYTFlYjYxMDlhODYzNmJhZGJiZGE\u003d", + "artifactDescription": "Auto-generated HEAT Environment deployment artifact", + "artifactTimeout": 120, + "artifactVersion": "2", + "artifactUUID": "6243747f-e794-4519-82b2-6399846f1951", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "TOSCA.meta", + "artifactType": "OTHER", + "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/TOSCA.meta", + "artifactChecksum": "NWE2ODcyOWY0NGI2MzEyOGViYjUxNTEwMjU5OWRhZmI\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 120, + "artifactVersion": "1", + "artifactUUID": "6c64d38b-186f-4339-9a76-a266c40f40ec", + "relatedArtifactsInfo": [] + }, + { + "artifactName": "descriptor.yaml", + "artifactType": "OTHER", + "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml", + "artifactChecksum": "YWZkNTg2ZGMzZjRhZjgxNzNkODJiNjgwZmRlZjlmNDE\u003d", + "artifactDescription": "created from csar", + "artifactTimeout": 120, + "artifactVersion": "1", + "artifactUUID": "4bd0cdf6-0b12-4d19-b3d8-6dbc34fe397e", + "relatedArtifactsInfo": [] + } + ] + } + ], + "serviceArtifacts": [ + { + "artifactName": "service-Manualdistributiontestservice-csar.csar", + "artifactType": "TOSCA_CSAR", + "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar", + "artifactChecksum": "YWYxNmUxNTlhMmE3MjA1NGVhNTBhYTdkMmU0OTZjNzM\u003d", + "artifactDescription": "TOSCA definition package of the asset", + "artifactTimeout": 0, + "artifactVersion": "1", + "artifactUUID": "e6e8c36a-b939-4845-995a-41c50be890a0" + } + ], + "workloadContext": "Production" +} diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar new file mode 100644 index 0000000000000000000000000000000000000000..c7a325e46a7a60eef37e0c290f98bf8bb1e3c753 GIT binary patch literal 71960 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 /tmp/vnfid.log + +outputs: + oam_management_v4_address: + description: The IP address of the oam_management_v4_address + value: { get_param: node_ip } + diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/capabilities.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/capabilities.yml new file mode 100644 index 00000000..85af71a8 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/capabilities.yml @@ -0,0 +1,310 @@ +# +# 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 + description: Describes the attachment capabilities related to Vdu.Storage + tosca.capabilities.nfv.VirtualCompute: + derived_from: tosca.capabilities.Node + description: Describes the capabilities related to virtual compute resources + properties: + logical_node: + type: map + description: Describes the Logical Node requirements + required: false + entry_schema: + type: tosca.datatypes.nfv.LogicalNodeData + requested_additional_capabilities: + type: map + description: Describes additional capability for a particular VDU + required: false + entry_schema: + type: tosca.datatypes.nfv.RequestedAdditionalCapability + compute_requirements: + type: map + required: false + entry_schema: + type: string + virtual_memory: + type: tosca.datatypes.nfv.VirtualMemory + description: Describes virtual memory of the virtualized compute + required: true + virtual_cpu: + type: tosca.datatypes.nfv.VirtualCpu + description: Describes virtual CPU(s) of the virtualized compute + required: true + virtual_local_storage: + type: list + description: A list of virtual system disks created and destroyed as part of the VM lifecycle + required: false + entry_schema: + type: tosca.datatypes.nfv.VirtualBlockStorageData + description: virtual system disk definition + tosca.capabilities.nfv.VirtualBindable: + derived_from: tosca.capabilities.Node + description: Indicates that the node that includes it can be pointed by a tosca.relationships.nfv.VirtualBindsTo relationship type which is used to model the VduHasCpd association + tosca.capabilities.nfv.VirtualLinkable: + derived_from: tosca.capabilities.Root + description: A node type that includes the VirtualLinkable capability indicates that it can be pointed by tosca.relationships.nfv.VirtualLinksTo relationship type + 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/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/csar.meta b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/csar.meta new file mode 100644 index 00000000..bc3359ce --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/csar.meta @@ -0,0 +1,2 @@ +SDC-TOSCA-Meta-File-Version: 1.0 +SDC-TOSCA-Definitions-Version: 9.0 diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/data.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/data.yml new file mode 100644 index 00000000..552513af --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/data.yml @@ -0,0 +1,2417 @@ +# +# 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.VnfcAdditionalConfigurableProperties: + derived_from: tosca.datatypes.Root + description: VnfcAdditionalConfigurableProperties type is an empty base type for deriving data types for describing additional configurable properties for a given VNFC. + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VnfcConfigurableProperties: + derived_from: tosca.datatypes.Root + description: Defines the configurable properties of a VNFC + properties: + additional_vnfc_configurable_properties: + type: tosca.datatypes.nfv.VnfcAdditionalConfigurableProperties + description: Describes additional configuration for VNFC that can be modified using the ModifyVnfInfo operation + required: false + tosca.datatypes.nfv.RequestedAdditionalCapability: + derived_from: tosca.datatypes.Root + description: describes requested additional capability for a particular VDU + properties: + requested_additional_capability_name: + type: string + description: Identifies a requested additional capability for the VDU. + required: true + support_mandatory: + type: boolean + description: Indicates whether the requested additional capability is mandatory for successful operation. + required: true + min_requested_additional_capability_version: + type: string + description: Identifies the minimum version of the requested additional capability. + required: false + preferred_requested_additional_capability_version: + type: string + description: Identifies the preferred version of the requested additional capability. + required: false + target_performance_parameters: + type: map + description: Identifies specific attributes, dependent on the requested additional capability type. + required: true + entry_schema: + type: string + tosca.datatypes.nfv.VirtualMemory: + derived_from: tosca.datatypes.Root + description: supports the specification of requirements related to virtual memory of a virtual compute resource + properties: + virtual_mem_size: + type: scalar-unit.size + description: Amount of virtual memory. + required: true + virtual_mem_oversubscription_policy: + type: string + description: The memory core oversubscription policy in terms of virtual memory to physical memory on the platform. + required: false + vdu_mem_requirements: + type: map + description: The hardware platform specific VDU memory requirements. A map of strings that contains a set of key-value pairs that describes hardware platform specific VDU memory requirements. + required: false + entry_schema: + type: string + numa_enabled: + type: boolean + description: It specifies the memory allocation to be cognisant of the relevant process/core allocation. + required: false + default: false + tosca.datatypes.nfv.VirtualCpuPinning: + derived_from: tosca.datatypes.Root + description: Supports the specification of requirements related to the virtual CPU pinning configuration of a virtual compute resource + properties: + virtual_cpu_pinning_policy: + type: string + description: 'Indicates the policy for CPU pinning. The policy can take values + of "static" or "dynamic". In case of "dynamic" the allocation of virtual + CPU cores to logical CPU cores is decided by the VIM. (e.g.: SMT (Simultaneous + Multi-Threading) requirements). In case of "static" the allocation is requested + to be according to the virtual_cpu_pinning_rule.' + required: false + constraints: + - valid_values: + - static + - dynamic + virtual_cpu_pinning_rule: + type: list + description: Provides the list of rules for allocating virtual CPU cores to logical CPU cores/threads + required: false + entry_schema: + type: string + tosca.datatypes.nfv.VirtualCpu: + derived_from: tosca.datatypes.Root + description: Supports the specification of requirements related to virtual CPU(s) of a virtual compute resource + properties: + cpu_architecture: + type: string + description: CPU architecture type. Examples are x86, ARM + required: false + num_virtual_cpu: + type: integer + description: Number of virtual CPUs + required: true + constraints: + - greater_than: 0 + virtual_cpu_clock: + type: scalar-unit.frequency + description: Minimum virtual CPU clock rate + required: false + virtual_cpu_oversubscription_policy: + type: string + description: CPU core oversubscription policy e.g. the relation of virtual CPU cores to physical CPU cores/threads. + required: false + vdu_cpu_requirements: + type: map + description: The hardware platform specific VDU CPU requirements. A map of strings that contains a set of key-value pairs describing VDU CPU specific hardware platform requirements. + required: false + entry_schema: + type: string + virtual_cpu_pinning: + type: tosca.datatypes.nfv.VirtualCpuPinning + description: The virtual CPU pinning configuration for the virtualised compute resource. + required: false + tosca.datatypes.nfv.LogicalNodeData: + derived_from: tosca.datatypes.Root + description: Describes compute, memory and I/O requirements associated with a particular VDU. + properties: + logical_node_requirements: + type: map + description: The logical node-level compute, memory and I/O requirements. A map of strings that contains a set of key-value pairs that describes hardware platform specific deployment requirements, including the number of CPU cores on this logical node, a memory configuration specific to a logical node or a requirement related to the association of an I/O device with the logical node. + required: false + entry_schema: + type: string + tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements: + derived_from: tosca.datatypes.Root + description: Describes requirements on a virtual network interface + properties: + name: + type: string + description: Provides a human readable name for the requirement. + required: false + description: + type: string + description: Provides a human readable description of the requirement. + required: false + support_mandatory: + type: boolean + description: Indicates whether fulfilling the constraint is mandatory (TRUE) for successful operation or desirable (FALSE). + required: true + network_interface_requirements: + type: map + description: The network interface requirements. A map of strings that contain a set of key-value pairs that describes the hardware platform specific network interface deployment requirements. + required: true + entry_schema: + type: string + nic_io_requirements: + type: tosca.datatypes.nfv.LogicalNodeData + description: references (couples) the CP with any logical node I/O requirements (for network devices) that may have been created. Linking these attributes is necessary so that so that I/O requirements that need to be articulated at the logical node level can be associated with the network interface requirements associated with the CP. + 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 + description: Describes the information on the MAC addresses to be assigned to a connection point. + properties: + mac_address_assignment: + type: boolean + description: Specifies if the address assignment is the responsibility of management and orchestration function or not. If it is set to True, it is the management and orchestration function responsibility + required: true + tosca.datatypes.nfv.L3AddressData: + derived_from: tosca.datatypes.Root + description: Provides information about Layer 3 level addressing scheme and parameters applicable to a CP + properties: + ip_address_assignment: + type: boolean + description: Specifies if the address assignment is the responsibility of management and orchestration function or not. If it is set to True, it is the management and orchestration function responsibility + required: true + floating_ip_activated: + type: boolean + description: Specifies if the floating IP scheme is activated on the Connection Point or not + required: true + ip_address_type: + type: string + description: Defines address type. The address type should be aligned with the address type supported by the layer_protocols properties of the parent VnfExtCp + required: false + constraints: + - valid_values: + - ipv4 + - ipv6 + number_of_ip_address: + type: integer + description: Minimum number of IP addresses to be assigned + required: false + constraints: + - greater_than: 0 + fixed_ip_address: + type: list + entry_schema: + type: string + required: false + tosca.datatypes.nfv.AddressData: + derived_from: tosca.datatypes.Root + description: Describes information about the addressing scheme and parameters applicable to a CP + properties: + address_type: + type: string + description: Describes the type of the address to be assigned to a connection point. The content type shall be aligned with the address type supported by the layerProtocol property of the connection point + required: true + constraints: + - valid_values: + - mac_address + - ip_address + l2_address_data: + type: tosca.datatypes.nfv.L2AddressData + description: Provides the information on the MAC addresses to be assigned to a connection point. + required: false + l3_address_data: + type: tosca.datatypes.nfv.L3AddressData + description: Provides the information on the IP addresses to be assigned to a connection point + required: false + tosca.datatypes.nfv.ConnectivityType: + derived_from: tosca.datatypes.Root + description: describes additional connectivity information of a virtualLink + properties: + layer_protocols: + type: list + description: Identifies the protocol a virtualLink gives access to (ethernet, mpls, odu2, ipv4, ipv6, pseudo-wire).The top layer protocol of the virtualLink protocol stack shall always be provided. The lower layer protocols may be included when there are specific requirements on these layers. + required: true + entry_schema: + type: string + constraints: + - valid_values: + - ethernet + - mpls + - odu2 + - ipv4 + - ipv6 + - pseudo-wire + flow_pattern: + type: string + description: Identifies the flow pattern of the connectivity + 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 + description: describes additional instantiation data for a given Vdu.Compute used in a specific deployment flavour. + properties: + min_number_of_instances: + type: integer + description: Minimum number of instances of the VNFC based on this Vdu.Compute that is permitted to exist for a particular VNF deployment flavour. + required: true + constraints: + - greater_or_equal: 0 + max_number_of_instances: + type: integer + description: Maximum number of instances of the VNFC based on this Vdu.Compute that is permitted to exist for a particular VNF deployment flavour. + required: true + constraints: + - greater_or_equal: 0 + watchdog: + type: string + required: true + vmBootUpTimeOut: + type: integer + required: false + tosca.datatypes.nfv.LinkBitrateRequirements: + derived_from: tosca.datatypes.Root + description: describes the requirements in terms of bitrate for a virtual link + properties: + root: + type: integer + description: Specifies the throughput requirement in bits per second of the link (e.g. bitrate of E-Line, root bitrate of E-Tree, aggregate capacity of E-LAN). + required: true + constraints: + - greater_or_equal: 0 + leaf: + type: integer + description: Specifies the throughput requirement in bits per second of leaf connections to the link when applicable to the connectivity type (e.g. for E-Tree and E LAN branches). + required: false + constraints: + - greater_or_equal: 0 + tosca.datatypes.nfv.Qos: + derived_from: tosca.datatypes.Root + description: describes QoS data for a given VL used in a VNF deployment flavour + properties: + latency: + type: scalar-unit.time + description: Specifies the maximum latency + required: true + constraints: + - greater_than: 0 s + packet_delay_variation: + type: scalar-unit.time + description: Specifies the maximum jitter + required: true + constraints: + - greater_or_equal: 0 s + packet_loss_ratio: + type: float + description: Specifies the maximum packet loss ratio + required: false + constraints: + - in_range: + - 0.0 + - 1.0 + tosca.datatypes.nfv.IpAllocationPool: + derived_from: tosca.datatypes.Root + description: Specifies a range of IP addresses + properties: + start_ip_address: + type: string + description: The IP address to be used as the first one in a pool of addresses derived from the cidr block full IP range + required: true + end_ip_address: + type: string + description: The IP address to be used as the last one in a pool of addresses derived from the cidr block full IP range + required: true + tosca.datatypes.nfv.L2ProtocolData: + derived_from: tosca.datatypes.Root + description: describes L2 protocol data for a given virtual link used in a specific VNF deployment flavour. + properties: + name: + type: string + description: Identifies the network name associated with this L2 protocol. + required: false + network_type: + type: string + description: Specifies the network type for this L2 protocol.The value may be overridden at run-time. + required: false + constraints: + - valid_values: + - flat + - vlan + - vxlan + - gre + vlan_transparent: + type: boolean + description: Specifies whether to support VLAN transparency for this L2 protocol or not. + required: false + default: false + mtu: + type: integer + description: Specifies the maximum transmission unit (MTU) value for this L2 protocol. + required: false + constraints: + - greater_than: 0 + segmentation_id: + type: integer + required: false + physical_network: + type: string + required: false + tosca.datatypes.nfv.L3ProtocolData: + derived_from: tosca.datatypes.Root + description: describes L3 protocol data for a given virtual link used in a specific VNF deployment flavour. + properties: + name: + type: string + description: Identifies the network name associated with this L3 protocol. + required: false + ip_version: + type: string + description: Specifies IP version of this L3 protocol.The value of the ip_version property shall be consistent with the value of the layer_protocol in the connectivity_type property of the virtual link node. + required: true + constraints: + - valid_values: + - ipv4 + - ipv6 + cidr: + type: string + description: Specifies the CIDR (Classless Inter-Domain Routing) of this L3 protocol. The value may be overridden at run-time. + required: true + ip_allocation_pools: + type: list + description: Specifies the allocation pools with start and end IP addresses for this L3 protocol. The value may be overridden at run-time. + required: false + entry_schema: + type: tosca.datatypes.nfv.IpAllocationPool + gateway_ip: + type: string + description: Specifies the gateway IP address for this L3 protocol. The value may be overridden at run-time. + required: false + dhcp_enabled: + type: boolean + description: Indicates whether DHCP (Dynamic Host Configuration Protocol) is enabled or disabled for this L3 protocol. The value may be overridden at run-time. + required: false + ipv6_address_mode: + type: string + description: Specifies IPv6 address mode. May be present when the value of the ipVersion attribute is "ipv6" and shall be absent otherwise. The value may be overridden at run-time. + required: false + constraints: + - valid_values: + - slaac + - dhcpv6-stateful + - dhcpv6-stateless + tosca.datatypes.nfv.VirtualLinkProtocolData: + derived_from: tosca.datatypes.Root + description: describes one protocol layer and associated protocol data for a given virtual link used in a specific VNF deployment flavour + properties: + associated_layer_protocol: + type: string + description: Identifies one of the protocols a virtualLink gives access to (ethernet, mpls, odu2, ipv4, ipv6, pseudo-wire) as specified by the connectivity_type property. + required: true + constraints: + - valid_values: + - ethernet + - mpls + - odu2 + - ipv4 + - ipv6 + - pseudo-wire + l2_protocol_data: + type: tosca.datatypes.nfv.L2ProtocolData + description: Specifies the L2 protocol data for a virtual link. Shall be present when the associatedLayerProtocol attribute indicates a L2 protocol and shall be absent otherwise. + required: false + l3_protocol_data: + type: tosca.datatypes.nfv.L3ProtocolData + description: Specifies the L3 protocol data for this virtual link. Shall be present when the associatedLayerProtocol attribute indicates a L3 protocol and shall be absent otherwise. + required: false + tosca.datatypes.nfv.VlProfile: + derived_from: tosca.datatypes.Root + description: Describes additional instantiation data for a given VL used in a specific VNF deployment flavour. + properties: + max_bitrate_requirements: + type: tosca.datatypes.nfv.LinkBitrateRequirements + description: Specifies the maximum bitrate requirements for a VL instantiated according to this profile. + required: true + min_bitrate_requirements: + type: tosca.datatypes.nfv.LinkBitrateRequirements + description: Specifies the minimum bitrate requirements for a VL instantiated according to this profile. + required: true + qos: + type: tosca.datatypes.nfv.Qos + description: Specifies the QoS requirements of a VL instantiated according to this profile. + required: false + virtual_link_protocol_data: + type: list + description: Specifies the protocol data for a virtual link. + required: false + entry_schema: + type: tosca.datatypes.nfv.VirtualLinkProtocolData + tosca.datatypes.nfv.VduLevel: + derived_from: tosca.datatypes.Root + description: Indicates for a given Vdu.Compute in a given level the number of instances to deploy + properties: + number_of_instances: + type: integer + description: Number of instances of VNFC based on this VDU to deploy for this level. + required: true + constraints: + - greater_or_equal: 0 + tosca.datatypes.nfv.ScaleInfo: + derived_from: tosca.datatypes.Root + description: Indicates for a given scaleAspect the corresponding scaleLevel + properties: + scale_level: + type: integer + description: The scale level for a particular aspect + required: true + constraints: + - greater_or_equal: 0 + tosca.datatypes.nfv.ScalingAspect: + derived_from: tosca.datatypes.Root + properties: + name: + type: string + required: true + description: + type: string + required: true + max_scale_level: + type: integer + required: true + constraints: + - greater_or_equal: 0 + step_deltas: + type: list + required: false + entry_schema: + type: string + tosca.datatypes.nfv.InstantiationLevel: + derived_from: tosca.datatypes.Root + description: Describes the scale level for each aspect that corresponds to a given level of resources to be instantiated within a deployment flavour in term of the number VNFC instances + properties: + description: + type: string + description: Human readable description of the level + required: true + scale_info: + type: map + description: Represents for each aspect the scale level that corresponds to this instantiation level. scale_info shall be present if the VNF supports scaling. + required: false + entry_schema: + type: tosca.datatypes.nfv.ScaleInfo + tosca.datatypes.nfv.VnfInstantiateOperationConfiguration: + derived_from: tosca.datatypes.Root + description: represents information that affect the invocation of the InstantiateVnf operation. + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VnfScaleOperationConfiguration: + derived_from: tosca.datatypes.Root + description: Represents information that affect the invocation of the ScaleVnf operation + properties: + scaling_by_more_than_one_step_supported: + type: boolean + description: Signals whether passing a value larger than one in the numScalingSteps parameter of the ScaleVnf operation is supported by this VNF. + required: false + default: false + tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration: + derived_from: tosca.datatypes.Root + description: represents information that affect the invocation of the ScaleVnfToLevel operation + properties: + arbitrary_target_levels_supported: + type: boolean + description: Signals whether scaling according to the parameter "scaleInfo" is supported by this VNF + required: true + tosca.datatypes.nfv.VnfHealOperationConfiguration: + derived_from: tosca.datatypes.Root + description: represents information that affect the invocation of the HealVnf operation + properties: + causes: + type: list + description: Supported "cause" parameter values + required: false + entry_schema: + type: string + tosca.datatypes.nfv.VnfTerminateOperationConfiguration: + derived_from: tosca.datatypes.Root + description: represents information that affect the invocation of the TerminateVnf + properties: + min_graceful_termination_timeout: + type: scalar-unit.time + description: Minimum timeout value for graceful termination of a VNF instance + required: true + max_recommended_graceful_termination_timeout: + type: scalar-unit.time + description: Maximum recommended timeout value that can be needed to gracefully terminate a VNF instance of a particular type under certain conditions, such as maximum load condition. This is provided by VNF provider as information for the operator facilitating the selection of optimal timeout value. This value is not used as constraint + required: false + tosca.datatypes.nfv.VnfOperateOperationConfiguration: + derived_from: tosca.datatypes.Root + description: represents information that affect the invocation of the OperateVnf operation + properties: + min_graceful_stop_timeout: + type: scalar-unit.time + description: Minimum timeout value for graceful stop of a VNF instance + required: true + max_recommended_graceful_stop_timeout: + type: scalar-unit.time + description: Maximum recommended timeout value that can be needed to gracefully stop a VNF instance of a particular type under certain conditions, such as maximum load condition. This is provided by VNF provider as information for the operator facilitating the selection of optimal timeout value. This value is not used as constraint + required: false + tosca.datatypes.nfv.VnfChangeFlavourOperationConfiguration: + derived_from: tosca.datatypes.Root + description: represents information that affect the invocation of the ChangeVnfFlavour operation + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VnfProfile: + derived_from: tosca.datatypes.Root + description: describes a profile for instantiating VNFs of a particular NS DF according to a specific VNFD and VNF DF. + properties: + instantiation_level: + type: string + description: Identifier of the instantiation level of the VNF DF to be used for instantiation. If not present, the default instantiation level as declared in the VNFD shall be used. + required: false + min_number_of_instances: + type: integer + description: Minimum number of instances of the VNF based on this VNFD that is permitted to exist for this VnfProfile. + required: true + constraints: + - greater_or_equal: 0 + max_number_of_instances: + type: integer + description: Maximum number of instances of the VNF based on this VNFD that is permitted to exist for this VnfProfile. + required: true + constraints: + - greater_or_equal: 0 + tosca.datatypes.nfv.UriAuthority: + derived_from: tosca.datatypes.Root + description: information that corresponds to the authority component of a URI as specified in IETF RFC 3986 [8] + properties: + user_info: + type: string + description: user_info field of the authority component of a URI + required: false + host: + type: string + description: host field of the authority component of a URI + required: false + port: + type: string + description: port field of the authority component of a URI + required: false + tosca.datatypes.nfv.UriComponents: + derived_from: tosca.datatypes.Root + description: information used to build a URI that complies with IETF RFC 3986 [8]. + properties: + scheme: + type: string + description: scheme component of a URI. + required: true + authority: + type: tosca.datatypes.nfv.UriAuthority + description: Authority component of a URI + required: false + path: + type: string + description: path component of a URI. + required: false + query: + type: string + description: query component of a URI. + required: false + fragment: + type: string + description: fragment component of a URI. + required: false + tosca.datatypes.nfv.InterfaceDetails: + derived_from: tosca.datatypes.Root + description: information used to access an interface exposed by a VNF + properties: + uri_components: + type: tosca.datatypes.nfv.UriComponents + description: Provides components to build a Uniform Ressource Identifier (URI) where to access the interface end point. + required: false + interface_specific_data: + type: map + description: Provides additional details that are specific to the type of interface considered. + required: false + entry_schema: + type: string + tosca.datatypes.nfv.VirtualLinkMonitoringParameter: + derived_from: tosca.datatypes.Root + description: Represents information on virtualised resource related performance metrics applicable to the VNF. + properties: + name: + type: string + description: Human readable name of the monitoring parameter + required: true + performance_metric: + type: string + description: Identifies a performance metric derived from those defined in ETSI GS NFV-IFA 027.The packetOutgoingVirtualLink and packetIncomingVirtualLink metrics shall be obtained by aggregation the PacketOutgoing and PacketIncoming measurements defined in clause 7.1 of GS NFV-IFA 027 of all virtual link ports attached to the virtual link to which the metrics apply. + required: true + constraints: + - valid_values: + - packet_outgoing_virtual_link + - packet_incoming_virtual_link + collection_period: + type: scalar-unit.time + description: Describes the recommended periodicity at which to collect the performance information. + required: false + constraints: + - greater_than: 0 s + tosca.datatypes.nfv.VnfcMonitoringParameter: + derived_from: tosca.datatypes.Root + description: Represents information on virtualised resource related performance metrics applicable to the VNF. + properties: + name: + type: string + description: Human readable name of the monitoring parameter + required: true + performance_metric: + type: string + description: Identifies the performance metric, according to ETSI GS NFV-IFA 027. + required: true + constraints: + - valid_values: + - v_cpu_usage_mean_vnf + - v_cpu_usage_peak_vnf + - v_memory_usage_mean_vnf + - v_memory_usage_peak_vnf + - v_disk_usage_mean_vnf + - v_disk_usage_peak_vnf + - byte_incoming_vnf_int_cp + - byte_outgoing_vnf_int_cp + - packet_incoming_vnf_int_cp + - packet_outgoing_vnf_int_cp + collection_period: + type: scalar-unit.time + description: Describes the recommended periodicity at which to collect the performance information. + required: false + constraints: + - greater_than: 0 s + tosca.datatypes.nfv.VnfChangeExtConnectivityOperationConfiguration: + derived_from: tosca.datatypes.Root + description: represents information that affect the invocation of the ChangeExtVnfConnectivity operation + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VnfMonitoringParameter: + derived_from: tosca.datatypes.Root + description: Represents information on virtualised resource related performance metrics applicable to the VNF. + properties: + name: + type: string + description: Human readable name of the monitoring parameter + required: true + performance_metric: + type: string + description: Identifies the performance metric, according to ETSI GS NFV-IFA 027. + required: true + constraints: + - valid_values: + - v_cpu_usage_mean_vnf + - v_cpu_usage_peak_vnf + - v_memory_usage_mean_vnf + - v_memory_usage_peak_vnf + - v_disk_usage_mean_vnf + - v_disk_usage_peak_vnf + - byte_incoming_vnf_ext_cp + - byte_outgoing_vnf_ext_cp + - packet_incoming_vnf_ext_cp + - packet_outgoing_vnf_ext_cp + collection_period: + type: scalar-unit.time + description: Describes the recommended periodicity at which to collect the performance information. + required: false + constraints: + - greater_than: 0 s + tosca.datatypes.nfv.VnfLcmOperationsConfiguration: + derived_from: tosca.datatypes.Root + description: Represents information to configure lifecycle management operations + properties: + instantiate: + type: tosca.datatypes.nfv.VnfInstantiateOperationConfiguration + description: Configuration parameters for the InstantiateVnf operation + required: false + scale: + type: tosca.datatypes.nfv.VnfScaleOperationConfiguration + description: Configuration parameters for the ScaleVnf operation + required: false + scale_to_level: + type: tosca.datatypes.nfv.VnfScaleToLevelOperationConfiguration + description: Configuration parameters for the ScaleVnfToLevel operation + required: false + change_flavour: + type: tosca.datatypes.nfv.VnfChangeFlavourOperationConfiguration + description: Configuration parameters for the changeVnfFlavourOpConfig operation + required: false + heal: + type: tosca.datatypes.nfv.VnfHealOperationConfiguration + description: Configuration parameters for the HealVnf operation + required: false + terminate: + type: tosca.datatypes.nfv.VnfTerminateOperationConfiguration + description: Configuration parameters for the TerminateVnf operation + required: false + operate: + type: tosca.datatypes.nfv.VnfOperateOperationConfiguration + description: Configuration parameters for the OperateVnf operation + required: false + change_ext_connectivity: + type: tosca.datatypes.nfv.VnfChangeExtConnectivityOperationConfiguration + description: Configuration parameters for the changeExtVnfConnectivityOpConfig operation + required: false + tosca.datatypes.nfv.CpProtocolData: + derived_from: tosca.datatypes.Root + description: Describes and associates the protocol layer that a CP uses together with other protocol and connection point information + properties: + associated_layer_protocol: + type: string + required: true + description: One of the values of the property layer_protocols of the CP + constraints: + - valid_values: + - ethernet + - mpls + - odu2 + - ipv4 + - ipv6 + - pseudo-wire + address_data: + type: list + description: Provides information on the addresses to be assigned to the CP + entry_schema: + type: tosca.datatypes.nfv.AddressData + required: false + tosca.datatypes.nfv.VnfAdditionalConfigurableProperties: + derived_from: tosca.datatypes.Root + description: is an empty base type for deriving data types for describing additional configurable properties for a given VNF + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VnfConfigurableProperties: + derived_from: tosca.datatypes.Root + description: indicates configuration properties for a given VNF (e.g. related to auto scaling and auto healing). + properties: + is_autoscale_enabled: + type: boolean + description: It permits to enable (TRUE)/disable (FALSE) the auto-scaling functionality. If the properties is not present for configuring, then VNF property is not supported + required: false + is_autoheal_enabled: + type: boolean + description: It permits to enable (TRUE)/disable (FALSE) the auto-healing functionality. If the properties is not present for configuring, then VNF property is not supported + required: false + additional_configurable_properties: + description: It provides VNF specific configurable properties that can be modified using the ModifyVnfInfo operation + required: false + type: tosca.datatypes.nfv.VnfAdditionalConfigurableProperties + tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions: + derived_from: tosca.datatypes.Root + description: is an empty base type for deriving data types for describing VNF-specific extension + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata: + derived_from: tosca.datatypes.Root + description: is an empty base type for deriving data types for describing VNF-specific metadata + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VnfInfoModifiableAttributes: + derived_from: tosca.datatypes.Root + description: Describes VNF-specific extension and metadata for a given VNF + properties: + extensions: + type: tosca.datatypes.nfv.VnfInfoModifiableAttributesExtensions + description: \"Extension\" properties of VnfInfo that are writeable + required: false + metadata: + type: tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata + description: \"Metadata\" properties of VnfInfo that are writeable + required: false + tosca.datatypes.nfv.VirtualLinkBitrateLevel: + derived_from: tosca.datatypes.Root + description: Describes bitrate requirements applicable to the virtual link instantiated from a particicular VnfVirtualLink + properties: + description: + type: string + required: false + bitrate_requirements: + type: tosca.datatypes.nfv.LinkBitrateRequirements + description: Virtual link bitrate requirements for an instantiation level or bitrate delta for a scaling step + required: true + tosca.datatypes.nfv.VnfOperationAdditionalParameters: + derived_from: tosca.datatypes.Root + description: Is an empty base type for deriving data type for describing VNF-specific parameters to be passed when invoking lifecycle management operations + properties: + description: + type: string + required: false + tosca.datatypes.nfv.VirtualFileStorageData: + derived_from: tosca.datatypes.Root + description: VirtualFileStorageData describes file storage requirements associated with compute resources in a particular VDU + properties: + size_of_storage: + type: scalar-unit.size + description: Size of virtualized storage resource + required: true + file_system_protocol: + type: string + description: The shared file system protocol (e.g. NFS, CIFS) + required: true + tosca.datatypes.nfv.VirtualObjectStorageData: + derived_from: tosca.datatypes.Root + description: VirtualObjectStorageData describes object storage requirements associated with compute resources in a particular VDU + properties: + max_size_of_storage: + type: scalar-unit.size + description: Maximum size of virtualized storage resource + required: false + tosca.datatypes.nfv.VirtualBlockStorageData: + derived_from: tosca.datatypes.Root + description: VirtualBlockStorageData describes block storage requirements associated with compute resources in a particular VDU, either as a local disk or as virtual attached storage + properties: + size_of_storage: + type: scalar-unit.size + description: Size of virtualised storage resource + required: true + vdu_storage_requirements: + type: map + description: The hardware platform specific storage requirements. A map of strings that contains a set of key-value pairs that represents the hardware platform specific storage deployment requirements. + required: false + entry_schema: + type: string + rdma_enabled: + type: boolean + description: Indicates if the storage support RDMA + required: false + default: false + tosca.datatypes.nfv.SwImageData: + derived_from: tosca.datatypes.Root + description: describes information related to a software image artifact + properties: + name: + type: string + description: Name of this software image + required: true + version: + type: string + description: Version of this software image + required: true + checksum: + type: string + description: Checksum of the software image file + required: true + container_format: + type: string + description: The container format describes the container file format in which software image is provided + required: true + constraints: + - valid_values: + - aki + - ami + - ari + - bare + - docker + - ova + - ovf + disk_format: + type: string + description: The disk format of a software image is the format of the underlying disk image + required: true + constraints: + - valid_values: + - aki + - ami + - ari + - iso + - qcow2 + - raw + - vdi + - vhd + - vhdx + - vmdk + min_disk: + type: scalar-unit.size + description: The minimal disk size requirement for this software image + required: true + min_ram: + type: scalar-unit.size + description: The minimal RAM requirement for this software image + required: false + size: + type: scalar-unit.size + description: The size of this software image + required: true + operating_system: + type: string + description: Identifies the operating system used in the software image + required: false + supported_virtualisation_environments: + type: list + description: Identifies the virtualisation environments (e.g. hypervisor) compatible with this software image + required: false + entry_schema: + type: string + onap.datatypes.monitoring.metricsPerEventName: + derived_from: tosca.datatypes.Root + properties: + controlLoopSchemaType: + constraints: + - valid_values: + - VM + - VNF + description: Specifies Control Loop Schema Type for the event Name e.g. VNF, VM + required: true + type: string + eventName: + description: Event name to which thresholds need to be applied + required: true + type: string + policyName: + description: TCA Policy Scope Name + required: true + type: string + policyScope: + description: TCA Policy Scope + required: true + type: string + policyVersion: + description: TCA Policy Scope Version + required: true + type: string + thresholds: + description: Thresholds associated with eventName + entry_schema: + type: onap.datatypes.monitoring.thresholds + required: true + type: list + onap.datatypes.monitoring.tca_policy: + derived_from: tosca.datatypes.Root + properties: + domain: + constraints: + - equal: measurementsForVfScaling + default: measurementsForVfScaling + description: Domain name to which TCA needs to be applied + required: true + type: string + metricsPerEventName: + description: Contains eventName and threshold details that need to be applied to given eventName + entry_schema: + type: onap.datatypes.monitoring.metricsPerEventName + required: true + type: list + onap.datatypes.monitoring.thresholds: + derived_from: tosca.datatypes.Root + properties: + closedLoopControlName: + description: Closed Loop Control Name associated with the threshold + required: true + type: string + closedLoopEventStatus: + constraints: + - valid_values: + - ONSET + - ABATED + description: Closed Loop Event Status of the threshold + required: true + type: string + direction: + constraints: + - valid_values: + - LESS + - LESS_OR_EQUAL + - GREATER + - GREATER_OR_EQUAL + - EQUAL + description: Direction of the threshold + required: true + type: string + fieldPath: + constraints: + - valid_values: + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedTotalPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedOctetsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedUnicastPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedMulticastPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedBroadcastPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedDiscardedPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].receivedErrorPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsDelta + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedTotalPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedOctetsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedUnicastPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedMulticastPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedBroadcastPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedDiscardedPacketsAccumulated + - $.event.measurementsForVfScalingFields.vNicPerformanceArray[*].transmittedErrorPacketsAccumulated + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuIdle + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageInterrupt + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageNice + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSoftIrq + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSteal + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuUsageSystem + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].cpuWait + - $.event.measurementsForVfScalingFields.cpuUsageArray[*].percentUsage + - $.event.measurementsForVfScalingFields.meanRequestLatency + - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryBuffered + - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryCached + - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryConfigured + - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryFree + - $.event.measurementsForVfScalingFields.memoryUsageArray[*].memoryUsed + - $.event.measurementsForVfScalingFields.additionalMeasurements[*].arrayOfFields[0].value + description: Json field Path as per CEF message which needs to be analyzed for TCA + required: true + type: string + severity: + constraints: + - valid_values: + - CRITICAL + - MAJOR + - MINOR + - WARNING + - NORMAL + description: Threshold Event Severity + required: true + type: string + thresholdValue: + description: Threshold value for the field Path inside CEF message + required: true + type: integer + version: + description: Version number associated with the threshold + required: true + type: string diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml new file mode 100644 index 00000000..7192b690 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml @@ -0,0 +1,66 @@ +tosca_definitions_version: tosca_simple_yaml_1_1 + +description: VNF Descriptor for dummy VNFD + +# ============LICENSE_START======================================================= +# Copyright (C) 2019 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========================================================= +# + +imports: + - etsi_nfv_sol001_vnfd_0_10_0_type.yaml + +data_types: + node_types: + Vendor.vnf.name: + derived_from: tosca.nodes.nfv.VNF + properties: + # TODO: descriptor_id should be a UUID + descriptor_id: + type: string + constraints: [ valid_values: [ sgsn-mme_12df452s04131 ] ] + default: sgsn-mme_12df452s04131 + flavour_id: + type: string + constraints: [ valid_values: [ default ] ] + default: default + flavour_description: + type: string + default: '' + interfaces: + Vnflcm: + type: tosca.interfaces.nfv.Vnflcm + instantiate: + heal: + +topology_template: + node_templates: + dummy_Vnf: + type: Vendor.vnf.name + properties: + flavour_id: default + flavour_description: > + A customized VNF Deployment Flavour + lcm_operations_configuration: + scale: + scaling_by_more_than_one_step_supported: true + interfaces: + Vnflcm: + instantiate: + terminate: + heal: + scale: \ No newline at end of file diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/groups.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/groups.yml new file mode 100644 index 00000000..3fd26fff --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/groups.yml @@ -0,0 +1,144 @@ +# +# 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 + tosca.groups.nfv.PlacementGroup: + derived_from: tosca.groups.Root + description: PlacementGroup is used for describing the affinity or anti-affinity relationship applicable between the virtualization containers to be created based on different VDUs, or between internal VLs to be created based on different VnfVirtualLinkDesc(s) + properties: + description: + type: string + description: Human readable description of the group + required: true + members: + - tosca.nodes.nfv.Vdu.Compute + - tosca.nodes.nfv.VnfVirtualLink diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/interfaces.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/interfaces.yml new file mode 100644 index 00000000..35353603 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/interfaces.yml @@ -0,0 +1,138 @@ +# +# 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. + tosca.interfaces.nfv.Vnflcm: + 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 diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json new file mode 100644 index 00000000..9098234e --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json @@ -0,0 +1,25 @@ +[ + { + "vfModuleModelName": "manualDistributionTestVNF..base_ves_med1..module-0", + "vfModuleModelInvariantUUID": "dafd0c51-d03c-4849-a777-756e608ad6a5", + "vfModuleModelVersion": "1", + "vfModuleModelUUID": "b31a30a8-a4e4-4a5e-8f2d-ce7662ea4872", + "vfModuleModelCustomizationUUID": "6c3eafaf-dd98-4b35-8414-86e2beaed279", + "isBase": true, + "artifacts": [ + "e216d9da-18c4-460f-8b2b-d7f8dd9e9295", + "6243747f-e794-4519-82b2-6399846f1951" + ], + "properties": { + "min_vf_module_instances": "1", + "vf_module_label": "base_ves_med1", + "max_vf_module_instances": "1", + "vfc_list": "", + "vf_module_description": "", + "vf_module_type": "Base", + "availability_zone_count": "", + "volume_group": "false", + "initial_count": "1" + } + } +] \ No newline at end of file diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/nodes.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/nodes.yml new file mode 100644 index 00000000..d188dd1b --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/nodes.yml @@ -0,0 +1,4980 @@ +# +# 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.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.Container.Application: + derived_from: tosca.nodes.Root + requirements: + - host: + capability: tosca.capabilities.Container + node: tosca.nodes.Container + 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 + 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.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.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.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.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.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.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.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.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.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.Container.Runtime: + derived_from: tosca.nodes.SoftwareComponent + capabilities: + host: + type: tosca.capabilities.Container + scalable: + type: tosca.capabilities.Scalable + 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.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.nodes.PortMirroringConfiguration: + derived_from: tosca.nodes.Root + requirements: + - source: + capability: org.openecomp.capabilities.PortMirroring + occurrences: + - 1 + - UNBOUNDED + - collector: + capability: org.openecomp.capabilities.PortMirroring + occurrences: + - 1 + - 1 + org.openecomp.resource.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.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.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.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.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.vl.nodes.network.Network: + derived_from: tosca.nodes.network.Network + properties: + vendor: + type: string + required: false + vl_name: + type: string + required: false + capabilities: + end_point: + type: tosca.capabilities.Endpoint + org.openecomp.resource.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.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.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 + 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.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.CR: + derived_from: tosca.nodes.Root + properties: + cr_function: + type: string + cr_role: + type: string + cr_type: + type: string + 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.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.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.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.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.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.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.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.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: string + default: false + sdnc_model_name: + type: string + sdnc_model_version: + type: string + sdnc_artifact_name: + type: string + skip_post_instantiation_configuration: + type: boolean + default: true + constraints: + - valid_values: + - true + - false + org.openecomp.resource.vfc.nodes.volume: + derived_from: tosca.nodes.BlockStorage + org.openecomp.nodes.ServiceProxy: + derived_from: tosca.nodes.Root + org.openecomp.resource.cp.v2.extCP: + derived_from: org.openecomp.resource.cp.nodes.network.Port + description: The SDC External Connection Point base type + capabilities: + port_mirroring: + type: org.openecomp.capabilities.PortMirroring + org.openecomp.resource.cp.nodes.network.SubInterface: + derived_from: tosca.nodes.network.Port + 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.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.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.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 + sdnc_model_name: + type: string + sdnc_model_version: + type: string + sdnc_artifact_name: + type: string + skip_post_instantiation_configuration: + type: boolean + default: true + constraints: + - valid_values: + - true + - false + org.openecomp.resource.abstract.nodes.service: + derived_from: tosca.nodes.Root + 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.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.nodes.FabricConfiguration: + derived_from: org.openecomp.nodes.Configuration + requirements: + - fabric_configuration_monitoring: + capability: org.openecomp.capabilities.FabricConfiguration + occurrences: + - 1 + - 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.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.ELine: + derived_from: org.openecomp.resource.vl.VL + capabilities: + virtual_linkable: + type: tosca.capabilities.network.Linkable + occurrences: + - 0 + - 2 + 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.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.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.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.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.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.vl.internalVL: + derived_from: tosca.nodes.network.Network + description: The AT&T internal (VF-level) Virtual Link + org.openecomp.resource.cp.nodes.network.Port: + derived_from: tosca.nodes.network.Port + properties: + network_role: + 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 + tosca.nodes.nfv.Vdu.VirtualBlockStorage: + derived_from: tosca.nodes.Root + description: This node type describes the specifications of requirements related to virtual block storage resources + properties: + virtual_block_storage_data: + type: tosca.datatypes.nfv.VirtualBlockStorageData + description: Describes the block storage characteristics. + required: true + sw_image_data: + type: tosca.datatypes.nfv.SwImageData + description: Defines information related to a SwImage artifact used by this Vdu.Compute node. + required: false + capabilities: + virtual_storage: + type: tosca.capabilities.nfv.VirtualStorage + description: Defines the capabilities of virtual_storage. + tosca.nodes.nfv.Vdu.Compute: + derived_from: tosca.nodes.Root + description: Describes the virtual compute part of a VDU which is a construct supporting the description of the deployment and operational behavior of a VNFC + properties: + name: + type: string + description: Human readable name of the VDU + required: true + description: + type: string + description: Human readable description of the VDU + required: true + boot_order: + type: list + description: References a node template name from which a valid boot device is created + required: false + entry_schema: + type: string + nfvi_constraints: + type: list + description: Describes constraints on the NFVI for the VNFC instance(s) created from this VDU + required: false + entry_schema: + type: string + monitoring_parameters: + type: list + description: Describes monitoring parameters applicable to a VNFC instantiated from this VDU + required: false + entry_schema: + type: tosca.datatypes.nfv.VnfcMonitoringParameter + vdu_profile: + type: tosca.datatypes.nfv.VduProfile + description: Defines additional instantiation data for the VDU.Compute node + required: true + sw_image_data: + type: tosca.datatypes.nfv.SwImageData + description: Defines information related to a SwImage artifact used by this Vdu.Compute node + required: false + boot_data: + type: string + description: Contains a string or a URL to a file contained in the VNF package used to customize a virtualised compute resource at boot time. The bootData may contain variable parts that are replaced by deployment specific values before being sent to the VIM. + required: false + inject_files: + type: tosca.datatypes.nfv.injectFile + required: false + meta_data: + type: map + entry_schema: + type: string + required: false + capabilities: + virtual_compute: + type: tosca.capabilities.nfv.VirtualCompute + occurrences: + - 1 + - 1 + virtual_binding: + type: tosca.capabilities.nfv.VirtualBindable + occurrences: + - 1 + - UNBOUNDED + requirements: + - virtual_storage: + capability: tosca.capabilities.nfv.VirtualStorage + relationship: tosca.relationships.nfv.AttachesTo + occurrences: + - 0 + - UNBOUNDED + 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.Vdu.VirtualFileStorage: + derived_from: tosca.nodes.Root + description: This node type describes the specifications of requirements related to virtual file storage resources + properties: + virtual_file_storage_data: + type: tosca.datatypes.nfv.VirtualFileStorageData + description: Describes the file storage characteristics. + required: true + capabilities: + virtual_storage: + type: tosca.capabilities.nfv.VirtualStorage + description: Defines the capabilities of virtual_storage. + requirements: + - virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + tosca.nodes.nfv.VduCp: + derived_from: tosca.nodes.nfv.Cp + description: describes network connectivity between a VNFC instance based on this VDU and an internal VL + properties: + bitrate_requirement: + type: integer + description: Bitrate requirement in bit per second on this connection point + required: false + constraints: + - greater_or_equal: 0 + virtual_network_interface_requirements: + type: list + description: Specifies requirements on a virtual network interface realising the CPs instantiated from this CPD + required: false + entry_schema: + type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements + order: + type: integer + description: The order of the NIC on the compute instance (e.g.eth2) + required: false + constraints: + - greater_or_equal: 0 + vnic_type: + type: string + description: Describes the type of the virtual network interface realizing the CPs instantiated from this CPD + required: false + constraints: + - valid_values: + - direct + - normal + - virtio + - direct-physical + vnic_name: + type: string + required: false + requirements: + - virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + - virtual_binding: + capability: tosca.capabilities.nfv.VirtualBindable + relationship: tosca.relationships.nfv.VirtualBindsTo + node: tosca.nodes.nfv.Vdu.Compute + 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.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.VnfExtCp: + derived_from: tosca.nodes.nfv.Cp + description: Describes a logical external connection point, exposed by the VNF enabling connection with an external Virtual Link + properties: + virtual_network_interface_requirements: + type: list + description: The actual virtual NIC requirements that is been assigned when instantiating the connection point + required: false + entry_schema: + type: tosca.datatypes.nfv.VirtualNetworkInterfaceRequirements + requirements: + - external_virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + - internal_virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + 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.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 + org.openecomp.resource.cp.PonUni: + derived_from: tosca.nodes.nfv.VduCp + properties: + expected_ont_id: + type: string + required: true + cvlan_id: + type: string + required: true + olt_name: + type: string + required: true + olt_pon_port: + type: string + required: true + olt_pon_slot: + type: string + required: true + 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: org.openecomp.resource.vfc.accessConnectivity + tosca.nodes.nfv.Vdu.VirtualObjectStorage: + derived_from: tosca.nodes.Root + description: This node type describes the specifications of requirements related to virtual object storage resources + properties: + virtual_object_storage_data: + type: tosca.datatypes.nfv.VirtualObjectStorageData + description: Describes the object storage characteristics. + required: true + capabilities: + virtual_storage: + type: tosca.capabilities.nfv.VirtualStorage + description: Defines the capabilities of virtual_storage. + 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.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.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 + tosca.nodes.nfv.VnfVirtualLink: + derived_from: tosca.nodes.Root + description: Describes the information about an internal VNF VL + properties: + connectivity_type: + type: tosca.datatypes.nfv.ConnectivityType + description: Specifies the protocol exposed by the VL and the flow pattern supported by the VL + required: true + description: + type: string + description: Provides human-readable information on the purpose of the VL + required: false + test_access: + type: list + description: Test access facilities available on the VL + required: false + entry_schema: + type: string + constraints: + - valid_values: + - passive_monitoring + - active_loopback + vl_profile: + type: tosca.datatypes.nfv.VlProfile + description: Defines additional data for the VL + required: true + monitoring_parameters: + type: list + description: Describes monitoring parameters applicable to the VL + required: false + entry_schema: + type: tosca.datatypes.nfv.VirtualLinkMonitoringParameter + capabilities: + virtual_linkable: + type: tosca.capabilities.nfv.VirtualLinkable + org.openecomp.resource.cp.OltNni: + derived_from: tosca.nodes.nfv.VduCp + properties: + olt_name: + type: string + required: true + olt_nni_port: + type: string + required: true + olt_nni_slot: + type: string + required: true + svlan: + type: string + required: true + 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: org.openecomp.resource.vfc.accessConnectivity + 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 + 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 + org.openecomp.resource.cp.OntNni: + derived_from: tosca.nodes.nfv.VduCp + properties: + ont_port: + type: string + required: true + 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: org.openecomp.resource.vfc.OntPnf + tosca.nodes.nfv.Cp: + derived_from: tosca.nodes.Root + description: Provides information regarding the purpose of the connection point + properties: + layer_protocols: + type: list + description: Identifies which protocol the connection point uses for connectivity purposes + required: true + entry_schema: + type: string + constraints: + - valid_values: + - ethernet + - mpls + - odu2 + - ipv4 + - ipv6 + - pseudo-wire + role: + type: string + description: Identifies the role of the port in the context of the traffic flow patterns in the VNF or parent NS + required: false + constraints: + - valid_values: + - root + - leaf + description: + type: string + description: Provides human-readable information on the purpose of the connection point + required: false + protocol: + type: list + description: Provides information on the addresses to be assigned to the connection point(s) instantiated from this Connection Point Descriptor + required: false + entry_schema: + type: tosca.datatypes.nfv.CpProtocolData + trunk_mode: + type: boolean + description: Provides information about whether the CP instantiated from this Cp is in Trunk mode (802.1Q or other), When operating in "trunk mode", the Cp is capable of carrying traffic for several VLANs. Absence of this property implies that trunkMode is not configured for the Cp i.e. It is equivalent to boolean value "false". + required: false + allowed_address_data: + type: tosca.datatypes.nfv.AddressData + required: false + tosca.nodes.nfv.VNF: + derived_from: tosca.nodes.Root + description: The generic abstract type from which all VNF specific abstract node types shall be derived to form, together with other node types, the TOSCA service template(s) representing the VNFD + properties: + descriptor_id: + type: string + description: Globally unique identifier of the VNFD + required: true + descriptor_version: + type: string + description: Identifies the version of the VNFD + required: true + provider: + type: string + description: Provider of the VNF and of the VNFD + required: true + product_name: + type: string + description: Human readable name for the VNF Product + required: true + software_version: + type: string + description: Software version of the VNF + required: true + product_info_name: + type: string + description: Human readable name for the VNF Product + required: false + product_info_description: + type: string + description: Human readable description of the VNF Product + required: false + vnfm_info: + type: list + required: true + description: Identifies VNFM(s) compatible with the VNF + entry_schema: + type: string + localization_languages: + type: list + description: Information about localization languages of the VNF + required: false + entry_schema: + type: string + default_localization_language: + type: string + description: Default localization language that is instantiated if no information about selected localization language is available + required: false + lcm_operations_configuration: + type: tosca.datatypes.nfv.VnfLcmOperationsConfiguration + description: Describes the configuration parameters for the VNF LCM operations + required: false + monitoring_parameters: + type: list + entry_schema: + type: tosca.datatypes.nfv.VnfMonitoringParameter + description: Describes monitoring parameters applicable to the VNF. + required: false + flavour_id: + type: string + description: Identifier of the Deployment Flavour within the VNFD + required: true + flavour_description: + type: string + description: Human readable description of the DF + required: true + requirements: + - virtual_link: + capability: tosca.capabilities.nfv.VirtualLinkable + relationship: tosca.relationships.nfv.VirtualLinksTo + occurrences: + - 0 + - 1 + interfaces: + Vnflcm: + type: tosca.interfaces.nfv.Vnflcm + 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 + 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 + 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 diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/policies.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/policies.yml new file mode 100644 index 00000000..4bef4e92 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/policies.yml @@ -0,0 +1,492 @@ +# +# 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 + onap.policies.Monitoring: + derived_from: tosca.policies.Root + description: A base policy type for all policies that governs monitoring provisioning + onap.policies.monitoring.cdap.tca.hi.lo.app: + derived_from: onap.policies.Monitoring + version: 1.0.0 + properties: + tca_policy: + type: map + description: TCA Policy JSON + entry_schema: + type: onap.datatypes.monitoring.tca_policy + tosca.policies.nfv.InstantiationLevels: + derived_from: tosca.policies.Root + description: The InstantiationLevels type is a policy type representing all the instantiation levels of resources to be instantiated within a deployment flavour and including default instantiation level in term of the number of VNFC instances to be created as defined in ETSI GS NFV-IFA 011 [1]. + properties: + levels: + type: map + description: Describes the various levels of resources that can be used to instantiate the VNF using this flavour. + required: true + entry_schema: + type: tosca.datatypes.nfv.InstantiationLevel + default_level: + type: string + description: The default instantiation level for this flavour. + required: false + tosca.policies.nfv.VduInstantiationLevels: + derived_from: tosca.policies.Root + description: The VduInstantiationLevels type is a policy type representing all the instantiation levels of resources to be instantiated within a deployment flavour in term of the number of VNFC instances to be created from each vdu.Compute. as defined in ETSI GS NFV-IFA 011 [1] + properties: + levels: + type: map + description: Describes the Vdu.Compute levels of resources that can be used to instantiate the VNF using this flavour + required: true + entry_schema: + type: tosca.datatypes.nfv.VduLevel + targets: + - tosca.nodes.nfv.Vdu.Compute + tosca.policies.nfv.VirtualLinkInstantiationLevels: + derived_from: tosca.policies.Root + description: The VirtualLinkInstantiationLevels type is a policy type representing all the instantiation levels of virtual link resources to be instantiated within a deployment flavour as defined in ETSI GS NFV-IFA 011 [1]. + properties: + levels: + type: map + description: Describes the virtual link levels of resources that can be used to instantiate the VNF using this flavour. + required: true + entry_schema: + type: tosca.datatypes.nfv.VirtualLinkBitrateLevel + targets: + - tosca.nodes.nfv.VnfVirtualLink + tosca.policies.nfv.ScalingAspects: + derived_from: tosca.policies.Root + description: The ScalingAspects type is a policy type representing the scaling aspects used for horizontal scaling as defined in ETSI GS NFV-IFA 011 [1]. + properties: + aspects: + type: map + description: Describe maximum scale level for total number of scaling steps that can be applied to a particular aspect + required: true + entry_schema: + type: tosca.datatypes.nfv.ScalingAspect + tosca.policies.nfv.VduScalingAspectDeltas: + derived_from: tosca.policies.Root + description: The VduScalingAspectDeltas type is a policy type representing the Vdu.Compute detail of an aspect deltas used for horizontal scaling, as defined in ETSI GS NFV-IFA 011 [1]. + properties: + aspect: + type: string + description: Represents the scaling aspect to which this policy applies + required: true + deltas: + type: map + description: Describes the Vdu.Compute scaling deltas to be applied for every scaling steps of a particular aspect. + required: true + entry_schema: + type: tosca.datatypes.nfv.VduLevel + targets: + - tosca.nodes.nfv.Vdu.Compute + tosca.policies.nfv.VirtualLinkBitrateScalingAspectDeltas: + derived_from: tosca.policies.Root + description: The VirtualLinkBitrateScalingAspectDeltas type is a policy type representing the VnfVirtualLink detail of an aspect deltas used for horizontal scaling, as defined in ETSI GS NFV-IFA 011 [1]. + properties: + aspect: + type: string + description: Represents the scaling aspect to which this policy applies. + required: true + deltas: + type: map + description: Describes the VnfVirtualLink scaling deltas to be applied for every scaling steps of a particular aspect. + required: true + entry_schema: + type: tosca.datatypes.nfv.VirtualLinkBitrateLevel + targets: + - tosca.nodes.nfv.VnfVirtualLink + tosca.policies.nfv.VduInitialDelta: + derived_from: tosca.policies.Root + description: The VduInitialDelta type is a policy type representing the Vdu.Compute detail of an initial delta used for horizontal scaling, as defined in ETSI GS NFV-IFA 011 [1]. + properties: + initial_delta: + type: tosca.datatypes.nfv.VduLevel + description: Represents the initial minimum size of the VNF. + required: true + targets: + - tosca.nodes.nfv.Vdu.Compute + tosca.policies.nfv.VirtualLinkBitrateInitialDelta: + derived_from: tosca.policies.Root + description: The VirtualLinkBitrateInitialDelta type is a policy type representing the VnfVirtualLink detail of an initial deltas used for horizontal scaling, as defined in ETSI GS NFV-IFA 011 [1]. + properties: + initial_delta: + type: tosca.datatypes.nfv.VirtualLinkBitrateLevel + description: Represents the initial minimum size of the VNF. + required: true + targets: + - tosca.nodes.nfv.VnfVirtualLink + tosca.policies.nfv.SecurityGroupRule: + derived_from: tosca.policies.Root + description: The SecurityGroupRule type is a policy type specified the matching criteria for the ingress and/or egress traffic to/from visited connection points as defined in ETSI GS NFV-IFA 011 [1]. + properties: + description: + type: string + description: Human readable description of the security group rule. + required: false + direction: + type: string + description: The direction in which the security group rule is applied. The direction of 'ingress' or 'egress' is specified against the associated CP. I.e., 'ingress' means the packets entering a CP, while 'egress' means the packets sent out of a CP. + required: false + constraints: + - valid_values: + - ingress + - egress + default: ingress + ether_type: + type: string + description: Indicates the protocol carried over the Ethernet layer. + required: false + constraints: + - valid_values: + - ipv4 + - ipv6 + default: ipv4 + protocol: + type: string + description: Indicates the protocol carried over the IP layer. Permitted values include any protocol defined in the IANA protocol registry, e.g. TCP, UDP, ICMP, etc. + required: false + constraints: + - valid_values: + - hopopt + - icmp + - igmp + - ggp + - ipv4 + - st + - tcp + - cbt + - egp + - igp + - bbn_rcc_mon + - nvp_ii + - pup + - argus + - emcon + - xnet + - chaos + - udp + - mux + - dcn_meas + - hmp + - prm + - xns_idp + - trunk_1 + - trunk_2 + - leaf_1 + - leaf_2 + - rdp + - irtp + - iso_tp4 + - netblt + - mfe_nsp + - merit_inp + - dccp + - 3pc + - idpr + - xtp + - ddp + - idpr_cmtp + - tp++ + - il + - ipv6 + - sdrp + - ipv6_route + - ipv6_frag + - idrp + - rsvp + - gre + - dsr + - bna + - esp + - ah + - i_nlsp + - swipe + - narp + - mobile + - tlsp + - skip + - ipv6_icmp + - ipv6_no_nxt + - ipv6_opts + - cftp + - sat_expak + - kryptolan + - rvd + - ippc + - sat_mon + - visa + - ipcv + - cpnx + - cphb + - wsn + - pvp + - br_sat_mon + - sun_nd + - wb_mon + - wb_expak + - iso_ip + - vmtp + - secure_vmtp + - vines + - ttp + - iptm + - nsfnet_igp + - dgp + - tcf + - eigrp + - ospfigp + - sprite_rpc + - larp + - mtp + - ax.25 + - ipip + - micp + - scc_sp + - etherip + - encap + - gmtp + - ifmp + - pnni + - pim + - aris + - scps + - qnx + - a/n + - ip_comp + - snp + - compaq_peer + - ipx_in_ip + - vrrp + - pgm + - l2tp + - ddx + - iatp + - stp + - srp + - uti + - smp + - sm + - ptp + - isis + - fire + - crtp + - crudp + - sscopmce + - iplt + - sps + - pipe + - sctp + - fc + - rsvp_e2e_ignore + - mobility + - udp_lite + - mpls_in_ip + - manet + - hip + - shim6 + - wesp + - rohc + default: tcp + port_range_min: + type: integer + description: Indicates minimum port number in the range that is matched by the security group rule. If a value is provided at design-time, this value may be overridden at run-time based on other deployment requirements or constraints. + required: false + constraints: + - greater_or_equal: 0 + - less_or_equal: 65535 + default: 0 + port_range_max: + type: integer + description: Indicates maximum port number in the range that is matched by the security group rule. If a value is provided at design-time, this value may be overridden at run-time based on other deployment requirements or constraints. + required: false + constraints: + - greater_or_equal: 0 + - less_or_equal: 65535 + default: 65535 + targets: + - tosca.nodes.nfv.VduCp + - tosca.nodes.nfv.VnfExtCp + tosca.policies.nfv.SupportedVnfInterface: + derived_from: tosca.policies.Root + description: this policy type represents interfaces produced by a VNF, the details to access them and the applicable connection points to use to access these interfaces + properties: + interface_name: + type: string + description: Identifies an interface produced by the VNF. + required: true + constraints: + - valid_values: + - vnf_indicator + - vnf_configuration + details: + type: tosca.datatypes.nfv.InterfaceDetails + description: Provide additional data to access the interface endpoint + required: false + targets: + - tosca.nodes.nfv.VnfExtCp + - tosca.nodes.nfv.VduCp + tosca.policies.nfv.AffinityRule: + derived_from: tosca.policies.Placement + description: The AffinityRule describes the affinity rules applicable for the defined targets + properties: + scope: + type: string + description: scope of the rule is an NFVI_node, an NFVI_PoP, etc. + required: true + constraints: + - valid_values: + - nfvi_node + - zone + - zone_group + - nfvi_pop + targets: + - tosca.nodes.nfv.Vdu.Compute + - tosca.nodes.nfv.VnfVirtualLink + - tosca.groups.nfv.PlacementGroup + tosca.policies.nfv.AntiAffinityRule: + derived_from: tosca.policies.Placement + description: The AntiAffinityRule describes the anti-affinity rules applicable for the defined targets + properties: + scope: + type: string + description: scope of the rule is an NFVI_node, an NFVI_PoP, etc. + required: true + constraints: + - valid_values: + - nfvi_node + - zone + - zone_group + - nfvi_pop + targets: + - tosca.nodes.nfv.Vdu.Compute + - tosca.nodes.nfv.VnfVirtualLink + - tosca.groups.nfv.PlacementGroup diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/relationships.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/relationships.yml new file mode 100644 index 00000000..fe4b9880 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/relationships.yml @@ -0,0 +1,149 @@ +# +# 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.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 + 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.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.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.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.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 + 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.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.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 + description: Represents an association relationship between Vdu.Compute and VduCp node types + valid_target_types: + - tosca.capabilities.nfv.VirtualBindable + tosca.relationships.nfv.VirtualLinksTo: + derived_from: tosca.relationships.DependsOn + description: Represents an association relationship between the VduCp and VnfVirtualLink node types + valid_target_types: + - tosca.capabilities.nfv.VirtualLinkable + tosca.relationships.nfv.AttachesTo: + derived_from: tosca.relationships.Root + description: Represents an association relationship between the Vdu.Compute and one of the node types, Vdu.VirtualBlockStorage, Vdu.VirtualObjectStorage or Vdu.VirtualFileStorage + valid_target_types: + - tosca.capabilities.nfv.VirtualStorage + tosca.relationships.nfv.Vdu.AttachedTo: + derived_from: tosca.relationships.DependsOn + valid_target_types: + - tosca.capabilities.nfv.VirtualStorage diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Extneutroncp-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Extneutroncp-template.yml new file mode 100644 index 00000000..b51a72f9 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Extneutroncp-template.yml @@ -0,0 +1,182 @@ +tosca_definitions_version: tosca_simple_yaml_1_1 +metadata: + invariantUUID: 3fed24ab-7a60-40cd-a52b-520df0d743e8 + UUID: e3334a40-6ede-4d38-975b-705e9cb99d2f + name: extNeutronCP + description: The AT&T Connection Point base type all other CP derive from + type: CP + category: Generic + subcategory: Network Elements + resourceVendor: ONAP (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: + org.openecomp.resource.cp.v2.extNeutronCP: + derived_from: org.openecomp.resource.cp.v2.extCP + description: The AT&T Connection Point base type all other CP derive from + properties: + port_security_enabled: + type: boolean + description: Flag to enable/disable port security on the network + required: false + qos_policy: + type: string + description: The name or ID of QoS policy to attach to this network + required: false + allowed_address_pairs: + type: list + description: Additional MAC/IP address pairs allowed to pass through the port + required: false + 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 + value_specs: + default: { + } + type: map + description: Extra parameters to include in the request + required: false + entry_schema: + type: string + related_networks: + type: list + description: Related Networks List. + required: false + entry_schema: + type: org.openecomp.datatypes.network.RelatedNetworksAssignments + network: + type: string + description: Network this port belongs to + required: false + mac_requirements: + default: + mac_count_required: + is_required: false + type: org.openecomp.datatypes.network.MacRequirements + description: identifies MAC address assignments to the CP + required: false + mac_address: + type: string + description: MAC address to give to this port + required: false + ip_range_start: + type: string + required: false + admin_state_up: + default: true + type: boolean + description: A boolean value specifying the administrative status of the network + required: false + exCP_naming: + default: + ecomp_generated_naming: true + type: org.openecomp.datatypes.Naming + required: false + order: + type: integer + description: The order of the CP on the compute instance (e.g. eth2). + required: true + subnetpoolid: + type: string + required: false + device_id: + type: string + description: Device ID of this port + required: false + ip_range_end: + type: string + required: false + ip_address: + type: string + required: false + is_default: + default: false + type: boolean + required: false + device_owner: + type: string + description: Name of the network owning the port + required: false + ip_requirements: + type: list + description: identifies IP requirements to the CP + required: true + entry_schema: + type: org.openecomp.datatypes.network.IpRequirements + replacement_policy: + default: AUTO + type: string + description: Policy on how to respond to a stack-update for this resource + required: false + network_role: + type: string + description: identical to VL network_role + required: true + security_groups: + type: list + description: List of security group names or IDs + required: false + entry_schema: + type: string + fixed_ips: + type: list + description: Desired IPs for this port + required: false + entry_schema: + type: org.openecomp.datatypes.heat.neutron.port.FixedIps + subinterface_indicator: + default: false + type: boolean + description: identifies if Port is having Sub Interface + required: false + name: + type: string + description: A symbolic name for this port + required: false + vlan_requirements: + type: list + description: identifies vlan address assignments to the CP + required: false + entry_schema: + type: org.openecomp.datatypes.network.VlanRequirements + network_role_tag: + type: string + description: Must correlate to the set of defined network-role tag identifiers from the associated HEAT template + required: true + interfaces: + Standard: + type: tosca.interfaces.node.lifecycle.Standard + capabilities: + attachment: + type: tosca.capabilities.Attachment + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + 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 diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template-interface.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template-interface.yml new file mode 100644 index 00000000..6d4cd7b3 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template-interface.yml @@ -0,0 +1,1863 @@ +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.Manualdistributiontestvnf: + derived_from: org.openecomp.resource.abstract.nodes.VF + properties: + vf_module_id: + default: AFRMODULEID + type: string + description: The vFirewall Module ID is provided by ONAP + required: false + nf_naming: + default: + ecomp_generated_naming: true + type: org.openecomp.datatypes.Naming + required: false + skip_post_instantiation_configuration: + default: true + type: boolean + required: false + multi_stage_design: + default: 'false' + type: string + required: false + simple_key: + default: afr-key + type: string + description: Name of key-pair to be used for compute instance + required: false + ves_ip: + default: 172.26.10.19 + type: string + description: public ves_ip + required: false + nf_function: + type: string + required: false + nf_naming_code: + type: string + required: false + node_ip: + default: 172.26.10.27 + type: string + description: public ves_ip + required: false + simple_flavor_name: + default: m1.small + type: string + description: Type of instance (flavor) to be used + required: false + availability_zone_max_count: + default: 1 + type: integer + required: false + sdnc_artifact_name: + type: string + required: false + public_net_id: + default: nova_floating + type: string + description: public NetId + required: false + max_instances: + type: integer + required: false + nf_type: + type: string + required: false + simple_image_name: + default: UBUNTU16 + type: string + description: Image to be used for compute instance + required: false + sdnc_model_version: + type: string + required: false + vnf_id: + default: VESMED + type: string + description: The VNF ID is provided by ONAP + required: false + simple_netid: + default: onap_vip + type: string + description: netid + required: false + nf_role: + type: string + required: false + simple_name_0: + default: SIMPLEUBU + type: string + description: Name of key-pair to be used for compute instance + required: false + min_instances: + type: integer + required: false + sdnc_model_name: + type: string + required: false + capabilities: + abstract_simple.disk.write.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.network.incoming.packets.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of incoming packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.memory_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM allocated to the instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.root.size_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: GB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Size of root disk + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.network.outpoing.packets_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of outgoing packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.capacity_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk that the instance can see + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.allocation_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk per device occupied by the instance on the host machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.write.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.binding_simple: + type: tosca.capabilities.network.Bindable + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + abstract_simple.network.incoming.bytes.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of incoming bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.cpu_util_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: '%' + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average CPU utilization + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.read.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.write.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.write.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.network.incoming.bytes_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of incoming bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.latency_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ms + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk latency + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.write.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.iops_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: count/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk iops per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.latency_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ms + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk latency per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.write.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.port_mirroring_simple_simple_private_port: + type: org.openecomp.capabilities.PortMirroring + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + connection_point: + default: + network_role: + get_input: port_simple_private_port_network_role + nfc_naming_code: simple + type: org.openecomp.datatypes.PortMirroringConnectionPointDescription + required: false + abstract_simple.memory.resident_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM used by the instance on the physical machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.read.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.read.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.network.outgoing.bytes.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of outgoing bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.read.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.write.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.binding_simple_simple_private_port: + 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 + abstract_simple.feature_simple_simple_private_port: + type: tosca.capabilities.Node + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + abstract_simple.disk.read.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.read.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.network.outgoing.bytes_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of outgoing bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.network.incoming.packets_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of incoming packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.allocation_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk occupied by the instance on the host machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.endpoint_simple: + type: tosca.capabilities.Endpoint.Admin + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + secure: + default: true + type: boolean + required: false + abstract_simple.forwarder_simple_simple_private_port: + type: org.openecomp.capabilities.Forwarder + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + abstract_simple.disk.device.write.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.memory.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM used by the instance from the amount of its allocated memory + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.cpu.delta_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ns + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: CPU time used since previous datapoint + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Delta + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.host_simple: + type: tosca.capabilities.Container + occurrences: + - 0 + - UNBOUNDED + valid_source_types: + - tosca.nodes.SoftwareComponent + properties: + num_cpus: + type: integer + required: false + disk_size: + type: scalar-unit.size + required: false + cpu_frequency: + type: scalar-unit.frequency + required: false + mem_size: + type: scalar-unit.size + required: false + abstract_simple.scalable_simple: + type: tosca.capabilities.Scalable + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + max_instances: + default: 1 + type: integer + required: false + min_instances: + default: 1 + type: integer + required: false + default_instances: + type: integer + required: false + abstract_simple.instance_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: instance + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Existence of instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.attachment_simple_simple_private_port: + type: tosca.capabilities.Attachment + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + abstract_simple.cpu_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ns + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: CPU time used + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.os_simple: + type: tosca.capabilities.OperatingSystem + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + distribution: + type: string + required: false + type: + type: string + required: false + version: + type: version + required: false + architecture: + type: string + required: false + abstract_simple.disk.device.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The physical size in bytes of the image container on the host per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The physical size in bytes of the image container on the host + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.vcpus_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: vcpu + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of virtual CPUs allocated to the instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.read.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.ephemeral.size_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: GB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Size of ephemeral disk + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.feature_simple: + type: tosca.capabilities.Node + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + abstract_simple.disk.iops_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: count/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk iops + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.disk.device.capacity_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk per device that the instance can see + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + abstract_simple.network.outgoing.packets.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of outgoing packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + requirements: + - abstract_simple.dependency_simple: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Node + node: tosca.nodes.Root + relationship: tosca.relationships.DependsOn + - abstract_simple.dependency_simple_simple_private_port: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Node + node: tosca.nodes.Root + relationship: tosca.relationships.DependsOn + - abstract_simple.link_simple_simple_private_port: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.network.Linkable + relationship: tosca.relationships.network.LinksTo + - abstract_simple.local_storage_simple: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Attachment + node: tosca.nodes.BlockStorage + relationship: tosca.relationships.AttachesTo diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template.yml new file mode 100644 index 00000000..9d5bc204 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template.yml @@ -0,0 +1,673 @@ +tosca_definitions_version: tosca_simple_yaml_1_1 +metadata: + invariantUUID: 0a0b9979-863d-4b7e-b7f4-d27725a182b3 + UUID: 8f43a8c9-c677-462a-ae36-8ddb5990a60d + name: manualDistributionTestVNF + description: Test + type: VF + category: Application L4+ + subcategory: Media Servers + resourceVendor: Test + 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-manualDistributionTestVNF-interface: + file: resource-Manualdistributiontestvsp-template-interface.yml +- resource-manualDistributionTestVSP-nodes.simpleCvfc: + file: resource-ManualdistributiontestvspNodesSimplecvfc-template.yml +- resource-manualDistributionTestVSP-nodes.simpleCvfc-interface: + file: resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml +topology_template: + inputs: + vf_module_id: + default: AFRMODULEID + type: string + description: The vFirewall Module ID is provided by ONAP + required: false + nf_naming: + default: + ecomp_generated_naming: true + type: org.openecomp.datatypes.Naming + required: false + skip_post_instantiation_configuration: + default: true + type: boolean + required: false + multi_stage_design: + default: 'false' + type: string + required: false + simple_key: + default: afr-key + type: string + description: Name of key-pair to be used for compute instance + required: false + ves_ip: + default: 172.26.10.19 + type: string + description: public ves_ip + required: false + nf_function: + type: string + required: false + nf_naming_code: + type: string + required: false + node_ip: + default: 172.26.10.27 + type: string + description: public ves_ip + required: false + simple_flavor_name: + default: m1.small + type: string + description: Type of instance (flavor) to be used + required: false + availability_zone_max_count: + default: 1 + type: integer + required: false + sdnc_artifact_name: + type: string + required: false + public_net_id: + default: nova_floating + type: string + description: public NetId + required: false + max_instances: + type: integer + required: false + nf_type: + type: string + required: false + simple_image_name: + default: UBUNTU16 + type: string + description: Image to be used for compute instance + required: false + sdnc_model_version: + type: string + required: false + vnf_id: + default: VESMED + type: string + description: The VNF ID is provided by ONAP + required: false + simple_netid: + default: onap_vip + type: string + description: netid + required: false + nf_role: + type: string + required: false + simple_name_0: + default: SIMPLEUBU + type: string + description: Name of key-pair to be used for compute instance + required: false + min_instances: + type: integer + required: false + sdnc_model_name: + type: string + required: false + node_templates: + abstract_simple: + type: org.openecomp.resource.vfc.Manualdistributiontestvspcvfc.abstract.nodes.simple + directives: + - substitutable + metadata: + invariantUUID: 224c558c-56ab-40f8-9018-40846d8735a5 + UUID: 7fa6cae7-4a51-4f8b-b0ef-bbac305412ed + customizationUUID: 711886a7-8dc1-428b-955c-6e482fffe479 + version: '1.0' + name: manualDistributionTestVSP-nodes.simpleCvfc + description: Complex node type that is used as nested type in VF + type: CVFC + category: Generic + subcategory: Abstract + resourceVendor: Test + resourceVendorRelease: '1.0' + resourceVendorModelNumber: '' + properties: + port_simple_private_port_network: + - get_input: simple_netid + compute_simple_user_data_format: + - RAW + index_value: 0 + compute_simple_key_name: + - get_input: simple_key + compute_simple_name: + - get_input: simple_name_0 + nfc_naming: + ecomp_generated_naming: true + vm_flavor_name: + get_input: simple_flavor_name + port_simple_private_port_fixed_ips: + - ip_address: + get_input: node_ip + service_template_filter: + substitute_service_template: Nested_simpleServiceTemplate.yaml + index_value: 0 + count: '1' + scaling_enabled: true + mandatory: true + port_simple_private_port_ip_requirements: + - ip_version: 4 + ip_count_required: + is_required: true + floating_ip_count_required: + is_required: false + compute_simple_availability_zone: + - nova + vm_image_name: + get_input: simple_image_name + port_simple_private_port_mac_requirements: + mac_count_required: + is_required: false + vm_type_tag: simple + min_instances: 0 + compute_simple_metadata: + - vf_module_id: + get_input: vf_module_id + vnf_id: + get_input: vnf_id + port_simple_private_port_exCP_naming: + ecomp_generated_naming: true + nfc_naming_code: simple + capabilities: + disk.read.bytes_simple: + properties: + unit: B + description: Volume of reads + type: Cumulative + category: compute + cpu_simple: + properties: + unit: ns + description: CPU time used + type: Cumulative + category: compute + disk.device.read.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of reads + type: Gauge + category: disk + disk.device.read.requests_simple: + properties: + unit: request + description: Number of read requests + type: Cumulative + category: disk + network.incoming.packets.rate_simple_simple_private_port: + properties: + unit: packet/s + description: Average rate of incoming packets + type: Gauge + category: network + disk.capacity_simple: + properties: + unit: B + description: The amount of disk that the instance can see + type: Gauge + category: disk + disk.device.latency_simple: + properties: + unit: ms + description: Average disk latency per device + type: Gauge + category: disk + network.incoming.bytes.rate_simple_simple_private_port: + properties: + unit: B/s + description: Average rate of incoming bytes + type: Gauge + category: network + disk.write.bytes_simple: + properties: + unit: B + description: Volume of writes + type: Cumulative + category: compute + disk.device.capacity_simple: + properties: + unit: B + description: The amount of disk per device that the instance can see + type: Gauge + category: disk + disk.usage_simple: + properties: + unit: B + description: The physical size in bytes of the image container on the host + type: Gauge + category: disk + memory.resident_simple: + properties: + unit: MB + description: Volume of RAM used by the instance on the physical machine + type: Gauge + category: compute + disk.device.write.requests.rate_simple: + properties: + unit: request/s + description: Average rate of write requests + type: Gauge + category: disk + cpu_util_simple: + properties: + unit: '%' + description: Average CPU utilization + type: Gauge + category: compute + instance_simple: + properties: + unit: instance + description: Existence of instance + type: Gauge + category: compute + disk.ephemeral.size_simple: + properties: + unit: GB + description: Size of ephemeral disk + type: Gauge + category: compute + disk.device.read.bytes_simple: + properties: + unit: B + description: Volume of reads + type: Cumulative + category: disk + scalable_simple: + properties: + max_instances: 1 + min_instances: 1 + memory.usage_simple: + properties: + unit: MB + description: Volume of RAM used by the instance from the amount of its allocated memory + type: Gauge + category: compute + disk.device.iops_simple: + properties: + unit: count/s + description: Average disk iops per device + type: Gauge + category: disk + network.outpoing.packets_simple_simple_private_port: + properties: + unit: packet + description: Number of outgoing packets + type: Cumulative + category: network + memory_simple: + properties: + unit: MB + description: Volume of RAM allocated to the instance + type: Gauge + category: compute + network.outgoing.bytes_simple_simple_private_port: + properties: + unit: B + description: Number of outgoing bytes + type: Cumulative + category: network + disk.iops_simple: + properties: + unit: count/s + description: Average disk iops + type: Gauge + category: disk + disk.read.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of reads + type: Gauge + category: compute + disk.device.usage_simple: + properties: + unit: B + description: The physical size in bytes of the image container on the host per device + type: Gauge + category: disk + disk.latency_simple: + properties: + unit: ms + description: Average disk latency + type: Gauge + category: disk + network.outgoing.bytes.rate_simple_simple_private_port: + properties: + unit: B/s + description: Average rate of outgoing bytes + type: Gauge + category: network + disk.allocation_simple: + properties: + unit: B + description: The amount of disk occupied by the instance on the host machine + type: Gauge + category: disk + disk.device.read.requests.rate_simple: + properties: + unit: request/s + description: Average rate of read requests + type: Gauge + category: disk + disk.device.allocation_simple: + properties: + unit: B + description: The amount of disk per device occupied by the instance on the host machine + type: Gauge + category: disk + disk.device.write.bytes_simple: + properties: + unit: B + description: Volume of writes + type: Cumulative + category: disk + network.incoming.packets_simple_simple_private_port: + properties: + unit: packet + description: Number of incoming packets + type: Cumulative + category: network + network.incoming.bytes_simple_simple_private_port: + properties: + unit: B + description: Number of incoming bytes + type: Cumulative + category: network + disk.read.requests_simple: + properties: + unit: request + description: Number of read requests + type: Cumulative + category: compute + disk.device.write.requests_simple: + properties: + unit: request + description: Number of write requests + type: Cumulative + category: disk + port_mirroring_simple_simple_private_port: + properties: + connection_point: + network_role: + get_input: port_simple_private_port_network_role + nfc_naming_code: simple + endpoint_simple: + properties: + secure: true + cpu.delta_simple: + properties: + unit: ns + description: CPU time used since previous datapoint + type: Delta + category: compute + vcpus_simple: + properties: + unit: vcpu + description: Number of virtual CPUs allocated to the instance + type: Gauge + category: compute + disk.device.write.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of writes + type: Gauge + category: disk + disk.root.size_simple: + properties: + unit: GB + description: Size of root disk + type: Gauge + category: compute + disk.write.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of writes + type: Gauge + category: compute + network.outgoing.packets.rate_simple_simple_private_port: + properties: + unit: packet/s + description: Average rate of outgoing packets + type: Gauge + category: network + disk.write.requests.rate_simple: + properties: + unit: request/s + description: Average rate of write requests + type: Gauge + category: compute + disk.write.requests_simple: + properties: + unit: request + description: Number of write requests + type: Cumulative + category: compute + groups: + manualDistributionTestVNF..base_ves_med1..module-0: + type: org.openecomp.groups.VfModule + members: + - abstract_simple + metadata: + vfModuleModelName: manualDistributionTestVNF..base_ves_med1..module-0 + vfModuleModelInvariantUUID: dafd0c51-d03c-4849-a777-756e608ad6a5 + vfModuleModelUUID: b31a30a8-a4e4-4a5e-8f2d-ce7662ea4872 + vfModuleModelVersion: '1' + properties: + min_vf_module_instances: 1 + vf_module_label: base_ves_med1 + max_vf_module_instances: 1 + vf_module_type: Base + isBase: true + initial_count: 1 + volume_group: false + base_ves_med1_group: + type: org.openecomp.groups.heat.HeatStack + members: + - abstract_simple + metadata: + invariantUUID: 1ac6411a-1934-4b6a-b6d3-1d5b56b318cc + UUID: 83f33b1c-5f74-4302-92fe-1ebc9396894b + version: '1' + name: base_ves_med1_group + properties: + heat_file: ../Artifacts/base_ves_med1.yaml + description: Simple template to deploy a single compute instance + substitution_mappings: + node_type: org.openecomp.resource.vf.Manualdistributiontestvnf + capabilities: + abstract_simple.disk.write.requests_simple: + - abstract_simple + - disk.write.requests_simple + abstract_simple.network.incoming.packets.rate_simple_simple_private_port: + - abstract_simple + - network.incoming.packets.rate_simple_simple_private_port + abstract_simple.memory_simple: + - abstract_simple + - memory_simple + abstract_simple.disk.root.size_simple: + - abstract_simple + - disk.root.size_simple + abstract_simple.network.outpoing.packets_simple_simple_private_port: + - abstract_simple + - network.outpoing.packets_simple_simple_private_port + abstract_simple.disk.capacity_simple: + - abstract_simple + - disk.capacity_simple + abstract_simple.disk.device.allocation_simple: + - abstract_simple + - disk.device.allocation_simple + abstract_simple.disk.device.write.requests.rate_simple: + - abstract_simple + - disk.device.write.requests.rate_simple + abstract_simple.binding_simple: + - abstract_simple + - binding_simple + abstract_simple.network.incoming.bytes.rate_simple_simple_private_port: + - abstract_simple + - network.incoming.bytes.rate_simple_simple_private_port + abstract_simple.cpu_util_simple: + - abstract_simple + - cpu_util_simple + abstract_simple.disk.read.bytes_simple: + - abstract_simple + - disk.read.bytes_simple + abstract_simple.disk.write.bytes_simple: + - abstract_simple + - disk.write.bytes_simple + abstract_simple.disk.write.requests.rate_simple: + - abstract_simple + - disk.write.requests.rate_simple + abstract_simple.network.incoming.bytes_simple_simple_private_port: + - abstract_simple + - network.incoming.bytes_simple_simple_private_port + abstract_simple.disk.latency_simple: + - abstract_simple + - disk.latency_simple + abstract_simple.disk.device.write.requests_simple: + - abstract_simple + - disk.device.write.requests_simple + abstract_simple.disk.device.iops_simple: + - abstract_simple + - disk.device.iops_simple + abstract_simple.disk.device.latency_simple: + - abstract_simple + - disk.device.latency_simple + abstract_simple.disk.device.write.bytes.rate_simple: + - abstract_simple + - disk.device.write.bytes.rate_simple + abstract_simple.port_mirroring_simple_simple_private_port: + - abstract_simple + - port_mirroring_simple_simple_private_port + abstract_simple.memory.resident_simple: + - abstract_simple + - memory.resident_simple + abstract_simple.disk.read.bytes.rate_simple: + - abstract_simple + - disk.read.bytes.rate_simple + abstract_simple.disk.device.read.bytes_simple: + - abstract_simple + - disk.device.read.bytes_simple + abstract_simple.network.outgoing.bytes.rate_simple_simple_private_port: + - abstract_simple + - network.outgoing.bytes.rate_simple_simple_private_port + abstract_simple.disk.device.read.requests_simple: + - abstract_simple + - disk.device.read.requests_simple + abstract_simple.disk.write.bytes.rate_simple: + - abstract_simple + - disk.write.bytes.rate_simple + abstract_simple.binding_simple_simple_private_port: + - abstract_simple + - binding_simple_simple_private_port + abstract_simple.feature_simple_simple_private_port: + - abstract_simple + - feature_simple_simple_private_port + abstract_simple.disk.read.requests_simple: + - abstract_simple + - disk.read.requests_simple + abstract_simple.disk.device.read.bytes.rate_simple: + - abstract_simple + - disk.device.read.bytes.rate_simple + abstract_simple.network.outgoing.bytes_simple_simple_private_port: + - abstract_simple + - network.outgoing.bytes_simple_simple_private_port + abstract_simple.network.incoming.packets_simple_simple_private_port: + - abstract_simple + - network.incoming.packets_simple_simple_private_port + abstract_simple.disk.allocation_simple: + - abstract_simple + - disk.allocation_simple + abstract_simple.endpoint_simple: + - abstract_simple + - endpoint_simple + abstract_simple.forwarder_simple_simple_private_port: + - abstract_simple + - forwarder_simple_simple_private_port + abstract_simple.disk.device.write.bytes_simple: + - abstract_simple + - disk.device.write.bytes_simple + abstract_simple.memory.usage_simple: + - abstract_simple + - memory.usage_simple + abstract_simple.cpu.delta_simple: + - abstract_simple + - cpu.delta_simple + abstract_simple.host_simple: + - abstract_simple + - host_simple + abstract_simple.scalable_simple: + - abstract_simple + - scalable_simple + abstract_simple.instance_simple: + - abstract_simple + - instance_simple + abstract_simple.attachment_simple_simple_private_port: + - abstract_simple + - attachment_simple_simple_private_port + abstract_simple.cpu_simple: + - abstract_simple + - cpu_simple + abstract_simple.os_simple: + - abstract_simple + - os_simple + abstract_simple.disk.device.usage_simple: + - abstract_simple + - disk.device.usage_simple + abstract_simple.disk.usage_simple: + - abstract_simple + - disk.usage_simple + abstract_simple.vcpus_simple: + - abstract_simple + - vcpus_simple + abstract_simple.disk.device.read.requests.rate_simple: + - abstract_simple + - disk.device.read.requests.rate_simple + abstract_simple.disk.ephemeral.size_simple: + - abstract_simple + - disk.ephemeral.size_simple + abstract_simple.feature_simple: + - abstract_simple + - feature_simple + abstract_simple.disk.iops_simple: + - abstract_simple + - disk.iops_simple + abstract_simple.disk.device.capacity_simple: + - abstract_simple + - disk.device.capacity_simple + abstract_simple.network.outgoing.packets.rate_simple_simple_private_port: + - abstract_simple + - network.outgoing.packets.rate_simple_simple_private_port + requirements: + abstract_simple.dependency_simple_simple_private_port: + - abstract_simple + - dependency_simple_simple_private_port + abstract_simple.link_simple_simple_private_port: + - abstract_simple + - link_simple_simple_private_port + abstract_simple.dependency_simple: + - abstract_simple + - dependency_simple + abstract_simple.local_storage_simple: + - abstract_simple + - local_storage_simple diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml new file mode 100644 index 00000000..5c7c990a --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml @@ -0,0 +1,131 @@ +tosca_definitions_version: tosca_simple_yaml_1_1 +metadata: + invariantUUID: 67a4bb59-d438-4c83-9c94-ed99b30a9b66 + UUID: 0c13eeca-9d3b-456a-9d78-73ffd155d940 + name: Manualdistributiontestvsp.compute.nodes.heat.simple + description: Not reusable inner VFC + type: VFC + category: Generic + subcategory: Abstract + resourceVendor: Test + 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 +node_types: + org.openecomp.resource.vfc.Manualdistributiontestvsp.abstract.compute.nodes.heat.simple: + derived_from: org.openecomp.resource.vfc.nodes.heat.nova.Server + description: Not reusable inner VFC + properties: + admin_pass: + type: string + description: The administrator password for the server + required: false + image: + type: string + description: The ID or name of the image to boot with + required: false + availability_zone: + type: string + description: Availability zone to create servers in + required: false + metadata: + type: json + description: Arbitrary JSON metadata to store for this server + required: false + image_update_policy: + default: REBUILD + type: string + description: Policy on how to apply an image-id update + required: false + contrail_service_instance_ind: + default: false + type: boolean + description: Nova server related to service instance indicator + required: false + user_data_update_policy: + default: REPLACE + type: string + description: Policy on how to apply a user_data update + required: false + user_data: + type: string + description: User data script to be executed by cloud-init + required: false + flavor_update_policy: + default: RESIZE + type: string + description: Policy on how to apply a flavor update + required: false + reservation_id: + type: string + description: A UUID for the set of servers being requested + required: false + key_name: + type: string + description: Name of keypair to inject into the server + required: false + flavor: + type: string + description: The ID or name of the flavor to boot onto + required: true + security_groups: + default: [ + ] + type: list + description: List of security group names or IDs + required: false + entry_schema: + type: string + config_drive: + type: boolean + description: enable config drive on the server + required: false + software_config_transport: + default: POLL_SERVER_CFN + type: string + description: How the server should receive the metadata required for software configuration + required: false + personality: + default: { + } + type: map + description: A map of files to create/overwrite on the server upon boot + required: false + entry_schema: + type: string + user_data_format: + default: HEAT_CFNTOOLS + type: string + description: How the user_data should be formatted for the server + required: false + diskConfig: + type: string + description: Control how the disk is partitioned when the server is created + required: false + scheduler_hints: + type: map + description: Arbitrary key-value pairs specified by the client to help boot a server + required: false + entry_schema: + type: string + name: + type: string + description: Server name + required: false + interfaces: + Standard: + type: tosca.interfaces.node.lifecycle.Standard diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml new file mode 100644 index 00000000..a5ce7c7f --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml @@ -0,0 +1,1892 @@ +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.vfc.Manualdistributiontestvspcvfc.abstract.nodes.simple: + derived_from: org.openecomp.resource.abstract.nodes.VFC + properties: + compute_simple_user_data_format: + type: list + required: true + entry_schema: + type: string + port_simple_private_port_network: + type: list + required: true + entry_schema: + type: string + nfc_naming: + default: + ecomp_generated_naming: true + type: org.openecomp.datatypes.Naming + description: vfc naming + required: false + port_simple_private_port_related_networks: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.RelatedNetworksAssignments + vm_flavor_name: + type: string + required: true + port_simple_private_port_fixed_ips: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.heat.neutron.port.FixedIps + port_simple_private_port_subnetpoolid: + type: string + required: true + service_template_filter: + default: + index_value: 0 + count: '1' + scaling_enabled: true + mandatory: true + type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering + description: Substitution Filter + required: true + port_simple_private_port_ip_requirements: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.IpRequirements + vm_image_name: + type: string + required: true + vm_type_tag: + type: string + description: vm type based on naming Convention + required: false + high_availablity: + type: string + description: high_availablity + required: false + port_simple_private_port_network_role_tag: + type: string + required: true + compute_simple_metadata: + type: list + required: true + entry_schema: + type: json + nfc_naming_code: + type: string + description: nfc code for instance naming + required: false + nfc_function: + type: string + required: false + index_value: + default: 0 + type: integer + description: Index value of this substitution service template runtime instance + required: false + compute_simple_key_name: + type: list + required: true + entry_schema: + type: string + max_instances: + type: integer + description: Maximum number of VFC Instances + required: false + compute_simple_name: + type: list + required: true + entry_schema: + type: string + port_simple_private_port_order: + type: integer + required: true + compute_simple_availability_zone: + type: list + required: true + entry_schema: + type: string + port_simple_private_port_mac_requirements: + default: + mac_count_required: + is_required: false + type: org.openecomp.datatypes.network.MacRequirements + required: true + port_simple_private_port_network_role: + type: string + required: true + min_instances: + default: 0 + type: integer + description: Minimum number of VFC Instances + required: false + port_simple_private_port_vlan_requirements: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.VlanRequirements + port_simple_private_port_exCP_naming: + default: + ecomp_generated_naming: true + type: org.openecomp.datatypes.Naming + required: true + capabilities: + disk.device.read.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.read.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.read.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.capacity_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk that the instance can see + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.write.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.incoming.bytes.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of incoming bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + host_simple: + type: tosca.capabilities.Container + occurrences: + - 0 + - UNBOUNDED + valid_source_types: + - tosca.nodes.SoftwareComponent + properties: + num_cpus: + type: integer + required: false + disk_size: + type: scalar-unit.size + required: false + cpu_frequency: + type: scalar-unit.frequency + required: false + mem_size: + type: scalar-unit.size + required: false + disk.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The physical size in bytes of the image container on the host + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + feature_simple_simple_private_port: + type: tosca.capabilities.Node + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + disk.device.write.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.ephemeral.size_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: GB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Size of ephemeral disk + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + feature_simple: + type: tosca.capabilities.Node + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + os_simple: + type: tosca.capabilities.OperatingSystem + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + distribution: + type: string + required: false + type: + type: string + required: false + version: + type: version + required: false + architecture: + type: string + required: false + memory_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM allocated to the instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.iops_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: count/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk iops + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.outgoing.bytes_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of outgoing bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The physical size in bytes of the image container on the host per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.latency_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ms + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk latency + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + binding_simple: + type: tosca.capabilities.network.Bindable + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + port_mirroring_simple_simple_private_port: + type: org.openecomp.capabilities.PortMirroring + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + connection_point: + default: + network_role: + get_input: port_simple_private_port_network_role + nfc_naming_code: simple + type: org.openecomp.datatypes.PortMirroringConnectionPointDescription + required: false + disk.device.write.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + binding_simple_simple_private_port: + 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 + endpoint_simple: + type: tosca.capabilities.Endpoint.Admin + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + secure: + default: true + type: boolean + required: false + disk.write.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.write.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.write.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + cpu_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ns + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: CPU time used + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.incoming.packets.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of incoming packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.latency_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ms + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk latency per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.capacity_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk per device that the instance can see + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + memory.resident_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM used by the instance on the physical machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + instance_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: instance + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Existence of instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + cpu_util_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: '%' + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average CPU utilization + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.read.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + scalable_simple: + type: tosca.capabilities.Scalable + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + max_instances: + default: 1 + type: integer + required: false + min_instances: + default: 1 + type: integer + required: false + default_instances: + type: integer + required: false + disk.device.iops_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: count/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk iops per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + memory.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM used by the instance from the amount of its allocated memory + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.outpoing.packets_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of outgoing packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.read.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + forwarder_simple_simple_private_port: + type: org.openecomp.capabilities.Forwarder + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + attachment_simple_simple_private_port: + type: tosca.capabilities.Attachment + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + disk.device.read.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.allocation_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk occupied by the instance on the host machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.outgoing.bytes.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of outgoing bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.allocation_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk per device occupied by the instance on the host machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.write.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.read.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.incoming.bytes_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of incoming bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.incoming.packets_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of incoming packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + cpu.delta_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ns + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: CPU time used since previous datapoint + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Delta + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + vcpus_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: vcpu + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of virtual CPUs allocated to the instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.root.size_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: GB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Size of root disk + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + disk.device.write.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + network.outgoing.packets.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of outgoing packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + requirements: + - dependency_simple: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Node + node: tosca.nodes.Root + relationship: tosca.relationships.DependsOn + - dependency_simple_simple_private_port: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Node + node: tosca.nodes.Root + relationship: tosca.relationships.DependsOn + - link_simple_simple_private_port: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.network.Linkable + relationship: tosca.relationships.network.LinksTo + - local_storage_simple: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Attachment + node: tosca.nodes.BlockStorage + relationship: tosca.relationships.AttachesTo diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template.yml new file mode 100644 index 00000000..21093271 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template.yml @@ -0,0 +1,705 @@ +tosca_definitions_version: tosca_simple_yaml_1_1 +metadata: + invariantUUID: 224c558c-56ab-40f8-9018-40846d8735a5 + UUID: 7fa6cae7-4a51-4f8b-b0ef-bbac305412ed + name: manualDistributionTestVSP-nodes.simpleCvfc + description: Complex node type that is used as nested type in VF + type: CVFC + category: Generic + subcategory: Abstract + resourceVendor: Test + 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-manualDistributionTestVSP-nodes.simpleCvfc-interface: + file: resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml +- resource-Manualdistributiontestvsp.compute.nodes.heat.simple: + file: resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml +- resource-extNeutronCP: + file: resource-Extneutroncp-template.yml +topology_template: + inputs: + compute_simple_user_data_format: + type: list + required: true + entry_schema: + type: string + port_simple_private_port_network: + type: list + required: true + entry_schema: + type: string + nfc_naming: + default: + ecomp_generated_naming: true + type: org.openecomp.datatypes.Naming + description: vfc naming + required: false + port_simple_private_port_related_networks: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.RelatedNetworksAssignments + vm_flavor_name: + type: string + required: true + port_simple_private_port_fixed_ips: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.heat.neutron.port.FixedIps + port_simple_private_port_subnetpoolid: + type: string + required: true + service_template_filter: + default: + index_value: 0 + count: '1' + scaling_enabled: true + mandatory: true + type: org.openecomp.datatypes.heat.substitution.SubstitutionFiltering + description: Substitution Filter + required: true + port_simple_private_port_ip_requirements: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.IpRequirements + vm_image_name: + type: string + required: true + vm_type_tag: + type: string + description: vm type based on naming Convention + required: false + high_availablity: + type: string + description: high_availablity + required: false + port_simple_private_port_network_role_tag: + type: string + required: true + compute_simple_metadata: + type: list + required: true + entry_schema: + type: json + nfc_naming_code: + type: string + description: nfc code for instance naming + required: false + nfc_function: + type: string + required: false + index_value: + default: 0 + type: integer + description: Index value of this substitution service template runtime instance + required: false + compute_simple_key_name: + type: list + required: true + entry_schema: + type: string + max_instances: + type: integer + description: Maximum number of VFC Instances + required: false + compute_simple_name: + type: list + required: true + entry_schema: + type: string + port_simple_private_port_order: + type: integer + required: true + compute_simple_availability_zone: + type: list + required: true + entry_schema: + type: string + port_simple_private_port_mac_requirements: + default: + mac_count_required: + is_required: false + type: org.openecomp.datatypes.network.MacRequirements + required: true + port_simple_private_port_network_role: + type: string + required: true + min_instances: + default: 0 + type: integer + description: Minimum number of VFC Instances + required: false + port_simple_private_port_vlan_requirements: + type: list + required: true + entry_schema: + type: org.openecomp.datatypes.network.VlanRequirements + port_simple_private_port_exCP_naming: + default: + ecomp_generated_naming: true + type: org.openecomp.datatypes.Naming + required: true + node_templates: + simple_simple_private_port: + type: org.openecomp.resource.cp.v2.extNeutronCP + metadata: + invariantUUID: 3fed24ab-7a60-40cd-a52b-520df0d743e8 + UUID: e3334a40-6ede-4d38-975b-705e9cb99d2f + customizationUUID: cabd6198-f37f-4868-8a95-120296945db0 + version: '1.0' + name: extNeutronCP + description: The AT&T Connection Point base type all other CP derive from + type: CP + category: Generic + subcategory: Network Elements + resourceVendor: ONAP (Tosca) + resourceVendorRelease: 1.0.0.wd03 + resourceVendorModelNumber: '' + properties: + subnetpoolid: + get_input: port_simple_private_port_subnetpoolid + is_default: false + related_networks: + get_input: port_simple_private_port_related_networks + network: + get_input: + - port_simple_private_port_network + - index_value + replacement_policy: AUTO + ip_requirements: + get_input: port_simple_private_port_ip_requirements + network_role: + get_input: port_simple_private_port_network_role + fixed_ips: + get_input: + - port_simple_private_port_fixed_ips + - index_value + subinterface_indicator: false + mac_requirements: + get_input: port_simple_private_port_mac_requirements + admin_state_up: true + exCP_naming: + get_input: port_simple_private_port_exCP_naming + vlan_requirements: + get_input: port_simple_private_port_vlan_requirements + network_role_tag: + get_input: port_simple_private_port_network_role_tag + order: + get_input: port_simple_private_port_order + requirements: + - binding: + capability: binding + node: simple + capabilities: + network.incoming.packets.rate_simple_simple_private_port: + properties: + unit: packet/s + description: Average rate of incoming packets + type: Gauge + category: network + network.incoming.packets_simple_simple_private_port: + properties: + unit: packet + description: Number of incoming packets + type: Cumulative + category: network + network.incoming.bytes_simple_simple_private_port: + properties: + unit: B + description: Number of incoming bytes + type: Cumulative + category: network + network.incoming.bytes.rate_simple_simple_private_port: + properties: + unit: B/s + description: Average rate of incoming bytes + type: Gauge + category: network + port_mirroring_simple_simple_private_port: + properties: + connection_point: + network_role: + get_input: port_simple_private_port_network_role + nfc_naming_code: simple + network.outpoing.packets_simple_simple_private_port: + properties: + unit: packet + description: Number of outgoing packets + type: Cumulative + category: network + network.outgoing.bytes_simple_simple_private_port: + properties: + unit: B + description: Number of outgoing bytes + type: Cumulative + category: network + network.outgoing.bytes.rate_simple_simple_private_port: + properties: + unit: B/s + description: Average rate of outgoing bytes + type: Gauge + category: network + network.outgoing.packets.rate_simple_simple_private_port: + properties: + unit: packet/s + description: Average rate of outgoing packets + type: Gauge + category: network + simple: + type: org.openecomp.resource.vfc.Manualdistributiontestvsp.abstract.compute.nodes.heat.simple + metadata: + invariantUUID: 67a4bb59-d438-4c83-9c94-ed99b30a9b66 + UUID: 0c13eeca-9d3b-456a-9d78-73ffd155d940 + customizationUUID: d9fc7afd-3596-4296-8c78-d9befe8a9fae + version: '1.0' + name: Manualdistributiontestvsp.compute.nodes.heat.simple + description: Not reusable inner VFC + type: VFC + category: Generic + subcategory: Abstract + resourceVendor: Test + resourceVendorRelease: '1.0' + resourceVendorModelNumber: '' + properties: + flavor: + get_input: vm_flavor_name + key_name: + get_input: + - compute_simple_key_name + - index_value + image: + get_input: vm_image_name + availability_zone: + get_input: + - compute_simple_availability_zone + - index_value + image_update_policy: REBUILD + metadata: + get_input: + - compute_simple_metadata + - index_value + software_config_transport: POLL_SERVER_CFN + contrail_service_instance_ind: false + user_data_format: + get_input: + - compute_simple_user_data_format + - index_value + user_data_update_policy: REPLACE + name: + get_input: + - compute_simple_name + - index_value + flavor_update_policy: RESIZE + capabilities: + disk.read.bytes_simple: + properties: + unit: B + description: Volume of reads + type: Cumulative + category: compute + cpu_simple: + properties: + unit: ns + description: CPU time used + type: Cumulative + category: compute + disk.device.read.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of reads + type: Gauge + category: disk + disk.device.read.requests_simple: + properties: + unit: request + description: Number of read requests + type: Cumulative + category: disk + disk.capacity_simple: + properties: + unit: B + description: The amount of disk that the instance can see + type: Gauge + category: disk + disk.device.latency_simple: + properties: + unit: ms + description: Average disk latency per device + type: Gauge + category: disk + disk.write.bytes_simple: + properties: + unit: B + description: Volume of writes + type: Cumulative + category: compute + disk.device.capacity_simple: + properties: + unit: B + description: The amount of disk per device that the instance can see + type: Gauge + category: disk + disk.usage_simple: + properties: + unit: B + description: The physical size in bytes of the image container on the host + type: Gauge + category: disk + memory.resident_simple: + properties: + unit: MB + description: Volume of RAM used by the instance on the physical machine + type: Gauge + category: compute + disk.device.write.requests.rate_simple: + properties: + unit: request/s + description: Average rate of write requests + type: Gauge + category: disk + cpu_util_simple: + properties: + unit: '%' + description: Average CPU utilization + type: Gauge + category: compute + instance_simple: + properties: + unit: instance + description: Existence of instance + type: Gauge + category: compute + disk.ephemeral.size_simple: + properties: + unit: GB + description: Size of ephemeral disk + type: Gauge + category: compute + disk.device.read.bytes_simple: + properties: + unit: B + description: Volume of reads + type: Cumulative + category: disk + scalable_simple: + properties: + max_instances: 1 + min_instances: 1 + memory.usage_simple: + properties: + unit: MB + description: Volume of RAM used by the instance from the amount of its allocated memory + type: Gauge + category: compute + disk.device.iops_simple: + properties: + unit: count/s + description: Average disk iops per device + type: Gauge + category: disk + memory_simple: + properties: + unit: MB + description: Volume of RAM allocated to the instance + type: Gauge + category: compute + disk.iops_simple: + properties: + unit: count/s + description: Average disk iops + type: Gauge + category: disk + disk.read.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of reads + type: Gauge + category: compute + disk.device.usage_simple: + properties: + unit: B + description: The physical size in bytes of the image container on the host per device + type: Gauge + category: disk + disk.latency_simple: + properties: + unit: ms + description: Average disk latency + type: Gauge + category: disk + disk.allocation_simple: + properties: + unit: B + description: The amount of disk occupied by the instance on the host machine + type: Gauge + category: disk + disk.device.read.requests.rate_simple: + properties: + unit: request/s + description: Average rate of read requests + type: Gauge + category: disk + disk.device.allocation_simple: + properties: + unit: B + description: The amount of disk per device occupied by the instance on the host machine + type: Gauge + category: disk + disk.device.write.bytes_simple: + properties: + unit: B + description: Volume of writes + type: Cumulative + category: disk + disk.read.requests_simple: + properties: + unit: request + description: Number of read requests + type: Cumulative + category: compute + disk.device.write.requests_simple: + properties: + unit: request + description: Number of write requests + type: Cumulative + category: disk + endpoint_simple: + properties: + secure: true + cpu.delta_simple: + properties: + unit: ns + description: CPU time used since previous datapoint + type: Delta + category: compute + vcpus_simple: + properties: + unit: vcpu + description: Number of virtual CPUs allocated to the instance + type: Gauge + category: compute + disk.device.write.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of writes + type: Gauge + category: disk + disk.root.size_simple: + properties: + unit: GB + description: Size of root disk + type: Gauge + category: compute + disk.write.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of writes + type: Gauge + category: compute + disk.write.requests.rate_simple: + properties: + unit: request/s + description: Average rate of write requests + type: Gauge + category: compute + disk.write.requests_simple: + properties: + unit: request + description: Number of write requests + type: Cumulative + category: compute + substitution_mappings: + node_type: org.openecomp.resource.vfc.Manualdistributiontestvspcvfc.abstract.nodes.simple + capabilities: + disk.device.read.requests_simple: + - simple + - disk.device.read.requests + disk.device.read.bytes.rate_simple: + - simple + - disk.device.read.bytes.rate + disk.read.bytes_simple: + - simple + - disk.read.bytes + disk.capacity_simple: + - simple + - disk.capacity + disk.write.bytes_simple: + - simple + - disk.write.bytes + network.incoming.bytes.rate_simple_simple_private_port: + - simple_simple_private_port + - network.incoming.bytes.rate + host_simple: + - simple + - host + disk.usage_simple: + - simple + - disk.usage + feature_simple_simple_private_port: + - simple_simple_private_port + - feature + disk.device.write.requests.rate_simple: + - simple + - disk.device.write.requests.rate + disk.ephemeral.size_simple: + - simple + - disk.ephemeral.size + feature_simple: + - simple + - feature + os_simple: + - simple + - os + memory_simple: + - simple + - memory + disk.iops_simple: + - simple + - disk.iops + network.outgoing.bytes_simple_simple_private_port: + - simple_simple_private_port + - network.outgoing.bytes + disk.device.usage_simple: + - simple + - disk.device.usage + disk.latency_simple: + - simple + - disk.latency + binding_simple: + - simple + - binding + port_mirroring_simple_simple_private_port: + - simple_simple_private_port + - port_mirroring + disk.device.write.requests_simple: + - simple + - disk.device.write.requests + binding_simple_simple_private_port: + - simple_simple_private_port + - binding + endpoint_simple: + - simple + - endpoint + disk.write.bytes.rate_simple: + - simple + - disk.write.bytes.rate + disk.write.requests.rate_simple: + - simple + - disk.write.requests.rate + disk.write.requests_simple: + - simple + - disk.write.requests + cpu_simple: + - simple + - cpu + network.incoming.packets.rate_simple_simple_private_port: + - simple_simple_private_port + - network.incoming.packets.rate + disk.device.latency_simple: + - simple + - disk.device.latency + disk.device.capacity_simple: + - simple + - disk.device.capacity + memory.resident_simple: + - simple + - memory.resident + instance_simple: + - simple + - instance + cpu_util_simple: + - simple + - cpu_util + disk.device.read.bytes_simple: + - simple + - disk.device.read.bytes + scalable_simple: + - simple + - scalable + disk.device.iops_simple: + - simple + - disk.device.iops + memory.usage_simple: + - simple + - memory.usage + network.outpoing.packets_simple_simple_private_port: + - simple_simple_private_port + - network.outpoing.packets + disk.read.bytes.rate_simple: + - simple + - disk.read.bytes.rate + forwarder_simple_simple_private_port: + - simple_simple_private_port + - forwarder + attachment_simple_simple_private_port: + - simple_simple_private_port + - attachment + disk.device.read.requests.rate_simple: + - simple + - disk.device.read.requests.rate + disk.allocation_simple: + - simple + - disk.allocation + network.outgoing.bytes.rate_simple_simple_private_port: + - simple_simple_private_port + - network.outgoing.bytes.rate + disk.device.allocation_simple: + - simple + - disk.device.allocation + disk.device.write.bytes_simple: + - simple + - disk.device.write.bytes + disk.read.requests_simple: + - simple + - disk.read.requests + network.incoming.bytes_simple_simple_private_port: + - simple_simple_private_port + - network.incoming.bytes + network.incoming.packets_simple_simple_private_port: + - simple_simple_private_port + - network.incoming.packets + cpu.delta_simple: + - simple + - cpu.delta + vcpus_simple: + - simple + - vcpus + disk.root.size_simple: + - simple + - disk.root.size + disk.device.write.bytes.rate_simple: + - simple + - disk.device.write.bytes.rate + network.outgoing.packets.rate_simple_simple_private_port: + - simple_simple_private_port + - network.outgoing.packets.rate + requirements: + dependency_simple_simple_private_port: + - simple_simple_private_port + - dependency + local_storage_simple: + - simple + - local_storage + dependency_simple: + - simple + - dependency + link_simple_simple_private_port: + - simple_simple_private_port + - link diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template-interface.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template-interface.yml new file mode 100644 index 00000000..aa3f5456 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template-interface.yml @@ -0,0 +1,1768 @@ +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.Manualdistributiontestservice: + derived_from: org.openecomp.resource.abstract.nodes.service + capabilities: + manualdistributiontestvnf0.abstract_simple.feature_simple_simple_private_port: + type: tosca.capabilities.Node + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + manualdistributiontestvnf0.abstract_simple.binding_simple_simple_private_port: + 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 + manualdistributiontestvnf0.abstract_simple.memory.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM used by the instance from the amount of its allocated memory + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.root.size_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: GB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Size of root disk + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.read.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.ephemeral.size_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: GB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Size of ephemeral disk + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.read.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.network.incoming.bytes.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of incoming bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.read.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.cpu.delta_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ns + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: CPU time used since previous datapoint + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Delta + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.latency_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ms + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk latency + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.network.outpoing.packets_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of outgoing packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.network.outgoing.packets.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of outgoing packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.latency_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ms + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk latency per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.write.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The physical size in bytes of the image container on the host + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.os_simple: + type: tosca.capabilities.OperatingSystem + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + distribution: + type: string + required: false + type: + type: string + required: false + version: + type: version + required: false + architecture: + type: string + required: false + manualdistributiontestvnf0.abstract_simple.attachment_simple_simple_private_port: + type: tosca.capabilities.Attachment + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + manualdistributiontestvnf0.abstract_simple.cpu_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: ns + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: CPU time used + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.write.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.write.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.memory_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM allocated to the instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.read.requests.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.usage_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The physical size in bytes of the image container on the host per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.host_simple: + type: tosca.capabilities.Container + occurrences: + - 0 + - UNBOUNDED + valid_source_types: + - tosca.nodes.SoftwareComponent + properties: + num_cpus: + type: integer + required: false + disk_size: + type: scalar-unit.size + required: false + cpu_frequency: + type: scalar-unit.frequency + required: false + mem_size: + type: scalar-unit.size + required: false + manualdistributiontestvnf0.abstract_simple.disk.allocation_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk occupied by the instance on the host machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.cpu_util_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: '%' + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average CPU utilization + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.port_mirroring_simple_simple_private_port: + type: org.openecomp.capabilities.PortMirroring + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + connection_point: + default: + network_role: + get_input: port_simple_private_port_network_role + nfc_naming_code: simple + type: org.openecomp.datatypes.PortMirroringConnectionPointDescription + required: false + manualdistributiontestvnf0.abstract_simple.disk.device.write.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.read.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of reads + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.iops_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: count/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk iops per device + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.network.incoming.bytes_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of incoming bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.write.bytes.rate_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.endpoint_simple: + type: tosca.capabilities.Endpoint.Admin + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + secure: + default: true + type: boolean + required: false + manualdistributiontestvnf0.abstract_simple.disk.device.allocation_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk per device occupied by the instance on the host machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.capacity_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk that the instance can see + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.memory.resident_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: MB + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of RAM used by the instance on the physical machine + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.write.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.write.bytes_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Volume of writes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.feature_simple: + type: tosca.capabilities.Node + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + manualdistributiontestvnf0.abstract_simple.disk.read.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.vcpus_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: vcpu + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of virtual CPUs allocated to the instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.read.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of read requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.forwarder_simple_simple_private_port: + type: org.openecomp.capabilities.Forwarder + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + manualdistributiontestvnf0.abstract_simple.network.outgoing.bytes_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of outgoing bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.device.capacity_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: The amount of disk per device that the instance can see + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.scalable_simple: + type: tosca.capabilities.Scalable + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + properties: + max_instances: + default: 1 + type: integer + required: false + min_instances: + default: 1 + type: integer + required: false + default_instances: + type: integer + required: false + manualdistributiontestvnf0.abstract_simple.network.outgoing.bytes.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: B/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of outgoing bytes + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.instance_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: instance + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Existence of instance + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.write.requests_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: request + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of write requests + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: compute + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.binding_simple: + type: tosca.capabilities.network.Bindable + occurrences: + - 0 + - UNBOUNDED + valid_source_types: [ + ] + manualdistributiontestvnf0.abstract_simple.network.incoming.packets_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Number of incoming packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Cumulative + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.disk.iops_simple: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: count/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average disk iops + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: disk + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + manualdistributiontestvnf0.abstract_simple.network.incoming.packets.rate_simple_simple_private_port: + type: org.openecomp.capabilities.metric.Ceilometer + description: A node type that includes the Metric capability indicates that it can be monitored using ceilometer. + occurrences: + - 1 + - UNBOUNDED + valid_source_types: [ + ] + properties: + unit: + default: packet/s + type: string + description: Unit of the metric value + required: true + status: SUPPORTED + name: + type: string + description: Ceilometer metric type name to monitor. (The name ceilometer is using) + required: true + description: + default: Average rate of incoming packets + type: string + description: Description of the metric + required: false + status: SUPPORTED + type: + default: Gauge + type: string + description: Type of the metric value, for an example, Cumulative, Delta, Gauge and etc. + required: true + status: SUPPORTED + category: + default: network + type: string + description: Category of the metric, for an example, compute, disk, network, storage and etc. + required: false + status: SUPPORTED + requirements: + - manualdistributiontestvnf0.abstract_simple.dependency_simple: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Node + node: tosca.nodes.Root + relationship: tosca.relationships.DependsOn + - manualdistributiontestvnf0.abstract_simple.dependency_simple_simple_private_port: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Node + node: tosca.nodes.Root + relationship: tosca.relationships.DependsOn + - manualdistributiontestvnf0.abstract_simple.link_simple_simple_private_port: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.network.Linkable + relationship: tosca.relationships.network.LinksTo + - manualdistributiontestvnf0.abstract_simple.local_storage_simple: + occurrences: + - 0 + - UNBOUNDED + capability: tosca.capabilities.Attachment + node: tosca.nodes.BlockStorage + relationship: tosca.relationships.AttachesTo diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template.yml new file mode 100644 index 00000000..defdf0a8 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template.yml @@ -0,0 +1,537 @@ +tosca_definitions_version: tosca_simple_yaml_1_1 +metadata: + invariantUUID: 0ddc448d-5513-44bc-8b02-5759d84600d5 + UUID: 28d4acf3-4791-4998-8d06-1cdf6d1767a9 + name: manualDistributionTestService + description: Test + type: Service + category: Network L4+ + 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-manualDistributionTestService-interface: + file: service-Manualdistributiontestservice-template-interface.yml +- resource-manualDistributionTestVNF: + file: resource-Manualdistributiontestvsp-template.yml +- resource-manualDistributionTestVNF-interface: + file: resource-Manualdistributiontestvsp-template-interface.yml +topology_template: + node_templates: + manualDistributionTestVNF 0: + type: org.openecomp.resource.vf.Manualdistributiontestvnf + metadata: + invariantUUID: 0a0b9979-863d-4b7e-b7f4-d27725a182b3 + UUID: 8f43a8c9-c677-462a-ae36-8ddb5990a60d + customizationUUID: 82ad3aa0-edc6-410c-a217-655fb064323f + version: '1.0' + name: manualDistributionTestVNF + description: Test + type: VF + category: Application L4+ + subcategory: Media Servers + resourceVendor: Test + resourceVendorRelease: '1.0' + resourceVendorModelNumber: '' + properties: + vf_module_id: AFRMODULEID + skip_post_instantiation_configuration: true + nf_naming: + ecomp_generated_naming: true + ves_ip: 172.26.10.19 + simple_key: afr-key + multi_stage_design: 'false' + node_ip: 172.26.10.27 + simple_flavor_name: m1.small + availability_zone_max_count: 1 + public_net_id: nova_floating + simple_image_name: UBUNTU16 + nf_type: simulator + simple_netid: onap_vip + vnf_id: VESMED + simple_name_0: SIMPLEUBU + capabilities: + abstract_simple.network.incoming.packets.rate_simple_simple_private_port: + properties: + unit: packet/s + description: Average rate of incoming packets + type: Gauge + category: network + abstract_simple.disk.write.requests_simple: + properties: + unit: request + description: Number of write requests + type: Cumulative + category: compute + abstract_simple.disk.read.requests_simple: + properties: + unit: request + description: Number of read requests + type: Cumulative + category: compute + abstract_simple.memory_simple: + properties: + unit: MB + description: Volume of RAM allocated to the instance + type: Gauge + category: compute + abstract_simple.disk.root.size_simple: + properties: + unit: GB + description: Size of root disk + type: Gauge + category: compute + abstract_simple.network.incoming.packets_simple_simple_private_port: + properties: + unit: packet + description: Number of incoming packets + type: Cumulative + category: network + abstract_simple.network.outgoing.bytes_simple_simple_private_port: + properties: + unit: B + description: Number of outgoing bytes + type: Cumulative + category: network + abstract_simple.disk.device.read.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of reads + type: Gauge + category: disk + abstract_simple.network.outpoing.packets_simple_simple_private_port: + properties: + unit: packet + description: Number of outgoing packets + type: Cumulative + category: network + abstract_simple.disk.capacity_simple: + properties: + unit: B + description: The amount of disk that the instance can see + type: Gauge + category: disk + abstract_simple.disk.device.allocation_simple: + properties: + unit: B + description: The amount of disk per device occupied by the instance on the host machine + type: Gauge + category: disk + abstract_simple.disk.allocation_simple: + properties: + unit: B + description: The amount of disk occupied by the instance on the host machine + type: Gauge + category: disk + abstract_simple.endpoint_simple: + properties: + secure: true + abstract_simple.disk.device.write.requests.rate_simple: + properties: + unit: request/s + description: Average rate of write requests + type: Gauge + category: disk + abstract_simple.disk.device.write.bytes_simple: + properties: + unit: B + description: Volume of writes + type: Cumulative + category: disk + abstract_simple.network.incoming.bytes.rate_simple_simple_private_port: + properties: + unit: B/s + description: Average rate of incoming bytes + type: Gauge + category: network + abstract_simple.memory.usage_simple: + properties: + unit: MB + description: Volume of RAM used by the instance from the amount of its allocated memory + type: Gauge + category: compute + abstract_simple.cpu_util_simple: + properties: + unit: '%' + description: Average CPU utilization + type: Gauge + category: compute + abstract_simple.cpu.delta_simple: + properties: + unit: ns + description: CPU time used since previous datapoint + type: Delta + category: compute + abstract_simple.disk.read.bytes_simple: + properties: + unit: B + description: Volume of reads + type: Cumulative + category: compute + abstract_simple.disk.write.requests.rate_simple: + properties: + unit: request/s + description: Average rate of write requests + type: Gauge + category: compute + abstract_simple.disk.write.bytes_simple: + properties: + unit: B + description: Volume of writes + type: Cumulative + category: compute + abstract_simple.scalable_simple: + properties: + max_instances: 1 + min_instances: 1 + abstract_simple.instance_simple: + properties: + unit: instance + description: Existence of instance + type: Gauge + category: compute + abstract_simple.network.incoming.bytes_simple_simple_private_port: + properties: + unit: B + description: Number of incoming bytes + type: Cumulative + category: network + abstract_simple.disk.latency_simple: + properties: + unit: ms + description: Average disk latency + type: Gauge + category: disk + abstract_simple.disk.device.write.requests_simple: + properties: + unit: request + description: Number of write requests + type: Cumulative + category: disk + abstract_simple.disk.device.iops_simple: + properties: + unit: count/s + description: Average disk iops per device + type: Gauge + category: disk + abstract_simple.disk.device.write.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of writes + type: Gauge + category: disk + abstract_simple.disk.device.latency_simple: + properties: + unit: ms + description: Average disk latency per device + type: Gauge + category: disk + abstract_simple.cpu_simple: + properties: + unit: ns + description: CPU time used + type: Cumulative + category: compute + abstract_simple.port_mirroring_simple_simple_private_port: + properties: + connection_point: + network_role: + get_input: port_simple_private_port_network_role + nfc_naming_code: simple + abstract_simple.memory.resident_simple: + properties: + unit: MB + description: Volume of RAM used by the instance on the physical machine + type: Gauge + category: compute + abstract_simple.disk.device.usage_simple: + properties: + unit: B + description: The physical size in bytes of the image container on the host per device + type: Gauge + category: disk + abstract_simple.disk.usage_simple: + properties: + unit: B + description: The physical size in bytes of the image container on the host + type: Gauge + category: disk + abstract_simple.disk.device.read.requests.rate_simple: + properties: + unit: request/s + description: Average rate of read requests + type: Gauge + category: disk + abstract_simple.vcpus_simple: + properties: + unit: vcpu + description: Number of virtual CPUs allocated to the instance + type: Gauge + category: compute + abstract_simple.disk.read.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of reads + type: Gauge + category: compute + abstract_simple.disk.ephemeral.size_simple: + properties: + unit: GB + description: Size of ephemeral disk + type: Gauge + category: compute + abstract_simple.disk.device.read.bytes_simple: + properties: + unit: B + description: Volume of reads + type: Cumulative + category: disk + abstract_simple.disk.iops_simple: + properties: + unit: count/s + description: Average disk iops + type: Gauge + category: disk + abstract_simple.network.outgoing.bytes.rate_simple_simple_private_port: + properties: + unit: B/s + description: Average rate of outgoing bytes + type: Gauge + category: network + abstract_simple.disk.device.capacity_simple: + properties: + unit: B + description: The amount of disk per device that the instance can see + type: Gauge + category: disk + abstract_simple.network.outgoing.packets.rate_simple_simple_private_port: + properties: + unit: packet/s + description: Average rate of outgoing packets + type: Gauge + category: network + abstract_simple.disk.write.bytes.rate_simple: + properties: + unit: B/s + description: Average rate of writes + type: Gauge + category: compute + abstract_simple.disk.device.read.requests_simple: + properties: + unit: request + description: Number of read requests + type: Cumulative + category: disk + groups: + manualdistributiontestvnf0..manualDistributionTestVNF..base_ves_med1..module-0: + type: org.openecomp.groups.VfModule + metadata: + vfModuleModelName: manualDistributionTestVNF..base_ves_med1..module-0 + vfModuleModelInvariantUUID: dafd0c51-d03c-4849-a777-756e608ad6a5 + vfModuleModelUUID: b31a30a8-a4e4-4a5e-8f2d-ce7662ea4872 + vfModuleModelVersion: '1' + vfModuleModelCustomizationUUID: 6c3eafaf-dd98-4b35-8414-86e2beaed279 + properties: + min_vf_module_instances: 1 + vf_module_label: base_ves_med1 + max_vf_module_instances: 1 + vf_module_type: Base + isBase: true + initial_count: 1 + volume_group: false + substitution_mappings: + node_type: org.openecomp.service.Manualdistributiontestservice + capabilities: + manualdistributiontestvnf0.abstract_simple.feature_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.feature_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.binding_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.binding_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.memory.usage_simple: + - manualDistributionTestVNF 0 + - abstract_simple.memory.usage_simple + manualdistributiontestvnf0.abstract_simple.disk.root.size_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.root.size_simple + manualdistributiontestvnf0.abstract_simple.disk.read.bytes_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.read.bytes_simple + manualdistributiontestvnf0.abstract_simple.disk.ephemeral.size_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.ephemeral.size_simple + manualdistributiontestvnf0.abstract_simple.disk.device.read.bytes.rate_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.read.bytes.rate_simple + manualdistributiontestvnf0.abstract_simple.network.incoming.bytes.rate_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.incoming.bytes.rate_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.disk.device.read.bytes_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.read.bytes_simple + manualdistributiontestvnf0.abstract_simple.cpu.delta_simple: + - manualDistributionTestVNF 0 + - abstract_simple.cpu.delta_simple + manualdistributiontestvnf0.abstract_simple.disk.latency_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.latency_simple + manualdistributiontestvnf0.abstract_simple.network.outpoing.packets_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.outpoing.packets_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.network.outgoing.packets.rate_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.outgoing.packets.rate_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.disk.device.latency_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.latency_simple + manualdistributiontestvnf0.abstract_simple.disk.device.write.bytes.rate_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.write.bytes.rate_simple + manualdistributiontestvnf0.abstract_simple.disk.usage_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.usage_simple + manualdistributiontestvnf0.abstract_simple.os_simple: + - manualDistributionTestVNF 0 + - abstract_simple.os_simple + manualdistributiontestvnf0.abstract_simple.attachment_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.attachment_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.cpu_simple: + - manualDistributionTestVNF 0 + - abstract_simple.cpu_simple + manualdistributiontestvnf0.abstract_simple.disk.write.requests.rate_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.write.requests.rate_simple + manualdistributiontestvnf0.abstract_simple.disk.device.write.requests.rate_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.write.requests.rate_simple + manualdistributiontestvnf0.abstract_simple.memory_simple: + - manualDistributionTestVNF 0 + - abstract_simple.memory_simple + manualdistributiontestvnf0.abstract_simple.disk.device.read.requests.rate_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.read.requests.rate_simple + manualdistributiontestvnf0.abstract_simple.disk.device.usage_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.usage_simple + manualdistributiontestvnf0.abstract_simple.host_simple: + - manualDistributionTestVNF 0 + - abstract_simple.host_simple + manualdistributiontestvnf0.abstract_simple.disk.allocation_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.allocation_simple + manualdistributiontestvnf0.abstract_simple.cpu_util_simple: + - manualDistributionTestVNF 0 + - abstract_simple.cpu_util_simple + manualdistributiontestvnf0.abstract_simple.port_mirroring_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.port_mirroring_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.disk.device.write.requests_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.write.requests_simple + manualdistributiontestvnf0.abstract_simple.disk.read.bytes.rate_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.read.bytes.rate_simple + manualdistributiontestvnf0.abstract_simple.disk.device.iops_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.iops_simple + manualdistributiontestvnf0.abstract_simple.network.incoming.bytes_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.incoming.bytes_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.disk.write.bytes.rate_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.write.bytes.rate_simple + manualdistributiontestvnf0.abstract_simple.endpoint_simple: + - manualDistributionTestVNF 0 + - abstract_simple.endpoint_simple + manualdistributiontestvnf0.abstract_simple.disk.device.allocation_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.allocation_simple + manualdistributiontestvnf0.abstract_simple.disk.capacity_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.capacity_simple + manualdistributiontestvnf0.abstract_simple.memory.resident_simple: + - manualDistributionTestVNF 0 + - abstract_simple.memory.resident_simple + manualdistributiontestvnf0.abstract_simple.disk.device.write.bytes_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.write.bytes_simple + manualdistributiontestvnf0.abstract_simple.disk.write.bytes_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.write.bytes_simple + manualdistributiontestvnf0.abstract_simple.feature_simple: + - manualDistributionTestVNF 0 + - abstract_simple.feature_simple + manualdistributiontestvnf0.abstract_simple.disk.read.requests_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.read.requests_simple + manualdistributiontestvnf0.abstract_simple.vcpus_simple: + - manualDistributionTestVNF 0 + - abstract_simple.vcpus_simple + manualdistributiontestvnf0.abstract_simple.disk.device.read.requests_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.read.requests_simple + manualdistributiontestvnf0.abstract_simple.forwarder_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.forwarder_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.network.outgoing.bytes_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.outgoing.bytes_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.disk.device.capacity_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.device.capacity_simple + manualdistributiontestvnf0.abstract_simple.scalable_simple: + - manualDistributionTestVNF 0 + - abstract_simple.scalable_simple + manualdistributiontestvnf0.abstract_simple.network.outgoing.bytes.rate_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.outgoing.bytes.rate_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.instance_simple: + - manualDistributionTestVNF 0 + - abstract_simple.instance_simple + manualdistributiontestvnf0.abstract_simple.disk.write.requests_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.write.requests_simple + manualdistributiontestvnf0.abstract_simple.binding_simple: + - manualDistributionTestVNF 0 + - abstract_simple.binding_simple + manualdistributiontestvnf0.abstract_simple.network.incoming.packets_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.incoming.packets_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.disk.iops_simple: + - manualDistributionTestVNF 0 + - abstract_simple.disk.iops_simple + manualdistributiontestvnf0.abstract_simple.network.incoming.packets.rate_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.network.incoming.packets.rate_simple_simple_private_port + requirements: + manualdistributiontestvnf0.abstract_simple.link_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.link_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.dependency_simple_simple_private_port: + - manualDistributionTestVNF 0 + - abstract_simple.dependency_simple_simple_private_port + manualdistributiontestvnf0.abstract_simple.local_storage_simple: + - manualDistributionTestVNF 0 + - abstract_simple.local_storage_simple + manualdistributiontestvnf0.abstract_simple.dependency_simple: + - manualDistributionTestVNF 0 + - abstract_simple.dependency_simple diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vendor-license-model.xml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vendor-license-model.xml new file mode 100644 index 00000000..f25ff824 --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vendor-license-model.xml @@ -0,0 +1 @@ +Test9c7b6505ea31411e8dd9421d9aac9b54FDE8E9CFC07B42AAB12987440BFBF8661.0TestEntitlementPoolTEP11.0TestLicenseKeyGroupUniversalf109b410a44f4b8698c9afcecde66194F4B453CBA577433589F81CB7E6556A89 \ No newline at end of file diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vf-license-model.xml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vf-license-model.xml new file mode 100644 index 00000000..f4369f1f --- /dev/null +++ b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vf-license-model.xml @@ -0,0 +1 @@ +Test024abe1eef244a22b91958f507d5d325TestEntitlementPool9c7b6505ea31411e8dd9421d9aac9b54FDE8E9CFC07B42AAB12987440BFBF866TEP11.0TestLicenseKeyGroupUniversalf109b410a44f4b8698c9afcecde66194F4B453CBA577433589F81CB7E6556A891.0TestFeatureGroupc9890306e372438fa1eaac1c9bf5db92Test Feature GroupTFG1 \ No newline at end of file diff --git a/plans/so/integration-etsi-testing/config/distribution-test-zip/distributionTestZip.zip b/plans/so/integration-etsi-testing/config/distribution-test-zip/distributionTestZip.zip deleted file mode 100644 index ac96bd94c6ec987ecc658e2d01be975d1e612705..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148872 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%0DX~kIfO(rn<{6eIqk(f5?mjmX2Xsamc)}C4NA^ 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 diff --git a/plans/so/integration-etsi-testing/docker-compose.yml b/plans/so/integration-etsi-testing/docker-compose.yml index 76dd7b6a..b356b7da 100644 --- a/plans/so/integration-etsi-testing/docker-compose.yml +++ b/plans/so/integration-etsi-testing/docker-compose.yml @@ -130,7 +130,7 @@ services: volumes: - ${TEST_LAB_DIR}/volumes/so/ca-certificates/onapheat:/app/ca-certificates - ${TEST_LAB_DIR}/volumes/so/config/sdc-controller/onapheat:/app/config - - ${CONFIG_DIR_PATH}/distribution-test-zip/distributionTestZip.zip:/distribution-test-zip/distributionTestZip.zip + - ${CONFIG_DIR_PATH}/distribution-test-unzipped:/distribution-test/unzipped environment: - APP=sdc-controller - JVM_ARGS=-Xms64m -Xmx512m @@ -152,9 +152,13 @@ services: max-size: "30m" max-file: "5" command: - - /bin/sh - - -c - - 'mkdir -p /distribution-test-zip/unzipped && unzip /distribution-test-zip/distributionTestZip.zip -d /distribution-test-zip/unzipped && /app/wait-for.sh -q -t "300" request-db-adapter:8083 -- "/app/start-app.sh"' + - /app/wait-for.sh + - -q + - -t + - "300" + - request-db-adapter:8083 + - -- + - "/app/start-app.sh" ################################################################################ bpmn-infra: image: ${NEXUS_DOCKER_REPO_MSO}/onap/so/bpmn-infra:${TAG} diff --git a/tests/so/etsi/etsi_tests.robot b/tests/so/etsi/etsi_tests.robot index 4459c07a..e35b5364 100644 --- a/tests/so/etsi/etsi_tests.robot +++ b/tests/so/etsi/etsi_tests.robot @@ -12,7 +12,7 @@ ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}= 48 # Represents the maximum number o Distribute Service Template Create Session sdc_controller_session http://${REPO_IP}:8085 ${data}= Get Binary File ${CURDIR}${/}data${/}distributeServiceTemplate.json - &{headers}= Create Dictionary Authorization=Basic bXNvX2FkbWluOnBhc3N3b3JkMSQ= resource-location=/distribution-test-zip/unzipped Content-Type=application/json Accept=application/json + &{headers}= Create Dictionary Authorization=Basic bXNvX2FkbWluOnBhc3N3b3JkMSQ= resource-location=/distribution-test/unzipped Content-Type=application/json Accept=application/json ${resp}= Post Request sdc_controller_session /test/treatNotification/v1 data=${data} headers=${headers} Run Keyword If '${resp.status_code}' == '200' log to console \nexecuted with expected result Should Be Equal As Strings '${resp.status_code}' '200' -- 2.16.6