Merge "Correct path for service-instance"
authorDaniel Rose <dr695h@att.com>
Thu, 12 Sep 2019 21:53:22 +0000 (21:53 +0000)
committerGerrit Code Review <gerrit@onap.org>
Thu, 12 Sep 2019 21:53:22 +0000 (21:53 +0000)
134 files changed:
plans/dcaegen2-collectors-datafile/Functional-suite/setup.sh
plans/dcaegen2-collectors-datafile/Functional-suite/teardown.sh
plans/dcaegen2-collectors-datafile/ManagementInterface-suite/teardown.sh
plans/dcaegen2-collectors-hv-ves/testsuites/docker-compose.yml
plans/dcaegen2-collectors-hv-ves/testsuites/env.sh
plans/multicloud-ocata/functionality1/setup.sh [deleted file]
plans/multicloud-ocata/functionality1/teardown.sh [deleted file]
plans/multicloud-ocata/functionality1/testplan.txt [deleted file]
plans/multicloud-ocata/hpa-discovery/setup.sh [deleted file]
plans/multicloud-ocata/hpa-discovery/testplan.txt [deleted file]
plans/policy/distribution/setup.sh
plans/policy/distribution/teardown.sh
plans/so/integration-etsi-testing/config/aai-simulator-populate-data/cloud-esr-system-info.json [new file with mode: 0644]
plans/so/integration-etsi-testing/config/aai-simulator-populate-data/esr-system-info.json [new file with mode: 0644]
plans/so/integration-etsi-testing/config/aai-simulator-populate-data/esr-vnfm.json [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/TOSCA.meta [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/VSP_manualDistributionTestVSP_Information.txt [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/annotations.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/artifacts.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.yaml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/capabilities.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/csar.meta [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/data.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/groups.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/interfaces.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/nodes.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/policies.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/relationships.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Extneutroncp-template.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template-interface.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template-interface.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vendor-license-model.xml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vf-license-model.xml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/distribution-test-zip/distributionTestZip.zip [deleted file]
plans/so/integration-etsi-testing/config/env
plans/so/integration-etsi-testing/config/override-files/bpmn-infra/onapheat/override.yaml
plans/so/integration-etsi-testing/config/override-files/vnfm-adapter/onapheat/override.yaml [new file with mode: 0644]
plans/so/integration-etsi-testing/config/populate-aai-simulator.sh
plans/so/integration-etsi-testing/config/wait-for-container.sh
plans/so/integration-etsi-testing/docker-compose.local.yml [new file with mode: 0644]
plans/so/integration-etsi-testing/docker-compose.yml
plans/so/integration-etsi-testing/setup.sh
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/controller/CloudRegionsController.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/controller/ExternalSystemEsrController.java [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/controller/GenericVnfsController.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/CloudRegionCacheServiceProvider.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/CloudRegionCacheServiceProviderImpl.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/CustomerCacheServiceProviderImpl.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/ExternalSystemCacheServiceProvider.java [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/ExternalSystemCacheServiceProviderImpl.java [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/GenericVnfCacheServiceProvider.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/GenericVnfCacheServiceProviderImpl.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/LinesOfBusinessCacheServiceProviderImpl.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/OwnEntityCacheServiceProviderImpl.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/PlatformCacheServiceProviderImpl.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/ProjectCacheServiceProviderImpl.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/utils/CacheName.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/utils/Constants.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/utils/ShallowBeanCopy.java [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/java/org/onap/so/aaisimulator/controller/CloudRegionsControllerTest.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/java/org/onap/so/aaisimulator/controller/ExternalSystemEsrControllerTest.java [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/java/org/onap/so/aaisimulator/controller/GenericVnfsControllerTest.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/java/org/onap/so/aaisimulator/utils/TestConstants.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/java/org/onap/so/aaisimulator/utils/TestUtils.java
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/esr-system-info.json [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/esr-vnfm.json [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/generic-vnf.json
plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/vServer.json [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/common/src/main/java/org/onap/so/simulator/cache/provider/AbstractCacheServiceProvider.java
plans/so/integration-etsi-testing/so-simulators/sdc-simulator/src/test/java/org/onap/so/sdcsimulator/providers/ResourceProviderImplTest.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/main/java/org/onap/so/sdncsimulator/controller/OperationsController.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/main/java/org/onap/so/sdncsimulator/models/InputRequest.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/main/java/org/onap/so/sdncsimulator/models/Output.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/main/java/org/onap/so/sdncsimulator/models/OutputRequest.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/main/java/org/onap/so/sdncsimulator/providers/ServiceOperationsCacheServiceProvider.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/main/java/org/onap/so/sdncsimulator/providers/ServiceOperationsCacheServiceProviderimpl.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/main/java/org/onap/so/sdncsimulator/utils/Constants.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/java/org/onap/so/sdncsimulator/controller/OperationsControllerTest.java
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/java/org/onap/so/sdncsimulator/controller/TestUtils.java [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/resources/test-data/activateVnfInput.json [new file with mode: 0644]
plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/resources/test-data/vnfInput.json [new file with mode: 0644]
plans/so/integration-etsi-testing/teardown.sh
plans/so/integration-testing/.gitignore [new file with mode: 0644]
plans/so/integration-testing/docker-compose.yml
run-csit.sh
scripts/clamp/clone_clamp_and_change_dockercompose.sh
scripts/clamp/kill_and_remove_clamp_and_db_containers.sh
scripts/dcaegen2-collectors-datafile/dfc-containers-clean.sh
scripts/dcaegen2-collectors-datafile/dfc-management/dfc-kill.sh
scripts/dcaegen2-collectors-datafile/dfc-management/dfc-restart.sh
scripts/dcaegen2-collectors-datafile/dfc-management/dfc-start.sh
scripts/dcaegen2-collectors-datafile/dfc-management/docker-compose.yml
scripts/kill-instance.sh
scripts/multicloud-ocata/generic_sim/Dockerfile [deleted file]
scripts/multicloud-ocata/generic_sim/aai/responses.yml [deleted file]
scripts/multicloud-ocata/generic_sim/cinder/responses.yml [deleted file]
scripts/multicloud-ocata/generic_sim/generic_sim.py [deleted file]
scripts/multicloud-ocata/generic_sim/glance/responses.yml [deleted file]
scripts/multicloud-ocata/generic_sim/keystone/responses.yml [deleted file]
scripts/multicloud-ocata/generic_sim/log_parser.py [deleted file]
scripts/multicloud-ocata/generic_sim/nova/responses.yml [deleted file]
scripts/multicloud-ocata/generic_sim/requirements.txt [deleted file]
scripts/optf-has/has/has_script.sh
scripts/policy/config/pap/onap.policies.monitoring.cdap.tca.hi.lo.app.json
scripts/policy/policy-distribution/config/db/db.conf [moved from plans/multicloud-ocata/hpa-discovery/teardown.sh with 61% similarity]
scripts/policy/policy-distribution/config/db/db.sh [new file with mode: 0644]
scripts/policy/policy-distribution/config/distribution/csar/sample_csar_with_apex_policy.csar [new file with mode: 0644]
scripts/policy/policy-distribution/config/distribution/defaultConfig.json [new file with mode: 0644]
scripts/policy/policy-distribution/config/distribution/temp/sample_csar_with_apex_policy.csar [new file with mode: 0644]
scripts/policy/policy-distribution/docker-compose-distribution.yml [new file with mode: 0644]
tests/clamp/APIs/01__Test_CL_APIs.robot
tests/clamp/UIs/01__Open_And_Edit_TCA.robot
tests/clamp/UIs/02__Verify_Modification_In_UI.robot
tests/dcaegen2-collectors-datafile/testsuites/Functional-Single-File-suite/FuncSingleFile.robot
tests/multicloud-ocata/provision/hpa_multicloud.robot [deleted file]
tests/multicloud-ocata/provision/sanity_test_multicloud.robot [deleted file]
tests/policy/apex-pdp/data/onap.policies.controlloop.operational.Apex.json
tests/policy/api/api-test.robot
tests/policy/api/data/onap.policy.monitoring.cdap.tca.hi.lo.app.json
tests/policy/distribution/data/event.json [new file with mode: 0644]
tests/policy/distribution/distribution-test.robot
tests/policy/xacml-pdp/data/onap.policies.monitoring.cdap.tca.hi.lo.app.json
tests/so/etsi/data/distributeServiceTemplate.json
tests/so/etsi/data/vnfInstantiationRequest.json [new file with mode: 0644]
tests/so/etsi/etsi_tests.robot

index e2a0c12..bdee34e 100644 (file)
@@ -3,14 +3,25 @@
 #Stop all running containers
 docker kill "$(docker ps -q -a)"
 docker rm "$(docker ps -q -a)"
+docker system prune -f
 
 # Clone Simulators for DFC from integration repo.
 mkdir -p $WORKSPACE/archives/dfc
 cd $WORKSPACE/archives/dfc
-git clone --depth 1 https://gerrit.onap.org/r/integration -b master
 
-#Location of all individual simulators for DFC
-SIM_ROOT=$WORKSPACE/archives/dfc/integration/test/mocks/datafilecollector-testharness
+
+if [ -z "$SIM_ROOT" ]
+then
+       git clone --depth 1 https://gerrit.onap.org/r/integration -b master
+       #Location of all individual simulators for DFC
+       echo "Determine SIM_ROOT based on the WORKSPACE"
+       SIM_ROOT=$WORKSPACE/archives/dfc/integration/test/mocks/datafilecollector-testharness
+
+       rm $SIM_ROOT/simulator-group/consul/consul/cbs_localhost_config.hcl || true
+else
+       echo "Using SIM_ROOT from environmental variable: " $SIM_ROOT
+fi
+
 #Location of the above simulators when run as a group. For start+config and stop.
 SIMGROUP_ROOT=$SIM_ROOT/simulator-group
 
@@ -20,7 +31,11 @@ SIM_IP="127.0.0.1"
 DFC_ROOT=$WORKSPACE/scripts/dcaegen2-collectors-datafile/dfc-management
 
 #Make the env vars availble to the robot scripts
-ROBOT_VARIABLES="-v SIMGROUP_ROOT:${SIMGROUP_ROOT} -v SIM_IP:${SIM_IP} -v DFC_ROOT:${DFC_ROOT}"
+ROBOT_VARIABLES="-b debug.log -v SIMGROUP_ROOT:${SIMGROUP_ROOT} -v SIM_IP:${SIM_IP} -v DFC_ROOT:${DFC_ROOT}"
+
+
+
+
 
 #Build needed simulator images. DR and MR simulators
 
@@ -40,5 +55,9 @@ cd $SIMGROUP_ROOT
 cp -r ../ftps-sftp-server/configuration .
 cp -r ../ftps-sftp-server/tls .
 
+cd ../ftps-sftp-server
+docker build -t ftps_vsftpd:latest -f Dockerfile-ftps .
+
+
 #All containers will be started and stopped via the robot tests.
 
index 1a0ec6e..2c46439 100644 (file)
@@ -1,13 +1,15 @@
 #!/usr/bin/env bash
 
-#Stop dfc
+running_containers=$(docker ps --filter name=dfc_ -qa)
+running_images=$(docker images -q)
+
+if [ -z "$running_containers" ]
+then
+    echo "No container requires termination"
+else
+    echo "Stopping and removing containers"
+    docker stop $running_containers
+    docker rm $running_containers
+    docker rmi $running_images
+fi
 
-kill-instance.sh dfc_app
-
-#Stop all simulators 
-
-kill-instance.sh dfc_dr-sim
-kill-instance.sh dfc_dr-redir-sim
-kill-instance.sh dfc_mr-sim
-kill-instance.sh dfc_sftp-server
-kill-instance.sh dfc_ftpes-server-vsftpd
\ No newline at end of file
index 97ef403..d8877fb 100644 (file)
@@ -1,3 +1,6 @@
 #!/usr/bin/env bash
-
-kill-instance.sh dfc_app
\ No newline at end of file
+set +e
+docker exec -it dfc_app0 cat /var/log/ONAP/application.log > $WORKSPACE/archives/dfc_app0_application.log
+kill-instance.sh dfc_app0
+set -e
+exit 0
index eb61db9..4b184d3 100644 (file)
@@ -84,7 +84,7 @@ services:
       - hv-ves-default
 
   config-binding-service:
-    image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.platform.configbinding.app-app:2.2.4
+    image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.platform.configbinding:2.5.2
     ports:
       - "10000:10000"
     environment:
index 08bbb61..940c757 100755 (executable)
@@ -39,7 +39,7 @@ export HV_VES_GROUP_ID="org.onap.dcaegen2.collectors.hv-ves"
 export HV_VES_HOSTNAME="dcae-hv-ves-collector"
 export HV_VES_COLLECTOR_NAMESPACE="onap"
 export HV_VES_HEALTHCHECK_CMD="curl --request GET --fail --silent --show-error localhost:6060/health/ready && nc -vz localhost 6061"
-export HV_VES_VERSION="1.2-SNAPSHOT"
+export HV_VES_VERSION="latest"
 export HV_VES_IMAGE="hv-collector-main"
 export DCAE_APP_SIMULATOR_IMAGE="hv-collector-dcae-app-simulator"
 export XNF_SIMULATOR_IMAGE="hv-ves-collector-xnf-simulator"
diff --git a/plans/multicloud-ocata/functionality1/setup.sh b/plans/multicloud-ocata/functionality1/setup.sh
deleted file mode 100644 (file)
index 3cba681..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2017 Wind River Systems, Inc.
-#
-# 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.
-
-pushd ${SCRIPTS}
-
-# start multicloud-ocata
-./run-instance.sh nexus3.onap.org:10001/onap/multicloud/openstack/openstack-ocata:latest multicloud-ocata
-SERVICE_IP=$(./get-instance-ip.sh multicloud-ocata)
-SERVICE_PORT=9006
-popd
-
-if [[ $no_proxy && $no_proxy != *$SERVICE_IP* ]]; then
-       export no_proxy+=$no_proxy,$SERVICE_IP
-fi
-
-for i in {1..50}; do
-    curl -sS ${SERVICE_IP}:${SERVICE_PORT} && break
-    echo sleep $i
-    sleep $i
-done
-
-# Pass any variables required by Robot test suites in ROBOT_VARIABLES
-ROBOT_VARIABLES+="-v SERVICE_IP:${SERVICE_IP} "
-ROBOT_VARIABLES+="-v SERVICE_PORT:${SERVICE_PORT} "
diff --git a/plans/multicloud-ocata/functionality1/teardown.sh b/plans/multicloud-ocata/functionality1/teardown.sh
deleted file mode 100644 (file)
index 6ecb74e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/bin/bash
-#
-# Copyright (c) 2017 Wind River Systems, Inc.
-#
-# 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.
-
-# This script is sourced by run-csit.sh after Robot test completion.
-kill-instance.sh multicloud-ocata
diff --git a/plans/multicloud-ocata/functionality1/testplan.txt b/plans/multicloud-ocata/functionality1/testplan.txt
deleted file mode 100644 (file)
index a8bd6c4..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# Test suites are relative paths under [integration/csit.git]/tests/.
-# Place the suites in run order.
-multicloud-ocata/provision/sanity_test_multicloud.robot
diff --git a/plans/multicloud-ocata/hpa-discovery/setup.sh b/plans/multicloud-ocata/hpa-discovery/setup.sh
deleted file mode 100644 (file)
index cc494e8..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-#!/bin/bash
-#
-# Copyright 2018 Intel Corporation, Inc
-# 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.
-
-cd ${SCRIPTS}
-
-source common_functions.sh
-
-generic_sim_path=${WORKSPACE}/scripts/multicloud-ocata/generic_sim
-multicloud_provision_path=${WORKSPACE}/tests/multicloud-ocata/provision
-# start generic simulator for openstack mock and AAI mock
-if [[ -z $(docker images -q generic_sim) ]]; then
-    pushd $generic_sim_path
-    docker build -t generic_sim .
-    popd
-fi
-
-function start_simulator ()
-{
-    local service_name=$1
-    local service_port=$2
-
-    ./run-instance.sh generic_sim $service_name "-v ${multicloud_provision_path}/${service_name}/:/tmp/generic_sim/ -v ${generic_sim_path}/${service_name}/:/etc/generic_sim/ -p $service_port:8080"
-    wait_for_service_init localhost:$service_port
-    bypass_ip_adress $service_name
-}
-
-start_simulator nova 8774
-start_simulator glance 9292
-start_simulator cinder 8776
-start_simulator keystone 5000
-start_simulator aai 8443
-
-# start multicloud-ocata
-./run-instance.sh nexus3.onap.org:10001/onap/multicloud/openstack/openstack-ocata multicloud-ocata "-t -e AAI_SERVICE_URL=http://aai:8080/aai -e no_proxy=$no_proxy -p 9006:9006"
-SERVICE_IP=$(./get-instance-ip.sh multicloud-ocata)
-SERVICE_PORT=9006
-
-docker network create hpa-net
-for container in aai keystone glance cinder nova multicloud-ocata; do
-    docker network connect hpa-net $container
-done
-
-bypass_ip_adress $SERVICE_IP
-wait_for_service_init ${SERVICE_IP}:${SERVICE_PORT}
-
-# Pass any variables required by Robot test suites in ROBOT_VARIABLES
-ROBOT_VARIABLES+="-v SERVICE_IP:${SERVICE_IP} "
-ROBOT_VARIABLES+="-v SERVICE_PORT:${SERVICE_PORT} "
diff --git a/plans/multicloud-ocata/hpa-discovery/testplan.txt b/plans/multicloud-ocata/hpa-discovery/testplan.txt
deleted file mode 100644 (file)
index d03e80b..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-# Test suites are relative paths under [integration/csit.git]/tests/.
-# Place the suites in run order.
-multicloud-ocata/provision/hpa_multicloud.robot
index a7c0a8d..399df0e 100644 (file)
@@ -1,6 +1,9 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
 #  Copyright (C) 2018 Ericsson. All rights reserved.
+#
+#  Modifications copyright (c) 2019 Nordix Foundation.
+#  Modifications Copyright (C) 2019 AT&T Intellectual Property.
 # ================================================================================
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 #
 # SPDX-License-Identifier: Apache-2.0
 # ============LICENSE_END=========================================================
-# Select branch
+
 source ${SCRIPTS}/policy/config/policy-csit.conf
+export POLICY_MARIADB_VER
 echo ${GERRIT_BRANCH}
+echo ${POLICY_MARIADB_VER}
+
+echo "Uninstall docker-py and reinstall docker."
+pip uninstall -y docker-py
+pip uninstall -y docker
+pip install -U docker==2.7.0
+
+# the directory of the script
+DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
+echo ${DIR}
+
+# the temp directory used, within $DIR
+# omit the -p parameter to create a temporal directory in the default location
+WORK_DIR=`mktemp -d -p "$DIR"`
+echo ${WORK_DIR}
+
+cd ${WORK_DIR}
+
+# check if tmp dir was created
+if [[ ! "$WORK_DIR" || ! -d "$WORK_DIR" ]]; then
+  echo "Could not create temp dir"
+  exit 1
+fi
+
+# bring down maven
+mkdir maven
+cd maven
+curl -O http://apache.claz.org/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
+tar -xzvf apache-maven-3.3.9-bin.tar.gz
+ls -l
+export PATH=${PATH}:${WORK_DIR}/maven/apache-maven-3.3.9/bin
+${WORK_DIR}/maven/apache-maven-3.3.9/bin/mvn -v
+cd ..
+
+git clone http://gerrit.onap.org/r/oparent
+git clone --depth 1 https://gerrit.onap.org/r/policy/models -b ${GERRIT_BRANCH}
+cd models/models-sim/models-sim-dmaap
+${WORK_DIR}/maven/apache-maven-3.3.9/bin/mvn clean install -DskipTests  --settings ${WORK_DIR}/oparent/settings.xml
+bash ./src/main/package/docker/docker_build.sh
+cd ${WORKSPACE}
+rm -rf ${WORK_DIR}
+sleep 3
 
 sudo apt-get -y install libxml2-utils
+export POLICY_API_VERSION="$(curl -q --silent https://git.onap.org/policy/api/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)"
+export POLICY_PAP_VERSION="$(curl -q --silent https://git.onap.org/policy/pap/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)"
+export POLICY_APEX_PDP_VERSION="$(curl -q --silent https://git.onap.org/policy/apex-pdp/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)"
 export POLICY_DISTRIBUTION_VERSION="$(curl -q --silent https://git.onap.org/policy/distribution/plain/pom.xml?h=${GERRIT_BRANCH} | xmllint --xpath '/*[local-name()="project"]/*[local-name()="version"]/text()' -)"
+
+echo ${POLICY_API_VERSION}
+echo ${POLICY_PAP_VERSION}
+echo ${POLICY_APEX_PDP_VERSION}
 echo ${POLICY_DISTRIBUTION_VERSION}
-docker run -d --name policy-distribution -p 6969:6969 -it nexus3.onap.org:10001/onap/policy-distribution:${POLICY_DISTRIBUTION_VERSION}
 
+SCRIPT_DIR=${WORKSPACE}/scripts/policy/policy-distribution
+
+# Remaking the csar file in case if the file got corrupted
+zip -F ${SCRIPT_DIR}/config/distribution/csar/sample_csar_with_apex_policy.csar --out ${SCRIPT_DIR}/config/distribution/csar/csar_temp.csar
+
+# Adding this waiting container due to race condition between pap and mariadb
+docker-compose -f ${SCRIPT_DIR}/docker-compose-distribution.yml run --rm start_dependencies
+
+#Configure the database
+docker exec -it mariadb  chmod +x /docker-entrypoint-initdb.d/db.sh
+docker exec -it mariadb  /docker-entrypoint-initdb.d/db.sh
+
+# now bring everything else up
+docker-compose -f ${SCRIPT_DIR}/docker-compose-distribution.yml run --rm start_all
+
+unset http_proxy https_proxy
+
+POLICY_API_IP=`get-instance-ip.sh policy-api`
+POLICY_PAP_IP=`get-instance-ip.sh policy-pap`
+MARIADB_IP=`get-instance-ip.sh mariadb`
+APEX_IP=`get-instance-ip.sh policy-apex-pdp`
+DMAAP_IP=`get-instance-ip.sh dmaap-simulator`
 POLICY_DISTRIBUTION_IP=`get-instance-ip.sh policy-distribution`
-echo DISTRIBUTION IP IS ${POLICY_DISTRIBUTION_IP}
-
-${SCRIPTS}/policy/wait_for_port.sh ${POLICY_DISTRIBUTION_IP} 6969
-rc=$?
-if [[ $rc != 0 ]]; then
-        echo "cannot open ${POLICY_DISTRIBUTION_IP} 6969"
-        docker logs policy-distribution
-        exit $rc
-fi
 
-ROBOT_VARIABLES="-v POLICY_DISTRIBUTION_IP:${POLICY_DISTRIBUTION_IP}"
+echo PAP IP IS ${POLICY_PAP_IP}
+echo MARIADB IP IS ${MARIADB_IP}
+echo API IP IS ${POLICY_API_IP}
+echo APEX IP IS ${APEX_IP}
+echo DMAAP_IP IS ${DMAAP_IP}
+echo POLICY_DISTRIBUTION_IP IS ${POLICY_DISTRIBUTION_IP}
+
+ROBOT_VARIABLES="-v APEX_IP:${APEX_IP} -v SCRIPT_DIR:${SCRIPT_DIR} -v POLICY_DISTRIBUTION_IP:${POLICY_DISTRIBUTION_IP}"
index 562df6b..fbbf1de 100644 (file)
@@ -1,6 +1,8 @@
 #!/bin/bash
 # ============LICENSE_START=======================================================
 #  Copyright (C) 2018 Ericsson. All rights reserved.
+#
+#  Modifications 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.
@@ -17,4 +19,9 @@
 # SPDX-License-Identifier: Apache-2.0
 # ============LICENSE_END=========================================================
 
+kill-instance.sh policy-apex-pdp
+kill-instance.sh policy-pap
+kill-instance.sh policy-api
+kill-instance.sh mariadb
+kill-instance.sh dmaap-simulator
 kill-instance.sh policy-distribution
diff --git a/plans/so/integration-etsi-testing/config/aai-simulator-populate-data/cloud-esr-system-info.json b/plans/so/integration-etsi-testing/config/aai-simulator-populate-data/cloud-esr-system-info.json
new file mode 100644 (file)
index 0000000..4368003
--- /dev/null
@@ -0,0 +1,14 @@
+{
+    "esr-system-info-id": "e6a0b318-9756-4f11-94e8-919312d6c2bd",
+    "system-name": "csit cloud vim",
+    "type": "OPENSTACK",
+    "vendor": "RedHat",
+    "version": "1",
+    "service-url": "https://csit.etsicloud.com:5000/v3/",
+    "user-name": "bW1vcnJpcasdw==",
+    "password": "N0xLcHM1VDRSCCSECSVBESDU0",
+    "system-type": "VIM",
+    "port": "example-port-val-93234",
+    "cloud-domain": "CCP_Domain_34466",
+    "default-tenant": "693c7729b2364a26a3ca602e6f66187d"
+}
diff --git a/plans/so/integration-etsi-testing/config/aai-simulator-populate-data/esr-system-info.json b/plans/so/integration-etsi-testing/config/aai-simulator-populate-data/esr-system-info.json
new file mode 100644 (file)
index 0000000..f19da91
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "esr-system-info-id": "5c067098-f2e3-40f7-a7ba-155e7c61e916",
+    "system-name": "vnfmSimulator",
+    "type": "simulator",
+    "vendor": "EST",
+    "version": "V1.0",
+    "service-url": "http://vnfm-simulator:9093/vnflcm/v1",
+    "user-name": "vnfmadapter",
+    "password": "123456",
+    "system-type": "VNFM"
+}
diff --git a/plans/so/integration-etsi-testing/config/aai-simulator-populate-data/esr-vnfm.json b/plans/so/integration-etsi-testing/config/aai-simulator-populate-data/esr-vnfm.json
new file mode 100644 (file)
index 0000000..e37dac5
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "vnfm-id": "c5e99cee-1996-4606-b697-838d51d4e1a3",
+    "vim-id": "etsiCsitVimId",
+    "certificate-url": ""
+}
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar
new file mode 100644 (file)
index 0000000..c7a325e
Binary files /dev/null and b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar differ
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/TOSCA.meta b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/TOSCA.meta
new file mode 100644 (file)
index 0000000..78e5dff
--- /dev/null
@@ -0,0 +1,7 @@
+TOSCA-Meta-File-Version: 1.0
+CSAR-Version: 1.1
+Created-by: EST
+Entry-Definitions: Artifacts/Deployment/OTHER/descriptor.yaml
+Entry-Manifest: sgsn-mme.mf
+Entry-Change-Log: ChangeLog.txt
+Entry-Licenses: Licenses/LICENSE
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/VSP_manualDistributionTestVSP_Information.txt b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/VSP_manualDistributionTestVSP_Information.txt
new file mode 100644 (file)
index 0000000..2fb0849
--- /dev/null
@@ -0,0 +1,50 @@
+Proprietary information (Restricted)
+For use only by authorized individuals and not for general distribution.
+
+
+1.    VSP Details: 
+    a.    Name: manualDistributionTestVSP
+    b.    Description Test
+    c.    Version: 0.0
+    d.    Vendor: Test
+    e.    Category: resourceNewCategory.application l4+
+    f.    License Details: 
+        i.    License Model Version: 0.0
+        ii.    License Agreement Name: 683cd9113b02405e8c68b5dec6837bd7
+        iii    List of Feature Groups: 
+            1.    c9890306e372438fa1eaac1c9bf5db92
+    g.    High Availability 
+    h.    Storage Data Back-up Details: 
+        i.    Data Replication Required?: false
+        ii.            Data Size to replicate in GB: null
+        iii.    Data replication frequency: null
+        iv.    Replication Source: null
+        v.    Replication Destination: null
+    3.    List of VFCs 
+        a.    For each VFC: 
+            i.    VFC Name: 
+            ii.    Description: 
+            iii.    Images: 
+            iv.    Compute/VM Characteristics 
+                1.    vCPU: 
+                2.    CPU over-subscription: 
+                3.    Memory: 
+                4.    Disk: 
+            v.    Hypervisor Details 
+                1.    Name: KVM
+                2.    Drivers: null
+            vi.    Guest OS Details 
+                1.    Name: null
+                2.    Bit Size: 64
+                3.    Tools: null
+            vii.    Number of VFC Instances 
+            viii.    vNICs 
+                5.    Protocols: Protocols{protocols=[], protocolWithHighestTrafficProfile=''}
+                6.    IP v4 Required: true
+                7.    IP v6 Required: false
+            ix.    Recovery Details: 
+
+
+
+Proprietary information (Restricted)
+For use only by authorized individuals and not for general distribution.
\ No newline at end of file
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/annotations.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/annotations.yml
new file mode 100644 (file)
index 0000000..2f14606
--- /dev/null
@@ -0,0 +1,30 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+tosca_definitions_version: tosca_simple_yaml_1_1
+imports:
+- data.yml
+annotation_types:
+  org.openecomp.annotations.Source:
+    description: Indicates the origin source of an input
+    properties:
+      source_type:
+        type: string
+      vf_module_label:
+        type: list
+        description: List of VF Modules this input was originated from
+        entry_schema:
+          type: string
+      param_name:
+        type: string
+        description: Source parameter name
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/artifacts.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/artifacts.yml
new file mode 100644 (file)
index 0000000..a4fb0fe
--- /dev/null
@@ -0,0 +1,49 @@
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+tosca_definitions_version: tosca_simple_yaml_1_1
+imports:
+- data.yml
+artifact_types:
+  tosca.artifacts.Root:
+    description: This is the default (root) TOSCA Artifact Type definition that all other TOSCA base Artifact Types derive from.
+  tosca.artifacts.Deployment.Image:
+    derived_from: tosca.artifacts.Deployment
+    description: This artifact type represents a parent type for any "image" which is an opaque packaging of a TOSCA Node's deployment (whether real or virtual) whose contents are typically already installed and pre-configured (i.e., "stateful") and prepared to be run on a known target container.
+  tosca.artifacts.Implementation.Bash:
+    derived_from: tosca.artifacts.Implementation
+    description: This artifact type represents a Bash script type that contains Bash commands that can be executed on the Unix Bash shell.
+  tosca.artifacts.Deployment.Image.VM:
+    derived_from: tosca.artifacts.Deployment
+    description: This artifact represents the parent type for all Virtual Machine (VM) image and container formatted deployment artifacts. These images contain a stateful capture of a machine (e.g., server) including operating system and installed software along with any configurations and can be run on another machine using a hypervisor which virtualizes typical server (i.e., hardware) resources.
+  tosca.artifacts.Implementation.Python:
+    derived_from: tosca.artifacts.Implementation
+    description: This artifact type represents a Python file that contains Python language constructs that can be executed within a Python interpreter.
+  tosca.artifacts.Deployment:
+    derived_from: tosca.artifacts.Root
+    description: This artifact type represents the parent type for all deployment artifacts in TOSCA. This class of artifacts typically represents a binary packaging of an application or service that is used to install/create or deploy it as part of a node's lifecycle.
+  tosca.artifacts.File:
+    derived_from: tosca.artifacts.Root
+    description: This artifact type is used when an artifact definition needs to have its associated file simply treated as a file and no special handling/handlers are invoked (i.e., it is not treated as either an implementation or deployment artifact type).
+  tosca.artifacts.Implementation:
+    derived_from: tosca.artifacts.Root
+    description: This artifact type represents the parent type for all implementation artifacts in TOSCA. These artifacts are used to implement operations of TOSCA interfaces either directly (e.g., scripts) or indirectly (e.g., config. files).
+  tosca.artifacts.nfv.SwImage:
+    derived_from: tosca.artifacts.Deployment.Image
+    description: describes the software image which is directly loaded on the virtualisation container realizing of the VDU or is to be loaded on a virtual
+  tosca.artifacts.Implementation.nfv.Mistral:
+    derived_from: tosca.artifacts.Implementation
+    description: artifacts for Mistral workflows
+    mime_type: application/x-yaml
+    file_ext:
+    - yaml
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env
new file mode 100644 (file)
index 0000000..2c73ced
--- /dev/null
@@ -0,0 +1,11 @@
+parameters:
+  node_ip: "172.26.10.27"
+  public_net_id: "nova_floating"
+  simple_flavor_name: "m1.small"
+  simple_image_name: "UBUNTU16"
+  simple_key: "afr-key"
+  simple_name_0: "SIMPLEUBU"
+  simple_netid: "onap_vip"
+  ves_ip: "172.26.10.19"
+  vf_module_id: "AFRMODULEID"
+  vnf_id: "VESMED"
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.yaml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.yaml
new file mode 100644 (file)
index 0000000..aa51a80
--- /dev/null
@@ -0,0 +1,86 @@
+heat_template_version: 2013-05-23
+
+description: Simple template to deploy a single compute instance
+
+parameters:
+  simple_name_0:
+    type: string
+    label: Key Name
+    description: Name of key-pair to be used for compute instance
+  simple_key:
+    type: string
+    label: Key Name
+    description: Name of key-pair to be used for compute instance
+  simple_image_name:
+    type: string
+    label: Image ID
+    description: Image to be used for compute instance
+  simple_flavor_name:
+    type: string
+    label: Instance Type
+    description: Type of instance (flavor) to be used
+  vnf_id:
+    type: string
+    label: VNF ID
+    description: The VNF ID is provided by ONAP
+  vf_module_id:
+    type: string
+    label: vFirewall module ID
+    description: The vFirewall Module ID is provided by ONAP
+  simple_netid:
+    type: string
+    label: Netid
+    description: netid
+  public_net_id:
+    type: string
+    label: Netid
+    description: public NetId
+  ves_ip:
+    type: string
+    label: Netid
+    description: public ves_ip
+  node_ip:
+    type: string
+    label: Netid
+    description: public ves_ip
+
+
+
+resources:
+
+  simple_0_private_port:
+    type: OS::Neutron::Port
+    properties:
+      network: { get_param: simple_netid }
+      fixed_ips:
+      - ip_address: { get_param: node_ip }
+
+
+  simple_0:
+    type: OS::Nova::Server
+    properties:
+      availability_zone: nova 
+      key_name: { get_param: simple_key }
+      image: { get_param: simple_image_name }
+      flavor: { get_param: simple_flavor_name }
+      name: { get_param: simple_name_0 }
+      metadata: {vnf_id: { get_param: vnf_id }, vf_module_id: { get_param: vf_module_id }}
+      networks:
+      - port: { get_resource: simple_0_private_port }
+      user_data_format: RAW
+      user_data:
+        str_replace:
+          params:
+            __ves_ip__: { get_param: ves_ip }
+            __vnfId__: { get_param: vnf_id }
+
+          template: |
+            #!/bin/bash
+
+            echo "the value we got for vndID was : __vnfId__" >> /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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/capabilities.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/capabilities.yml
new file mode 100644 (file)
index 0000000..85af71a
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/csar.meta b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/csar.meta
new file mode 100644 (file)
index 0000000..bc3359c
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/data.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/data.yml
new file mode 100644 (file)
index 0000000..552513a
--- /dev/null
@@ -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 <key>:<value>
+          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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml
new file mode 100644 (file)
index 0000000..7192b69
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/groups.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/groups.yml
new file mode 100644 (file)
index 0000000..3fd26ff
--- /dev/null
@@ -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: <vfc_id>:<count>
+          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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/interfaces.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/interfaces.yml
new file mode 100644 (file)
index 0000000..3535360
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json
new file mode 100644 (file)
index 0000000..9098234
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/nodes.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/nodes.yml
new file mode 100644 (file)
index 0000000..d188dd1
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/policies.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/policies.yml
new file mode 100644 (file)
index 0000000..4bef4e9
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/relationships.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/relationships.yml
new file mode 100644 (file)
index 0000000..fe4b988
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Extneutroncp-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Extneutroncp-template.yml
new file mode 100644 (file)
index 0000000..b51a72f
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template-interface.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template-interface.yml
new file mode 100644 (file)
index 0000000..6d4cd7b
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-Manualdistributiontestvsp-template.yml
new file mode 100644 (file)
index 0000000..9d5bc20
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspComputeNodesHeatSimple-template.yml
new file mode 100644 (file)
index 0000000..5c7c990
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template-interface.yml
new file mode 100644 (file)
index 0000000..a5ce7c7
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/resource-ManualdistributiontestvspNodesSimplecvfc-template.yml
new file mode 100644 (file)
index 0000000..2109327
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template-interface.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template-interface.yml
new file mode 100644 (file)
index 0000000..aa3f545
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template.yml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/service-Manualdistributiontestservice-template.yml
new file mode 100644 (file)
index 0000000..defdf0a
--- /dev/null
@@ -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/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vendor-license-model.xml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vendor-license-model.xml
new file mode 100644 (file)
index 0000000..f25ff82
--- /dev/null
@@ -0,0 +1 @@
+<vendor-license-model xmlns="http://xmlns.openecomp.org/asdc/license-model/1.0"><vendor-name>Test</vendor-name><entitlement-pool-list><entitlement-pool><entitlement-pool-invariant-uuid>9c7b6505ea31411e8dd9421d9aac9b54</entitlement-pool-invariant-uuid><entitlement-pool-uuid>FDE8E9CFC07B42AAB12987440BFBF866</entitlement-pool-uuid><version>1.0</version><name>TestEntitlementPool</name><description/><increments/><manufacturer-reference-number>TEP1</manufacturer-reference-number><threshold-value><unit/><value/></threshold-value><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date/><expiry-date/></entitlement-pool></entitlement-pool-list><license-key-group-list><license-key-group><version>1.0</version><name>TestLicenseKeyGroup</name><description/><type>Universal</type><increments/><manufacturerReferenceNumber/><license-key-group-invariant-uuid>f109b410a44f4b8698c9afcecde66194</license-key-group-invariant-uuid><license-key-group-uuid>F4B453CBA577433589F81CB7E6556A89</license-key-group-uuid><threshold-value><unit/><value/></threshold-value><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date/><expiry-date/></license-key-group></license-key-group-list></vendor-license-model>
\ No newline at end of file
diff --git a/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vf-license-model.xml b/plans/so/integration-etsi-testing/config/distribution-test-unzipped/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/vf-license-model.xml
new file mode 100644 (file)
index 0000000..f4369f1
--- /dev/null
@@ -0,0 +1 @@
+<vf-license-model xmlns="http://xmlns.openecomp.org/asdc/license-model/1.0"><vendor-name>Test</vendor-name><vf-id>024abe1eef244a22b91958f507d5d325</vf-id><feature-group-list><feature-group><entitlement-pool-list><entitlement-pool><name>TestEntitlementPool</name><description/><increments/><entitlement-pool-invariant-uuid>9c7b6505ea31411e8dd9421d9aac9b54</entitlement-pool-invariant-uuid><entitlement-pool-uuid>FDE8E9CFC07B42AAB12987440BFBF866</entitlement-pool-uuid><manufacturer-reference-number>TEP1</manufacturer-reference-number><threshold-value><unit/><value/></threshold-value><version>1.0</version><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date/><expiry-date/></entitlement-pool></entitlement-pool-list><license-key-group-list><license-key-group><name>TestLicenseKeyGroup</name><description/><type>Universal</type><increments/><license-key-group-invariant-uuid>f109b410a44f4b8698c9afcecde66194</license-key-group-invariant-uuid><license-key-group-uuid>F4B453CBA577433589F81CB7E6556A89</license-key-group-uuid><manufacturer-reference-number/><threshold-value><unit/><value/></threshold-value><version>1.0</version><sp-limits/><vendor-limits/><operational-scope><value/></operational-scope><start-date/><expiry-date/></license-key-group></license-key-group-list><name>TestFeatureGroup</name><feature-group-uuid>c9890306e372438fa1eaac1c9bf5db92</feature-group-uuid><description>Test Feature Group</description><part-number>TFG1</part-number></feature-group></feature-group-list></vf-license-model>
\ 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 (file)
index e315284..0000000
Binary files a/plans/so/integration-etsi-testing/config/distribution-test-zip/distributionTestZip.zip and /dev/null differ
index 54d6720..583be0a 100644 (file)
@@ -1,5 +1,6 @@
 NEXUS_DOCKER_REPO_MSO=nexus3.onap.org:10001
-TAG=1.4.0-STAGING-latest
+DOCKER_ENVIRONMENT=remote
+TAG=1.4.3-STAGING-latest
 TIME_OUT_DEFAULT_VALUE_SEC=1200
 PROJECT_NAME=etsiintegrationtesting
 DEFAULT_NETWORK_NAME=etsiintegrationtesting_default
index d38888d..66e3b20 100644 (file)
@@ -258,6 +258,12 @@ sdnc:
     svc:
       types: PORT-MIRROR,PPROBE
 
+so:
+  vnfm:
+    adapter:
+      url: http://vnfm-adapter:9092/so/vnfm-adapter/v1/
+      auth: Basic dm5mbTpwYXNzd29yZDEk
+
 appc:
   client:
     topic:
diff --git a/plans/so/integration-etsi-testing/config/override-files/vnfm-adapter/onapheat/override.yaml b/plans/so/integration-etsi-testing/config/override-files/vnfm-adapter/onapheat/override.yaml
new file mode 100644 (file)
index 0000000..e2f8cc1
--- /dev/null
@@ -0,0 +1,19 @@
+server:
+    port: 9092
+    tomcat:
+        max-threads: 4
+ssl-enable: false
+aai:
+    auth: 221187EFA3AD4E33600DE0488F287099934CE65C3D0697BCECC00BB58E784E07CD74A24581DC31DBC086FF63DF116378776E9BE3D1325885
+    version: v15
+    endpoint:  https://aai-simulator:9993
+mso:
+      key: 07a7159d3bf51a0e53be7a8f89699be7
+sdc:
+  username: mso
+  password: 76966BDD3C7414A03F7037264FF2E6C8EEC6C28F2B67F2840A1ED857C0260FEE731D73F47F828E5527125D29FD25D3E0DE39EE44C058906BF1657DE77BF897EECA93BDC07FA64F
+  key: 566B754875657232314F5548556D3665
+  endpoint: http://sdc-simulator:9991/
+  toscametapath: Artifacts/Deployment/OTHER/TOSCA.meta
+vnfmadapter:
+  endpoint: http://vnfm-adapter:9092
\ No newline at end of file
index 3f91f0d..16dc09f 100755 (executable)
@@ -58,6 +58,9 @@ populate_aai_simulator()
  PLATFORM_JSON_FILE=$AAI_SIMULATOR_DATA_DIR/platform.json
  CLOUD_REGION_JSON_FILE=$AAI_SIMULATOR_DATA_DIR/cloud-region.json
  TENANT_JSON_FILE=$AAI_SIMULATOR_DATA_DIR/tenant.json
+ ESR_VNFM_JSON_FILE=$AAI_SIMULATOR_DATA_DIR/esr-vnfm.json
+ ESR_SYSTEM_INFO_JSON_FILE=$AAI_SIMULATOR_DATA_DIR/esr-system-info.json
+ CLOUD_ESR_SYSTEM_INFO_JSON_FILE=$AAI_SIMULATOR_DATA_DIR/cloud-esr-system-info.json
  STATUS_CODE_ACCEPTED="202"
 
  echo "$SCRIPT_NAME $(current_timestamp): checking health of AAI Simulator"
@@ -128,6 +131,31 @@ populate_aai_simulator()
      exit 1
  fi
 
+ echo "$SCRIPT_NAME $(current_timestamp): Adding esr-vnfm"
+ status_code=$(curl -k --write-out %{http_code} --silent --output /dev/null -H "$BASIC_AUTHORIZATION_HEADER" -H "$ACCEPT_HEADER" -H "$CONTENT_TYPE_HEADER" $BASE_URL/external-system/esr-vnfm-list/esr-vnfm/c5e99cee-1996-4606-b697-838d51d4e1a3 -X PUT -d @$"$ESR_VNFM_JSON_FILE")
+
+  if [[ "$status_code" -ne "$STATUS_CODE_ACCEPTED" ]] ; then
+     echo "$SCRIPT_NAME $(current_timestamp) ERROR: Unable to put esr-vnfm data in AAI Simulator. Status code received: $status_code"
+     exit 1
+ fi
+
+  echo "$SCRIPT_NAME $(current_timestamp): Adding esr-system-info"
+ status_code=$(curl -k --write-out %{http_code} --silent --output /dev/null -H "$BASIC_AUTHORIZATION_HEADER" -H "$ACCEPT_HEADER" -H "$CONTENT_TYPE_HEADER" $BASE_URL/external-system/esr-vnfm-list/esr-vnfm/c5e99cee-1996-4606-b697-838d51d4e1a3/esr-system-info-list/esr-system-info/5c067098-f2e3-40f7-a7ba-155e7c61e916 -X PUT -d @$"$ESR_SYSTEM_INFO_JSON_FILE")
+
+  if [[ "$status_code" -ne "$STATUS_CODE_ACCEPTED" ]] ; then
+     echo "$SCRIPT_NAME $(current_timestamp) ERROR: Unable to put esr-system-info data in AAI Simulator. Status code received: $status_code"
+     exit 1
+ fi
+
+  echo "$SCRIPT_NAME $(current_timestamp): Adding cloud esr-system-info"
+ status_code=$(curl -k --write-out %{http_code} --silent --output /dev/null -H "$BASIC_AUTHORIZATION_HEADER" -H "$ACCEPT_HEADER" -H "$CONTENT_TYPE_HEADER" $BASE_URL/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/EtsiCloudRegion/esr-system-info-list/esr-system-info/e6a0b318-9756-4f11-94e8-919312d6c2bd -X PUT -d @$"$CLOUD_ESR_SYSTEM_INFO_JSON_FILE")
+
+  if [[ "$status_code" -ne "$STATUS_CODE_ACCEPTED" ]] ; then
+     echo "$SCRIPT_NAME $(current_timestamp) ERROR: Unable to put cloud esr-system-info data in AAI Simulator. Status code received: $status_code"
+     exit 1
+ fi
+
+
  echo "$SCRIPT_NAME $(current_timestamp): AAI Simulator Populated Successfully"
 }
 
index 598715d..35ee264 100755 (executable)
@@ -118,16 +118,23 @@ process_arguments()
    exit 1
  fi
 
+ result=$(docker inspect --format '{{.State.Running}}' $CONTAINER_NAME)
+
+ if [ $result != "true" ] ; then
+  echo "$SCRIPT_NAME $(current_timestamp) ERROR: $CONTAINER_NAME container is not running"
+  exit 1
+ fi
+
  HOST_IP=$(docker inspect --format '{{ index .NetworkSettings.Networks "'$NETWORK_NAME'" "IPAddress"}}' $CONTAINER_NAME)
 
- if [ $? -ne 0 ]; then
+ if [ $? -ne 0 ] || [ -z $HOST_IP ] ; then
    echo "$SCRIPT_NAME $(current_timestamp) ERROR: Unable to find HOST IP using network name: $NETWORK_NAME and container name: $CONTAINER_NAME"
    exit 1
  fi
 
  PORT=$(docker port $CONTAINER_NAME | cut -c1-$(docker port $CONTAINER_NAME | grep -aob '/' | grep -oE '[0-9]+'))
 
- if [ $? -ne 0 ]; then
+ if [ $? -ne 0 ] || [ -z $PORT ] ; then
    echo "$SCRIPT_NAME $(current_timestamp) ERROR: Unable to find PORT using project name: $PROJECT_NAME and container name: $CONTAINER_NAME"
    exit 1
  fi
diff --git a/plans/so/integration-etsi-testing/docker-compose.local.yml b/plans/so/integration-etsi-testing/docker-compose.local.yml
new file mode 100644 (file)
index 0000000..ae15e6f
--- /dev/null
@@ -0,0 +1,33 @@
+version: '3'
+services:
+################################################################################
+  mariadb:
+    image: mariadb:10.1.11
+################################################################################
+  catalog-db-adapter:
+    image: onap/so/catalog-db-adapter:${TAG}
+################################################################################
+  request-db-adapter:
+    image: onap/so/request-db-adapter:${TAG}
+################################################################################
+  sdnc-adapter:
+    image: onap/so/sdnc-adapter:${TAG}
+################################################################################
+  sdc-controller:
+    image: onap/so/sdc-controller:${TAG}
+################################################################################
+  bpmn-infra:
+    image: onap/so/bpmn-infra:${TAG}
+################################################################################
+  api-handler-infra:
+    image: onap/so/api-handler-infra:${TAG}
+#############################################################################
+  so-monitoring:
+    image: onap/so/so-monitoring:${TAG}
+################################################################################
+  vnfm-adapter:
+    image: onap/so/vnfm-adapter:${TAG}
+################################################################################
+  vnfm-simulator:
+    image: onap/so/vnfm-simulator:${TAG}
+################################################################################
index 2c7261c..b356b7d 100644 (file)
@@ -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}
@@ -234,7 +238,7 @@ services:
     ports:
       - "30224:30224"
     volumes:
-      - ${TEST_LAB_DIR}/volumes/so/config/api-handler-infra/onapheat:/app/config
+      - ${CONFIG_DIR_PATH}/override-files/so-monitoring/onapheat:/app/config
     environment:
       - APP=so-monitoring
       - JVM_ARGS=-Xms64m -Xmx512m
@@ -251,7 +255,7 @@ services:
       - "9092:9092"
     volumes:
       - ${TEST_LAB_DIR}/volumes/so/ca-certificates/onapheat:/app/ca-certificates
-      - ${TEST_LAB_DIR}/volumes/so/config/vnfm-adapter/onapheat:/app/config
+      - ${CONFIG_DIR_PATH}/override-files/vnfm-adapter/onapheat:/app/config
     environment:
     - APP=vnfm-adapter
     - JVM_ARGS=-Xms64m -Xmx512m
index ee0058e..ce6637c 100755 (executable)
@@ -22,7 +22,7 @@
 
 MAVEN_VERSION_DIR="apache-maven-3.3.9"
 MAVEN_TAR_FILE="$MAVEN_VERSION_DIR-bin.tar.gz"
-MAVEN_TAR_LOCATION="http://apache.claz.org/maven/maven-3/3.3.9/binaries/$MAVEN_TAR_FILE"
+MAVEN_TAR_LOCATION="https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/$MAVEN_TAR_FILE"
 
 SCRIPT_HOME="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
 SCRIPT_NAME=$(basename $0)
@@ -31,6 +31,8 @@ ENV_FILE=$CONFIG_DIR/env
 TEMP_DIR_PATH=$SCRIPT_HOME/temp
 TEST_LAB_DIR_PATH=$TEMP_DIR_PATH/test_lab
 DOCKER_COMPOSE_FILE_PATH=$SCRIPT_HOME/docker-compose.yml
+DOCKER_COMPOSE_LOCAL_OVERRIDE_FILE=$SCRIPT_HOME/docker-compose.local.yml
+TEAR_DOWN_SCRIPT=$SCRIPT_HOME/teardown.sh
 
 MAVEN_DIR=$TEMP_DIR_PATH/maven
 INSTALLED_MAVEN_DIR=$MAVEN_DIR/$MAVEN_VERSION_DIR
@@ -47,7 +49,7 @@ echo "Running $SCRIPT_HOME/$SCRIPT_NAME ..."
 
 export $(egrep -v '^#' $ENV_FILE | xargs)
 
-MANDATORY_VARIABLES_NAMES=( "NEXUS_DOCKER_REPO_MSO" "TAG" "TIME_OUT_DEFAULT_VALUE_SEC" "PROJECT_NAME" "DEFAULT_NETWORK_NAME")
+MANDATORY_VARIABLES_NAMES=( "NEXUS_DOCKER_REPO_MSO" "DOCKER_ENVIRONMENT" "TAG" "TIME_OUT_DEFAULT_VALUE_SEC" "PROJECT_NAME" "DEFAULT_NETWORK_NAME")
 
 for var in "${MANDATORY_VARIABLES_NAMES[@]}"
  do
@@ -99,7 +101,7 @@ if [[ ! "$INSTALLED_MAVEN_DIR" || ! -d "$INSTALLED_MAVEN_DIR" ]]; then
                 exit 1
         fi
 
-        tar -xzvf apache-maven-3.3.9-bin.tar.gz
+        tar -xzvf $MAVEN_TAR_FILE
 
         echo "Finished installing maven ..."
 fi
@@ -137,7 +139,16 @@ git clone http://gerrit.onap.org/r/so/docker-config.git $TEST_LAB_DIR_PATH
 export TEST_LAB_DIR=$TEST_LAB_DIR_PATH
 export CONFIG_DIR_PATH=$CONFIG_DIR
 
-docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME up -d 
+if [ "$DOCKER_ENVIRONMENT" == "remote" ]; then
+  echo "Starting docker containers with remote images ..."
+  docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME up -d
+elif [ "$DOCKER_ENVIRONMENT" == "local" ]; then
+  echo "Starting docker containers with local images ..."
+  docker-compose -f $DOCKER_COMPOSE_FILE_PATH -f $DOCKER_COMPOSE_LOCAL_OVERRIDE_FILE -p $PROJECT_NAME up -d
+else
+  echo "DOCKER_ENVIRONMENT not set correctly in $ENV_FILE.  Allowed values: local | remote"
+  exit 1
+fi
 
 echo "Sleeping for 3m"
 sleep 3m
@@ -148,7 +159,7 @@ $WAIT_FOR_WORKAROUND_SCRIPT
 if [ $? -ne 0 ]; then
    echo "ERROR: $WAIT_FOR_WORKAROUND_SCRIPT failed"
    echo "Will stop running docker containers . . ."
-   docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME down
+   $TEAR_DOWN_SCRIPT
    exit 1
 fi
 
@@ -158,7 +169,7 @@ $WAIT_FOR_POPULATE_AAI_SCRIPT
 if [ $? -ne 0 ]; then
    echo "ERROR: $WAIT_FOR_POPULATE_AAI_SCRIPT failed"
    echo "Will stop running docker containers . . ."
-   docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME down
+   $TEAR_DOWN_SCRIPT
    exit 1
 fi
 
@@ -169,7 +180,7 @@ $WAIT_FOR_CONTAINER_SCRIPT -c "$API_INFRA_CONTAINER_NAME" -t "300" -n "$DEFAULT_
 if [ $? -ne 0 ]; then
    echo "ERROR: $WAIT_FOR_CONTAINER_SCRIPT failed"
    echo "Will stop running docker containers . . ."
-   docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME down
+   $TEAR_DOWN_SCRIPT
    exit 1
 fi
 
index d7635f2..f5b411d 100644 (file)
  */
 package org.onap.so.aaisimulator.controller;
 
+import static org.onap.so.aaisimulator.utils.Constants.BI_DIRECTIONAL_RELATIONSHIP_LIST_URL;
 import static org.onap.so.aaisimulator.utils.Constants.CLOUD_REGION;
 import static org.onap.so.aaisimulator.utils.Constants.CLOUD_REGIONS;
+import static org.onap.so.aaisimulator.utils.Constants.ESR_SYSTEM_INFO_LIST;
 import static org.onap.so.aaisimulator.utils.Constants.RELATIONSHIP_LIST_RELATIONSHIP_URL;
 import static org.onap.so.aaisimulator.utils.HttpServiceUtils.getHeaders;
-import static org.onap.so.aaisimulator.utils.Constants.BI_DIRECTIONAL_RELATIONSHIP_LIST_URL;
 import static org.onap.so.aaisimulator.utils.RequestErrorResponseUtils.getRequestErrorResponseEntity;
 import static org.onap.so.aaisimulator.utils.RequestErrorResponseUtils.getResourceVersion;
 import java.util.Optional;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
 import org.onap.aai.domain.yang.CloudRegion;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.Tenant;
+import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.aaisimulator.models.CloudRegionKey;
 import org.onap.so.aaisimulator.service.providers.CloudRegionCacheServiceProvider;
 import org.onap.so.aaisimulator.utils.HttpServiceUtils;
@@ -144,7 +148,7 @@ public class CloudRegionsController {
             if (tenant.getResourceVersion() == null || tenant.getResourceVersion().isEmpty()) {
                 tenant.setResourceVersion(getResourceVersion());
             }
-            if (cacheServiceProvider.putTenant(key, tenant)) {
+            if (cacheServiceProvider.putTenant(key, tenantId, tenant)) {
                 return ResponseEntity.accepted().build();
             }
         }
@@ -187,7 +191,7 @@ public class CloudRegionsController {
         if (relationship.getRelatedLink() != null) {
             final String targetBaseUrl = HttpServiceUtils.getBaseUrl(request).toString();
             final HttpHeaders incomingHeader = getHeaders(request);
-            boolean result = cacheServiceProvider.addRelationShip(incomingHeader, targetBaseUrl,
+            final boolean result = cacheServiceProvider.addRelationShip(incomingHeader, targetBaseUrl,
                     request.getRequestURI(), key, tenantId, relationship);
             if (result) {
                 LOGGER.info("added created bi directional relationship with {}", relationship.getRelatedLink());
@@ -198,4 +202,94 @@ public class CloudRegionsController {
         LOGGER.error("Unable to add relationship for related link: {}", relationship.getRelatedLink());
         return getRequestErrorResponseEntity(request, CLOUD_REGION);
     }
+
+    @PutMapping(value = "{cloud-owner}/{cloud-region-id}/esr-system-info-list/esr-system-info/{esr-system-info-id}",
+            consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> putEsrSystemInfo(@RequestBody final EsrSystemInfo esrSystemInfo,
+            @PathVariable("esr-system-info-id") final String esrSystemInfoId,
+            @PathVariable("cloud-owner") final String cloudOwner,
+            @PathVariable("cloud-region-id") final String cloudRegionId, final HttpServletRequest request) {
+
+        final CloudRegionKey key = new CloudRegionKey(cloudOwner, cloudRegionId);
+
+        LOGGER.info("Will put esrSystemInfo for 'key': {} ...", key);
+
+        if (esrSystemInfo.getResourceVersion() == null || esrSystemInfo.getResourceVersion().isEmpty()) {
+            esrSystemInfo.setResourceVersion(getResourceVersion());
+
+        }
+
+        if (cacheServiceProvider.putEsrSystemInfo(key, esrSystemInfoId, esrSystemInfo)) {
+            LOGGER.info("Successfully added EsrSystemInfo key : {}  ...", key, esrSystemInfo);
+            return ResponseEntity.accepted().build();
+        }
+        LOGGER.error("Unable to add EsrSystemInfo in cache for key : {} ...", key);
+
+        return getRequestErrorResponseEntity(request, ESR_SYSTEM_INFO_LIST);
+    }
+
+    @GetMapping(value = "{cloud-owner}/{cloud-region-id}/esr-system-info-list",
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> getEsrSystemInfoList(@PathVariable("cloud-owner") final String cloudOwner,
+            @PathVariable("cloud-region-id") final String cloudRegionId, final HttpServletRequest request) {
+        final CloudRegionKey key = new CloudRegionKey(cloudOwner, cloudRegionId);
+        LOGGER.info("Retrieving EsrSystemInfoList using key : {} ...", key);
+        if (key.isValid()) {
+            final Optional<EsrSystemInfoList> optional = cacheServiceProvider.getEsrSystemInfoList(key);
+            if (optional.isPresent()) {
+                final EsrSystemInfoList esrSystemInfoList = optional.get();
+                LOGGER.info("found EsrSystemInfoList {} in cache", esrSystemInfoList);
+                return ResponseEntity.ok(esrSystemInfoList);
+            }
+        }
+        LOGGER.error("Unable to find EsrSystemInfoList in cache using key : {} ...", key);
+        return getRequestErrorResponseEntity(request, CLOUD_REGION);
+    }
+
+    @PutMapping(value = "{cloud-owner}/{cloud-region-id}/tenants/tenant/{tenant-id}/vservers/vserver/{vserver-id}",
+            consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> putVserver(@RequestBody final Vserver vServer,
+            @PathVariable("cloud-owner") final String cloudOwner,
+            @PathVariable("cloud-region-id") final String cloudRegionId,
+            @PathVariable("tenant-id") final String tenantId, @PathVariable("vserver-id") final String vServerId,
+            final HttpServletRequest request) {
+
+        final CloudRegionKey key = new CloudRegionKey(cloudOwner, cloudRegionId);
+        if (vServer.getResourceVersion() == null || vServer.getResourceVersion().isEmpty()) {
+            vServer.setResourceVersion(getResourceVersion());
+        }
+        LOGGER.info("Will put Vserver in cache using using key: {}, tenantId: {}, vServerId: {} ...", key, tenantId,
+                vServerId);
+
+        if (cacheServiceProvider.putVserver(key, tenantId, vServerId, vServer)) {
+            LOGGER.info("Successfully added Vserver for key: {}, tenantId: {}, vServerId: {} ...", key, tenantId,
+                    vServerId);
+            return ResponseEntity.accepted().build();
+        }
+        LOGGER.error("Unable to add Vserver in cache using key: {}, tenantId: {}, vServerId: {}", key, tenantId,
+                vServerId);
+        return getRequestErrorResponseEntity(request, CLOUD_REGION);
+    }
+
+    @GetMapping(value = "{cloud-owner}/{cloud-region-id}/tenants/tenant/{tenant-id}/vservers/vserver/{vserver-id}",
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> getVserver(@PathVariable("cloud-owner") final String cloudOwner,
+            @PathVariable("cloud-region-id") final String cloudRegionId,
+            @PathVariable("tenant-id") final String tenantId, @PathVariable("vserver-id") final String vServerId,
+            final HttpServletRequest request) {
+
+        final CloudRegionKey key = new CloudRegionKey(cloudOwner, cloudRegionId);
+        LOGGER.info("Retrieving Vserver using key: {}, tenant-id: {}  and vserver-id: {}...", key, tenantId, vServerId);
+        final Optional<Vserver> optional = cacheServiceProvider.getVserver(key, tenantId, vServerId);
+        if (optional.isPresent()) {
+            final Vserver vServer = optional.get();
+            LOGGER.info("found Vserver {} in cache", vServer);
+            return ResponseEntity.ok(vServer);
+        }
+        LOGGER.error("Unable to find Vserver in cache using key: {}, tenant-id: {}  and vserver-id: {}...", key,
+                tenantId, vServerId);
+        return getRequestErrorResponseEntity(request, CLOUD_REGION);
+    }
 }
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/controller/ExternalSystemEsrController.java b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/controller/ExternalSystemEsrController.java
new file mode 100644 (file)
index 0000000..b356006
--- /dev/null
@@ -0,0 +1,147 @@
+/*-
+ * ============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=========================================================
+ */
+package org.onap.so.aaisimulator.controller;
+
+import static org.onap.so.aaisimulator.utils.Constants.ESR_SYSTEM_INFO;
+import static org.onap.so.aaisimulator.utils.Constants.ESR_SYSTEM_INFO_LIST;
+import static org.onap.so.aaisimulator.utils.Constants.ESR_VNFM;
+import static org.onap.so.aaisimulator.utils.Constants.EXTERNAL_SYSTEM_ESR_VNFM_LIST_URL;
+import static org.onap.so.aaisimulator.utils.RequestErrorResponseUtils.getRequestErrorResponseEntity;
+import static org.onap.so.aaisimulator.utils.RequestErrorResponseUtils.getResourceVersion;
+import java.util.List;
+import java.util.Optional;
+import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.core.MediaType;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
+import org.onap.aai.domain.yang.EsrVnfm;
+import org.onap.aai.domain.yang.EsrVnfmList;
+import org.onap.so.aaisimulator.service.providers.ExternalSystemCacheServiceProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.PutMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * @author Waqas Ikram (waqas.ikram@est.tech)
+ *
+ */
+@Controller
+@RequestMapping(path = EXTERNAL_SYSTEM_ESR_VNFM_LIST_URL)
+public class ExternalSystemEsrController {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ExternalSystemEsrController.class);
+
+    private final ExternalSystemCacheServiceProvider cacheServiceProvider;
+
+    @Autowired
+    public ExternalSystemEsrController(final ExternalSystemCacheServiceProvider cacheServiceProvider) {
+        this.cacheServiceProvider = cacheServiceProvider;
+    }
+
+    @PutMapping(value = "/esr-vnfm/{vnfm-id}", consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> putEsrVnfm(@RequestBody final EsrVnfm esrVnfm,
+            @PathVariable("vnfm-id") final String vnfmId, final HttpServletRequest request) {
+        LOGGER.info("Will put esr-vnfm to cache for 'vnfm id': {} ...", esrVnfm.getVnfmId());
+
+        if (esrVnfm.getResourceVersion() == null || esrVnfm.getResourceVersion().isEmpty()) {
+            esrVnfm.setResourceVersion(getResourceVersion());
+
+        }
+        cacheServiceProvider.putEsrVnfm(vnfmId, esrVnfm);
+        return ResponseEntity.accepted().build();
+    }
+
+    @GetMapping(value = "/esr-vnfm/{vnfm-id}", produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> getEsrVnfm(@PathVariable("vnfm-id") final String vnfmId,
+            final HttpServletRequest request) {
+        LOGGER.info("Will retrieve ESR VNFM for 'vnfm id': {} ...", vnfmId);
+
+        final Optional<EsrVnfm> optional = cacheServiceProvider.getEsrVnfm(vnfmId);
+        if (optional.isPresent()) {
+            final EsrVnfm esrVnfm = optional.get();
+            LOGGER.info("found esrVnfm {} in cache", esrVnfm);
+            return ResponseEntity.ok(esrVnfm);
+        }
+
+        LOGGER.error("Couldn't Esr Vnfm for 'vnfm id': {} ...", vnfmId);
+        return getRequestErrorResponseEntity(request, ESR_VNFM);
+    }
+
+    @GetMapping(produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> getEsrVnfmList(final HttpServletRequest request) {
+        LOGGER.info("Will retrieve a list of all ESR VNFMs");
+
+        final List<EsrVnfm> esrVnfms = cacheServiceProvider.getAllEsrVnfm();
+        LOGGER.info("found {} Esr Vnfms in cache", esrVnfms.size());
+
+        final EsrVnfmList esrVnfmList = new EsrVnfmList();
+        esrVnfmList.getEsrVnfm().addAll(esrVnfms);
+
+        return ResponseEntity.ok(esrVnfmList);
+    }
+
+    @PutMapping(value = "/esr-vnfm/{vnfm-id}/esr-system-info-list/esr-system-info/{esr-system-info-id}",
+            consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> putEsrSystemInfo(@RequestBody final EsrSystemInfo esrSystemInfo,
+            @PathVariable("vnfm-id") final String vnfmId,
+            @PathVariable("esr-system-info-id") final String esrSystemInfoId, final HttpServletRequest request) {
+        LOGGER.info("Will put esrSystemInfo for 'vnfm id': {} and 'esr-system-info-id': {} ...", vnfmId, esrSystemInfo);
+
+        if (esrSystemInfo.getResourceVersion() == null || esrSystemInfo.getResourceVersion().isEmpty()) {
+            esrSystemInfo.setResourceVersion(getResourceVersion());
+
+        }
+
+        if (cacheServiceProvider.putEsrSystemInfo(vnfmId, esrSystemInfoId, esrSystemInfo)) {
+            LOGGER.info("Successfully added EsrSystemInfo for 'vnfm id': {} and 'esr-system-info-id': {} ...", vnfmId,
+                    esrSystemInfo);
+            return ResponseEntity.accepted().build();
+        }
+        LOGGER.error("Unable to add esrSystemInfo for 'vnfm id': {} and 'esr-system-info-id': {} ...", vnfmId,
+                esrSystemInfo);
+        return getRequestErrorResponseEntity(request, ESR_SYSTEM_INFO_LIST);
+    }
+
+    @GetMapping(value = "/esr-vnfm/{vnfm-id}/esr-system-info-list",
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> getEsrSystemInfoList(@PathVariable("vnfm-id") final String vnfmId,
+            final HttpServletRequest request) {
+        LOGGER.info("Will retrieve esrSystemInfoList for 'vnfm id': {} ...", vnfmId);
+
+        final Optional<EsrSystemInfoList> optional = cacheServiceProvider.getEsrSystemInfoList(vnfmId);
+        if (optional.isPresent()) {
+            final EsrSystemInfoList esrSystemInfoList = optional.get();
+            LOGGER.info("found esrSystemInfoList {} in cache", esrSystemInfoList);
+            return ResponseEntity.ok(esrSystemInfoList);
+        }
+
+        LOGGER.error("Couldn't find esrSystemInfoList for 'vnfm id': {} ...", vnfmId);
+        return getRequestErrorResponseEntity(request, ESR_SYSTEM_INFO);
+    }
+
+}
index 216ff13..64284b5 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.onap.so.aaisimulator.controller;
 
+import static org.onap.so.aaisimulator.utils.Constants.APPLICATION_MERGE_PATCH_JSON;
 import static org.onap.so.aaisimulator.utils.Constants.BI_DIRECTIONAL_RELATIONSHIP_LIST_URL;
 import static org.onap.so.aaisimulator.utils.Constants.GENERIC_VNF;
 import static org.onap.so.aaisimulator.utils.Constants.GENERIC_VNFS_URL;
@@ -27,10 +28,12 @@ import static org.onap.so.aaisimulator.utils.Constants.X_HTTP_METHOD_OVERRIDE;
 import static org.onap.so.aaisimulator.utils.HttpServiceUtils.getHeaders;
 import static org.onap.so.aaisimulator.utils.RequestErrorResponseUtils.getRequestErrorResponseEntity;
 import static org.onap.so.aaisimulator.utils.RequestErrorResponseUtils.getResourceVersion;
+import java.util.List;
 import java.util.Optional;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
 import org.onap.aai.domain.yang.GenericVnf;
+import org.onap.aai.domain.yang.GenericVnfs;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.so.aaisimulator.service.providers.GenericVnfCacheServiceProvider;
 import org.onap.so.aaisimulator.utils.HttpServiceUtils;
@@ -150,7 +153,8 @@ public class GenericVnfsController {
         return RequestErrorResponseUtils.getRequestErrorResponseEntity(request, GENERIC_VNF);
     }
 
-    @PostMapping(value = "/generic-vnf/{vnf-id}", consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
+    @PostMapping(value = "/generic-vnf/{vnf-id}",
+            consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML, APPLICATION_MERGE_PATCH_JSON},
             produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     public ResponseEntity<?> patchGenericVnf(@RequestBody final GenericVnf genericVnf,
             @PathVariable("vnf-id") final String vnfId,
@@ -172,4 +176,22 @@ public class GenericVnfsController {
         return getRequestErrorResponseEntity(request, GENERIC_VNF);
     }
 
+    @GetMapping(produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> getGenericVnfs(@RequestParam(name = "selflink") final String selflink,
+            final HttpServletRequest request) {
+        LOGGER.info("will retrieve GenericVnfs using selflink: {}", selflink);
+
+        final List<GenericVnf> genericVnfList = cacheServiceProvider.getGenericVnfs(selflink);
+
+        if (genericVnfList.isEmpty()) {
+            LOGGER.error("No matching generic vnfs found using selflink: {}", selflink);
+            return getRequestErrorResponseEntity(request, GENERIC_VNF);
+        }
+
+        LOGGER.info("found {} GenericVnfs in cache", genericVnfList.size());
+        final GenericVnfs genericVnfs = new GenericVnfs();
+        genericVnfs.getGenericVnf().addAll(genericVnfList);
+        return ResponseEntity.ok(genericVnfs);
+    }
+
 }
index a53da3f..082130b 100644 (file)
@@ -21,8 +21,11 @@ package org.onap.so.aaisimulator.service.providers;
 
 import java.util.Optional;
 import org.onap.aai.domain.yang.CloudRegion;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.Tenant;
+import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.aaisimulator.models.CloudRegionKey;
 import org.springframework.http.HttpHeaders;
 
@@ -39,10 +42,18 @@ public interface CloudRegionCacheServiceProvider extends Clearable {
     Optional<Relationship> addRelationShip(final CloudRegionKey key, final Relationship relationship,
             final String requestUri);
 
-    boolean putTenant(final CloudRegionKey key, Tenant tenant);
+    boolean putTenant(final CloudRegionKey key, final String tenantId, Tenant tenant);
 
     Optional<Tenant> getTenant(final CloudRegionKey key, final String tenantId);
 
-    boolean addRelationShip(final HttpHeaders incomingHeader, final String targetBaseUrl, final String requestURI, final CloudRegionKey key,
-            final String tenantId, final Relationship relationship);
+    boolean addRelationShip(final HttpHeaders incomingHeader, final String targetBaseUrl, final String requestURI,
+            final CloudRegionKey key, final String tenantId, final Relationship relationship);
+
+    Optional<EsrSystemInfoList> getEsrSystemInfoList(final CloudRegionKey key);
+
+    boolean putEsrSystemInfo(final CloudRegionKey key, final String esrSystemInfoId, final EsrSystemInfo esrSystemInfo);
+
+    boolean putVserver(final CloudRegionKey key, final String tenantId, final String vServerId, Vserver vServer);
+
+    Optional<Vserver> getVserver(final CloudRegionKey key, final String tenantId, final String vServerId);
 }
index a7528bf..5024cc7 100644 (file)
@@ -35,12 +35,16 @@ import static org.onap.so.aaisimulator.utils.HttpServiceUtils.getTargetUrl;
 import java.util.List;
 import java.util.Optional;
 import org.onap.aai.domain.yang.CloudRegion;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
 import org.onap.aai.domain.yang.RelatedToProperty;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
 import org.onap.aai.domain.yang.RelationshipList;
 import org.onap.aai.domain.yang.Tenant;
 import org.onap.aai.domain.yang.Tenants;
+import org.onap.aai.domain.yang.Vserver;
+import org.onap.aai.domain.yang.Vservers;
 import org.onap.so.aaisimulator.models.CloudRegionKey;
 import org.onap.so.simulator.cache.provider.AbstractCacheServiceProvider;
 import org.slf4j.Logger;
@@ -130,7 +134,7 @@ public class CloudRegionCacheServiceProviderImpl extends AbstractCacheServicePro
     }
 
     @Override
-    public boolean putTenant(final CloudRegionKey key, final Tenant tenant) {
+    public boolean putTenant(final CloudRegionKey key, final String tenantId, final Tenant tenant) {
         final Optional<CloudRegion> optional = getCloudRegion(key);
         if (optional.isPresent()) {
             final CloudRegion cloudRegion = optional.get();
@@ -141,11 +145,13 @@ public class CloudRegionCacheServiceProviderImpl extends AbstractCacheServicePro
             }
 
             final Optional<Tenant> existingTenantOptional = tenants.getTenant().stream()
-                    .filter(existing -> existing.getTenantId().equals(tenant.getTenantId())).findFirst();
+                    .filter(existing -> existing.getTenantId() != null && existing.getTenantId().equals(tenantId))
+                    .findFirst();
 
             if (!existingTenantOptional.isPresent()) {
                 return tenants.getTenant().add(tenant);
             }
+
             LOGGER.warn("Tenant already exists ...");
             return false;
         }
@@ -207,6 +213,95 @@ public class CloudRegionCacheServiceProviderImpl extends AbstractCacheServicePro
         return false;
     }
 
+    @Override
+    public Optional<EsrSystemInfoList> getEsrSystemInfoList(final CloudRegionKey key) {
+        final Optional<CloudRegion> optional = getCloudRegion(key);
+        if (optional.isPresent()) {
+            final CloudRegion cloudRegion = optional.get();
+            final EsrSystemInfoList esrSystemInfoList = cloudRegion.getEsrSystemInfoList();
+            if (esrSystemInfoList != null) {
+                return Optional.of(esrSystemInfoList);
+            }
+        }
+        LOGGER.error("Unable to find EsrSystemInfoList in cache for CloudRegion: {} ", key);
+
+        return Optional.empty();
+    }
+
+    @Override
+    public boolean putEsrSystemInfo(final CloudRegionKey key, final String esrSystemInfoId,
+            final EsrSystemInfo esrSystemInfo) {
+        final Optional<CloudRegion> optional = getCloudRegion(key);
+        if (optional.isPresent()) {
+            final CloudRegion cloudRegion = optional.get();
+            final List<EsrSystemInfo> esrSystemInfoList = getEsrSystemInfoList(cloudRegion);
+
+            final Optional<EsrSystemInfo> existingEsrSystemInfo =
+                    esrSystemInfoList.stream().filter(existing -> existing.getEsrSystemInfoId() != null
+                            && existing.getEsrSystemInfoId().equals(esrSystemInfoId)).findFirst();
+            if (existingEsrSystemInfo.isPresent()) {
+                LOGGER.error("EsrSystemInfo already exists {}", existingEsrSystemInfo.get());
+                return false;
+            }
+
+            return esrSystemInfoList.add(esrSystemInfo);
+
+        }
+        return false;
+    }
+
+    @Override
+    public boolean putVserver(final CloudRegionKey key, final String tenantId, final String vServerId,
+            final Vserver vServer) {
+        final Optional<Tenant> optional = getTenant(key, tenantId);
+        if (optional.isPresent()) {
+            final Tenant tenant = optional.get();
+            Vservers vServers = tenant.getVservers();
+            if (vServers == null) {
+                vServers = new Vservers();
+                tenant.setVservers(vServers);
+            }
+            final List<Vserver> vServerList = vServers.getVserver();
+
+            final Optional<Vserver> existingVserver = vServerList.stream()
+                    .filter(existing -> existing.getVserverId() != null && existing.getVserverId().equals(vServerId))
+                    .findFirst();
+
+            if (existingVserver.isPresent()) {
+                LOGGER.error("Vserver already exists {}", existingVserver.get());
+                return false;
+            }
+            return vServerList.add(vServer);
+
+        }
+        return false;
+    }
+
+    @Override
+    public Optional<Vserver> getVserver(final CloudRegionKey key, final String tenantId, final String vServerId) {
+        final Optional<Tenant> optional = getTenant(key, tenantId);
+        if (optional.isPresent()) {
+            final Tenant tenant = optional.get();
+            Vservers vServers = tenant.getVservers();
+            if (vServers != null) {
+                return vServers.getVserver().stream()
+                        .filter(vServer -> vServer.getVserverId() != null && vServer.getVserverId().equals(vServerId))
+                        .findFirst();
+            }
+        }
+        LOGGER.error("Unable to find vServer in cache ... ");
+        return Optional.empty();
+    }
+
+    private List<EsrSystemInfo> getEsrSystemInfoList(final CloudRegion cloudRegion) {
+        EsrSystemInfoList esrSystemInfoList = cloudRegion.getEsrSystemInfoList();
+        if (esrSystemInfoList == null) {
+            esrSystemInfoList = new EsrSystemInfoList();
+            cloudRegion.setEsrSystemInfoList(esrSystemInfoList);
+        }
+        return esrSystemInfoList.getEsrSystemInfo();
+    }
+
     private Relationship getRelationship(final String requestUriString, final CloudRegionKey cloudRegionKey,
             final Tenant tenant) {
         final Relationship relationShip = new Relationship();
@@ -237,7 +332,7 @@ public class CloudRegionCacheServiceProviderImpl extends AbstractCacheServicePro
 
     @Override
     public void clearAll() {
-        clearCahce(CLOUD_REGION_CACHE.getName());
+        clearCache(CLOUD_REGION_CACHE.getName());
 
     }
 
index 0c38e2b..4d42c24 100644 (file)
@@ -304,7 +304,7 @@ public class CustomerCacheServiceProviderImpl extends AbstractCacheServiceProvid
 
     @Override
     public void clearAll() {
-        clearCahce(CUSTOMER_CACHE.getName());
+        clearCache(CUSTOMER_CACHE.getName());
     }
 
     private RelatedToProperty getRelatedToProperty(final String key, final String value) {
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/ExternalSystemCacheServiceProvider.java b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/ExternalSystemCacheServiceProvider.java
new file mode 100644 (file)
index 0000000..5589ff4
--- /dev/null
@@ -0,0 +1,43 @@
+/*-
+ * ============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=========================================================
+ */
+package org.onap.so.aaisimulator.service.providers;
+
+import java.util.List;
+import java.util.Optional;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
+import org.onap.aai.domain.yang.EsrVnfm;
+
+/**
+ * @author Waqas Ikram (waqas.ikram@est.tech)
+ *
+ */
+public interface ExternalSystemCacheServiceProvider extends Clearable {
+
+    void putEsrVnfm(final String vnfmId, final EsrVnfm esrVnfm);
+
+    Optional<EsrVnfm> getEsrVnfm(final String vnfmId);
+
+    List<EsrVnfm> getAllEsrVnfm();
+
+    Optional<EsrSystemInfoList> getEsrSystemInfoList(final String vnfmId);
+
+    boolean putEsrSystemInfo(final String vnfmId, final String esrSystemInfoId, final EsrSystemInfo esrSystemInfo);
+}
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/ExternalSystemCacheServiceProviderImpl.java b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/ExternalSystemCacheServiceProviderImpl.java
new file mode 100644 (file)
index 0000000..3c44bed
--- /dev/null
@@ -0,0 +1,148 @@
+/*-
+ * ============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=========================================================
+ */
+package org.onap.so.aaisimulator.service.providers;
+
+import static org.onap.so.aaisimulator.utils.CacheName.ESR_VNFM_CACHE;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
+import org.onap.aai.domain.yang.EsrVnfm;
+import org.onap.so.simulator.cache.provider.AbstractCacheServiceProvider;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.Cache;
+import org.springframework.cache.CacheManager;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author Waqas Ikram (waqas.ikram@est.tech)
+ *
+ */
+@Service
+public class ExternalSystemCacheServiceProviderImpl extends AbstractCacheServiceProvider
+        implements ExternalSystemCacheServiceProvider {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(ExternalSystemCacheServiceProviderImpl.class);
+
+    @Autowired
+    public ExternalSystemCacheServiceProviderImpl(final CacheManager cacheManager) {
+        super(cacheManager);
+    }
+
+    @Override
+    public void putEsrVnfm(final String vnfmId, final EsrVnfm esrVnfm) {
+        LOGGER.info("Adding esrVnfm: {} with name to cache", esrVnfm);
+        final Cache cache = getCache(ESR_VNFM_CACHE.getName());
+        cache.put(vnfmId, esrVnfm);
+    }
+
+    @Override
+    public Optional<EsrVnfm> getEsrVnfm(final String vnfmId) {
+        LOGGER.info("getting EsrVnfm from cache using key: {}", vnfmId);
+        final Cache cache = getCache(ESR_VNFM_CACHE.getName());
+        final EsrVnfm value = cache.get(vnfmId, EsrVnfm.class);
+        if (value != null) {
+            return Optional.of(value);
+        }
+        LOGGER.error("Unable to find EsrVnfm in cache using vnfmId: {} ", vnfmId);
+        return Optional.empty();
+    }
+
+    @Override
+    public List<EsrVnfm> getAllEsrVnfm() {
+        final Cache cache = getCache(ESR_VNFM_CACHE.getName());
+        if (cache != null) {
+            final Object nativeCache = cache.getNativeCache();
+            if (nativeCache instanceof ConcurrentHashMap) {
+                @SuppressWarnings("unchecked")
+                final ConcurrentHashMap<Object, Object> concurrentHashMap =
+                        (ConcurrentHashMap<Object, Object>) nativeCache;
+                final List<EsrVnfm> result = new ArrayList<>();
+                concurrentHashMap.keySet().stream().forEach(key -> {
+                    final Optional<EsrVnfm> optional = getEsrVnfm(key.toString());
+                    if (optional.isPresent()) {
+                        result.add(optional.get());
+                    }
+                });
+                return result;
+            }
+        }
+        LOGGER.error("Unable to get all esr vnfms ... ");
+        return Collections.emptyList();
+
+    }
+
+    @Override
+    public Optional<EsrSystemInfoList> getEsrSystemInfoList(final String vnfmId) {
+        final Optional<EsrVnfm> optional = getEsrVnfm(vnfmId);
+        if (optional.isPresent()) {
+            final EsrVnfm esrVnfm = optional.get();
+            if (esrVnfm.getEsrSystemInfoList() != null) {
+                return Optional.of(esrVnfm.getEsrSystemInfoList());
+            }
+            LOGGER.error("EsrSystemInfoList is null for vnfmId: {} ", vnfmId);
+        }
+        LOGGER.error("Unable to find EsrVnfm in cache using vnfmId: {} ", vnfmId);
+        return Optional.empty();
+    }
+
+    @Override
+    public boolean putEsrSystemInfo(final String vnfmId, final String esrSystemInfoId,
+            final EsrSystemInfo esrSystemInfo) {
+        final Optional<EsrVnfm> optional = getEsrVnfm(vnfmId);
+        if (optional.isPresent()) {
+            final EsrVnfm esrVnfm = optional.get();
+            final List<EsrSystemInfo> esrSystemInfoList = getEsrSystemInfoList(esrVnfm);
+
+            final Optional<EsrSystemInfo> existingEsrSystemInfo =
+                    esrSystemInfoList.stream().filter(existing -> existing.getEsrSystemInfoId() != null
+                            && existing.getEsrSystemInfoId().equals(esrSystemInfoId)).findFirst();
+            if (existingEsrSystemInfo.isPresent()) {
+                LOGGER.error("EsrSystemInfo already exists {}", existingEsrSystemInfo.get());
+                return false;
+            }
+
+            return esrSystemInfoList.add(esrSystemInfo);
+        }
+        LOGGER.error("Unable to add EsrSystemInfo in cache for vnfmId: {} ", vnfmId);
+        return false;
+    }
+
+    private List<EsrSystemInfo> getEsrSystemInfoList(final EsrVnfm esrVnfm) {
+        EsrSystemInfoList esrSystemInfoList = esrVnfm.getEsrSystemInfoList();
+        if (esrSystemInfoList == null) {
+            esrSystemInfoList = new EsrSystemInfoList();
+            esrVnfm.setEsrSystemInfoList(esrSystemInfoList);
+        }
+        return esrSystemInfoList.getEsrSystemInfo();
+    }
+
+    @Override
+    public void clearAll() {
+        clearCache(ESR_VNFM_CACHE.getName());
+
+    }
+
+}
index 20c0f22..8dd19cf 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.onap.so.aaisimulator.service.providers;
 
+import java.util.List;
 import java.util.Optional;
 import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.Relationship;
@@ -44,5 +45,7 @@ public interface GenericVnfCacheServiceProvider extends Clearable {
 
     boolean patchGenericVnf(final String vnfId, final GenericVnf genericVnf);
 
+    List<GenericVnf> getGenericVnfs(final String selflink);
+
 
 }
index 0d97ea9..81a74f2 100644 (file)
@@ -27,6 +27,9 @@ import static org.onap.so.aaisimulator.utils.Constants.GENERIC_VNF_VNF_NAME;
 import static org.onap.so.aaisimulator.utils.HttpServiceUtils.getBiDirectionalRelationShipListRelatedLink;
 import static org.onap.so.aaisimulator.utils.HttpServiceUtils.getRelationShipListRelatedLink;
 import static org.onap.so.aaisimulator.utils.HttpServiceUtils.getTargetUrl;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
 import java.util.Optional;
 import java.util.concurrent.ConcurrentHashMap;
 import org.onap.aai.domain.yang.GenericVnf;
@@ -34,6 +37,7 @@ import org.onap.aai.domain.yang.RelatedToProperty;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
 import org.onap.aai.domain.yang.RelationshipList;
+import org.onap.so.aaisimulator.utils.ShallowBeanCopy;
 import org.onap.so.simulator.cache.provider.AbstractCacheServiceProvider;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -91,17 +95,20 @@ public class GenericVnfCacheServiceProviderImpl extends AbstractCacheServiceProv
                 final ConcurrentHashMap<Object, Object> concurrentHashMap =
                         (ConcurrentHashMap<Object, Object>) nativeCache;
                 for (final Object key : concurrentHashMap.keySet()) {
-                    final GenericVnf value = cache.get(key, GenericVnf.class);
-                    final String genericVnfName = value.getVnfName();
-                    if (value != null && genericVnfName.equals(vnfName)) {
-                        final String genericVnfId = value.getVnfId();
-                        LOGGER.info("Found matching vnf for name: {}, vnf-id: {}", genericVnfName, genericVnfId);
-                        return Optional.of(genericVnfId);
+                    final Optional<GenericVnf> optional = getGenericVnf(key.toString());
+                    if (optional.isPresent()) {
+                        final GenericVnf value = optional.get();
+                        final String genericVnfName = value.getVnfName();
+                        if (genericVnfName != null && genericVnfName.equals(vnfName)) {
+                            final String genericVnfId = value.getVnfId();
+                            LOGGER.info("Found matching vnf for name: {}, vnf-id: {}", genericVnfName, genericVnfId);
+                            return Optional.of(genericVnfId);
+                        }
                     }
                 }
             }
         }
-        LOGGER.info("No match found for vnf name: {}", vnfName);
+        LOGGER.error("No match found for vnf name: {}", vnfName);
         return Optional.empty();
     }
 
@@ -164,15 +171,49 @@ public class GenericVnfCacheServiceProviderImpl extends AbstractCacheServiceProv
         final Optional<GenericVnf> optional = getGenericVnf(vnfId);
         if (optional.isPresent()) {
             final GenericVnf cachedGenericVnf = optional.get();
-            LOGGER.info("Changing OrchestrationStatus from {} to {} ", cachedGenericVnf.getOrchestrationStatus(),
-                    genericVnf.getOrchestrationStatus());
-            cachedGenericVnf.setOrchestrationStatus(genericVnf.getOrchestrationStatus());
-            return true;
+            try {
+                ShallowBeanCopy.copy(genericVnf, cachedGenericVnf);
+                return true;
+            } catch (final Exception exception) {
+                LOGGER.error("Unable to update GenericVnf for vnfId: {}", vnfId, exception);
+            }
         }
         LOGGER.error("Unable to find GenericVnf ...");
         return false;
     }
 
+    @Override
+    public List<GenericVnf> getGenericVnfs(final String selflink) {
+        final Cache cache = getCache(GENERIC_VNF_CACHE.getName());
+        if (cache != null) {
+            final Object nativeCache = cache.getNativeCache();
+            if (nativeCache instanceof ConcurrentHashMap) {
+                @SuppressWarnings("unchecked")
+                final ConcurrentHashMap<Object, Object> concurrentHashMap =
+                        (ConcurrentHashMap<Object, Object>) nativeCache;
+                final List<GenericVnf> result = new ArrayList<>();
+
+                concurrentHashMap.keySet().stream().forEach(key -> {
+                    final Optional<GenericVnf> optional = getGenericVnf(key.toString());
+                    if (optional.isPresent()) {
+                        final GenericVnf genericVnf = optional.get();
+                        final String genericVnfSelfLink = genericVnf.getSelflink();
+                        final String genericVnfId = genericVnf.getSelflink();
+
+                        if (genericVnfSelfLink != null && genericVnfSelfLink.equals(selflink)) {
+                            LOGGER.info("Found matching vnf for selflink: {}, vnf-id: {}", genericVnfSelfLink,
+                                    genericVnfId);
+                            result.add(genericVnf);
+                        }
+                    }
+                });
+                return result;
+            }
+        }
+        LOGGER.error("No match found for selflink: {}", selflink);
+        return Collections.emptyList();
+    }
+
     private Relationship getRelationship(final String relatedLink, final GenericVnf genericVnf) {
         final Relationship relationShip = new Relationship();
         relationShip.setRelatedTo(GENERIC_VNF);
@@ -193,7 +234,7 @@ public class GenericVnfCacheServiceProviderImpl extends AbstractCacheServiceProv
 
     @Override
     public void clearAll() {
-        clearCahce(GENERIC_VNF_CACHE.getName());
+        clearCache(GENERIC_VNF_CACHE.getName());
     }
 
 }
index b65ec3e..e351c75 100644 (file)
@@ -115,7 +115,7 @@ public class OwnEntityCacheServiceProviderImpl extends AbstractCacheServiceProvi
 
     @Override
     public void clearAll() {
-        clearCahce(OWNING_ENTITY_CACHE.getName());
+        clearCache(OWNING_ENTITY_CACHE.getName());
     }
 
     private Relationship getRelationship(final String requestUriString, final OwningEntity owningEntity) {
index 0157d9e..a2eb7ee 100644 (file)
@@ -115,7 +115,7 @@ public class ProjectCacheServiceProviderImpl extends AbstractCacheServiceProvide
 
     @Override
     public void clearAll() {
-        clearCahce(PROJECT_CACHE.getName());
+        clearCache(PROJECT_CACHE.getName());
     }
 
     private Relationship getRelationship(final String requestUriString, final Project project) {
index 1874b83..08fa750 100644 (file)
@@ -32,7 +32,8 @@ public enum CacheName {
     OWNING_ENTITY_CACHE("owning-entity-cache"),
     PLATFORM_CACHE("platform-cache"),
     LINES_OF_BUSINESS_CACHE("lines-of-business-cache"),
-    CLOUD_REGION_CACHE("cloud-region-cache");
+    CLOUD_REGION_CACHE("cloud-region-cache"),
+    ESR_VNFM_CACHE("esr-vnfm-cache");
 
     private String name;
 
index 97f2525..b4b562b 100644 (file)
@@ -43,9 +43,11 @@ public class Constants {
 
     public static final String PLATFORMS_URL = BUSINESS_URL + "/platforms/platform/";
 
+    public static final String EXTERNAL_SYSTEM_ESR_VNFM_LIST_URL = BASE_URL + "/external-system/esr-vnfm-list";
+
     public static final String NETWORK_URL = BASE_URL + "/network";
 
-    public static final String GENERIC_VNFS_URL = NETWORK_URL + "/generic-vnfs/";
+    public static final String GENERIC_VNFS_URL = NETWORK_URL + "/generic-vnfs";
 
     public static final String RELATIONSHIP_LIST_RELATIONSHIP_URL = "/relationship-list/relationship";
 
@@ -65,6 +67,8 @@ public class Constants {
     public static final String OWNING_ENTITY_OWNING_ENTITY_ID = "owning-entity.owning-entity-id";
 
     public static final String X_HTTP_METHOD_OVERRIDE = "X-HTTP-Method-Override";
+    
+    public static final String APPLICATION_MERGE_PATCH_JSON = "application/merge-patch+json";
 
     public static final String SERVICE_RESOURCE_TYPE = "service-instance";
 
@@ -120,6 +124,12 @@ public class Constants {
 
     public static final String TENANT = "tenant";
 
+    public static final String ESR_VNFM = "esr-vnfm";
+
+    public static final String ESR_SYSTEM_INFO = "esr-system-info";
+
+    public static final String ESR_SYSTEM_INFO_LIST = "esr-system-info-list";
+
     private Constants() {}
 
 }
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/utils/ShallowBeanCopy.java b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/main/java/org/onap/so/aaisimulator/utils/ShallowBeanCopy.java
new file mode 100644 (file)
index 0000000..3285e01
--- /dev/null
@@ -0,0 +1,89 @@
+/*-
+ * ============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=========================================================
+ */
+package org.onap.so.aaisimulator.utils;
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Optional;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author Waqas Ikram (waqas.ikram@est.tech)
+ *
+ */
+public class ShallowBeanCopy {
+    private static final Logger LOGGER = LoggerFactory.getLogger(ShallowBeanCopy.class);
+
+    private ShallowBeanCopy() {}
+
+    public static void copy(final Object from, final Object to) throws Exception {
+        final Map<String, Method> fromMethods = getMethods(from);
+        final Map<String, Method> toMethods = getMethods(to);
+
+        for (final Entry<String, Method> entry : fromMethods.entrySet()) {
+            final String methodName = entry.getKey();
+            final Method fromMethod = entry.getValue();
+
+            final Optional<Method> optional = getSetMethod(to, fromMethod);
+            if (optional.isPresent()) {
+                final Method toGetMethod = toMethods.get(methodName);
+                final Method toMethod = optional.get();
+                final Object toValue = fromMethod.invoke(from);
+
+                final Object fromValue = toGetMethod.invoke(to);
+                if (toValue != null && !toValue.equals(fromValue)) {
+                    LOGGER.info("Changing {} value from: {} to: {}", methodName, fromValue, toValue);
+                    toMethod.invoke(to, toValue);
+                }
+            }
+        }
+    }
+
+
+    private static Optional<Method> getSetMethod(final Object to, final Method fromMethod) {
+        final String name = fromMethod.getName().replaceFirst("get|is", "set");
+        final Class<?> returnType = fromMethod.getReturnType();
+        try {
+            return Optional.of(to.getClass().getMethod(name, returnType));
+        } catch (final NoSuchMethodException noSuchMethodException) {
+        }
+        return Optional.empty();
+    }
+
+    private static Map<String, Method> getMethods(final Object object) {
+        final Map<String, Method> methodsFound = new HashMap<>();
+        final Method[] methods = object.getClass().getMethods();
+
+        for (final Method method : methods) {
+            if (method.getName().startsWith("get") || method.getName().startsWith("is")) {
+                final String name = method.getName().replaceFirst("get|is", "");
+
+                methodsFound.put(name, method);
+            }
+        }
+
+        return methodsFound;
+
+    }
+
+}
index 012c9ca..584e28c 100644 (file)
@@ -28,25 +28,40 @@ import static org.onap.so.aaisimulator.utils.Constants.RELATIONSHIP_LIST_RELATIO
 import static org.onap.so.aaisimulator.utils.TestConstants.CLOUD_OWNER_NAME;
 import static org.onap.so.aaisimulator.utils.TestConstants.CLOUD_REGION_NAME;
 import static org.onap.so.aaisimulator.utils.TestConstants.CUSTOMERS_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_PASSWORD;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SERVICE_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SYSTEM_INFO_ID;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SYSTEM_INFO_LIST_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SYSTEM_TYPE;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_TYEP;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_USERNAME;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_VENDOR;
 import static org.onap.so.aaisimulator.utils.TestConstants.GENERIC_VNF_NAME;
 import static org.onap.so.aaisimulator.utils.TestConstants.GENERIC_VNF_URL;
 import static org.onap.so.aaisimulator.utils.TestConstants.SERVICE_INSTANCE_URL;
 import static org.onap.so.aaisimulator.utils.TestConstants.SERVICE_SUBSCRIPTIONS_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.SYSTEM_NAME;
 import static org.onap.so.aaisimulator.utils.TestConstants.TENANTS_TENANT;
 import static org.onap.so.aaisimulator.utils.TestConstants.TENANT_ID;
 import static org.onap.so.aaisimulator.utils.TestConstants.VNF_ID;
+import static org.onap.so.aaisimulator.utils.TestConstants.VSERVER_ID;
+import static org.onap.so.aaisimulator.utils.TestConstants.VSERVER_NAME;
+import static org.onap.so.aaisimulator.utils.TestConstants.VSERVER_URL;
 import java.io.IOException;
 import java.util.List;
 import java.util.Optional;
 import org.junit.After;
 import org.junit.Test;
 import org.onap.aai.domain.yang.CloudRegion;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
 import org.onap.aai.domain.yang.GenericVnf;
 import org.onap.aai.domain.yang.RelatedToProperty;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
 import org.onap.aai.domain.yang.RelationshipList;
 import org.onap.aai.domain.yang.Tenant;
+import org.onap.aai.domain.yang.Vserver;
 import org.onap.so.aaisimulator.models.CloudRegionKey;
 import org.onap.so.aaisimulator.service.providers.CloudRegionCacheServiceProvider;
 import org.onap.so.aaisimulator.service.providers.CustomerCacheServiceProvider;
@@ -244,6 +259,68 @@ public class CloudRegionsControllerTest extends AbstractSpringBootTest {
 
     }
 
+    @Test
+    public void test_putEsrSystemInfo_successfullyAddedToCache() throws Exception {
+        final String url = getUrl(Constants.CLOUD_REGIONS, CLOUD_OWNER_NAME, "/" + CLOUD_REGION_NAME);
+
+        invokeCloudRegionHttpPutEndPointAndAssertResponse(url);
+
+        final String esrSystemInfoListUrl =
+                getUrl(Constants.CLOUD_REGIONS, CLOUD_OWNER_NAME, "/" + CLOUD_REGION_NAME, ESR_SYSTEM_INFO_LIST_URL);
+
+        final String esrSystemInfoUrl = esrSystemInfoListUrl + "/esr-system-info/" + ESR_SYSTEM_INFO_ID;
+        final ResponseEntity<Void> esrSystemInfoResponse =
+                testRestTemplateService.invokeHttpPut(esrSystemInfoUrl, TestUtils.getEsrSystemInfo(), Void.class);
+        assertEquals(HttpStatus.ACCEPTED, esrSystemInfoResponse.getStatusCode());
+
+        final ResponseEntity<EsrSystemInfoList> response =
+                testRestTemplateService.invokeHttpGet(esrSystemInfoListUrl, EsrSystemInfoList.class);
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+
+        assertTrue(response.hasBody());
+        final EsrSystemInfoList actualEsrSystemInfoList = response.getBody();
+
+        final List<EsrSystemInfo> esrSystemInfoList = actualEsrSystemInfoList.getEsrSystemInfo();
+        assertNotNull(esrSystemInfoList);
+        assertEquals(1, esrSystemInfoList.size());
+
+        final EsrSystemInfo esrSystemInfo = esrSystemInfoList.get(0);
+        assertEquals(ESR_SYSTEM_INFO_ID, esrSystemInfo.getEsrSystemInfoId());
+        assertEquals(SYSTEM_NAME, esrSystemInfo.getSystemName());
+        assertEquals(ESR_TYEP, esrSystemInfo.getType());
+        assertEquals(ESR_VENDOR, esrSystemInfo.getVendor());
+        assertEquals(ESR_SERVICE_URL, esrSystemInfo.getServiceUrl());
+        assertEquals(ESR_USERNAME, esrSystemInfo.getUserName());
+        assertEquals(ESR_PASSWORD, esrSystemInfo.getPassword());
+        assertEquals(ESR_SYSTEM_TYPE, esrSystemInfo.getSystemType());
+    }
+
+    @Test
+    public void test_putVServer_successfullyAddedToCache() throws Exception {
+        final String url = getUrl(Constants.CLOUD_REGIONS, CLOUD_OWNER_NAME, "/" + CLOUD_REGION_NAME);
+
+        invokeCloudRegionHttpPutEndPointAndAssertResponse(url);
+
+        final String tenantUrl = url + TENANTS_TENANT + TENANT_ID;
+        addTenantAndAssertResponse(tenantUrl);
+
+        final String vServerUrl = tenantUrl + VSERVER_URL + VSERVER_ID;
+
+        final ResponseEntity<Void> vServerResponse =
+                testRestTemplateService.invokeHttpPut(vServerUrl, TestUtils.getVserver(), Void.class);
+        assertEquals(HttpStatus.ACCEPTED, vServerResponse.getStatusCode());
+
+        final ResponseEntity<Vserver> response = testRestTemplateService.invokeHttpGet(vServerUrl, Vserver.class);
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+
+        assertTrue(response.hasBody());
+        final Vserver actualVserver = response.getBody();
+        assertEquals(VSERVER_NAME, actualVserver.getVserverName());
+        assertEquals(VSERVER_ID, actualVserver.getVserverId());
+        assertEquals("active", actualVserver.getProvStatus());
+    }
+
+
     private void addTenantAndAssertResponse(final String tenantUrl) throws IOException {
         final ResponseEntity<Void> responseEntity =
                 testRestTemplateService.invokeHttpPut(tenantUrl, TestUtils.getTenant(), Void.class);
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/java/org/onap/so/aaisimulator/controller/ExternalSystemEsrControllerTest.java b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/java/org/onap/so/aaisimulator/controller/ExternalSystemEsrControllerTest.java
new file mode 100644 (file)
index 0000000..874fab1
--- /dev/null
@@ -0,0 +1,144 @@
+/*-
+ * ============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=========================================================
+ */
+package org.onap.so.aaisimulator.controller;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.onap.so.aaisimulator.utils.Constants.EXTERNAL_SYSTEM_ESR_VNFM_LIST_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_PASSWORD;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SERVICE_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SYSTEM_INFO_ID;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SYSTEM_INFO_LIST_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_SYSTEM_TYPE;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_TYEP;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_USERNAME;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_VENDOR;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_VIM_ID;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_VNFM_ID;
+import static org.onap.so.aaisimulator.utils.TestConstants.ESR_VNFM_URL;
+import static org.onap.so.aaisimulator.utils.TestConstants.SYSTEM_NAME;
+import java.io.IOException;
+import java.util.List;
+import org.junit.After;
+import org.junit.Test;
+import org.onap.aai.domain.yang.EsrSystemInfo;
+import org.onap.aai.domain.yang.EsrSystemInfoList;
+import org.onap.aai.domain.yang.EsrVnfm;
+import org.onap.aai.domain.yang.EsrVnfmList;
+import org.onap.so.aaisimulator.service.providers.ExternalSystemCacheServiceProvider;
+import org.onap.so.aaisimulator.utils.TestUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+
+/**
+ * @author Waqas Ikram (waqas.ikram@est.tech)
+ *
+ */
+public class ExternalSystemEsrControllerTest extends AbstractSpringBootTest {
+
+    @Autowired
+    private ExternalSystemCacheServiceProvider externalSystemCacheServiceProvider;
+
+    @After
+    public void after() {
+        externalSystemCacheServiceProvider.clearAll();
+    }
+
+    @Test
+    public void test_putEsrVnfm_successfullyAddedToCache() throws Exception {
+        final String esrVnfmUrl = getUrl(ESR_VNFM_URL, ESR_VNFM_ID);
+        addEsrVnfmAndAssertResponse(esrVnfmUrl);
+
+        final ResponseEntity<EsrVnfm> response = testRestTemplateService.invokeHttpGet(esrVnfmUrl, EsrVnfm.class);
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+
+        assertTrue(response.hasBody());
+
+        final EsrVnfm actualEsrVnfm = response.getBody();
+        assertEquals(ESR_VNFM_ID, actualEsrVnfm.getVnfmId());
+        assertEquals(ESR_VIM_ID, actualEsrVnfm.getVimId());
+
+    }
+
+    @Test
+    public void test_getEsrVnfmList_getAllEsrVnfmsFromCache() throws Exception {
+        final String esrVnfmUrl = getUrl(ESR_VNFM_URL, ESR_VNFM_ID);
+        addEsrVnfmAndAssertResponse(esrVnfmUrl);
+
+        final String esrVnfmListUrl = getUrl(EXTERNAL_SYSTEM_ESR_VNFM_LIST_URL);
+        final ResponseEntity<EsrVnfmList> response =
+                testRestTemplateService.invokeHttpGet(esrVnfmListUrl, EsrVnfmList.class);
+
+        assertTrue(response.hasBody());
+
+        final EsrVnfmList actualEsrVnfmList = response.getBody();
+
+        final List<EsrVnfm> esrVnfmList = actualEsrVnfmList.getEsrVnfm();
+        assertNotNull(esrVnfmList);
+        assertEquals(1, esrVnfmList.size());
+        final EsrVnfm actualEsrVnfm = esrVnfmList.get(0);
+        assertEquals(ESR_VNFM_ID, actualEsrVnfm.getVnfmId());
+        assertEquals(ESR_VIM_ID, actualEsrVnfm.getVimId());
+
+    }
+
+    @Test
+    public void test_putEsrSystemInfo_successfullyAddedToCache() throws Exception {
+        final String esrVnfmUrl = getUrl(ESR_VNFM_URL, ESR_VNFM_ID);
+        addEsrVnfmAndAssertResponse(esrVnfmUrl);
+        final String esrSystemInfoListUrl = getUrl(ESR_VNFM_URL, ESR_VNFM_ID, ESR_SYSTEM_INFO_LIST_URL);
+
+        final String esrSystemInfoUrl = esrSystemInfoListUrl + "/esr-system-info/" + ESR_SYSTEM_INFO_ID;
+        final ResponseEntity<Void> esrSystemInfoResponse =
+                testRestTemplateService.invokeHttpPut(esrSystemInfoUrl, TestUtils.getEsrSystemInfo(), Void.class);
+        assertEquals(HttpStatus.ACCEPTED, esrSystemInfoResponse.getStatusCode());
+
+        final ResponseEntity<EsrSystemInfoList> response =
+                testRestTemplateService.invokeHttpGet(esrSystemInfoListUrl, EsrSystemInfoList.class);
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+
+        assertTrue(response.hasBody());
+        final EsrSystemInfoList actualEsrSystemInfoList = response.getBody();
+
+        final List<EsrSystemInfo> esrSystemInfoList = actualEsrSystemInfoList.getEsrSystemInfo();
+        assertNotNull(esrSystemInfoList);
+        assertEquals(1, esrSystemInfoList.size());
+
+        final EsrSystemInfo esrSystemInfo = esrSystemInfoList.get(0);
+        assertEquals(ESR_SYSTEM_INFO_ID, esrSystemInfo.getEsrSystemInfoId());
+        assertEquals(SYSTEM_NAME, esrSystemInfo.getSystemName());
+        assertEquals(ESR_TYEP, esrSystemInfo.getType());
+        assertEquals(ESR_VENDOR, esrSystemInfo.getVendor());
+        assertEquals(ESR_SERVICE_URL, esrSystemInfo.getServiceUrl());
+        assertEquals(ESR_USERNAME, esrSystemInfo.getUserName());
+        assertEquals(ESR_PASSWORD, esrSystemInfo.getPassword());
+        assertEquals(ESR_SYSTEM_TYPE, esrSystemInfo.getSystemType());
+
+
+    }
+
+    private void addEsrVnfmAndAssertResponse(final String esrVnfmUrl) throws IOException {
+        final ResponseEntity<Void> esrVnfmResponse =
+                testRestTemplateService.invokeHttpPut(esrVnfmUrl, TestUtils.getEsrVnfm(), Void.class);
+        assertEquals(HttpStatus.ACCEPTED, esrVnfmResponse.getStatusCode());
+    }
+}
index 1acd1f2..dd749db 100644 (file)
@@ -46,6 +46,7 @@ import java.util.Optional;
 import org.junit.After;
 import org.junit.Test;
 import org.onap.aai.domain.yang.GenericVnf;
+import org.onap.aai.domain.yang.GenericVnfs;
 import org.onap.aai.domain.yang.RelatedToProperty;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
@@ -344,6 +345,8 @@ public class GenericVnfsControllerTest extends AbstractSpringBootTest {
 
         final HttpHeaders httpHeaders = testRestTemplateService.getHttpHeaders();
         httpHeaders.add(X_HTTP_METHOD_OVERRIDE, HttpMethod.PATCH.toString());
+        httpHeaders.remove(HttpHeaders.CONTENT_TYPE);
+        httpHeaders.add(HttpHeaders.CONTENT_TYPE, Constants.APPLICATION_MERGE_PATCH_JSON);
 
         final String genericVnfUrl = getUrl(GENERIC_VNF_URL, VNF_ID);
         final ResponseEntity<Void> orchStatuUpdateServiceInstanceResponse = testRestTemplateService
@@ -364,6 +367,28 @@ public class GenericVnfsControllerTest extends AbstractSpringBootTest {
 
     }
 
+    @Test
+    public void test_getGenericVnfs_usingSelfLink_getAllGenericVnfsInCache() throws Exception {
+
+        addCustomerServiceAndGenericVnf();
+
+        final String selfLink = "http://localhost:9921/generic-vnf/" + VNF_ID;
+        final String url = getUrl(Constants.GENERIC_VNFS_URL) + "?selflink=" + selfLink;
+        final ResponseEntity<GenericVnfs> response = testRestTemplateService.invokeHttpGet(url, GenericVnfs.class);
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+
+        assertTrue(response.hasBody());
+
+        final GenericVnfs actualGenericVnfs = response.getBody();
+        final List<GenericVnf> genericVnfList = actualGenericVnfs.getGenericVnf();
+        assertNotNull(genericVnfList);
+        assertEquals(1, genericVnfList.size());
+        final GenericVnf actualGenericVnf = genericVnfList.get(0);
+        assertEquals(selfLink, actualGenericVnf.getSelflink());
+        assertEquals(GENERIC_VNF_NAME, actualGenericVnf.getVnfName());
+        assertEquals(VNF_ID, actualGenericVnf.getVnfId());
+    }
+
     private void addCustomerServiceAndGenericVnf() throws Exception, IOException {
         final ResponseEntity<Void> customerResponse =
                 testRestTemplateService.invokeHttpPut(getUrl(CUSTOMERS_URL), TestUtils.getCustomer(), Void.class);
index eba2943..79bf624 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.onap.so.aaisimulator.utils;
 
+import static org.onap.so.aaisimulator.utils.Constants.EXTERNAL_SYSTEM_ESR_VNFM_LIST_URL;
 import org.onap.so.aaisimulator.utils.Constants;
 
 /**
@@ -49,7 +50,7 @@ public class TestConstants {
 
     public static final String GENERIC_VNF_NAME = "EsyVnfInstantiationTest2";
 
-    public static final String GENERIC_VNF_URL = Constants.GENERIC_VNFS_URL + "generic-vnf/";
+    public static final String GENERIC_VNF_URL = Constants.GENERIC_VNFS_URL + "/generic-vnf/";
 
     public static final String GENERIC_VNFS_URL = "/generic-vnfs";
 
@@ -67,6 +68,36 @@ public class TestConstants {
 
     public static final String TENANTS_TENANT = "/tenants/tenant/";
 
+    public static final String ESR_VNFM_URL = EXTERNAL_SYSTEM_ESR_VNFM_LIST_URL + "/esr-vnfm/";
+
+    public static final String ESR_VNFM_ID = "c5e99cee-1996-4606-b697-838d51d4e1a3";
+
+    public static final String ESR_VIM_ID = "EtsiVimId";
+
+    public static final String ESR_SYSTEM_INFO_LIST_URL = "/esr-system-info-list";
+
+    public static final String ESR_SYSTEM_INFO_ID = "5c067098-f2e3-40f7-a7ba-155e7c61e916";
+
+    public static final String ESR_SYSTEM_TYPE = "VNFM";
+
+    public static final String ESR_PASSWORD = "123456";
+
+    public static final String ESR_USERNAME = "vnfmadapter";
+
+    public static final String ESR_SERVICE_URL = "https://so-vnfm-simulator.onap:9095/vnflcm/v1";
+
+    public static final String ESR_VENDOR = "EST";
+
+    public static final String ESR_TYEP = "simulator";
+
+    public static final String SYSTEM_NAME = "vnfmSimulator";
+
+    public static final String VSERVER_URL = "/vservers/vserver/";
+
+    public static final String VSERVER_NAME = "CsitVServer";
+
+    public static final String VSERVER_ID = "f84fdb9b-ad7c-49db-a08f-e443b4cbd033";
+
     private TestConstants() {}
 
 }
index 1cdfeb9..033db17 100644 (file)
@@ -156,6 +156,19 @@ public class TestUtils {
         return getJsonString("test-data/generic-vnf-orch-status-update.json");
     }
 
+    public static String getEsrVnfm() throws IOException {
+        return getJsonString("test-data/esr-vnfm.json");
+    }
+
+    public static String getEsrSystemInfo() throws IOException {
+        return getJsonString("test-data/esr-system-info.json");
+    }
+
+    public static String getVserver() throws IOException {
+        return getJsonString("test-data/vServer.json");
+    }
+
+
     public static String getUrl(final int port, final String... urls) {
         final UriComponentsBuilder baseUri = UriComponentsBuilder.fromUriString("https://localhost:" + port);
         for (final String url : urls) {
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/esr-system-info.json b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/esr-system-info.json
new file mode 100644 (file)
index 0000000..65d6095
--- /dev/null
@@ -0,0 +1,12 @@
+{
+    "esr-system-info-id": "5c067098-f2e3-40f7-a7ba-155e7c61e916",
+    "system-name": "vnfmSimulator",
+    "type": "simulator",
+    "vendor": "EST",
+    "version": "V1.0",
+    "service-url": "https://so-vnfm-simulator.onap:9095/vnflcm/v1",
+    "user-name": "vnfmadapter",
+    "password": "123456",
+    "system-type": "VNFM",
+    "resource-version": "1564774459055"
+}
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/esr-vnfm.json b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/esr-vnfm.json
new file mode 100644 (file)
index 0000000..815e6ff
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "vnfm-id": "c5e99cee-1996-4606-b697-838d51d4e1a3",
+    "vim-id": "EtsiVimId",
+    "certificate-url": ""
+}
index de246cd..3740ce1 100644 (file)
@@ -9,5 +9,6 @@
     "model-version-id": "84b9649a-4eb9-4967-9abe-e8702f55518b",
     "model-customization-id": "50a90cd7-a84e-4ee1-b5ba-bfa5a26f5e15",
     "nf-type": "vnflcm",
-    "nf-role": "vnflcm"
+    "nf-role": "vnflcm",
+    "selflink": "http://localhost:9921/generic-vnf/dfd02fb5-d7fb-4aac-b3c4-cd6b60058701"
 }
diff --git a/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/vServer.json b/plans/so/integration-etsi-testing/so-simulators/aai-simulator/src/test/resources/test-data/vServer.json
new file mode 100644 (file)
index 0000000..b3cbba6
--- /dev/null
@@ -0,0 +1,5 @@
+{
+    "vserver-id": "f84fdb9b-ad7c-49db-a08f-e443b4cbd033",
+    "vserver-name": "CsitVServer",
+    "prov-status": "active"
+}
index ae31a3f..6a10197 100644 (file)
@@ -38,7 +38,7 @@ public abstract class AbstractCacheServiceProvider {
         this.cacheManager = cacheManager;
     }
 
-    protected void clearCahce(final String name) {
+    protected void clearCache(final String name) {
         final Cache cache = cacheManager.getCache(name);
         if (cache != null) {
             final ConcurrentHashMap<?, ?> nativeCache = (ConcurrentHashMap<?, ?>) cache.getNativeCache();
index e575f2a..a7cb5dd 100644 (file)
@@ -22,7 +22,6 @@ package org.onap.so.sdcsimulator.providers;
 
 import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertFalse;
-
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.Files;
@@ -30,7 +29,6 @@ import java.nio.file.Path;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
-import org.onap.so.sdcsimulator.providers.ResourceProviderImpl;
 import org.onap.so.sdcsimulator.utils.Constants;
 import org.springframework.core.io.ClassPathResource;
 import org.springframework.util.StreamUtils;
@@ -81,19 +79,4 @@ public class ResourceProviderImplTest {
         assertFalse(objUnderTest.getResource(Constants.DEFAULT_CSAR_NAME).isPresent());
 
     }
-
-    @Test
-    public void test_getResource_withValidPathAndUnabletoRead_emptyOptional() throws IOException {
-        final File folder = temporaryFolder.newFolder();
-        final Path file = Files.createFile(folder.toPath().resolve("empty.csar"));
-
-        Files.write(file, DUMMY_CONTENT.getBytes());
-        file.toFile().setReadable(false);
-
-        final ResourceProviderImpl objUnderTest = new ResourceProviderImpl(folder.getPath());
-
-        assertFalse(objUnderTest.getResource("empty").isPresent());
-
-    }
-
-}
\ No newline at end of file
+}
index 0074029..2d901c4 100644 (file)
@@ -23,6 +23,7 @@ import static org.onap.so.sdncsimulator.utils.Constants.OPERATIONS_URL;
 import javax.servlet.http.HttpServletRequest;
 import javax.ws.rs.core.MediaType;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceOperationInformation;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfOperationInformation;
 import org.onap.so.sdncsimulator.models.InputRequest;
 import org.onap.so.sdncsimulator.models.Output;
 import org.onap.so.sdncsimulator.models.OutputRequest;
@@ -55,15 +56,17 @@ public class OperationsController {
     }
 
     @PostMapping(value = "/GENERIC-RESOURCE-API:service-topology-operation/",
+            consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
             produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
     public ResponseEntity<?> postServiceOperationInformation(
             @RequestBody final InputRequest<GenericResourceApiServiceOperationInformation> inputRequest,
             final HttpServletRequest request) {
-        LOGGER.info("Request Received {}  ...", inputRequest);
+        LOGGER.info("Request Received: {}  ...", inputRequest);
 
         final GenericResourceApiServiceOperationInformation apiServiceOperationInformation = inputRequest.getInput();
 
         if (apiServiceOperationInformation == null) {
+            LOGGER.error("Invalid input request: {}", inputRequest);
             return ResponseEntity.badRequest().build();
         }
 
@@ -71,9 +74,37 @@ public class OperationsController {
         final OutputRequest outputRequest = new OutputRequest(output);
 
         if (output.getResponseCode().equals(HttpStatus.OK.toString())) {
+            LOGGER.info("Sucessfully added service in cache sending response: {}", outputRequest);
+            return ResponseEntity.ok(outputRequest);
+        }
+        LOGGER.error("Unable to add input request: {}, will send OutputRequest: {}", inputRequest, outputRequest);
+        return ResponseEntity.badRequest().body(outputRequest);
+
+    }
+
+    @PostMapping(value = "/GENERIC-RESOURCE-API:vnf-topology-operation/",
+            consumes = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML},
+            produces = {MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public ResponseEntity<?> postVnfOperationInformation(
+            @RequestBody final InputRequest<GenericResourceApiVnfOperationInformation> inputRequest,
+            final HttpServletRequest request) {
+        LOGGER.info("Request Received: {}  ...", inputRequest);
+
+        final GenericResourceApiVnfOperationInformation apiVnfOperationInformation = inputRequest.getInput();
+        if (apiVnfOperationInformation == null) {
+            LOGGER.error("Invalid input request: {}", inputRequest);
+            return ResponseEntity.badRequest().build();
+        }
+
+        final Output output = cacheServiceProvider.putVnfOperationInformation(apiVnfOperationInformation);
+        final OutputRequest outputRequest = new OutputRequest(output);
+
+        if (output.getResponseCode().equals(HttpStatus.OK.toString())) {
+            LOGGER.info("Sucessfully added vnf in cache sending response: {}", outputRequest);
             return ResponseEntity.ok(outputRequest);
         }
 
+        LOGGER.error("Unable to add input request: {}, will send OutputRequest: {}", inputRequest, outputRequest);
         return ResponseEntity.badRequest().body(outputRequest);
 
     }
index d4e83fc..3d41520 100644 (file)
  */
 package org.onap.so.sdncsimulator.models;
 
+import java.io.Serializable;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 
 /**
  * @author Waqas Ikram (waqas.ikram@est.tech)
  *
  */
-public class InputRequest<T> {
+public class InputRequest<T> implements Serializable {
+
+    private static final long serialVersionUID = -3408332422970506740L;
 
     private T input;
 
@@ -46,7 +49,11 @@ public class InputRequest<T> {
     @JsonIgnore
     @Override
     public String toString() {
-        return "Input [input=" + input + "]";
+        final StringBuilder sb = new StringBuilder();
+        sb.append("class InputRequest {\n");
+        sb.append("    input: ").append(input).append("\n");
+        sb.append("}");
+        return sb.toString();
     }
 
 }
index 554989d..d64b0b0 100644 (file)
@@ -19,6 +19,7 @@
  */
 package org.onap.so.sdncsimulator.models;
 
+import java.io.Serializable;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiInstanceReference;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
@@ -27,7 +28,9 @@ import com.fasterxml.jackson.annotation.JsonProperty;
  * @author Waqas Ikram (waqas.ikram@est.tech)
  *
  */
-public class Output {
+public class Output implements Serializable {
+
+    private static final long serialVersionUID = 3838047042980836468L;
 
     @JsonProperty("response-message")
     private String responseMessage;
@@ -44,6 +47,9 @@ public class Output {
     @JsonProperty("service-response-information")
     private GenericResourceApiInstanceReference serviceResponseInformation = null;
 
+    @JsonProperty("vnf-response-information")
+    private GenericResourceApiInstanceReference vnfResponseInformation = null;
+
     /**
      * @return the responseMessage
      */
@@ -114,6 +120,21 @@ public class Output {
         this.serviceResponseInformation = serviceResponseInformation;
     }
 
+    /**
+     * @return the vnfResponseInformation
+     */
+    public GenericResourceApiInstanceReference getVnfResponseInformation() {
+        return vnfResponseInformation;
+    }
+
+    /**
+     * @param vnfResponseInformation the vnfResponseInformation to set
+     */
+    public void setVnfResponseInformation(final GenericResourceApiInstanceReference vnfResponseInformation) {
+        this.vnfResponseInformation = vnfResponseInformation;
+    }
+
+
     public Output responseMessage(final String responseMessage) {
         this.responseMessage = responseMessage;
         return this;
@@ -139,13 +160,25 @@ public class Output {
         return this;
     }
 
+    public Output vnfResponseInformation(final GenericResourceApiInstanceReference vnfResponseInformation) {
+        this.vnfResponseInformation = vnfResponseInformation;
+        return this;
+
+    }
 
     @JsonIgnore
     @Override
     public String toString() {
-        return "OutputRequest [responseMessage=" + responseMessage + ", ackFinalIndicator=" + ackFinalIndicator
-                + ", svcRequestId=" + svcRequestId + ", responseCode=" + responseCode + ", serviceResponseInformation="
-                + serviceResponseInformation + "]";
+        final StringBuilder sb = new StringBuilder();
+        sb.append("class OutputRequest {\n");
+        sb.append("    responseMessage: ").append(responseMessage).append("\n");
+        sb.append("    ackFinalIndicator: ").append(ackFinalIndicator).append("\n");
+        sb.append("    svcRequestId: ").append(svcRequestId).append("\n");
+        sb.append("    responseCode: ").append(responseCode).append("\n");
+        sb.append("    serviceResponseInformation: ").append(serviceResponseInformation).append("\n");
+        sb.append("    vnfResponseInformation: ").append(vnfResponseInformation).append("\n");
+        sb.append("}");
+        return sb.toString();
     }
 
 
index 97d2056..1dcd427 100644 (file)
  */
 package org.onap.so.sdncsimulator.models;
 
+import java.io.Serializable;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
 /**
  * @author Waqas Ikram (waqas.ikram@est.tech)
  *
  */
+public class OutputRequest implements Serializable {
+
+    private static final long serialVersionUID = -6702076913290110397L;
 
-public class OutputRequest {
     @JsonProperty("output")
     private Output output;
 
@@ -47,7 +50,11 @@ public class OutputRequest {
 
     @Override
     public String toString() {
-        return "OutputRequest [output=" + output + "]";
+        final StringBuilder sb = new StringBuilder();
+        sb.append("class OutputRequest {\n");
+        sb.append("    output: ").append(output).append("\n");
+        sb.append("}");
+        return sb.toString();
     }
 
 }
index a0116c4..97dc7b1 100644 (file)
@@ -20,8 +20,9 @@
 package org.onap.so.sdncsimulator.providers;
 
 import java.util.Optional;
-import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceModelInfrastructure;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceOperationInformation;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiServicemodelinfrastructureService;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfOperationInformation;
 import org.onap.so.sdncsimulator.models.Output;
 
 /**
@@ -33,10 +34,11 @@ public interface ServiceOperationsCacheServiceProvider {
     Output putServiceOperationInformation(
             final GenericResourceApiServiceOperationInformation apiServiceOperationInformation);
 
-    Optional<GenericResourceApiServiceModelInfrastructure> getGenericResourceApiServiceModelInfrastructure(
+    Optional<GenericResourceApiServicemodelinfrastructureService> getGenericResourceApiServicemodelinfrastructureService(
             final String serviceInstanceId);
 
-    void clearAll();
+    Output putVnfOperationInformation(final GenericResourceApiVnfOperationInformation apiVnfOperationInformation);
 
+    void clearAll();
 
 }
index 620742a..d5e991a 100644 (file)
  */
 package org.onap.so.sdncsimulator.providers;
 
+import static org.onap.sdnc.northbound.client.model.GenericResourceApiOrderStatusEnumeration.CREATED;
+import static org.onap.sdnc.northbound.client.model.GenericResourceApiOrderStatusEnumeration.PENDINGCREATE;
+import static org.onap.sdnc.northbound.client.model.GenericResourceApiRequestStatusEnumeration.SYNCCOMPLETE;
 import static org.onap.so.sdncsimulator.utils.Constants.RESTCONF_CONFIG_END_POINT;
+import static org.onap.so.sdncsimulator.utils.Constants.SERVICE_DATA_VNFS_VNF;
 import static org.onap.so.sdncsimulator.utils.Constants.SERVICE_TOPOLOGY_OPERATION;
 import static org.onap.so.sdncsimulator.utils.Constants.SERVICE_TOPOLOGY_OPERATION_CACHE;
+import static org.onap.so.sdncsimulator.utils.Constants.VNF_DATA_VNF_TOPOLOGY;
 import static org.onap.so.sdncsimulator.utils.Constants.YES;
 import static org.onap.so.sdncsimulator.utils.ObjectUtils.getString;
 import static org.onap.so.sdncsimulator.utils.ObjectUtils.getStringOrNull;
 import static org.onap.so.sdncsimulator.utils.ObjectUtils.isValid;
 import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Optional;
+import javax.validation.Valid;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiInstanceReference;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiLastActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiLastRpcActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiOnapmodelinformationOnapModelInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiOperStatusData;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiOrderStatusEnumeration;
-import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestStatusEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRequestinformationRequestInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiRpcActionEnumeration;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiSdncrequestheaderSdncRequestHeader;
-import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceModelInfrastructure;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceOperationInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicedataServiceData;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiServicedataServicedataVnfs;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiServicedataServicedataVnfsVnf;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiServicedataServicedataVnfsVnfVnfData;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServiceinformationServiceInformation;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicemodelinfrastructureService;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicestatusServiceStatus;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicetopologyServiceTopology;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiServicetopologyidentifierServiceTopologyIdentifier;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfOperationInformation;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfinformationVnfInformation;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiVnfrequestinputVnfRequestInput;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiVnftopologyVnfTopology;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiVnftopologyidentifierstructureVnfTopologyIdentifierStructure;
 import org.onap.so.sdncsimulator.models.Output;
 import org.onap.so.simulator.cache.provider.AbstractCacheServiceProvider;
 import org.slf4j.Logger;
@@ -64,7 +78,6 @@ import org.springframework.stereotype.Service;
 public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServiceProvider
         implements ServiceOperationsCacheServiceProvider {
 
-
     private static final Logger LOGGER = LoggerFactory.getLogger(ServiceOperationsCacheServiceProviderimpl.class);
 
     @Autowired
@@ -85,45 +98,209 @@ public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServ
             LOGGER.info("Adding GenericResourceApiServiceOperationInformation to cache with key: {}",
                     serviceInstanceId);
 
-            final GenericResourceApiServiceModelInfrastructure serviceModelInfrastructure =
-                    new GenericResourceApiServiceModelInfrastructure();
-
-            final GenericResourceApiServicemodelinfrastructureService service = getServiceItem(input);
-            serviceModelInfrastructure.addServiceItem(service);
-            cache.put(serviceInstanceId, serviceModelInfrastructure);
+            final GenericResourceApiServicemodelinfrastructureService service =
+                    getServiceItem(input, serviceInstanceId);
+            cache.put(serviceInstanceId, service);
 
             final GenericResourceApiServicestatusServiceStatus serviceStatus = service.getServiceStatus();
 
             return new Output().ackFinalIndicator(serviceStatus.getFinalIndicator())
                     .responseCode(serviceStatus.getResponseCode()).responseMessage(serviceStatus.getResponseMessage())
                     .svcRequestId(svcRequestId).serviceResponseInformation(new GenericResourceApiInstanceReference()
-                            .instanceId(serviceInstanceId).objectPath(RESTCONF_CONFIG_END_POINT + serviceInstanceId));
+                            .instanceId(serviceInstanceId).objectPath(getObjectPath(serviceInstanceId)));
 
         }
+        LOGGER.error(
+                "Unable to add GenericResourceApiServiceOperationInformation in cache due to invalid input: {}... ",
+                input);
         return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
                 .responseMessage("Service instance not found").svcRequestId(svcRequestId);
     }
 
     @Override
-    public Optional<GenericResourceApiServiceModelInfrastructure> getGenericResourceApiServiceModelInfrastructure(
+    public Optional<GenericResourceApiServicemodelinfrastructureService> getGenericResourceApiServicemodelinfrastructureService(
             final String serviceInstanceId) {
         final Cache cache = getCache(SERVICE_TOPOLOGY_OPERATION_CACHE);
 
-        final GenericResourceApiServiceModelInfrastructure value =
-                cache.get(serviceInstanceId, GenericResourceApiServiceModelInfrastructure.class);
+        final GenericResourceApiServicemodelinfrastructureService value =
+                cache.get(serviceInstanceId, GenericResourceApiServicemodelinfrastructureService.class);
         if (value != null) {
+            LOGGER.info("Found {} in cahce for service instance id: {}", value, serviceInstanceId);
             return Optional.of(value);
         }
+        LOGGER.error("Unable to find GenericResourceApiServiceModelInfrastructure in cache for service instance id: {}",
+                serviceInstanceId);
         return Optional.empty();
     }
 
+    @Override
+    public Output putVnfOperationInformation(final GenericResourceApiVnfOperationInformation input) {
+
+        final GenericResourceApiServiceinformationServiceInformation serviceInformation = input.getServiceInformation();
+        final GenericResourceApiVnfinformationVnfInformation vnfInformation = input.getVnfInformation();
+
+        final GenericResourceApiSdncrequestheaderSdncRequestHeader requestHeader = input.getSdncRequestHeader();
+        final String svcRequestId = requestHeader != null ? requestHeader.getSvcRequestId() : null;
+
+        if (serviceInformation != null && isValid(serviceInformation.getServiceInstanceId()) && vnfInformation != null
+                && isValid(vnfInformation.getVnfId())) {
+            final String serviceInstanceId = serviceInformation.getServiceInstanceId();
+            final String vnfId = vnfInformation.getVnfId();
+            final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
+                    getGenericResourceApiServicemodelinfrastructureService(serviceInstanceId);
+            if (optional.isPresent()) {
+                final GenericResourceApiServicemodelinfrastructureService service = optional.get();
+                final GenericResourceApiServicedataServiceData serviceData = service.getServiceData();
+                if (serviceData != null) {
+                    final List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList = getVnfs(serviceData);
+                    final GenericResourceApiLastRpcActionEnumeration svcAction =
+                            GenericResourceApiLastRpcActionEnumeration.fromValue(getSvcAction(requestHeader));
+
+                    if (ifVnfNotExists(vnfId, svcAction, vnfsList)) {
+                        vnfsList.add(getGenericResourceApiServicedataVnf(serviceInstanceId, vnfId, input));
+
+                        final GenericResourceApiServicestatusServiceStatus serviceStatus = service.getServiceStatus();
+
+                        return new Output().ackFinalIndicator(serviceStatus.getFinalIndicator())
+                                .responseCode(serviceStatus.getResponseCode())
+                                .responseMessage(serviceStatus.getResponseMessage()).svcRequestId(svcRequestId)
+                                .serviceResponseInformation(new GenericResourceApiInstanceReference()
+                                        .instanceId(serviceInstanceId).objectPath(getObjectPath(serviceInstanceId)))
+                                .vnfResponseInformation(new GenericResourceApiInstanceReference().instanceId(vnfId)
+                                        .objectPath(getObjectPath(serviceInstanceId, vnfId)));
+                    }
+                    LOGGER.error("vnfId: {} already exists with SVC Action: {}", vnfId, svcAction);
+                    return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
+                            .responseMessage("vnfId: " + vnfId + " already exists").svcRequestId(svcRequestId);
+                }
+            }
+            LOGGER.error(
+                    "Unable to find existing GenericResourceApiServiceModelInfrastructure in cache using service instance id: {}",
+                    serviceInstanceId);
+
+        }
+        LOGGER.error(
+                "Unable to add GenericResourceApiServiceOperationInformation in cache due to invalid input: {}... ",
+                input);
+        return new Output().ackFinalIndicator(YES).responseCode(HttpStatus.BAD_REQUEST.toString())
+                .responseMessage("Unable to add vnf").svcRequestId(svcRequestId);
+    }
+
     @Override
     public void clearAll() {
-        clearCahce(SERVICE_TOPOLOGY_OPERATION_CACHE);
+        clearCache(SERVICE_TOPOLOGY_OPERATION_CACHE);
+    }
+
+    private String getObjectPath(final String serviceInstanceId, final String vnfId) {
+        return getObjectPath(serviceInstanceId) + SERVICE_DATA_VNFS_VNF + vnfId + VNF_DATA_VNF_TOPOLOGY;
+    }
+
+    private String getObjectPath(final String serviceInstanceId) {
+        return RESTCONF_CONFIG_END_POINT + serviceInstanceId;
+    }
+
+
+    private boolean ifVnfNotExists(final String vnfId, final GenericResourceApiLastRpcActionEnumeration svcAction,
+            final List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList) {
+        final Optional<GenericResourceApiServicedataServicedataVnfsVnf> optional = getExistingVnf(vnfId, vnfsList);
+        if (optional.isPresent()) {
+            final GenericResourceApiServicedataServicedataVnfsVnf existingVnf = optional.get();
+            final GenericResourceApiServicedataServicedataVnfsVnfVnfData vnfData = existingVnf.getVnfData();
+
+            if (vnfData != null && vnfData.getVnfLevelOperStatus() != null
+                    && vnfData.getVnfLevelOperStatus().getLastRpcAction() != null) {
+                final GenericResourceApiLastRpcActionEnumeration existingVnflastRpcAction =
+                        vnfData.getVnfLevelOperStatus().getLastRpcAction();
+                if (existingVnflastRpcAction.equals(svcAction)) {
+                    LOGGER.error("Found vnf with id: {} and LastRpcAction: {} same as SvcAction:  {}", vnfId,
+                            existingVnflastRpcAction, svcAction);
+                    return false;
+                }
+                LOGGER.warn("Will remove and replace existing vnf with id: {} as SvcAction is changed from {} to {}",
+                        vnfId, existingVnflastRpcAction, svcAction);
+                vnfsList.removeIf(vnf -> vnf.getVnfId() != null && vnf.getVnfId().equals(vnfId));
+
+            }
+        }
+
+        return true;
+    }
+
+    private Optional<GenericResourceApiServicedataServicedataVnfsVnf> getExistingVnf(final String vnfId,
+            final List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList) {
+        final Optional<GenericResourceApiServicedataServicedataVnfsVnf> optional =
+                vnfsList.stream().filter(vnf -> vnf.getVnfId() != null && vnf.getVnfId().equals(vnfId)).findFirst();
+        return optional;
+    }
+
+    private List<GenericResourceApiServicedataServicedataVnfsVnf> getVnfs(
+            final GenericResourceApiServicedataServiceData serviceData) {
+        GenericResourceApiServicedataServicedataVnfs vnfs = serviceData.getVnfs();
+        if (vnfs == null) {
+            vnfs = new GenericResourceApiServicedataServicedataVnfs();
+            serviceData.setVnfs(vnfs);
+        }
+
+        List<GenericResourceApiServicedataServicedataVnfsVnf> vnfsList = vnfs.getVnf();
+        if (vnfsList == null) {
+            vnfsList = new ArrayList<>();
+            vnfs.setVnf(vnfsList);
+        }
+        return vnfsList;
+    }
+
+    private GenericResourceApiServicedataServicedataVnfsVnf getGenericResourceApiServicedataVnf(
+            final String serviceInstanceId, final String vnfId, final GenericResourceApiVnfOperationInformation input) {
+        return new GenericResourceApiServicedataServicedataVnfsVnf().vnfId(vnfId).vnfData(getVnfData(input));
+    }
+
+    private GenericResourceApiServicedataServicedataVnfsVnfVnfData getVnfData(
+            final GenericResourceApiVnfOperationInformation input) {
+
+        final GenericResourceApiServicedataServicedataVnfsVnfVnfData vnfData =
+                new GenericResourceApiServicedataServicedataVnfsVnfVnfData();
+
+        vnfData.vnfLevelOperStatus(
+                getServiceLevelOperStatus(PENDINGCREATE, input.getRequestInformation(), input.getSdncRequestHeader()));
+        vnfData.serviceInformation(input.getServiceInformation());
+        vnfData.sdncRequestHeader(input.getSdncRequestHeader());
+        vnfData.vnfInformation(input.getVnfInformation());
+        vnfData.requestInformation(input.getRequestInformation());
+        vnfData.vnfRequestInput(input.getVnfRequestInput());
+
+        vnfData.vnfTopology(getVnfTopology(input.getVnfInformation(), input.getVnfRequestInput()));
+
+        return vnfData;
+    }
+
+    private GenericResourceApiVnftopologyVnfTopology getVnfTopology(
+            final GenericResourceApiVnfinformationVnfInformation vnfInformation,
+            final GenericResourceApiVnfrequestinputVnfRequestInput vnfRequestInput) {
+
+        final GenericResourceApiVnftopologyVnfTopology apiVnftopologyVnfTopology =
+                new GenericResourceApiVnftopologyVnfTopology();
+
+        if (vnfInformation != null) {
+            apiVnftopologyVnfTopology.onapModelInformation(vnfInformation.getOnapModelInformation());
+            apiVnftopologyVnfTopology.vnfTopologyIdentifierStructure(getTopologyIdentifierStructure(vnfInformation));
+        }
+        if (vnfRequestInput != null) {
+            apiVnftopologyVnfTopology.tenant(vnfRequestInput.getTenant());
+            apiVnftopologyVnfTopology.aicClli(vnfRequestInput.getAicClli());
+            apiVnftopologyVnfTopology.aicCloudRegion(vnfRequestInput.getAicCloudRegion());
+        }
+        return apiVnftopologyVnfTopology;
+    }
+
+    private GenericResourceApiVnftopologyidentifierstructureVnfTopologyIdentifierStructure getTopologyIdentifierStructure(
+            @Valid final GenericResourceApiVnfinformationVnfInformation vnfInformation) {
+        return new GenericResourceApiVnftopologyidentifierstructureVnfTopologyIdentifierStructure()
+                .vnfId(vnfInformation.getVnfId()).vnfName(vnfInformation.getVnfName())
+                .vnfType(vnfInformation.getVnfType());
     }
 
     private GenericResourceApiServicemodelinfrastructureService getServiceItem(
-            final GenericResourceApiServiceOperationInformation input) {
+            final GenericResourceApiServiceOperationInformation input, final String serviceInstanceId) {
 
         final GenericResourceApiServicedataServiceData apiServicedataServiceData =
                 new GenericResourceApiServicedataServiceData();
@@ -140,7 +317,7 @@ public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServ
                         HttpStatus.OK.toString());
 
         return new GenericResourceApiServicemodelinfrastructureService().serviceData(apiServicedataServiceData)
-                .serviceStatus(serviceStatus);
+                .serviceStatus(serviceStatus).serviceInstanceId(serviceInstanceId);
     }
 
     private String getAction(final GenericResourceApiRequestinformationRequestInformation input) {
@@ -156,17 +333,21 @@ public class ServiceOperationsCacheServiceProviderimpl extends AbstractCacheServ
         return new GenericResourceApiServicestatusServiceStatus().finalIndicator(YES)
                 .rpcAction(GenericResourceApiRpcActionEnumeration.fromValue(rpcAction))
                 .rpcName(SERVICE_TOPOLOGY_OPERATION).responseTimestamp(LocalDateTime.now().toString())
-                .responseCode(responseCode).requestStatus(GenericResourceApiRequestStatusEnumeration.SYNCCOMPLETE)
-                .responseMessage("").action(action);
+                .responseCode(responseCode).requestStatus(SYNCCOMPLETE).responseMessage("").action(action);
     }
 
     private GenericResourceApiOperStatusData getServiceLevelOperStatus(
             final GenericResourceApiServiceOperationInformation input) {
-        return new GenericResourceApiOperStatusData().orderStatus(GenericResourceApiOrderStatusEnumeration.CREATED)
-                .lastAction(GenericResourceApiLastActionEnumeration
-                        .fromValue(getRequestAction(input.getRequestInformation())))
-                .lastRpcAction(GenericResourceApiLastRpcActionEnumeration
-                        .fromValue(getSvcAction(input.getSdncRequestHeader())));
+        return getServiceLevelOperStatus(CREATED, input.getRequestInformation(), input.getSdncRequestHeader());
+    }
+
+    private GenericResourceApiOperStatusData getServiceLevelOperStatus(
+            final GenericResourceApiOrderStatusEnumeration statusEnumeration,
+            final GenericResourceApiRequestinformationRequestInformation requestInformation,
+            final GenericResourceApiSdncrequestheaderSdncRequestHeader sdncRequestHeader) {
+        return new GenericResourceApiOperStatusData().orderStatus(statusEnumeration)
+                .lastAction(GenericResourceApiLastActionEnumeration.fromValue(getRequestAction(requestInformation)))
+                .lastRpcAction(GenericResourceApiLastRpcActionEnumeration.fromValue(getSvcAction(sdncRequestHeader)));
     }
 
     private String getRequestAction(final GenericResourceApiRequestinformationRequestInformation input) {
index 2d774ed..21d0d7a 100644 (file)
@@ -39,5 +39,9 @@ public class Constants {
 
     public static final String RESTCONF_CONFIG_END_POINT = "restconf/config/GENERIC-RESOURCE-API:services/service/";
 
+    public static final String VNF_DATA_VNF_TOPOLOGY = "/vnf-data/vnf-topology/";
+
+    public static final String SERVICE_DATA_VNFS_VNF = "/service-data/vnfs/vnf/";
+
     private Constants() {}
 }
index af46ab4..b1ede08 100644 (file)
@@ -22,15 +22,19 @@ package org.onap.so.sdncsimulator.controller;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.Base64;
+import static org.onap.so.sdncsimulator.controller.TestUtils.getInvalidRequestInput;
+import static org.onap.so.sdncsimulator.controller.TestUtils.getRequestInput;
+import static org.onap.so.sdncsimulator.controller.TestUtils.getVnfRequestInput;
+import static org.onap.so.sdncsimulator.controller.TestUtils.getVnfRequestWithSvcActionActivateInput;
+import java.util.Optional;
 import org.junit.After;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.onap.sdnc.northbound.client.model.GenericResourceApiInstanceReference;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiLastRpcActionEnumeration;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiOperStatusData;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiServicedataServicedataVnfsVnf;
+import org.onap.sdnc.northbound.client.model.GenericResourceApiServicemodelinfrastructureService;
 import org.onap.so.sdncsimulator.models.InputRequest;
 import org.onap.so.sdncsimulator.models.Output;
 import org.onap.so.sdncsimulator.models.OutputRequest;
@@ -43,12 +47,10 @@ import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
 import org.springframework.boot.test.web.client.TestRestTemplate;
 import org.springframework.boot.web.server.LocalServerPort;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.core.io.ClassPathResource;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
 import org.springframework.http.ResponseEntity;
 import org.springframework.test.context.ActiveProfiles;
 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
@@ -65,11 +67,15 @@ public class OperationsControllerTest {
 
     private static final String SVC_REQUEST_ID = "04fc9f50-87b8-430d-a232-ef24bd6c4150";
 
+    private static final String VNF_SVC_REQUEST_ID = "8fd2622b-01fc-424d-bfc8-f48bcd64e546";
+
     private static final String SERVICE_INSTANCE_ID = "ccece8fe-13da-456a-baf6-41b3a4a2bc2b";
 
     private static final String SERVICE_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:service-topology-operation/";
 
-    private static final String PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U";
+    private static final String VNF_TOPOLOGY_OPERATION_URL = "/GENERIC-RESOURCE-API:vnf-topology-operation/";
+
+    private static final String VNF_INSTANCE_ID = "dfd02fb5-d7fb-4aac-b3c4-cd6b60058701";
 
     @LocalServerPort
     private int port;
@@ -108,8 +114,16 @@ public class OperationsControllerTest {
         final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
         assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
         assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
-        assertTrue(
-                cacheServiceProvider.getGenericResourceApiServiceModelInfrastructure(SERVICE_INSTANCE_ID).isPresent());
+        final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
+                cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
+        assertTrue(optional.isPresent());
+
+        final GenericResourceApiServicemodelinfrastructureService service = optional.get();
+        assertNotNull(service.getServiceInstanceId());
+        assertEquals(SERVICE_INSTANCE_ID, service.getServiceInstanceId());
+        assertNotNull(service.getServiceData());
+        assertNotNull(service.getServiceStatus());
+
     }
 
     @Test
@@ -143,39 +157,166 @@ public class OperationsControllerTest {
 
     }
 
-    private HttpHeaders getHttpHeaders() {
-        return getHttpHeaders(userCredentials.getUsers().iterator().next().getUsername());
-    }
+    @Test
+    public void test_postVnfOperationInformation_successfullyAddToExistingServiceInCache() throws Exception {
+        final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
+        final ResponseEntity<OutputRequest> responseEntity =
+                restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
 
-    private String getUrl() {
-        return "http://localhost:" + port + Constants.OPERATIONS_URL + SERVICE_TOPOLOGY_OPERATION_URL;
-    }
+        assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
+
+        final HttpEntity<?> httpVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
+        final ResponseEntity<OutputRequest> responseVnfEntity =
+                restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
+        assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
+        assertTrue(responseVnfEntity.hasBody());
+
+        final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
+        assertNotNull(actualOutputRequest);
+        assertNotNull(actualOutputRequest.getOutput());
 
-    private String getRequestInput() throws IOException {
-        return getFileAsString(getFile("test-data/input.json").toPath());
+        final Output actualObject = actualOutputRequest.getOutput();
+
+        assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
+        assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
+        assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
+        assertNotNull(actualObject.getServiceResponseInformation());
+
+        final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
+        assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
+        assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
+        final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
+                cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
+        assertTrue(optional.isPresent());
+
+        final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
+        assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
+
+        final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
+                cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
+        assertTrue(serviceOptional.isPresent());
+
+        final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
+        assertNotNull(service.getServiceInstanceId());
+        assertNotNull(service.getServiceData().getVnfs().getVnf());
+        assertNotNull(service.getServiceData());
+        assertNotNull(service.getServiceData().getVnfs());
+        assertNotNull(service.getServiceData().getVnfs().getVnf());
+        assertEquals(1, service.getServiceData().getVnfs().getVnf().size());
+        final GenericResourceApiServicedataServicedataVnfsVnf vnf = service.getServiceData().getVnfs().getVnf().get(0);
+        assertNotNull(vnf.getVnfId());
+        assertEquals(VNF_INSTANCE_ID, vnf.getVnfId());
+        assertNotNull(vnf.getVnfData());
     }
 
-    private String getInvalidRequestInput() throws IOException {
-        return getFileAsString(getFile("test-data/InvalidInput.json").toPath());
+    @Test
+    public void test_postSameVnfOperationInformationTwice_ShouldReturnbadRequest() throws Exception {
+
+        final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
+        final ResponseEntity<OutputRequest> responseEntity =
+                restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
+
+        assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
+
+        final HttpEntity<?> httpVnfEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
+        final ResponseEntity<OutputRequest> responseVnfEntity =
+                restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
+        assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
+        assertTrue(responseVnfEntity.hasBody());
+
+        final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
+        assertNotNull(actualOutputRequest);
+        assertNotNull(actualOutputRequest.getOutput());
+
+        final ResponseEntity<OutputRequest> badResponse =
+                restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
+
+        final OutputRequest badOutputRequest = badResponse.getBody();
+        assertNotNull(badOutputRequest);
+
+        final Output actualObject = badOutputRequest.getOutput();
+        assertNotNull(actualObject);
+        assertEquals(HttpStatus.BAD_REQUEST.toString(), actualObject.getResponseCode());
+        assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
+        assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
+
     }
 
-    private String getFileAsString(final Path path) throws IOException {
-        return new String(Files.readAllBytes(path));
+    @Test
+    public void test_postVnfOperationInformationWithSvcActionChanged_successfullyAddToExistingServiceInCache()
+            throws Exception {
+        final HttpEntity<?> httpEntity = new HttpEntity<>(getRequestInput(), getHttpHeaders());
+        final ResponseEntity<OutputRequest> responseEntity =
+                restTemplate.exchange(getUrl(), HttpMethod.POST, httpEntity, OutputRequest.class);
+
+        assertEquals(HttpStatus.OK, responseEntity.getStatusCode());
+
+        final HttpEntity<?> httpVnfWithSvcActionAssignEntity = new HttpEntity<>(getVnfRequestInput(), getHttpHeaders());
+        final ResponseEntity<OutputRequest> response = restTemplate.exchange(getVnfUrl(), HttpMethod.POST,
+                httpVnfWithSvcActionAssignEntity, OutputRequest.class);
+        assertEquals(HttpStatus.OK, response.getStatusCode());
+        assertTrue(response.hasBody());
+
+        final HttpEntity<?> httpVnfEntity =
+                new HttpEntity<>(getVnfRequestWithSvcActionActivateInput(), getHttpHeaders());
+        final ResponseEntity<OutputRequest> responseVnfEntity =
+                restTemplate.exchange(getVnfUrl(), HttpMethod.POST, httpVnfEntity, OutputRequest.class);
+        assertEquals(HttpStatus.OK, responseVnfEntity.getStatusCode());
+        assertTrue(responseVnfEntity.hasBody());
+
+        final OutputRequest actualOutputRequest = responseVnfEntity.getBody();
+        assertNotNull(actualOutputRequest);
+        assertNotNull(actualOutputRequest.getOutput());
+
+        final Output actualObject = actualOutputRequest.getOutput();
+
+        assertEquals(HttpStatus.OK.toString(), actualObject.getResponseCode());
+        assertEquals(Constants.YES, actualObject.getAckFinalIndicator());
+        assertEquals(VNF_SVC_REQUEST_ID, actualObject.getSvcRequestId());
+        assertNotNull(actualObject.getServiceResponseInformation());
+
+        final GenericResourceApiInstanceReference acutalReference = actualObject.getServiceResponseInformation();
+        assertEquals(Constants.RESTCONF_CONFIG_END_POINT + SERVICE_INSTANCE_ID, acutalReference.getObjectPath());
+        assertEquals(SERVICE_INSTANCE_ID, acutalReference.getInstanceId());
+        final Optional<GenericResourceApiServicemodelinfrastructureService> optional =
+                cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
+        assertTrue(optional.isPresent());
+
+        final GenericResourceApiInstanceReference actualvnfInformation = actualObject.getVnfResponseInformation();
+        assertEquals(VNF_INSTANCE_ID, actualvnfInformation.getInstanceId());
+
+        final Optional<GenericResourceApiServicemodelinfrastructureService> serviceOptional =
+                cacheServiceProvider.getGenericResourceApiServicemodelinfrastructureService(SERVICE_INSTANCE_ID);
+        assertTrue(serviceOptional.isPresent());
+
+        final GenericResourceApiServicemodelinfrastructureService service = serviceOptional.get();
+        assertNotNull(service.getServiceInstanceId());
+        assertNotNull(service.getServiceData().getVnfs().getVnf());
+        assertNotNull(service.getServiceData());
+        assertNotNull(service.getServiceData().getVnfs());
+        assertNotNull(service.getServiceData().getVnfs().getVnf());
+        assertEquals(1, service.getServiceData().getVnfs().getVnf().size());
+        final GenericResourceApiServicedataServicedataVnfsVnf vnf = service.getServiceData().getVnfs().getVnf().get(0);
+        assertNotNull(vnf.getVnfId());
+        assertEquals(VNF_INSTANCE_ID, vnf.getVnfId());
+        assertNotNull(vnf.getVnfData());
+        GenericResourceApiOperStatusData vnfLevelOperStatus = vnf.getVnfData().getVnfLevelOperStatus();
+        assertNotNull(vnfLevelOperStatus);
+        assertEquals(GenericResourceApiLastRpcActionEnumeration.ACTIVATE, vnfLevelOperStatus.getLastRpcAction());
+
     }
 
-    private File getFile(final String file) throws IOException {
-        return new ClassPathResource(file).getFile();
+
+    private HttpHeaders getHttpHeaders() {
+        return TestUtils.getHttpHeaders(userCredentials.getUsers().iterator().next().getUsername());
     }
 
-    private HttpHeaders getHttpHeaders(final String username) {
-        final HttpHeaders requestHeaders = new HttpHeaders();
-        requestHeaders.add("Authorization", getBasicAuth(username));
-        requestHeaders.setContentType(MediaType.APPLICATION_JSON);
-        return requestHeaders;
+    private String getUrl() {
+        return "http://localhost:" + port + Constants.OPERATIONS_URL + SERVICE_TOPOLOGY_OPERATION_URL;
     }
 
-    private String getBasicAuth(final String username) {
-        return "Basic " + new String(Base64.getEncoder().encodeToString((username + ":" + PASSWORD).getBytes()));
+    private String getVnfUrl() {
+        return "http://localhost:" + port + Constants.OPERATIONS_URL + VNF_TOPOLOGY_OPERATION_URL;
     }
 
     @After
diff --git a/plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/java/org/onap/so/sdncsimulator/controller/TestUtils.java b/plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/java/org/onap/so/sdncsimulator/controller/TestUtils.java
new file mode 100644 (file)
index 0000000..220ec7d
--- /dev/null
@@ -0,0 +1,76 @@
+/*-
+ * ============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=========================================================
+ */
+package org.onap.so.sdncsimulator.controller;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.Base64;
+import org.springframework.core.io.ClassPathResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+
+/**
+ * @author Waqas Ikram (waqas.ikram@est.tech)
+ *
+ */
+public class TestUtils {
+    private static final String PASSWORD = "Kp8bJ4SXszM0WXlhak3eHlcse2gAw84vaoGGmJvUy2U";
+
+
+    private TestUtils() {}
+
+    public static String getRequestInput() throws IOException {
+        return getFileAsString(getFile("test-data/input.json").toPath());
+    }
+
+    public static String getVnfRequestInput() throws IOException {
+        return getFileAsString(getFile("test-data/vnfInput.json").toPath());
+    }
+    
+    public static String getVnfRequestWithSvcActionActivateInput() throws IOException {
+        return getFileAsString(getFile("test-data/activateVnfInput.json").toPath());
+    }
+
+    public static String getInvalidRequestInput() throws IOException {
+        return getFileAsString(getFile("test-data/InvalidInput.json").toPath());
+    }
+
+    public static String getFileAsString(final Path path) throws IOException {
+        return new String(Files.readAllBytes(path));
+    }
+
+    public static File getFile(final String file) throws IOException {
+        return new ClassPathResource(file).getFile();
+    }
+
+    public static HttpHeaders getHttpHeaders(final String username) {
+        final HttpHeaders requestHeaders = new HttpHeaders();
+        requestHeaders.add("Authorization", getBasicAuth(username));
+        requestHeaders.setContentType(MediaType.APPLICATION_JSON);
+        return requestHeaders;
+    }
+
+    public static String getBasicAuth(final String username) {
+        return "Basic " + new String(Base64.getEncoder().encodeToString((username + ":" + PASSWORD).getBytes()));
+    }
+
+}
diff --git a/plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/resources/test-data/activateVnfInput.json b/plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/resources/test-data/activateVnfInput.json
new file mode 100644 (file)
index 0000000..a3adf0b
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "input": {
+        "request-information": {
+            "request-action": "CreateVnfInstance",
+            "source": "MSO",
+            "request-id": "1a545ea9-2a5e-4df9-9c73-529b1d0b2012"
+        },
+        "sdnc-request-header": {
+            "svc-request-id": "8fd2622b-01fc-424d-bfc8-f48bcd64e546",
+            "svc-notification-url": "http://so-bpmn-infra.onap:8081/mso/WorkflowMessage/SDNCCallback/fd40ea09-3245-476a-b6ff-58cb042edb9d",
+            "svc-action": "activate"
+        },
+        "service-information": {
+            "onap-model-information": {
+                "model-name": "Sol004Zip4Service",
+                "model-version": "1.0",
+                "model-uuid": "99d59273-4450-4034-9141-027f0c1a807a",
+                "model-invariant-uuid": "51672777-9b8d-4e5e-b488-5f9092e03a82"
+            },
+            "subscription-service-type": "vCPE",
+            "service-id": "ccece8fe-13da-456a-baf6-41b3a4a2bc2b",
+            "global-customer-id": "NordixDemoCustomer",
+            "service-instance-id": "ccece8fe-13da-456a-baf6-41b3a4a2bc2b"
+        },
+        "vnf-information": {
+            "onap-model-information": {
+                "model-name": "Sol004Zip3VSP",
+                "model-version": "1.0",
+                "model-customization-uuid": "50a90cd7-a84e-4ee1-b5ba-bfa5a26f5e15",
+                "model-uuid": "84b9649a-4eb9-4967-9abe-e8702f55518b",
+                "model-invariant-uuid": "b0f14066-2b65-40d2-b5a4-c8f2116fb5fc"
+            },
+            "vnf-id": "dfd02fb5-d7fb-4aac-b3c4-cd6b60058701",
+            "vnf-name": "EsyVnfInstantiationTest2",
+            "vnf-type": "Sol004Zip4Service/Sol004Zip3VSP 0"
+        },
+        "vnf-request-input": {
+            "aic-cloud-region": "nordixcloud",
+            "cloud-owner": "CloudOwner",
+            "tenant": "693c7729b2364a26a3ca602e6f66187d",
+            "vnf-network-instance-group-ids": [],
+            "vnf-input-parameters": {},
+            "vnf-name": "EsyVnfInstantiationTest2"
+        }
+    }
+}
\ No newline at end of file
diff --git a/plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/resources/test-data/vnfInput.json b/plans/so/integration-etsi-testing/so-simulators/sdnc-simulator/src/test/resources/test-data/vnfInput.json
new file mode 100644 (file)
index 0000000..01a2861
--- /dev/null
@@ -0,0 +1,46 @@
+{
+    "input": {
+        "request-information": {
+            "request-action": "CreateVnfInstance",
+            "source": "MSO",
+            "request-id": "1a545ea9-2a5e-4df9-9c73-529b1d0b2012"
+        },
+        "sdnc-request-header": {
+            "svc-request-id": "8fd2622b-01fc-424d-bfc8-f48bcd64e546",
+            "svc-notification-url": "http://so-bpmn-infra.onap:8081/mso/WorkflowMessage/SDNCCallback/fd40ea09-3245-476a-b6ff-58cb042edb9d",
+            "svc-action": "assign"
+        },
+        "service-information": {
+            "onap-model-information": {
+                "model-name": "Sol004Zip4Service",
+                "model-version": "1.0",
+                "model-uuid": "99d59273-4450-4034-9141-027f0c1a807a",
+                "model-invariant-uuid": "51672777-9b8d-4e5e-b488-5f9092e03a82"
+            },
+            "subscription-service-type": "vCPE",
+            "service-id": "ccece8fe-13da-456a-baf6-41b3a4a2bc2b",
+            "global-customer-id": "NordixDemoCustomer",
+            "service-instance-id": "ccece8fe-13da-456a-baf6-41b3a4a2bc2b"
+        },
+        "vnf-information": {
+            "onap-model-information": {
+                "model-name": "Sol004Zip3VSP",
+                "model-version": "1.0",
+                "model-customization-uuid": "50a90cd7-a84e-4ee1-b5ba-bfa5a26f5e15",
+                "model-uuid": "84b9649a-4eb9-4967-9abe-e8702f55518b",
+                "model-invariant-uuid": "b0f14066-2b65-40d2-b5a4-c8f2116fb5fc"
+            },
+            "vnf-id": "dfd02fb5-d7fb-4aac-b3c4-cd6b60058701",
+            "vnf-name": "EsyVnfInstantiationTest2",
+            "vnf-type": "Sol004Zip4Service/Sol004Zip3VSP 0"
+        },
+        "vnf-request-input": {
+            "aic-cloud-region": "nordixcloud",
+            "cloud-owner": "CloudOwner",
+            "tenant": "693c7729b2364a26a3ca602e6f66187d",
+            "vnf-network-instance-group-ids": [],
+            "vnf-input-parameters": {},
+            "vnf-name": "EsyVnfInstantiationTest2"
+        }
+    }
+}
\ No newline at end of file
index 61edc7d..e92b731 100755 (executable)
@@ -28,12 +28,23 @@ ENV_FILE=$CONFIG_DIR/env
 TEMP_DIR_PATH=$SCRIPT_HOME/temp
 TEST_LAB_DIR_PATH=$TEMP_DIR_PATH/test_lab
 DOCKER_COMPOSE_FILE_PATH=$SCRIPT_HOME/docker-compose.yml
+DOCKER_COMPOSE_LOCAL_OVERRIDE_FILE=$SCRIPT_HOME/docker-compose.local.yml
 
 echo "Running $SCRIPT_HOME/$SCRIPT_NAME ..."
 export $(egrep -v '^#' $ENV_FILE | xargs)
 export TEST_LAB_DIR=$TEST_LAB_DIR_PATH
 export CONFIG_DIR_PATH=$CONFIG_DIR
 
-docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME down
+if [ "$DOCKER_ENVIRONMENT" == "remote" ]; then
+  echo "Tearing down docker containers from remote images ..."
+  docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME down
+elif [ "$DOCKER_ENVIRONMENT" == "local" ]; then
+  echo "Tearing down docker containers from local images ..."
+  docker-compose -f $DOCKER_COMPOSE_FILE_PATH -f $DOCKER_COMPOSE_LOCAL_OVERRIDE_FILE -p $PROJECT_NAME down
+else
+  echo "Couldn't find valid property for DOCKER_ENVIRONMENT in $ENV_FILE."
+  echo "Attempting normal teardown ..."
+  docker-compose -f $DOCKER_COMPOSE_FILE_PATH -p $PROJECT_NAME down
+fi
 
 echo "Finished executing $SCRIPT_HOME/$SCRIPT_NAME"
diff --git a/plans/so/integration-testing/.gitignore b/plans/so/integration-testing/.gitignore
new file mode 100644 (file)
index 0000000..0464a8d
--- /dev/null
@@ -0,0 +1,2 @@
+test_lab
+**/test_lab/**
index 7273c4e..cca52f9 100644 (file)
@@ -29,10 +29,11 @@ services:
       - APP=catalog-db-adapter
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
+      - DB_PORT=3306
+      - DB_USERNAME=so_user
+      - DB_PASSWORD=so_User123
+      - DB_ADMIN_USERNAME=so_admin
+      - DB_ADMIN_PASSWORD=so_Admin123
     hostname:
       catalog-db-adapter.so.testlab.onap.org
     depends_on:
@@ -62,10 +63,11 @@ services:
       - APP=request-db-adapter
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
+      - DB_PORT=3306
+      - DB_USERNAME=so_user
+      - DB_PASSWORD=so_User123
+      - DB_ADMIN_USERNAME=so_admin
+      - DB_ADMIN_PASSWORD=so_Admin123
     hostname:
       request-db-adapter.so.testlab.onap.org
     depends_on:
@@ -96,10 +98,6 @@ services:
       - APP=sdnc-adapter
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
     hostname:
       sdnc-adapter.so.testlab.onap.org
     depends_on:
@@ -131,10 +129,11 @@ services:
       - APP=openstack-adapter
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
+      - DB_PORT=3306
+      - DB_USERNAME=so_user
+      - DB_PASSWORD=so_User123
+      - DB_ADMIN_USERNAME=so_admin
+      - DB_ADMIN_PASSWORD=so_Admin123
     hostname:
       openstack-adapter.so.testlab.onap.org
     depends_on:
@@ -166,10 +165,11 @@ services:
       - APP=vfc-adapter
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
+      - DB_PORT=3306
+      - DB_USERNAME=so_user
+      - DB_PASSWORD=so_User123
+      - DB_ADMIN_USERNAME=so_admin
+      - DB_ADMIN_PASSWORD=so_Admin123
     hostname:
       vfc-adapter.so.testlab.onap.org
     depends_on:
@@ -201,10 +201,11 @@ services:
       - APP=sdc-controller
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
+      - DB_PORT=3306
+      - DB_USERNAME=so_user
+      - DB_PASSWORD=so_User123
+      - DB_ADMIN_USERNAME=so_admin
+      - DB_ADMIN_PASSWORD=so_Admin123
     hostname:
       sdc-controller.so.testlab.onap.org
     depends_on:
@@ -236,10 +237,11 @@ services:
       - APP=bpmn-infra
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
+      - DB_PORT=3306
+      - DB_USERNAME=so_user
+      - DB_PASSWORD=so_User123
+      - DB_ADMIN_USERNAME=so_admin
+      - DB_ADMIN_PASSWORD=so_Admin123
     hostname:
       bpmn-infra.so.testlab.onap.org
     depends_on:
@@ -271,10 +273,11 @@ services:
       - APP=api-handler-infra
       - JVM_ARGS=-Xms64m -Xmx512m
       - DB_HOST=mariadb
-#     - KEYSTORE=msoClientKeyStore-onapheat.jks
-#     - KEYSTORE_PASSWORD=password
-#     - TRUSTSTORE=msoTrustStore.jks
-#     - TRUSTSTORE_PASSWORD=password
+      - DB_PORT=3306
+      - DB_USERNAME=so_user
+      - DB_PASSWORD=so_User123
+      - DB_ADMIN_USERNAME=so_admin
+      - DB_ADMIN_PASSWORD=so_Admin123
     hostname:
       api-handler-infra.so.testlab.onap.org
     depends_on:
index 043292c..e7457ad 100755 (executable)
@@ -67,13 +67,8 @@ export TESTOPTIONS="${2}"
 
 TESTPLANDIR=${WORKSPACE}/${TESTPLAN}
 
-# Assume that if env.properties is set, installation prerequirements are fulfilled
-# env.properties needs to be sourced for ROBOT_VENV
-if [ -f ${WORKSPACE}/env.properties ]; then
-    source ${WORKSPACE}/env.properties
-else
-    source ${WORKSPACE}/prepare-csit.sh
-fi
+# Run installation of prerequired libraries
+source ${WORKSPACE}/prepare-csit.sh
 
 # Activate the virtualenv containing all the required libraries installed by prepare-csit.sh
 source "${ROBOT_VENV}/bin/activate"
index 5970ab2..0c30b26 100755 (executable)
@@ -35,10 +35,8 @@ git clone --depth 1 http://gerrit.onap.org/r/clamp -b $GERRIT_BRANCH
 cd clamp/extra/docker/clamp/
 
 # Pull the Clamp docker image from nexus instead of local image by default in the docker-compose.yml
-sed -i '/image: onap\/clamp/c\    image: nexus3.onap.org:10001\/onap\/clamp:4.0-STAGING-latest' docker-compose.yml
-
-# Change config to take third_party_proxy:8085 for SDC, Policy and DCAE simulator
-sed -i 's/}/,\"clamp.config.policy.pdpUrl1\":\"http:\/\/third_party_proxy:8085\/pdp\/ , testpdp, alpha123\",\"clamp.config.policy.pdpUrl2\":\"http:\/\/third_party_proxy:8085\/pdp\/ , testpdp, alpha123\",\"clamp.config.policy.papUrl\":\"http:\/\/third_party_proxy:8085\/pap\/ , testpap, alpha123\",\"clamp.config.policy.clientId\":\"python\",\"clamp.config.policy.clientKey\":\"dGVzdA==\",\"clamp.config.sdc.catalog.url\":\"http:\/\/third_party_proxy:8085\/sdc\/v1\/catalog\/\",\"clamp.config.sdc.hostUrl\":\"http:\/\/third_party_proxy:8085\",\"clamp.config.sdc.serviceUrl\":\"http:\/\/third_party_proxy:8085\/sdc\/v1\/catalog\/services\",\"clamp.config.dcae.inventory.url\":\"http:\/\/third_party_proxy:8085\",\"clamp.config.dcae.dispatcher.url\":\"http:\/\/third_party_proxy:8085\",\"spring.profiles.active\":\"clamp-default,clamp-default-user,clamp-sdc-controller\",\"server.ssl.client-auth\":\"want\"}/g' clamp.env
+sed -i '/image: onap\/clamp-backend/c\    image: nexus3.onap.org:10001\/onap\/clamp-backend:4.1-STAGING-latest' docker-compose.yml
+sed -i '/image: onap\/clamp-frontend/c\    image: nexus3.onap.org:10001\/onap\/clamp-frontend:4.1-STAGING-latest' docker-compose.yml
 
 # Add the sql to create template so it is played by docker-compose later
 cp ../../../src/test/resources/sql/loop-examples.sql ../../sql/bulkload/
index 31eb756..bc79678 100755 (executable)
@@ -19,8 +19,9 @@
 
 echo "This is ${WORKSPACE}/scripts/clamp/kill_and_remove_clamp_and_db_containers.sh"
 
-kill-instance.sh clamp_clamp_1
+kill-instance.sh clamp_clamp-backend_1
+kill-instance.sh clamp_clamp-frontend_1
 kill-instance.sh clamp_db_1
-kill-instance.sh clamp_third_party_proxy_1
+kill-instance.sh clamp_third-party-proxy_1
 
 # $WORKSPACE/archives/clamp-clone deleted with archives folder when tests starts so we keep it at the end for debugging
index 0391934..0e7c34e 100755 (executable)
@@ -1,11 +1,15 @@
 #!/bin/bash
-
 # Kill dfc and all simulator
 
-docker kill dfc_app
-docker kill dfc_dr-sim
-docker kill dfc_dr-redir-sim
-docker kill dfc_mr-sim
-docker kill dfc_sftp-server
-docker kill dfc_ftpes-server-vsftpd
+running_containers=$(docker ps --filter name=dfc_ -q)
+
+
+if [ -z "$running_containers" ]
+then
+    echo "No container requires termination"
+else
+    echo "Stopping and removing containers"
+    docker stop $running_containers
+    docker rm $running_containers
+fi
 
index 39f2d0d..491b640 100755 (executable)
@@ -1,4 +1,4 @@
 #!/bin/bash
 
 
-docker kill dfc_app
\ No newline at end of file
+docker kill dfc_app0
\ No newline at end of file
index 8478bcb..c79467a 100755 (executable)
@@ -1,10 +1,10 @@
 #!/bin/bash
 
-#Restart DFC app 
+#Restart DFC app
 
-docker restart dfc_app
+docker restart dfc_app0
 
-DFC_APP="$(docker ps -q --filter='name=dfc_app')"
+DFC_APP="$(docker ps -q --filter='name=dfc_app0')"
 
 
 #Wait for initialization of docker container for dfc app
index 4bec4ff..c63eaf6 100755 (executable)
@@ -1,20 +1,25 @@
 #!/bin/bash
 
-#Start DFC app 
+set -x
 
-docker-compose up -d 
+#Start DFC app
 
-DFC_APP="$(docker ps -q --filter='name=dfc_app')"
+DOCKER_SIM_NWNAME="dfcnet"
+echo "Creating docker network $DOCKER_SIM_NWNAME, if needed"
+docker network ls| grep $DOCKER_SIM_NWNAME > /dev/null || docker network create $DOCKER_SIM_NWNAME
+
+docker-compose up -d
+
+DFC_APP="$(docker ps -q --filter='name=dfc_app0')"
 
 #Wait for initialization of docker containers for dfc app and all simulators
 for i in {1..10}; do
-if [ $(docker inspect --format '{{ .State.Running }}' $DFC_APP) ]
- then
-   echo "DFC app Running"
-   break
- else
-   echo sleep $i
-   sleep $i
- fi 
+  if [ $(docker inspect --format '{{ .State.Running }}' $DFC_APP) ]
   then
+      echo "DFC app Running"
+      break
   else
+      echo sleep $i
+      sleep $i
+  fi
 done
-
index 28dfbbf..9e15ccf 100644 (file)
@@ -1,9 +1,22 @@
 version: '2'
+networks:
+  dfcnet:
+    external:
+      name: dfcnet
 services:
   dfc:
-    network_mode: "host"
+    #image fron Nexus
     image: nexus3.onap.org:10001/onap/org.onap.dcaegen2.collectors.datafile.datafile-app-server:latest
-    container_name: dfc_app
+    #local image for test purposes
+    #image: org.onap.dcaegen2.collectors.datafile.datafile-app-server:latest
+    container_name: dfc_app0
     ports:
       - "8100:8100"
       - "8433:8433"
+    networks:
+      dfcnet: null
+    environment:
+      CONSUL_HOST: "consul-server"
+      CONSUL_PORT: 8500
+      CONFIG_BINDING_SERVICE: "config-binding-service"
+      HOSTNAME: "dfc_app0"
index 525f96e..5997098 100755 (executable)
 
 mkdir -p $WORKSPACE/archives
 
-docker logs $1 >> $WORKSPACE/archives/$1.log
-docker kill $1
-docker rm $1
+running_containers=$(docker ps --filter name=$1 -q)
+if [ -z "$running_containers" ]
+then
+    echo "$1 already terminated"
+else
+    echo "Stopping and removing containers"
+    docker logs $running_containers >> $WORKSPACE/archives/$1.log
+    docker stop $running_containers
+    docker rm $running_containers
+fi
 
diff --git a/scripts/multicloud-ocata/generic_sim/Dockerfile b/scripts/multicloud-ocata/generic_sim/Dockerfile
deleted file mode 100644 (file)
index 724b9d7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-FROM python:2.7-alpine
-
-EXPOSE 8080
-
-RUN mkdir -p /{tmp,etc}/generic_sim
-
-WORKDIR /opt/generic_sim/
-
-COPY . .
-RUN pip install --no-cache-dir -r requirements.txt
-
-CMD [ "python", "generic_sim.py" ]
diff --git a/scripts/multicloud-ocata/generic_sim/aai/responses.yml b/scripts/multicloud-ocata/generic_sim/aai/responses.yml
deleted file mode 100644 (file)
index f6d5fcd..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne:
-  GET:
-    body: '{"cloud-owner":"CloudOwner","cloud-region-id":"RegionOne","cloud-type":"openstack","owner-defined-type":"t1","cloud-region-version":"RegionOne","identity-url":"http://keystone:8080/v3","cloud-zone":"z1","complex-name":"clli1","sriov-automation":false,"cloud-extra-info":"","resource-version":"1524845154715"}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/internal:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/internal","Node
-      Not Found:No Node of type availability-zone found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/internal","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/nova:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/nova","Node
-      Not Found:No Node of type availability-zone found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/availability-zones/availability-zone/nova","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/100:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/100","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/100","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/110:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/110","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/110","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/111:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/111","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/111","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/112:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/112","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/112","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/113:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/113","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/113","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/114:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/114","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/114","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/115:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/115","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/115","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/116:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/116","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/116","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/117:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/117","Node
-      Not Found:No Node of type flavor found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/flavors/flavor/117","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/660709df-e90b-471f-ac57-d8c2555e573d:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/660709df-e90b-471f-ac57-d8c2555e573d","Node
-      Not Found:No Node of type image found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/images/image/660709df-e90b-471f-ac57-d8c2555e573d","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3543226ffed44daf90a2f71f36c00b8d:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3543226ffed44daf90a2f71f36c00b8d","Node
-      Not Found:No Node of type tenant found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/3543226ffed44daf90a2f71f36c00b8d","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/b8f5d85bbcd84af28d7caa62d39f05c7:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/b8f5d85bbcd84af28d7caa62d39f05c7","Node
-      Not Found:No Node of type tenant found at: cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/tenants/tenant/b8f5d85bbcd84af28d7caa62d39f05c7","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne:
-  GET:
-    body: '{"cloud-owner":"CloudOwner","cloud-region-id":"RegionOne","cloud-type":"openstack","owner-defined-type":"t1","cloud-region-version":"RegionOne","identity-url":"http://multicloud-ocata:80/api/multicloud-titanium_cloud/v0/CloudOwner_RegionOne/identity/v2.0","cloud-zone":"z1","complex-name":"clli1","sriov-automation":false,"cloud-extra-info":"","resource-version":"1524845276291"}'
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/RegionOne/esr-system-info-list:
-  GET:
-    body: '{"esr-system-info":[{"esr-system-info-id":"4ce895ad-82f7-4476-b5eb-d19d19585da2","service-url":"http://keystone:8080/v3","user-name":"admin","password":"secret","system-type":"VIM","ssl-insecure":true,"cloud-domain":"Default","default-tenant":"admin","resource-version":"1524845155617"}]}'
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/pservers/pserver/compute-0:
-  GET:
-    body: '{"requestError":{"serviceException":{"messageId":"SVC3001","text":"Resource
-      not found for %1 using id %2 (msg=%3) (ec=%4)","variables":["GET","cloud-infrastructure/pservers/pserver/compute-0","Node
-      Not Found:No Node of type pserver found at: cloud-infrastructure/pservers/pserver/compute-0","ERR.5.4.6114"]}}}'
-    content_type: application/json
-    status_code: 200
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
-aai/v13/cloud-infrastructure/pservers/pserver/compute-0/relationship-list/relationship:
-  PUT:
-    body: ''
-    content_type: application/json
-    status_code: 200
diff --git a/scripts/multicloud-ocata/generic_sim/cinder/responses.yml b/scripts/multicloud-ocata/generic_sim/cinder/responses.yml
deleted file mode 100644 (file)
index d9657a5..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-/snapshots/detail:
-  get:
-    body: '{"snapshots": []}'
-    content_type: application/json
-    status_code: 200
diff --git a/scripts/multicloud-ocata/generic_sim/generic_sim.py b/scripts/multicloud-ocata/generic_sim/generic_sim.py
deleted file mode 100644 (file)
index 4392b65..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright 2018 Intel Corporation, Inc
-# 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.
-
-import json
-import logging
-
-import web
-from web import webapi
-import yaml
-
-urls = (
-  '/(.*)','MockController'
-)
-
-def setup_logger(name, log_file, level=logging.DEBUG):
-    print("Configuring the logger...")
-    handler = logging.FileHandler(log_file)
-    formatter = logging.Formatter('%(message)s')
-    handler.setFormatter(formatter)
-
-    logger = logging.getLogger(name)
-    logger.setLevel(level)
-    logger.addHandler(handler)
-
-    return logger
-
-
-class MockResponse:
-    def __init__(self, http_verb, status_code,
-                 content_type="application/json", body="{}",
-                 headers={}):
-        self.http_verb = http_verb.lower()
-        self.status_code = status_code
-        self.content_type = content_type
-        self.body = body
-        self.headers = headers
-
-def _parse_responses(parsed_responses):
-    result = {}
-    for path, responses in parsed_responses.iteritems():
-        new_path = path
-        if path.startswith("/"):
-            new_path = path[1:]
-
-        result[new_path] = []
-        for http_verb, response in responses.iteritems():
-            result[new_path].append(MockResponse(http_verb, **response))
-    return result
-
-def load_responses(filename):
-    print("Loading responses from configuration file..")
-    with open(filename) as yaml_file:
-        responses_file = yaml.safe_load(yaml_file)
-    responses_map = _parse_responses(responses_file)
-    return responses_map
-
-
-class MockController:
-
-    def _do_action(self, action):
-        logger.info('{}'.format(web.ctx.env.get('wsgi.input').read()))
-        action = action.lower()
-        url = web.ctx['fullpath']
-        try:
-            if url.startswith("/"):
-                url = url[1:]
-            response = [ r for r in responses_map[url] if r.http_verb == action][0]
-            for header, value in response.headers.iteritems():
-                web.header(header, value)
-            web.header('Content-Type', response.content_type)
-            print(response.body)
-            return response.body
-        except:
-            webapi.NotFound()
-
-    def DELETE(self, url):
-        return self._do_action("delete")
-
-    def HEAD(self, url):
-        return self._do_action("head")
-
-    def PUT(self, url):
-        return self._do_action("put")
-
-    def GET(self, url):
-        return self._do_action("get")
-
-    def POST(self, url):
-        return self._do_action("post")
-
-    def PATCH(self, url):
-        return self._do_action("patch")
-
-
-logger = setup_logger('mock_controller', '/tmp/generic_sim/output.log')
-responses_map = load_responses('/etc/generic_sim/responses.yml')
-app = web.application(urls, globals())
-if __name__ == "__main__":
-    app.run()
diff --git a/scripts/multicloud-ocata/generic_sim/glance/responses.yml b/scripts/multicloud-ocata/generic_sim/glance/responses.yml
deleted file mode 100644 (file)
index d842235..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-/v2/images:
-  get:
-    body: '{"images": [{"status": "active", "schema": "/v2/schemas/image",
-      "virtual_size": null, "description": "", "tags": [], "container_format":
-      "bare", "created_at": "2018-04-21T06:12:13Z", "disk_format": "raw",
-      "updated_at": "2018-04-21T06:12:24Z", "visibility": "public", "id":
-      "660709df-e90b-471f-ac57-d8c2555e573d", "owner": "b8f5d85bbcd84af28d7caa62d39f05c7",
-      "protected": false, "min_ram": 0, "file": "/v2/images/660709df-e90b-471f-ac57-d8c2555e573d/file",
-      "checksum": "683f86920d4c922cb5c55d99d646b895", "min_disk": 0, "size":
-      1697597440, "self": "/v2/images/660709df-e90b-471f-ac57-d8c2555e573d", "store":
-      "file", "name": "tis4-centos-guest"}], "first": "/v2/images", "schema":
-      "/v2/schemas/images"}'
-    content_type: application/json
-    status_code: 200
-/v2/schemas/image:
-  get:
-    body: '{"additionalProperties": {"type": "string"}, "name": "image",
-      "links": [{"href": "{self}", "rel": "self"}, {"href": "{file}",
-      "rel": "enclosure"}, {"href": "{schema}", "rel": "describedby"}],
-      "properties": {"container_format": {"enum": [null, "ami", "ari", "aki",
-      "bare", "ovf", "ova", "docker"], "type": ["null", "string"], "description":
-      "Format of the container"}, "min_ram": {"type": "integer", "description":
-      "Amount of ram (in MB) required to boot image."}, "ramdisk_id": {"pattern":
-      "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$",
-      "type": ["null", "string"], "description": "ID of image stored in Glance
-      that should be used as the ramdisk when booting an AMI-style image.", "is_base":
-      false}, "locations": {"items": {"required": ["url", "metadata"], "type":
-      "object", "properties": {"url": {"type": "string", "maxLength":
-      255}, "metadata": {"type": "object"}}}, "type": "array", "description":
-      "A set of URLs to access the image file kept in external store"}, "file":
-      {"readOnly": true, "type": "string", "description": "An image file
-      url"}, "owner": {"type": ["null", "string"], "description": "Owner
-      of the image", "maxLength": 255}, "id": {"pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$",
-      "type": "string", "description": "An identifier for the image"}, "size":
-      {"readOnly": true, "type": ["null", "integer"], "description": "Size
-      of image file in bytes"}, "os_distro": {"type": "string", "description":
-      "Common name of operating system distribution as specified in https://docs.openstack.org/python-glanceclient/latest/cli/property-keys.html",
-      "is_base": false}, "self": {"readOnly": true, "type": "string", "description":
-      "An image self url"}, "disk_format": {"enum": [null, "ami", "ari",
-      "aki", "vhd", "vhdx", "vmdk", "raw", "qcow2", "vdi", "iso",
-      "ploop"], "type": ["null", "string"], "description": "Format of the
-      disk"}, "os_version": {"type": "string", "description": "Operating
-      system version as specified by the distributor", "is_base": false}, "direct_url":
-      {"readOnly": true, "type": "string", "description": "URL to access
-      the image file kept in external store"}, "schema": {"readOnly": true, "type":
-      "string", "description": "An image schema url"}, "status": {"readOnly":
-      true, "enum": ["queued", "saving", "active", "killed", "deleted",
-      "pending_delete", "deactivated"], "type": "string", "description":
-      "Status of the image"}, "tags": {"items": {"type": "string", "maxLength":
-      255}, "type": "array", "description": "List of strings related to the
-      image"}, "kernel_id": {"pattern": "^([0-9a-fA-F]){8}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){4}-([0-9a-fA-F]){12}$",
-      "type": ["null", "string"], "description": "ID of image stored in Glance
-      that should be used as the kernel when booting an AMI-style image.", "is_base":
-      false}, "visibility": {"enum": ["community", "public", "private",
-      "shared"], "type": "string", "description": "Scope of image accessibility"},
-      "updated_at": {"readOnly": true, "type": "string", "description":
-      "Date and time of the last image modification"}, "min_disk": {"type":
-      "integer", "description": "Amount of disk space (in GB) required to boot
-      image."}, "virtual_size": {"readOnly": true, "type": ["null", "integer"],
-      "description": "Virtual size of image in bytes"}, "instance_uuid": {"type":
-      "string", "description": "Metadata which can be used to record which instance
-      this image is associated with. (Informational only, does not create an instance
-      snapshot.)", "is_base": false}, "name": {"type": ["null", "string"],
-      "description": "Descriptive name for the image", "maxLength": 255}, "checksum":
-      {"readOnly": true, "type": ["null", "string"], "description": "md5
-      hash of image contents.", "maxLength": 32}, "created_at": {"readOnly":
-      true, "type": "string", "description": "Date and time of image registration"},
-      "protected": {"type": "boolean", "description": "If true, image will
-      not be deletable."}, "architecture": {"type": "string", "description":
-      "Operating system architecture as specified in https://docs.openstack.org/python-glanceclient/latest/cli/property-keys.html",
-      "is_base": false}}}'
-    content_type: application/json
-    status_code: 200
diff --git a/scripts/multicloud-ocata/generic_sim/keystone/responses.yml b/scripts/multicloud-ocata/generic_sim/keystone/responses.yml
deleted file mode 100644 (file)
index 422ec7b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-projects:
-  get:
-    body: '{"projects": [{"is_domain": false, "description": "admin tenant",
-      "links": {"self": "http://keystone:8080/v3/projects/b8f5d85bbcd84af28d7caa62d39f05c7"},
-      "enabled": true, "domain_id": "default", "parent_id": "default", "id":
-      "b8f5d85bbcd84af28d7caa62d39f05c7", "name": "admin"}, {"is_domain":
-      false, "description": "Tenant for the openstack services", "links": {"self":
-      "http://keystone:8080/v3/projects/3543226ffed44daf90a2f71f36c00b8d"},
-      "enabled": true, "domain_id": "default", "parent_id": "default", "id":
-      "3543226ffed44daf90a2f71f36c00b8d", "name": "services"}], "links": {"self":
-      "http://keystone:8080/v3/projects", "next": null, "previous": null}}'
-    content_type: application/json
-    status_code: 200
-v3/auth/tokens:
-  post:
-    body: '{"token": {"methods": ["password"], "expires_at": "2019-11-06T15:32:17.893769Z",
-      "user": { "domain": {"id": "default", "name": "Default"},
-      "id": "423f19a4ac1e4f48bbb4180756e6eb6c", "name": "admin", "password_expires_at": null },
-      "audit_ids": [ "ZzZwkUflQfygX7pdYDBCQQ"], "catalog": [ 
-      { "endpoints": [ 
-      { "id": "1", "interface": "public", "region": "RegionOne", "url": "http://keystone:8080" },
-      { "id": "2", "interface": "internal", "region": "RegionOne", "url": "http://keystone:8080" },
-      { "id": "3", "interface": "admin", "region": "RegionOne", "url": "http://keystone:8080" }
-      ], "id": "1", "type": "identity", "name": "keystone"},
-      { "endpoints": [ 
-      { "id": "1", "interface": "public", "region": "RegionOne", "url": "http://glance:8080" },
-      { "id": "2", "interface": "internal", "region": "RegionOne", "url": "http://glance:8080" },
-      { "id": "3", "interface": "admin", "region": "RegionOne", "url": "http://glance:8080" }
-      ], "id": "2", "type": "image", "name": "glance"},
-      { "endpoints": [ 
-      { "id": "1", "interface": "public", "region": "RegionOne", "url": "http://cinder:8080" },
-      { "id": "2", "interface": "internal", "region": "RegionOne", "url": "http://cinder:8080" },
-      { "id": "3", "interface": "admin", "region": "RegionOne", "url": "http://cinder:8080" }
-      ], "id": "2", "type": "volumev3", "name": "cinder"},
-      { "endpoints": [ 
-      { "id": "1", "interface": "public", "region": "RegionOne", "url": "http://nova:8080" },
-      { "id": "2", "interface": "internal", "region": "RegionOne", "url": "http://nova:8080" },
-      { "id": "3", "interface": "admin", "region": "RegionOne", "url": "http://nova:8080" }
-      ], "id": "3", "type": "compute", "name": "nova"}],
-      "issued_at": "2015-11-06T14:32:17.893797Z"}}'
-    content_type: application/json
-    status_code: 200
-    headers:
-      X-Subject-Token: 423f19a4ac1e4f48bbb4180756e6eb6c
diff --git a/scripts/multicloud-ocata/generic_sim/log_parser.py b/scripts/multicloud-ocata/generic_sim/log_parser.py
deleted file mode 100644 (file)
index 1334e60..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-import argparse
-
-import yaml
-
-
-def _find_aai_response_content(inp):
-    return inp.split("||||")[1].split("with response content = ")[1]
-
-def _find_openstack_url(inp):
-    return inp.split("||||")[1].split("making request with URI:")[1]
-
-def _find_openstack_response_content(inp):
-    return inp.split("||||")[1].split("with content:")[1].replace("u'", "'")
-
-def _add_response(all_responses, url, http_verb, body, status_code=200, content_type="application/json"):
-    if url not in all_responses.keys():
-        all_responses[url] = {
-            http_verb: {
-                "status_code": status_code,
-                "content_type": content_type,
-                "body": body
-            }
-        }
-    elif http_verb not in all_responses[url].keys():
-        all_responses[url][http_verb] = {
-            "status_code": status_code,
-            "content_type": content_type,
-            "body": body
-        }
-
-def parse_lines(content, aai_ip):
-    aai_pattern = "https://%s:30233/" % aai_ip
-    openstack_pattern = "making request with URI:"
-
-    openstack_responses = {}
-    aai_responses = {}
-    for i, line in enumerate(content):
-        current_line = line.strip()
-        if aai_pattern in current_line and "DEBUG" not in current_line:
-            url = current_line.split(" ")[8][:-1].replace(aai_pattern, "")
-            _add_response(aai_responses, url, current_line.split(" ")[9][:-1],
-                _find_aai_response_content(content[i + 3]))
-        elif openstack_pattern in current_line:
-            _add_response(openstack_responses,
-                _find_openstack_url(current_line), "get",
-                _find_openstack_response_content(content[i + 2]))
-
-    return [
-    { "file": "nova.yml", "responses": openstack_responses },
-    { "file": "aai.yml", "responses": aai_responses }
-    ]
-
-if __name__ == "__main__":
-    parser = argparse.ArgumentParser(description='Convert logs to responses YAML tree file.')
-    parser.add_argument('--log-file', type=argparse.FileType('r'), help="Log file to be parsed", required=True)
-    parser.add_argument('--aai-ip', help="A&AI IP Address", required=True)
-    args = parser.parse_args()
-
-    for mock_responses in parse_lines(args.log_file.readlines(), args.aai_ip):
-        with open(mock_responses["file"], 'w') as yaml_file:
-            yaml.dump(mock_responses["responses"], yaml_file, default_flow_style=False)
diff --git a/scripts/multicloud-ocata/generic_sim/nova/responses.yml b/scripts/multicloud-ocata/generic_sim/nova/responses.yml
deleted file mode 100644 (file)
index 9446971..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-/flavors/110/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"hw:cpu_policy": "dedicated", "hw:mem_page_size":
-      "large", "hw:cpu_sockets": "2", "hw:cpu_threads": "8", "hw:numa_mem.1":
-      "2048", "hw:numa_mem.0": "2048", "hw:capabilities:cpu_info:features":
-      "avx,acpi", "aggregate_instance_extra_specs:storage": "local_image", "hw:numa_nodes":
-      "2", "hw:numa_cpus.0": "0,1", "hw:numa_cpus.1": "2,3,4,5", "hw:cpu_cores":
-      "4", "hw:cpu_thread_policy": "prefer", "pci_passthrough:alias": "sriov-vf-intel-8086-15b3:4"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/111/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"aggregate_instance_extra_specs:storage": "local_image"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/112/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"hw:cpu_policy": "dedicated", "hw:cpu_thread_policy":
-      "isolate", "aggregate_instance_extra_specs:storage": "local_image"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/113/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"hw:cpu_cores": "8", "hw:cpu_threads": "16",
-      "aggregate_instance_extra_specs:storage": "local_image", "hw:cpu_sockets":
-      "2"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/114/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"aggregate_instance_extra_specs:storage": "local_image",
-      "hw:mem_page_size": "small"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/115/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"hw:numa_mem.1": "1024", "hw:numa_mem.0": "1024",
-      "aggregate_instance_extra_specs:storage": "local_image", "hw:numa_nodes":
-      "2", "hw:numa_cpus.0": "0,1", "hw:numa_cpus.1": "2,3"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/116/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"hw:capabilities:cpu_info:features": "avx,aes",
-      "aggregate_instance_extra_specs:storage": "local_image"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/117/os-extra_specs:
-  get:
-    body: '{"extra_specs": {"aggregate_instance_extra_specs:storage": "local_image",
-      "pci_passthrough:alias": "sriov-vf-intel-8086-15b3:6"}}'
-    content_type: application/json
-    status_code: 200
-/flavors/detail:
-  get:
-    body: '{"flavors": [{"name": "f.small", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/100",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/100",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 2, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "100"}, {"name":
-      "onap.hpa.all", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/110",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/110",
-      "rel": "bookmark"}], "ram": 4096, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 6, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "110"}, {"name":
-      "onap.hpa.basic", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/111",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/111",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 4, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "111"}, {"name":
-      "onap.hpa.cpupinning", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/112",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/112",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 4, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "112"}, {"name":
-      "onap.hpa.cputopology", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/113",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/113",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 2, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "113"}, {"name":
-      "onap.hpa.hugepage", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/114",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/114",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 2, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "114"}, {"name":
-      "onap.hpa.numa", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/115",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/115",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 4, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "115"}, {"name":
-      "onap.hpa.instruction", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/116",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/116",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 2, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "116"}, {"name":
-      "onap.hpa.passthrough", "links": [{"href": "http://nova:8080/v2.1/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/117",
-      "rel": "self"}, {"href": "http://nova:8080/b8f5d85bbcd84af28d7caa62d39f05c7/flavors/117",
-      "rel": "bookmark"}], "ram": 2048, "OS-FLV-DISABLED:disabled": false,
-      "vcpus": 2, "swap": "", "os-flavor-access:is_public": true, "rxtx_factor":
-      1.0, "OS-FLV-EXT-DATA:ephemeral": 0, "disk": 0, "id": "117"}]}'
-    content_type: application/json
-    status_code: 200
-/os-availability-zone/detail:
-  get:
-    body: '{"availabilityZoneInfo": [{"zoneState": {"available": true}, "hosts":
-      {"controller-0": {"nova-conductor": {"available": true, "active": true,
-      "updated_at": "2018-04-27T16:05:25.272674"}, "nova-consoleauth": {"available":
-      true, "active": true, "updated_at": "2018-04-27T16:05:21.875274"}, "nova-scheduler":
-      {"available": true, "active": true, "updated_at": "2018-04-27T16:05:25.286846"}}},
-      "zoneName": "internal"}, {"zoneState": {"available": false}, "hosts":
-      null, "zoneName": "nova"}]}'
-    content_type: application/json
-    status_code: 200
-/os-hypervisors/detail:
-  get:
-    body: '{
-       "hypervisors": [{
-               "status": "disabled",
-               "service": {
-                       "host": "compute-0",
-                       "disabled_reason": null,
-                       "id": 11
-               },
-               "vcpus_used": 0.0,
-               "hypervisor_type": "QEMU",
-               "id": 1,
-               "local_gb_used": 0,
-               "state": "down",
-               "hypervisor_hostname": "compute-0",
-               "host_ip": "192.168.204.162",
-               "memory_mb": 51562,
-               "current_workload": 0,
-               "vcpus": 42,
-               "free_ram_mb": 51562,
-               "running_vms": 0,
-               "free_disk_gb": 1740,
-               "hypervisor_version": 2010000,
-               "disk_available_least": 1740,
-               "local_gb": 1833,
-               "cpu_info": "{\"vendor\": \"Intel\", \"model\": \"IvyBridge\", \"arch\": \"x86_64\", \"features\": [\"pge\", \"avx\", \"xsaveopt\", \"clflush\", \"sep\", \"syscall\",\"tsc-deadline\",\"dtes64\",\"msr\",\"fsgsbase\",\"xsave\",\"vmx\",\"erms\",\"xtpr\",\"cmov\",\"smep\",\"pcid\",\"est\",\"pat\",\"monitor\",\"smx\",\"pbe\",\"lm\",\"tsc\",\"nx\",\"fxsr\",\"tm\",\"sse4.1\",\"pae\",\"sse4.2\",\"pclmuldq\",\"acpi\",\"vme\",\"popcnt\",\"mmx\",\"osxsave\",\"cx8\",\"mce\",\"de\",\"rdtscp\",\"ht\",\"dca\",\"lahf_lm\",\"pdcm\",\"mca\",\"pdpe1gb\",\"a    pic\",\"sse\",\"f16c\",\"pse\",\"ds\",\"invtsc\",\"pni\",\"tm2\",\"aes\",\"sse2\",\"ss\",\"ds_cpl\",\"arat\",\"ssse3\",\"fpu\",\"cx16\",\"pse36\",\"mtrr\",\"rdrand\",\"x2apic\"],\"topology\": {\"cores\": 12,\"cells\": 2,\"threads\": 2,\"sockets\": 1}}",
-               "memory_mb_used ": 0
-       }]
-}'
-    content_type: application/json
-    status_code: 200
-/os-hypervisors/detail?hypervisor_hostname_pattern=controller-0:
-  get:
-    body: '{
-       "hypervisors": [{
-               "status": "disabled",
-               "service": {
-                       "host": "compute-0",
-                       "disabled_reason": null,
-                       "id": 11
-               },
-               "vcpus_used": 0.0,
-               "hypervisor_type": "QEMU",
-               "id": 1,
-               "local_gb_used": 0,
-               "state": "down",
-               "hypervisor_hostname": "compute-0",
-               "host_ip": "192.168.204.162",
-               "memory_mb": 51562,
-               "current_workload": 0,
-               "vcpus": 42,
-               "free_ram_mb": 51562,
-               "running_vms": 0,
-               "free_disk_gb": 1740,
-               "hypervisor_version": 2010000,
-               "disk_available_least": 1740,
-               "local_gb": 1833,
-               "cpu_info": "{\"vendor\": \"Intel\", \"model\": \"IvyBridge\", \"arch\": \"x86_64\", \"features\": [\"pge\", \"avx\", \"xsaveopt\", \"clflush\", \"sep\", \"syscall\",\"tsc-deadline\",\"dtes64\",\"msr\",\"fsgsbase\",\"xsave\",\"vmx\",\"erms\",\"xtpr\",\"cmov\",\"smep\",\"pcid\",\"est\",\"pat\",\"monitor\",\"smx\",\"pbe\",\"lm\",\"tsc\",\"nx\",\"fxsr\",\"tm\",\"sse4.1\",\"pae\",\"sse4.2\",\"pclmuldq\",\"acpi\",\"vme\",\"popcnt\",\"mmx\",\"osxsave\",\"cx8\",\"mce\",\"de\",\"rdtscp\",\"ht\",\"dca\",\"lahf_lm\",\"pdcm\",\"mca\",\"pdpe1gb\",\"a    pic\",\"sse\",\"f16c\",\"pse\",\"ds\",\"invtsc\",\"pni\",\"tm2\",\"aes\",\"sse2\",\"ss\",\"ds_cpl\",\"arat\",\"ssse3\",\"fpu\",\"cx16\",\"pse36\",\"mtrr\",\"rdrand\",\"x2apic\"],\"topology\": {\"cores\": 12,\"cells\": 2,\"threads\": 2,\"sockets\": 1}}",
-               "memory_mb_used ": 0
-       }]
-}'
-    content_type: application/json
-    status_code: 200
diff --git a/scripts/multicloud-ocata/generic_sim/requirements.txt b/scripts/multicloud-ocata/generic_sim/requirements.txt
deleted file mode 100644 (file)
index ac1d7dd..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-PyYAML
-web.py
index 475f930..9aa7606 100755 (executable)
@@ -31,7 +31,7 @@ cd ${DIR}
 COND_CONF=/tmp/conductor/properties/conductor.conf
 LOG_CONF=/tmp/conductor/properties/log.conf
 IMAGE_NAME=nexus3.onap.org:10001/onap/optf-has
-IMAGE_VER=1.2.5-SNAPSHOT-latest
+IMAGE_VER=1.3.2-SNAPSHOT-latest
 BUNDLE=/tmp/conductor/properties/AAF_RootCA.cer
 
 mkdir -p /tmp/conductor/properties
index 1d1a4d6..f06247d 100644 (file)
 {
-    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
-    "policy_types": [
-        {
-            "onap.policies.Monitoring": {
-                "derived_from": "tosca.policies.Root",
-                "description": "a base policy type for all policies that governs monitoring provisioning"
+  "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+  "policy_types": {
+    "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"
+          }
+        }
+      }
+    }
+  },
+  "data_types": {
+    "onap.datatypes.monitoring.metricsPerEventName": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "controlLoopSchemaType": {
+          "type": "string",
+          "required": true,
+          "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM",
+          "constraints": [
+            {
+              "valid_values": [
+                "VM",
+                "VNF"
+              ]
             }
+          ]
+        },
+        "eventName": {
+          "type": "string",
+          "required": true,
+          "description": "Event name to which thresholds need to be applied"
+        },
+        "policyName": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope Name"
         },
-        {
-            "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"
-                        }
-                    }
-                }
+        "policyScope": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope"
+        },
+        "policyVersion": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope Version"
+        },
+        "thresholds": {
+          "type": "list",
+          "required": true,
+          "description": "Thresholds associated with eventName",
+          "entry_schema": {
+            "type": "onap.datatypes.monitoring.thresholds"
+          }
+        }
+      }
+    },
+    "onap.datatypes.monitoring.tca_policy": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "domain": {
+          "type": "string",
+          "required": true,
+          "description": "Domain name to which TCA needs to be applied",
+          "default": "measurementsForVfScaling",
+          "constraints": [
+            {
+              "equal": "measurementsForVfScaling"
             }
+          ]
+        },
+        "metricsPerEventName": {
+          "type": "list",
+          "required": true,
+          "description": "Contains eventName and threshold details that need to be applied to given eventName",
+          "entry_schema": {
+            "type": "onap.datatypes.monitoring.metricsPerEventName"
+          }
         }
-    ],
-    "data_types": [
-        {
-            "onap.datatypes.monitoring.metricsPerEventName": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "controlLoopSchemaType": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "VM",
-                                    "VNF"
-                                ]
-                            }
-                        ]
-                    },
-                    "eventName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Event name to which thresholds need to be applied"
-                    },
-                    "policyName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope Name"
-                    },
-                    "policyScope": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope"
-                    },
-                    "policyVersion": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope Version"
-                    },
-                    "thresholds": {
-                        "type": "list",
-                        "required": true,
-                        "description": "Thresholds associated with eventName",
-                        "entry_schema": {
-                            "type": "onap.datatypes.monitoring.thresholds"
-                        }
-                    }
-                }
+      }
+    },
+    "onap.datatypes.monitoring.thresholds": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "closedLoopControlName": {
+          "type": "string",
+          "required": true,
+          "description": "Closed Loop Control Name associated with the threshold"
+        },
+        "closedLoopEventStatus": {
+          "type": "string",
+          "required": true,
+          "description": "Closed Loop Event Status of the threshold",
+          "constraints": [
+            {
+              "valid_values": [
+                "ONSET",
+                "ABATED"
+              ]
+            }
+          ]
+        },
+        "direction": {
+          "type": "string",
+          "required": true,
+          "description": "Direction of the threshold",
+          "constraints": [
+            {
+              "valid_values": [
+                "LESS",
+                "LESS_OR_EQUAL",
+                "GREATER",
+                "GREATER_OR_EQUAL",
+                "EQUAL"
+              ]
             }
+          ]
         },
-        {
-            "onap.datatypes.monitoring.tca_policy": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "domain": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Domain name to which TCA needs to be applied",
-                        "default": "measurementsForVfScaling",
-                        "constraints": [
-                            {
-                                "equal": "measurementsForVfScaling"
-                            }
-                        ]
-                    },
-                    "metricsPerEventName": {
-                        "type": "list",
-                        "required": true,
-                        "description": "Contains eventName and threshold details that need to be applied to given eventName",
-                        "entry_schema": {
-                            "type": "onap.datatypes.monitoring.metricsPerEventName"
-                        }
-                    }
-                }
+        "fieldPath": {
+          "type": "string",
+          "required": true,
+          "description": "Json field Path as per CEF message which needs to be analyzed for TCA",
+          "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"
+              ]
             }
+          ]
         },
-        {
-            "onap.datatypes.monitoring.thresholds": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "closedLoopControlName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Closed Loop Control Name associated with the threshold"
-                    },
-                    "closedLoopEventStatus": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Closed Loop Event Status of the threshold",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "ONSET",
-                                    "ABATED"
-                                ]
-                            }
-                        ]
-                    },
-                    "direction": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Direction of the threshold",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "LESS",
-                                    "LESS_OR_EQUAL",
-                                    "GREATER",
-                                    "GREATER_OR_EQUAL",
-                                    "EQUAL"
-                                ]
-                            }
-                        ]
-                    },
-                    "fieldPath": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Json field Path as per CEF message which needs to be analyzed for TCA",
-                        "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"
-                                ]
-                            }
-                        ]
-                    },
-                    "severity": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Threshold Event Severity",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "CRITICAL",
-                                    "MAJOR",
-                                    "MINOR",
-                                    "WARNING",
-                                    "NORMAL"
-                                ]
-                            }
-                        ]
-                    },
-                    "thresholdValue": {
-                        "type": "integer",
-                        "required": true,
-                        "description": "Threshold value for the field Path inside CEF message"
-                    },
-                    "version": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Version number associated with the threshold"
-                    }
-                }
+        "severity": {
+          "type": "string",
+          "required": true,
+          "description": "Threshold Event Severity",
+          "constraints": [
+            {
+              "valid_values": [
+                "CRITICAL",
+                "MAJOR",
+                "MINOR",
+                "WARNING",
+                "NORMAL"
+              ]
             }
+          ]
+        },
+        "thresholdValue": {
+          "type": "integer",
+          "required": true,
+          "description": "Threshold value for the field Path inside CEF message"
+        },
+        "version": {
+          "type": "string",
+          "required": true,
+          "description": "Version number associated with the threshold"
         }
-    ]
+      }
+    }
+  }
 }
\ No newline at end of file
@@ -1,18 +1,16 @@
-#!/bin/bash
+# Copyright (C) 2019 Nordix Foundation.
 #
-# Copyright 2018 Intel Corporation, Inc
 # 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
+# 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.
-
-for container in aai keystone cinder glance nova multicloud-ocata; do
-    kill-instance.sh $container
-done
-docker network rm hpa-net
+MYSQL_ROOT_PASSWORD=secret
+MYSQL_USER=policy_user
+MYSQL_PASSWORD=policy_user
diff --git a/scripts/policy/policy-distribution/config/db/db.sh b/scripts/policy/policy-distribution/config/db/db.sh
new file mode 100644 (file)
index 0000000..660f2c5
--- /dev/null
@@ -0,0 +1,22 @@
+#!/bin/bash -xv
+# 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.
+
+for db in policyadmin
+do
+   mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "CREATE DATABASE IF NOT EXISTS ${db};"
+   mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "GRANT ALL PRIVILEGES ON \`${db}\`.* TO '${MYSQL_USER}'@'%' ;"
+done
+
+mysql -uroot -p"${MYSQL_ROOT_PASSWORD}" --execute "FLUSH PRIVILEGES;"
diff --git a/scripts/policy/policy-distribution/config/distribution/csar/sample_csar_with_apex_policy.csar b/scripts/policy/policy-distribution/config/distribution/csar/sample_csar_with_apex_policy.csar
new file mode 100644 (file)
index 0000000..82e4a48
Binary files /dev/null and b/scripts/policy/policy-distribution/config/distribution/csar/sample_csar_with_apex_policy.csar differ
diff --git a/scripts/policy/policy-distribution/config/distribution/defaultConfig.json b/scripts/policy/policy-distribution/config/distribution/defaultConfig.json
new file mode 100644 (file)
index 0000000..facee9b
--- /dev/null
@@ -0,0 +1,72 @@
+{
+    "name":"SDCDistributionGroup",
+    "restServerParameters":{
+        "host":"0.0.0.0",
+        "port":6969,
+        "userName":"healthcheck",
+        "password":"zb!XztG34",
+        "https": true
+    },
+    "receptionHandlerParameters":{
+        "FileReceptionHandler":{
+            "receptionHandlerType":"File",
+            "receptionHandlerClassName":"org.onap.policy.distribution.reception.handling.file.FileSystemReceptionHandler",
+            "receptionHandlerConfigurationName":"fileConfiguration",
+            "pluginHandlerParameters":{
+                "policyDecoders":{
+                    "ApexDecoder":{
+                        "decoderType":"ApexDecoder",
+                        "decoderClassName":"org.onap.policy.distribution.reception.decoding.policy.file.PolicyDecoderFileInCsarToPolicy",
+                        "decoderConfigurationName": "apexDecoderConfiguration"
+                    }
+                },
+                "policyForwarders":{
+                    "LifeCycleApiForwarder":{
+                        "forwarderType":"LifeCycleAPI",
+                        "forwarderClassName":"org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiPolicyForwarder",
+                        "forwarderConfigurationName": "lifecycleApiConfiguration"
+                    }
+                }
+            }
+        }
+    },
+    "receptionHandlerConfigurationParameters":{
+        "fileConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.reception.handling.file.FileSystemReceptionHandlerConfigurationParameterGroup",
+            "parameters":{
+                "watchPath": "/opt/app/policy/distribution/etc/temp/",
+                "maxThread": 1
+            }
+        }
+    },
+    "policyDecoderConfigurationParameters":{
+        "apexDecoderConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.reception.decoding.policy.file.PolicyDecoderFileInCsarToPolicyParameterGroup",
+            "parameters":{
+                "policyFileName": "apex_policy.json",
+                "policyTypeFileName": "apex_policy_type.json"
+            }
+        }
+    },
+    "policyForwarderConfigurationParameters":{
+        "lifecycleApiConfiguration":{
+            "parameterClassName":"org.onap.policy.distribution.forwarding.lifecycle.api.LifecycleApiForwarderParameters",
+            "parameters":{
+                "apiParameters": {
+                    "hostName": "policy-api",
+                    "port": 6969,
+                    "userName": "healthcheck",
+                    "password": "zb!XztG34"
+                },
+                "papParameters": {
+                    "hostName": "policy-pap",
+                    "port": 6969,
+                    "userName": "healthcheck",
+                    "password": "zb!XztG34"
+                },
+                "isHttps": true,
+                "deployPolicies": true
+            }
+        }
+    }
+}
diff --git a/scripts/policy/policy-distribution/config/distribution/temp/sample_csar_with_apex_policy.csar b/scripts/policy/policy-distribution/config/distribution/temp/sample_csar_with_apex_policy.csar
new file mode 100644 (file)
index 0000000..82e4a48
Binary files /dev/null and b/scripts/policy/policy-distribution/config/distribution/temp/sample_csar_with_apex_policy.csar differ
diff --git a/scripts/policy/policy-distribution/docker-compose-distribution.yml b/scripts/policy/policy-distribution/docker-compose-distribution.yml
new file mode 100644 (file)
index 0000000..f239890
--- /dev/null
@@ -0,0 +1,109 @@
+# 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.
+version: '2'
+networks:
+  default:
+    driver: bridge
+services:
+   mariadb:
+      image: mariadb:${POLICY_MARIADB_VER}
+      container_name: mariadb
+      hostname: mariadb
+      command: ['--lower-case-table-names=1', '--wait_timeout=28800']
+      env_file: config/db/db.conf
+      volumes:
+         - ./config/db:/docker-entrypoint-initdb.d
+      ports:
+       - "3306:3306"
+   message-router:
+      image: dmaap/simulator
+      container_name: dmaap-simulator
+      hostname: dmaap-simulator
+      ports:
+       - "3904:3904"
+   policy-pap:
+      image: nexus3.onap.org:10001/onap/policy-pap:${POLICY_PAP_VERSION}
+      container_name: policy-pap
+      depends_on:
+       - mariadb
+       - message-router
+      hostname: policy-pap
+
+
+   policy-api:
+      image: nexus3.onap.org:10001/onap/policy-api:${POLICY_API_VERSION}
+      container_name: policy-api
+      depends_on:
+       - mariadb
+      hostname: policy-api
+
+
+   distribution:
+      image: nexus3.onap.org:10001/onap/policy-distribution:${POLICY_DISTRIBUTION_VERSION}
+      container_name: policy-distribution
+      hostname: policy-distribution
+      volumes:
+         - ./config/distribution/defaultConfig.json:/opt/app/policy/distribution/etc/defaultConfig.json
+         - ./config/distribution/temp/:/opt/app/policy/distribution/etc/temp/
+      depends_on:
+       - mariadb
+       - message-router
+       - policy-pap
+       - policy-api
+       - apex
+
+   apex:
+      image: nexus3.onap.org:10001/onap/policy-apex-pdp:${POLICY_APEX_PDP_VERSION}
+      container_name: policy-apex-pdp
+      depends_on:
+       - mariadb
+       - message-router
+       - policy-pap
+      hostname: policy-apex-pdp
+      command: ['/opt/app/policy/apex-pdp/bin/apexOnapPf.sh', '-c', '/opt/app/policy/apex-pdp/etc/onappf/config/OnapPfConfig.json']
+      ports:
+       - "6969:6969"
+       - "23324:23324"
+   start_dependencies:
+      image: dadarek/wait-for-dependencies
+      environment:
+        TIMEOUT_LENGTH: 60
+      container_name: policy-wait
+      depends_on:
+        - mariadb
+        - message-router
+      hostname: policy-wait
+      command:
+        mariadb:3306
+        message-router:3904
+   start_all:
+      image: dadarek/wait-for-dependencies
+      environment:
+        TIMEOUT_LENGTH: 60
+      container_name: policy-wait-all
+      depends_on:
+        - mariadb
+        - message-router
+        - policy-api
+        - policy-pap
+        - apex
+        - distribution
+      hostname: policy-wait-all
+      command:
+        mariadb:3306
+        message-router:3904
+        policy-api:6969
+        policy-pap:6969
+        apex:6969
+        distribution:6969
index 1a87432..3edccef 100644 (file)
@@ -22,48 +22,27 @@ Get Requests health check ok
 
 List TCAs
     ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/getAllNames
-    Should Contain Match    ${resp}   *LOOP_iYTIP_v1_0_ResourceInstanceName1_tca*
+    Should Contain Match    ${resp}   *Name1_tca*
     Should Contain Match    ${resp}   *tca_2*
-    Should Contain Match    ${resp}   *LOOP_iYTIP_v1_0_ResourceInstanceName1_tca_3*
+    Should Contain Match    ${resp}   *Name1_tca_3*
 
 Open TCA1
-    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_iYTIP_v1_0_ResourceInstanceName1_tca
-    Should Contain Match    ${resp}   *LOOP_iYTIP_v1_0_ResourceInstanceName1_tca*
-    Should Contain Match    ${resp}   *GENERATED_POLICY_ID_AT_SUBMIT*
-    Should Contain Match    ${resp}   *onap.policy.monitoring.cdap.tca.hi.lo.app*
-    Should Contain Match    ${resp}   *TCA Policy Scope*
+    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_ejh5S_v1_0_ResourceInstanceName1_tca
+    Should Contain Match    ${resp}   *Name1_tca*
+    Should Contain Match    ${resp}   *Operational Policy Item*
+    Should Contain Match    ${resp}   *Operational policies*
+    Should Contain Match    ${resp}   *Micro Service policies UPDATED*
 
 Open TCA2
-    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_iYTIP_v1_0_ResourceInstanceName2_tca_2
-    Should Contain Match    ${resp}   *LOOP_iYTIP_v1_0_ResourceInstanceName2_tca_2*
-    Should Contain Match    ${resp}   *GENERATED_POLICY_ID_AT_SUBMIT*
-    Should Contain Match    ${resp}   *dmaap.onap-message-router*
+    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_ejh5S_v1_0_ResourceInstanceName2_tca_2
+    Should Contain Match    ${resp}   *Name2_tca_2*
+    Should Contain Match    ${resp}   *Operational Policy Item*
+    Should Contain Match    ${resp}   *1004*
     Should Contain Match    ${resp}   *TCA Policy Scope*
 
 Open TCA3
-    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_iYTIP_v1_0_ResourceInstanceName1_tca_3
-    Should Contain Match    ${resp}   *LOOP_iYTIP_v1_0_ResourceInstanceName1_tca*
-    Should Contain Match    ${resp}   *GENERATED_POLICY_ID_AT_SUBMIT*
-    Should Contain Match    ${resp}   *onap.policy.monitoring.cdap.tca.hi.lo.app*
-    Should Contain Match    ${resp}   *TCA Policy Scope Version*
-
-Modify MicroService Policy TCA1
-    ${data}=    Get Binary File     ${CURDIR}${/}data${/}microservicePolicyTca1.json
-    &{headers}=  Create Dictionary      Content-Type=application/json
-    ${resp}=    POST Request    ${clamp_session}   /restservices/clds/v2/loop/updateMicroservicePolicy/LOOP_iYTIP_v1_0_ResourceInstanceName1_tca     data=${data}   headers=${headers}
-    Should Be Equal As Strings      ${resp.status_code}     200
-
-Verify Modification MicroService TCA1
-    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_iYTIP_v1_0_ResourceInstanceName1_tca
-    Should Contain Match    ${resp}   *version1.11*
-
-Modify Operational Policy TCA1
-    ${data}=    Get Binary File     ${CURDIR}${/}data${/}operationalPolicyTca1.json
-    &{headers}=  Create Dictionary      Content-Type=application/json
-    ${resp}=    POST Request    ${clamp_session}   /restservices/clds/v2/loop/updateOperationalPolicies/LOOP_iYTIP_v1_0_ResourceInstanceName1_tca     data=${data}   headers=${headers}
-    Should Be Equal As Strings      ${resp.status_code}     200
-
-Verify Modification Operational TCA1
-    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_iYTIP_v1_0_ResourceInstanceName1_tca
-    Should Contain Match    ${resp}   *Test_Field*
-
+    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_ejh5S_v1_0_ResourceInstanceName1_tca_3
+    Should Contain Match    ${resp}   *Name1_tca_3*
+    Should Contain Match    ${resp}   *Operational Policy Item*
+    Should Contain Match    ${resp}   *1004*
+    Should Contain Match    ${resp}   *TCA Policy Scope*
index c0070c7..edf54e8 100644 (file)
@@ -5,20 +5,17 @@ Library     OperatingSystem
 Library     json
 Library     ../../../scripts/clamp/python-lib/CustomSeleniumLibrary.py
 Library     XvfbRobot
-
 *** Variables ***
 ${login}                     admin
 ${passw}                     password
-${SELENIUM_SPEED_FAST}       .2 seconds
-${SELENIUM_SPEED_SLOW}       .5 seconds
+${SELENIUM_SPEED_FAST}       1 seconds
+${SELENIUM_SPEED_SLOW}       2 seconds
 ${BASE_URL}                  https://localhost:8443
-
 *** Keywords ***
 Create the sessions
     ${auth}=    Create List     ${login}    ${passw}
     Create Session   clamp  ${BASE_URL}    auth=${auth}   disable_warnings=1
     Set Global Variable     ${clamp_session}      clamp
-
 *** Test Cases ***
 Get Requests health check ok
     Create the sessions
@@ -35,33 +32,5 @@ Reply to authentication popup
     Run Keyword And Ignore Error    Insert into prompt    ${login} ${passw}
     Confirm action
 
-Good Login to Clamp UI and Verify logged in
-    Set Window Size    1920    1080
-    ${title}=    Get Title
-    Should Be Equal    CLDS    ${title}
-    Wait Until Element Is Visible       xpath=//*[@class="navbar-brand logo_name ng-binding"]       timeout=60
-    Element Text Should Be      xpath=//*[@class="navbar-brand logo_name ng-binding"]       expected=Hello:admin
-
-Open TCA1 from Menu
-    Wait Until Element Is Visible       xpath=//*[@id="navbar"]/ul/li[1]/a       timeout=60
-    Click Element    xpath=//*[@id="navbar"]/ul/li[1]/a
-    Wait Until Element Is Visible       locator=Open CL       timeout=60
-    Click Element    locator=Open CL
-    Select From List By Label       id=modelName      LOOP_iYTIP_v1_0_ResourceInstanceName1_tca
-    Click Button    locator=OK
-
-Set Properties for HolmesModel1
-    Wait Until Element Is Visible      xpath=//*[@data-element-id="TCA_iYTIP_v1_0_ResourceInstanceName1_tca"]       timeout=60
-    Click Element    xpath=//*[@data-element-id="TCA_iYTIP_v1_0_ResourceInstanceName1_tca"]
-    Wait Until Element Is Visible       xpath=//*[@id="editor"]/div/h3/div[2]/button[1]       timeout=60
-    Click Element    xpath=//*[@id="editor"]/div/h3/div[2]/button[1]
-    Wait Until Element Is Visible       xpath=//*[@id="root.0"]/div[2]/div/div/div[2]/div/h3/div[2]/button[1]/span      timeout=60
-    Click Element    xpath=//*[@id="root.0"]/div[2]/div/div/div[2]/div/h3/div[2]/button[1]/span
-    Input Text      xpath=//*[@name="root[0][metricsPerEventName][0][eventName]"]     text=Event1
-    Input Text      xpath=//*[@name="root[0][metricsPerEventName][0][policyName]"]     text=PolicyScope1
-    Input Text      xpath=//*[@name="root[0][metricsPerEventName][0][policyScope]"]     text=TCAPolicyScope1
-    Input Text      xpath=//*[@name="root[0][metricsPerEventName][0][policyVersion]"]     text=1.2.3
-    Click Button    locator=Done
-
 Close Browser
-    Close Browser
+    Close Browser
\ No newline at end of file
index 979547c..84ea22e 100644 (file)
@@ -21,8 +21,8 @@ Get Requests health check ok
     Should Be Equal As Strings  ${resp.status_code}     200
 
 Open TCA1
-    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_iYTIP_v1_0_ResourceInstanceName1_tca
-    Should Contain Match    ${resp}   *LOOP_iYTIP_v1_0_ResourceInstanceName1_tca*
-    Should Contain Match    ${resp}   *Event1*
-    Should Contain Match    ${resp}   *1.2.3*
-    Should Contain Match    ${resp}   *PolicyScope1*
+    ${resp}=    Get Request    ${clamp_session}   /restservices/clds/v2/loop/LOOP_ejh5S_v1_0_ResourceInstanceName1_tca
+    Should Contain Match    ${resp}   *Name1_tca*
+    Should Contain Match    ${resp}   *Operational Policy*
+    Should Contain Match    ${resp}   *Micro Service policies UPDATED*
+    Should Contain Match    ${resp}   *POLICY SUBMIT request*
index 5e971da..af7b6f1 100755 (executable)
 *** Settings ***
-Library                OperatingSystem
-Library                RequestsLibrary
-Library                Process
+Library        OperatingSystem
+Library        RequestsLibrary
+Library        Process
 
-Resource       ../../resources/common-keywords.robot
+Resource    ../../resources/common-keywords.robot
 
 *** Variables ***
-
+${CONSUL_UPL_APP}                   /usr/bin/curl -v http://127.0.0.1:8500/v1/kv/dfc_app0?dc=dc1 -X PUT -H 'Accept: application/json' -H 'Content-Type: application/json' -H 'X-Requested-With: XMLHttpRequest' --data-binary @${SIMGROUP_ROOT}/consul/c12_feed2_PM_MEAS.json
+${CONSUL_GET_APP}                   /usr/bin/curl -v http://127.0.0.1:8500/v1/kv/dfc_app0?raw
+${CBS_GET_MERGED_CONFIG}            /usr/bin/curl -v http://127.0.0.1:10000/service_component_all/dfc_app0
 
 *** Test Cases ***
 
 ######### Single file, SFTP
 
 Verify single event with single 1MB SFTP file. From event poll to published file
-       [TAGS]                                                  DFC_FUNCTIONAL_1
-       [Documentation]                                 Verify single event with single SFTP 1MB file from event poll to published file.
-       ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
-    Set Environment Variable           MR_TC           --tc100
-    Set Environment Variable           DR_TC           --tc normal
-    Set Environment Variable           DR_REDIR_TC     --tc normal
-    Set Environment Variable           NUM_FTPFILES    1
-    Set Environment Variable           NUM_PNFS        1
-    Set Environment Variable           FILE_SIZE       1MB
-    Set Environment Variable           FTP_TYPE        SFTP
-    ${cli_cmd_output}=                 Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
-       MR Sim Emitted Files Equal      0                                                                                                                                       #Verify 0 file emitted from MR sim
-       DR Sim Published Files Equal    0                                                                                                                                       #Verify 0 file published to DR sim
-       ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
-       Wait Until Keyword Succeeds     1 minute        10 sec  MR Sim Emitted Files Equal      1                                       #Verify 1 file emitted from MR sim
-       Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Query Not Published Equal        1                               #Verify 1 query response for not published files
-       Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Published Files Equal            1                                   #Verify 1 file published to DR sim
-       DR Redir Sim Downloaded Volume Equal    1 000 000                                                                                                                       #Verify 1 000 000 bytes published file data in DR redir sim
-       ${cli_cmd_output}=                              Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
-       ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/dfc-kill.sh
+    [TAGS]                          DFC_FUNCTIONAL_1
+    [Documentation]                 Verify single event with single SFTP 1MB file from event poll to published file.
+    ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/../dfc-containers-clean.sh           stderr=STDOUT
+    Log To Console                  Dfc containter clean: ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+    Set Environment Variable        MR_TC                   --tc100
+    Set Environment Variable        DR_TC                   --tc normal
+    Set Environment Variable        DR_REDIR_TC             --tc normal
+    Set Environment Variable        MR_GROUPS               OpenDcae-c12:PM_MEAS_FILES
+    Set Environment Variable        MR_FILE_PREFIX_MAPPING  PM_MEAS_FILES:A
+    Set Environment Variable        DR_REDIR_FEEDS          2:A
+    Set Environment Variable        FTP_FILE_PREFIXES       A
+    Set Environment Variable        NUM_FTPFILES            1
+    Set Environment Variable        NUM_PNFS                1
+    Set Environment Variable        FILE_SIZE               1MB
+    Set Environment Variable        FTP_TYPE                SFTP
+    Set Environment Variable        NUM_FTP_SERVERS         1
+    Set Environment Variable        DR_FEEDS                2:A
+    Set Environment Variable        DR_REDIR_SIM            drsim_redir
+    Set Environment Variable        SFTP_SIMS               sftp-server0:22
+    Set Environment Variable        FTPS_SIMS               ftpes-server-vsftpd0:21
+
+    ${cli_cmd_output}=              Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
+    Log To Console                  Simulator-start:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+    MR Sim Emitted Files Equal      0                                                                                   #Verify 0 file emitted from MR sim
+    DR Sim Published Files Equal    0                                                                                   #Verify 0 file published to DR sim
+
+    ${cli_cmd_output}=              Run Process                     ${CONSUL_UPL_APP}           shell=yes
+    Log To Console                  Consul APP write:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process                     ${CONSUL_GET_APP}           shell=yes
+    Log To Console                  Consul APP read:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process                     ${CBS_GET_MERGED_CONFIG}    shell=yes
+    Log To Console                  CBS merged configuration:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    Sleep                           10
+
+    ${cli_cmd_output}=              Run Process                    ${DFC_ROOT}/dfc-start.sh   cwd=${DFC_ROOT}
+    Log To Console                  Dfc-start:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    Wait Until Keyword Succeeds     1 minute      10 sec    MR Sim Emitted Files Equal          1                       #Verify 1 file emitted from MR sim
+    Wait Until Keyword Succeeds     1 minute      10 sec    DR Sim Query Not Published Equal    1                       #Verify 1 query response for not published files
+    Wait Until Keyword Succeeds     1 minute      10 sec    DR Sim Published Files Equal        1                       #Verify 1 file published to DR sim
+    DR Redir Sim Downloaded Volume Equal          1 000 000                                                             #Verify 1 000 000 bytes published file data in DR redir sim
+
+    ${cli_cmd_output}=              Run Process             ${SIMGROUP_ROOT}/simulators-kill.sh
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+    ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-kill.sh
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
 
 Verify single event with single 5MB SFTP file. From event poll to published file
-       [TAGS]                                                  DFC_FUNCTIONAL_2
-       [Documentation]                                 Verify single event with single SFTP 5MB file from event poll to published file.
-       ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
-    Set Environment Variable           MR_TC           --tc101
-    Set Environment Variable           DR_TC           --tc normal
-    Set Environment Variable           DR_REDIR_TC     --tc normal
-    Set Environment Variable           NUM_FTPFILES    1
-    Set Environment Variable           NUM_PNFS        1
-    Set Environment Variable           FILE_SIZE       5MB
-    Set Environment Variable           FTP_TYPE        SFTP
-    ${cli_cmd_output}=                 Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
-       MR Sim Emitted Files Equal      0                                                                                                                                       #Verify 0 file emitted from MR sim
-       DR Sim Published Files Equal    0                                                                                                                                       #Verify 0 file published to DR sim
-       ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
-       Wait Until Keyword Succeeds     1 minute        10 sec  MR Sim Emitted Files Equal      1                                       #Verify 1 file emitted from MR sim
-       Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Query Not Published Equal        1                               #Verify 1 query response for not published files
-       Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Published Files Equal            1                                   #Verify 1 file published to DR sim
-       DR Redir Sim Downloaded Volume Equal    5 000 000                                                                                                                       #Verify 1 000 000 bytes published file data in DR redir sim
-       ${cli_cmd_output}=                              Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
-       ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/dfc-kill.sh
+    [TAGS]                          DFC_FUNCTIONAL_2
+    [Documentation]                 Verify single event with single SFTP 5MB file from event poll to published file.
+    ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/../dfc-containers-clean.sh           stderr=STDOUT
+    Log To Console                  Dfc containter clean: ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+    Set Environment Variable        MR_TC                   --tc101
+    Set Environment Variable        DR_TC                   --tc normal
+    Set Environment Variable        DR_REDIR_TC             --tc normal
+    Set Environment Variable        MR_GROUPS               OpenDcae-c12:PM_MEAS_FILES
+    Set Environment Variable        MR_FILE_PREFIX_MAPPING  PM_MEAS_FILES:A
+    Set Environment Variable        DR_REDIR_FEEDS          2:A
+    Set Environment Variable        FTP_FILE_PREFIXES       A
+    Set Environment Variable        NUM_FTPFILES            1
+    Set Environment Variable        NUM_PNFS                1
+    Set Environment Variable        FILE_SIZE               5MB
+    Set Environment Variable        FTP_TYPE                SFTP
+    Set Environment Variable        NUM_FTP_SERVERS         1
+    Set Environment Variable        DR_FEEDS                2:A
+    Set Environment Variable        DR_REDIR_SIM            drsim_redir
+    Set Environment Variable        SFTP_SIMS               sftp-server0:22
+    Set Environment Variable        FTPS_SIMS               ftpes-server-vsftpd0:21
+
+    ${cli_cmd_output}=              Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
+    Log To Console                  Simulator-start: ${cli_cmd_output.stdout}
+    MR Sim Emitted Files Equal      0                                                                                   #Verify 0 file emitted from MR sim
+    DR Sim Published Files Equal    0                                                                                   #Verify 0 file published to DR sim
+
+    ${cli_cmd_output}=              Run Process             ${CONSUL_UPL_APP}           shell=yes
+    Log To Console                  Consul APP write:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process             ${CONSUL_GET_APP}           shell=yes
+    Log To Console                  Consul APP read:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process             ${CBS_GET_MERGED_CONFIG}    shell=yes
+    Log To Console                  CBS merged configuration:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    Sleep                           10
+
+    ${cli_cmd_output}=              Run Process                    ${DFC_ROOT}/dfc-start.sh   cwd=${DFC_ROOT}
+    Log To Console                  Dfc-start:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    Wait Until Keyword Succeeds     1 minute      10 sec    MR Sim Emitted Files Equal          1                       #Verify 1 file emitted from MR sim
+    Wait Until Keyword Succeeds     1 minute      10 sec    DR Sim Query Not Published Equal    1                       #Verify 1 query response for not published files
+    Wait Until Keyword Succeeds     1 minute      10 sec    DR Sim Published Files Equal        1                       #Verify 1 file published to DR sim
+    DR Redir Sim Downloaded Volume Equal          5 000 000                                                             #Verify 5 000 000 bytes published file data in DR redir sim
+
+    ${cli_cmd_output}=              Run Process             ${SIMGROUP_ROOT}/simulators-kill.sh
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+    ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-kill.sh
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process             docker  stop  $(docker ps -aq)      shell=yes
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process             docker  rm $(docker ps -aq)          shell=yes
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    Sleep                           10
 
 Verify single event with single 50MB SFTP file. From event poll to published file
-       [TAGS]                                                  DFC_FUNCTIONAL_3
-       [Documentation]                                 Verify single event with single SFTP 50MB file from event poll to published file.
-       ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
-    Set Environment Variable           MR_TC           --tc102
-    Set Environment Variable           DR_TC           --tc normal
-    Set Environment Variable           DR_REDIR_TC     --tc normal
-    Set Environment Variable           NUM_FTPFILES    1
-    Set Environment Variable           NUM_PNFS        1
-    Set Environment Variable           FILE_SIZE       50MB
-    Set Environment Variable           FTP_TYPE        SFTP
-    ${cli_cmd_output}=                 Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
-       MR Sim Emitted Files Equal      0                                                                                                                                       #Verify 0 file emitted from MR sim
-       DR Sim Published Files Equal    0                                                                                                                                       #Verify 0 file published to DR sim
-       ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
-       Wait Until Keyword Succeeds     1 minute        10 sec  MR Sim Emitted Files Equal      1                                       #Verify 1 file emitted from MR sim
-       Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Query Not Published Equal        1                               #Verify 1 query response for not published files
-       Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Published Files Equal            1                                   #Verify 1 file published to DR sim
-       DR Redir Sim Downloaded Volume Equal    50 000 000                                                                                                                      #Verify 50 000 000 bytes published file data in DR redir sim
-       ${cli_cmd_output}=                              Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
-       ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/dfc-kill.sh
+    [TAGS]                          DFC_FUNCTIONAL_3
+    [Documentation]                 Verify single event with single SFTP 50MB file from event poll to published file.
+    ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/../dfc-containers-clean.sh
+    Set Environment Variable        MR_TC                   --tc102
+    Set Environment Variable        DR_TC                   --tc normal
+    Set Environment Variable        DR_REDIR_TC             --tc normal
+    Set Environment Variable        MR_GROUPS               OpenDcae-c12:PM_MEAS_FILES
+    Set Environment Variable        MR_FILE_PREFIX_MAPPING  PM_MEAS_FILES:A
+    Set Environment Variable        DR_REDIR_FEEDS          2:A
+    Set Environment Variable        FTP_FILE_PREFIXES       A
+    Set Environment Variable        NUM_FTPFILES            1
+    Set Environment Variable        NUM_PNFS                1
+    Set Environment Variable        FILE_SIZE               50MB
+    Set Environment Variable        FTP_TYPE                SFTP
+    Set Environment Variable        NUM_FTP_SERVERS         1
+    Set Environment Variable        DR_FEEDS                2:A
+    Set Environment Variable        DR_REDIR_SIM            drsim_redir
+    Set Environment Variable        SFTP_SIMS               sftp-server0:22
+    Set Environment Variable        FTPS_SIMS               ftpes-server-vsftpd0:21
+
+    ${cli_cmd_output}=              Run Process             ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
+    Log To Console                  Simulator-start: ${cli_cmd_output.stdout}
+    MR Sim Emitted Files Equal      0                                                                                   #Verify 0 file emitted from MR sim
+    DR Sim Published Files Equal    0                                                                                   #Verify 0 file published to DR sim
+
+    ${cli_cmd_output}=              Run Process             ${CONSUL_UPL_APP}           shell=yes
+    Log To Console                  Consul APP write:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process             ${CONSUL_GET_APP}           shell=yes
+    Log To Console                  Consul APP read:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    ${cli_cmd_output}=              Run Process             ${CBS_GET_MERGED_CONFIG}    shell=yes
+    Log To Console                  CBS merged configuration:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    Sleep                           10
+
+    ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-start.sh   cwd=${DFC_ROOT}
+    Log To Console                  Dfc-start:
+    Log To Console                  ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+
+    Wait Until Keyword Succeeds     1 minute      10 sec    MR Sim Emitted Files Equal          1                       #Verify 1 file emitted from MR sim
+    Wait Until Keyword Succeeds     1 minute      10 sec    DR Sim Query Not Published Equal    1                       #Verify 1 query response for not published files
+    Wait Until Keyword Succeeds     1 minute      10 sec    DR Sim Published Files Equal        1                       #Verify 1 file published to DR sim
+    DR Redir Sim Downloaded Volume Equal          50 000 000                                                            #Verify 50 000 000 bytes published file data in DR redir sim
 
+    ${cli_cmd_output}=              Run Process             ${SIMGROUP_ROOT}/simulators-kill.sh
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
+    ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-kill.sh
+    Log                             ${cli_cmd_output.stdout} ${cli_cmd_output.stderr}
 
 ######### Single file, FTPS
 # Temporarily removed due to issues with the certificates for the ftsp server simulator cert.
 #Verify single event with single 1MB FTPS file. From event poll to published file
-#      [TAGS]                                                  DFC_FUNCTIONAL_10
-#      [Documentation]                                 Verify single event with single FTPS 1MB file from event poll to published file.
-#      ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
-#    Set Environment Variable                  MR_TC           --tc200
-#    Set Environment Variable                  DR_TC           --tc normal
-#    Set Environment Variable                  DR_REDIR_TC     --tc normal
-#    Set Environment Variable                  NUM_FTPFILES    1
-#    Set Environment Variable                  NUM_PNFS        1
-#    Set Environment Variable                  FILE_SIZE       1MB
-#    Set Environment Variable                  FTP_TYPE        FTPS
-#    ${cli_cmd_output}=                Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
-#      MR Sim Emitted Files Equal      0                                                                                                                                       #Verify 0 file emitted from MR sim
-#      DR Sim Published Files Equal    0                                                                                                                                       #Verify 0 file published to DR sim
-#      ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
-#      Wait Until Keyword Succeeds     1 minute        10 sec  MR Sim Emitted Files Equal      1                                       #Verify 1 file emitted from MR sim
-#      Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Query Not Published Equal        1                               #Verify 1 query response for not published files
-#      Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Published Files Equal            1                                   #Verify 1 file published to DR sim
-#      DR Redir Sim Downloaded Volume Equal    1 000 000                                                                                                                       #Verify 1 000 000 bytes published file data in DR redir sim
-#      ${cli_cmd_output}=                              Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
-#      ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/dfc-kill.sh
+#    [TAGS]                         DFC_FUNCTIONAL_10
+#    [Documentation]                Verify single event with single FTPS 1MB file from event poll to published file.
+#    ${cli_cmd_output}=             Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
+#    Set Environment Variable       MR_TC           --tc200
+#    Set Environment Variable       DR_TC           --tc normal
+#    Set Environment Variable       DR_REDIR_TC     --tc normal
+#    Set Environment Variable       NUM_FTPFILES    1
+#    Set Environment Variable       NUM_PNFS        1
+#    Set Environment Variable       FILE_SIZE       1MB
+#    Set Environment Variable       FTP_TYPE        FTPS
+#    ${cli_cmd_output}=             Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
+#    MR Sim Emitted Files Equal     0                                                                                   #Verify 0 file emitted from MR sim
+#    DR Sim Published Files Equal   0                                                                                   #Verify 0 file published to DR sim
+#    ${cli_cmd_output}=             Run Process        ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
+#    Wait Until Keyword Succeeds    1 minute    10 sec    MR Sim Emitted Files Equal            1                       #Verify 1 file emitted from MR sim
+#    Wait Until Keyword Succeeds    1 minute    10 sec    DR Sim Query Not Published Equal      1                       #Verify 1 query response for not published files
+#    Wait Until Keyword Succeeds    1 minute    10 sec    DR Sim Published Files Equal          1                       #Verify 1 file published to DR sim
+#    DR Redir Sim Downloaded Volume Equal       1 000 000                                                               #Verify 1 000 000 bytes published file data in DR redir sim
+#    ${cli_cmd_output}=             Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
+#    ${cli_cmd_output}=             Run Process     ${DFC_ROOT}/dfc-kill.sh
 #
 #Verify single event with single 5MB FTPS file. From event poll to published file
-#      [TAGS]                                                  DFC_FUNCTIONAL_11
-#      [Documentation]                                 Verify single event with single FTPS 5MB file from event poll to published file.
-#      ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
-#    Set Environment Variable                  MR_TC           --tc201
-#    Set Environment Variable                  DR_TC           --tc normal
-#    Set Environment Variable                  DR_REDIR_TC     --tc normal
-#    Set Environment Variable                  NUM_FTPFILES    1
-#    Set Environment Variable                  NUM_PNFS        1
-#    Set Environment Variable                  FILE_SIZE       5MB
-#    Set Environment Variable                  FTP_TYPE        FTPS
-#    ${cli_cmd_output}=                Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
-#      MR Sim Emitted Files Equal      0                                                                                                                                       #Verify 0 file emitted from MR sim
-#      DR Sim Published Files Equal    0                                                                                                                                       #Verify 0 file published to DR sim
-#      ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
-#      Wait Until Keyword Succeeds     1 minute        10 sec  MR Sim Emitted Files Equal      1                                       #Verify 1 file emitted from MR sim
-#      Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Query Not Published Equal        1                               #Verify 1 query response for not published files
-#      Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Published Files Equal            1                                   #Verify 1 file published to DR sim
-#      DR Redir Sim Downloaded Volume Equal    5 000 000                                                                                                                       #Verify 5 000 000 bytes published file data in DR redir sim
-#      ${cli_cmd_output}=                              Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
-#      ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/dfc-kill.sh
+#    [TAGS]                         DFC_FUNCTIONAL_11
+#    [Documentation]                Verify single event with single FTPS 5MB file from event poll to published file.
+#    ${cli_cmd_output}=             Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
+#    Set Environment Variable       MR_TC           --tc201
+#    Set Environment Variable       DR_TC           --tc normal
+#    Set Environment Variable       DR_REDIR_TC     --tc normal
+#    Set Environment Variable       NUM_FTPFILES    1
+#    Set Environment Variable       NUM_PNFS        1
+#    Set Environment Variable       FILE_SIZE       5MB
+#    Set Environment Variable       FTP_TYPE        FTPS
+#    ${cli_cmd_output}=             Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
+#    MR Sim Emitted Files Equal     0                                                                                   #Verify 0 file emitted from MR sim
+#    DR Sim Published Files Equal   0                                                                                   #Verify 0 file published to DR sim
+#    ${cli_cmd_output}=             Run Process        ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
+#    Wait Until Keyword Succeeds    1 minute    10 sec    MR Sim Emitted Files Equal            1                       #Verify 1 file emitted from MR sim
+#    Wait Until Keyword Succeeds    1 minute    10 sec    DR Sim Query Not Published Equal      1                       #Verify 1 query response for not published files
+#    Wait Until Keyword Succeeds    1 minute    10 sec    DR Sim Published Files Equal          1                       #Verify 1 file published to DR sim
+#    DR Redir Sim Downloaded Volume Equal       5 000 000                                                               #Verify 5 000 000 bytes published file data in DR redir sim
+#    ${cli_cmd_output}=             Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
+#    ${cli_cmd_output}=             Run Process     ${DFC_ROOT}/dfc-kill.sh
 #
 #Verify single event with single 50MB FTPS file. From event poll to published file
-#      [TAGS]                                                  DFC_FUNCTIONAL_12
-#      [Documentation]                                 Verify single event with single FTPS 50MB file from event poll to published file.
-#      ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
-#    Set Environment Variable                  MR_TC           --tc202
-#    Set Environment Variable                  DR_TC           --tc normal
-#    Set Environment Variable                  DR_REDIR_TC     --tc normal
-#    Set Environment Variable                  NUM_FTPFILES    1
-#    Set Environment Variable                  NUM_PNFS        1
-#    Set Environment Variable                  FILE_SIZE       50MB
-#    Set Environment Variable                  FTP_TYPE        FTPS
-#    ${cli_cmd_output}=                Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
-#      MR Sim Emitted Files Equal      0                                                                                                                                       #Verify 0 file emitted from MR sim
-#      DR Sim Published Files Equal    0                                                                                                                                       #Verify 0 file published to DR sim
-#      ${cli_cmd_output}=              Run Process             ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
-#      Wait Until Keyword Succeeds     1 minute        10 sec  MR Sim Emitted Files Equal      1                                       #Verify 1 file emitted from MR sim
-#      Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Query Not Published Equal        1                               #Verify 1 query response for not published files
-#      Wait Until Keyword Succeeds     1 minute        10 sec  DR Sim Published Files Equal            1                                   #Verify 1 file published to DR sim
-#      DR Redir Sim Downloaded Volume Equal    50 000 000                                                                                                                      #Verify 50 000 000 bytes published file data in DR redir sim
-#      ${cli_cmd_output}=                              Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
-#      ${cli_cmd_output}=                              Run Process     ${DFC_ROOT}/dfc-kill.sh
+#    [TAGS]                         DFC_FUNCTIONAL_12
+#    [Documentation]                Verify single event with single FTPS 50MB file from event poll to published file.
+#    ${cli_cmd_output}=             Run Process     ${DFC_ROOT}/../dfc-containers-clean.sh
+#    Set Environment Variable       MR_TC           --tc202
+#    Set Environment Variable       DR_TC           --tc normal
+#    Set Environment Variable       DR_REDIR_TC     --tc normal
+#    Set Environment Variable       NUM_FTPFILES    1
+#    Set Environment Variable       NUM_PNFS        1
+#    Set Environment Variable       FILE_SIZE       50MB
+#    Set Environment Variable       FTP_TYPE        FTPS
+#    ${cli_cmd_output}=             Run Process     ./simulators-start.sh    cwd=${SIMGROUP_ROOT}
+#    MR Sim Emitted Files Equal     0                                                                                   #Verify 0 file emitted from MR sim
+#    DR Sim Published Files Equal   0                                                                                   #Verify 0 file published to DR sim
+#    ${cli_cmd_output}=             Run Process        ${DFC_ROOT}/dfc-start.sh  cwd=${DFC_ROOT}
+#    Wait Until Keyword Succeeds    1 minute    10 sec    MR Sim Emitted Files Equal            1                       #Verify 1 file emitted from MR sim
+#    Wait Until Keyword Succeeds    1 minute    10 sec    DR Sim Query Not Published Equal      1                       #Verify 1 query response for not published files
+#    Wait Until Keyword Succeeds    1 minute    10 sec    DR Sim Published Files Equal          1                       #Verify 1 file published to DR sim
+#    DR Redir Sim Downloaded Volume Equal       50 000 000                                                              #Verify 50 000 000 bytes published file data in DR redir sim
+#    ${cli_cmd_output}=             Run Process     ${SIMGROUP_ROOT}/simulators-kill.sh
+#    ${cli_cmd_output}=             Run Process     ${DFC_ROOT}/dfc-kill.sh
 #
 
 *** Keywords ***
diff --git a/tests/multicloud-ocata/provision/hpa_multicloud.robot b/tests/multicloud-ocata/provision/hpa_multicloud.robot
deleted file mode 100644 (file)
index 95d4d55..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-*** settings ***
-Library     Collections
-Library     RequestsLibrary
-
-*** Variables ***
-@{return_ok_list}=             200  201  202
-${queryregistration_url}       /api/multicloud-ocata/v0/CloudOwner_RegionOne/registry
-
-
-*** Test Cases ***
-OcataRegistryTest
-    [Documentation]            Register openstack cloud resources
-    ${headers}                 Create Dictionary       Content-Type=application/json           Accept=application/json
-    Create Session             web_session             http://${SERVICE_IP}:${SERVICE_PORT}    headers=${headers}
-    ${resp}=                   Post Request            web_session                             ${queryregistration_url}
-    ${response_code}=          Convert To String       ${resp.status_code}
-    List Should Contain Value  ${return_ok_list}       ${response_code}
diff --git a/tests/multicloud-ocata/provision/sanity_test_multicloud.robot b/tests/multicloud-ocata/provision/sanity_test_multicloud.robot
deleted file mode 100644 (file)
index c626252..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-*** settings ***
-Library     Collections
-Library     RequestsLibrary
-Library     OperatingSystem
-Library     json
-
-*** Variables ***
-@{return_ok_list}=   200  201  202
-${queryswagger_ocata_url}    /api/multicloud-ocata/v0/swagger.json
-
-
-*** Test Cases ***
-OcataSwaggerTest
-    [Documentation]    query swagger info rest test
-    ${headers}    Create Dictionary    Content-Type=application/json    Accept=application/json
-    Create Session    web_session    http://${SERVICE_IP}:${SERVICE_PORT}    headers=${headers}
-    ${resp}=  Get Request    web_session    ${queryswagger_ocata_url}
-    ${response_code}=     Convert To String      ${resp.status_code}
-    List Should Contain Value    ${return_ok_list}   ${response_code}
-    ${response_json}    json.loads    ${resp.content}
-    ${swagger_version}=    Convert To String      ${response_json['swagger']}
-    Should Be Equal    ${swagger_version}    2.0
index 8795b13..810d970 100644 (file)
 {
   "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
-  "policy_types": [
-    {
-      "onap.policies.controlloop.operational.Apex": {
-        "version": "1.0.0",
-        "description": "Operational Policy for Control Loops using the APEX PDP",
-        "properties": {
-          "engine_service": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.EngineService",
-            "description": "APEX Engine Service Parameters"
-          },
-          "inputs": {
-            "type": "map",
-            "description": "Inputs for handling events coming into the APEX engine",
-            "entry_schema": {
-              "type": "onap.datatypes.policies.controlloop.operational.apex.EventHandler"
-            }
-          },
-          "outputs": {
-            "type": "map",
-            "description": "Outputs for handling events going out of the APEX engine",
-            "entry_schema": {
-              "type": "onap.datatypes.policies.controlloop.operational.apex.EventHandler"
-            }
-          },
-          "environment": {
-            "type": "list",
-            "description": "Envioronmental parameters for the APEX engine",
-            "entry_schema": {
-              "type": "onap.datatypes.policies.controlloop.operational.apex.Environment"
-            }
+  "policy_types": {
+    "onap.policies.controlloop.operational.Apex": {
+      "version": "1.0.0",
+      "description": "Operational Policy for Control Loops using the APEX PDP",
+      "properties": {
+        "engine_service": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.EngineService",
+          "description": "APEX Engine Service Parameters"
+        },
+        "inputs": {
+          "type": "map",
+          "description": "Inputs for handling events coming into the APEX engine",
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.EventHandler"
+          }
+        },
+        "outputs": {
+          "type": "map",
+          "description": "Outputs for handling events going out of the APEX engine",
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.EventHandler"
+          }
+        },
+        "environment": {
+          "type": "list",
+          "description": "Envioronmental parameters for the APEX engine",
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.Environment"
           }
         }
       }
     }
-  ],
-  "data_types": [
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.EngineService": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "name": {
-            "type": "string",
-            "description": "Specifies the engine name",
-            "required": false,
-            "default": "ApexEngineService"
-          },
-          "version": {
-            "type": "string",
-            "description": "Specifies the engine version in double dotted format",
-            "required": false,
-            "default": "1.0.0"
-          },
-          "id": {
-            "type": "int",
-            "description": "Specifies the engine id",
-            "required": true
-          },
-          "instance_count": {
-            "type": "int",
-            "description": "Specifies the number of engine threads that should be run",
-            "required": true
-          },
-          "deployment_port": {
-            "type": "int",
-            "description": "Specifies the port to connect to for engine administration",
-            "required": false,
-            "default": 1
-          },
-          "policy_model_file_name": {
-            "type": "string",
-            "description": "The name of the file from which to read the APEX policy model",
-            "required": false,
-            "default": ""
-          },
-          "policy_type_impl": {
-            "type": "string",
-            "description": "The policy type implementation from which to read the APEX policy model",
-            "required": false,
-            "default": ""
-          },
-          "periodic_event_period": {
-            "type": "string",
-            "description": "The time interval in milliseconds for the periodic scanning event, 0 means \"don't scan\"",
-            "required": false,
-            "default": 0
-          },
-          "engine": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine",
-            "description": "The parameters for all engines in the APEX engine service",
-            "required": true
-          }
+  },
+  "data_types": {
+    "onap.datatypes.policies.controlloop.operational.apex.EngineService": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "Specifies the engine name",
+          "required": false,
+          "default": "ApexEngineService"
+        },
+        "version": {
+          "type": "string",
+          "description": "Specifies the engine version in double dotted format",
+          "required": false,
+          "default": "1.0.0"
+        },
+        "id": {
+          "type": "int",
+          "description": "Specifies the engine id",
+          "required": true
+        },
+        "instance_count": {
+          "type": "int",
+          "description": "Specifies the number of engine threads that should be run",
+          "required": true
+        },
+        "deployment_port": {
+          "type": "int",
+          "description": "Specifies the port to connect to for engine administration",
+          "required": false,
+          "default": 1
+        },
+        "policy_model_file_name": {
+          "type": "string",
+          "description": "The name of the file from which to read the APEX policy model",
+          "required": false,
+          "default": ""
+        },
+        "policy_type_impl": {
+          "type": "string",
+          "description": "The policy type implementation from which to read the APEX policy model",
+          "required": false,
+          "default": ""
+        },
+        "periodic_event_period": {
+          "type": "string",
+          "description": "The time interval in milliseconds for the periodic scanning event, 0 means \"don't scan\"",
+          "required": false,
+          "default": 0
+        },
+        "engine": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine",
+          "description": "The parameters for all engines in the APEX engine service",
+          "required": true
         }
       }
     },
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.EventHandler": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "name": {
-            "type": "string",
-            "description": "Specifies the event handler name, if not specified this is set to the key name",
-            "required": false
-          },
-          "carrier_technology": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology",
-            "description": "Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)",
-            "required": true
-          },
-          "event_protocol": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.EventProtocol",
-            "description": "Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)",
-            "required": true
-          },
-          "event_name": {
-            "type": "string",
-            "description": "Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent",
-            "required": false
-          },
-          "event_name_filter": {
-            "type": "string",
-            "description": "Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through",
-            "required": false
-          },
-          "synchronous_mode": {
-            "type": "bool",
-            "description": "Specifies the event handler is syncronous (receive event and send response)",
-            "required": false,
-            "default": false
-          },
-          "synchronous_peer": {
-            "type": "string",
-            "description": "The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode",
-            "required": false,
-            "default": ""
-          },
-          "synchronous_timeout": {
-            "type": "int",
-            "description": "The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode",
-            "required": false,
-            "default": ""
-          },
-          "requestor_mode": {
-            "type": "bool",
-            "description": "Specifies the event handler is in requestor mode (send event and wait for response mode)",
-            "required": false,
-            "default": false
-          },
-          "requestor_peer": {
-            "type": "string",
-            "description": "The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode",
-            "required": false,
-            "default": ""
-          },
-          "requestor_timeout": {
-            "type": "int",
-            "description": "The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode",
-            "required": false,
-            "default": ""
-          }
+    "onap.datatypes.policies.controlloop.operational.apex.EventHandler": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "Specifies the event handler name, if not specified this is set to the key name",
+          "required": false
+        },
+        "carrier_technology": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology",
+          "description": "Specifies the carrier technology of the event handler (such as REST/Web Socket/Kafka)",
+          "required": true
+        },
+        "event_protocol": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.EventProtocol",
+          "description": "Specifies the event protocol of events for the event handler (such as Yaml/JSON/XML/POJO)",
+          "required": true
+        },
+        "event_name": {
+          "type": "string",
+          "description": "Specifies the event name for events on this event handler, if not specified, the event name is read from or written to the event being received or sent",
+          "required": false
+        },
+        "event_name_filter": {
+          "type": "string",
+          "description": "Specifies a filter as a regular expression, events that do not match the filter are dropped, the default is to let all events through",
+          "required": false
+        },
+        "synchronous_mode": {
+          "type": "bool",
+          "description": "Specifies the event handler is syncronous (receive event and send response)",
+          "required": false,
+          "default": false
+        },
+        "synchronous_peer": {
+          "type": "string",
+          "description": "The peer event handler (output for input or input for output) of this event handler in synchronous mode, this parameter is mandatory if the event handler is in synchronous mode",
+          "required": false,
+          "default": ""
+        },
+        "synchronous_timeout": {
+          "type": "int",
+          "description": "The timeout in milliseconds for responses to be issued by APEX torequests, this parameter is mandatory if the event handler is in synchronous mode",
+          "required": false,
+          "default": ""
+        },
+        "requestor_mode": {
+          "type": "bool",
+          "description": "Specifies the event handler is in requestor mode (send event and wait for response mode)",
+          "required": false,
+          "default": false
+        },
+        "requestor_peer": {
+          "type": "string",
+          "description": "The peer event handler (output for input or input for output) of this event handler in requestor mode, this parameter is mandatory if the event handler is in requestor mode",
+          "required": false,
+          "default": ""
+        },
+        "requestor_timeout": {
+          "type": "int",
+          "description": "The timeout in milliseconds for wait for responses to requests, this parameter is mandatory if the event handler is in requestor mode",
+          "required": false,
+          "default": ""
         }
       }
     },
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "label": {
-            "type": "string",
-            "description": "The label (name) of the carrier technology (such as REST, Kafka, WebSocket)",
-            "required": true
-          },
-          "plugin_parameter_class_name": {
-            "type": "string",
-            "description": "The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class",
-            "required": false
-          }
+    "onap.datatypes.policies.controlloop.operational.apex.CarrierTechnology": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "label": {
+          "type": "string",
+          "description": "The label (name) of the carrier technology (such as REST, Kafka, WebSocket)",
+          "required": true
+        },
+        "plugin_parameter_class_name": {
+          "type": "string",
+          "description": "The class name of the class that overrides default handling of event input or output for this carrier technology, defaults to the supplied input or output class",
+          "required": false
         }
       }
     },
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.EventProtocol": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "label": {
-            "type": "string",
-            "description": "The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)",
-            "required": true
-          },
-          "event_protocol_plugin_class": {
-            "type": "string",
-            "description": "The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class",
-            "required": false
-          }
+    "onap.datatypes.policies.controlloop.operational.apex.EventProtocol": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "label": {
+          "type": "string",
+          "description": "The label (name) of the event protocol (such as Yaml, JSON, XML, or POJO)",
+          "required": true
+        },
+        "event_protocol_plugin_class": {
+          "type": "string",
+          "description": "The class name of the class that overrides default handling of the event protocol for this carrier technology, defaults to the supplied event protocol class",
+          "required": false
         }
       }
     },
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.Environmental": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "name": {
-            "type": "string",
-            "description": "The name of the environment variable",
-            "required": true
-          },
-          "value": {
-            "type": "string",
-            "description": "The value of the environment variable",
-            "required": true
-          }
+    "onap.datatypes.policies.controlloop.operational.apex.Environmental": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "The name of the environment variable",
+          "required": true
+        },
+        "value": {
+          "type": "string",
+          "description": "The value of the environment variable",
+          "required": true
         }
       }
     },
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "context": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context",
-            "description": "The properties for handling context in APEX engines, defaults to using Java maps for context",
-            "required": false
-          },
-          "executors": {
-            "type": "map",
-            "description": "The plugins for policy executors used in engines such as javascript, MVEL, Jython",
-            "required": true,
-            "entry_schema": {
-              "description": "The plugin class path for this policy executor",
-              "type": "string"
-            }
+    "onap.datatypes.policies.controlloop.operational.apex.engineservice.Engine": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "context": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context",
+          "description": "The properties for handling context in APEX engines, defaults to using Java maps for context",
+          "required": false
+        },
+        "executors": {
+          "type": "map",
+          "description": "The plugins for policy executors used in engines such as javascript, MVEL, Jython",
+          "required": true,
+          "entry_schema": {
+            "description": "The plugin class path for this policy executor",
+            "type": "string"
           }
         }
       }
     },
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "distributor": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin",
-            "description": "The plugin to be used for distributing context between APEX PDPs at runtime",
-            "required": false
-          },
-          "schemas": {
-            "type": "map",
-            "description": "The plugins for context schemas available in APEX PDPs such as Java and Avro",
-            "required": false,
-            "entry_schema": {
-              "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin"
-            }
-          },
-          "locking": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.plugin",
-            "description": "The plugin to be used for locking context in and between APEX PDPs at runtime",
-            "required": false
-          },
-          "persistence": {
-            "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin",
-            "description": "The plugin to be used for persisting context for APEX PDPs at runtime",
-            "required": false
+    "onap.datatypes.policies.controlloop.operational.apex.engineservice.engine.Context": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "distributor": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin",
+          "description": "The plugin to be used for distributing context between APEX PDPs at runtime",
+          "required": false
+        },
+        "schemas": {
+          "type": "map",
+          "description": "The plugins for context schemas available in APEX PDPs such as Java and Avro",
+          "required": false,
+          "entry_schema": {
+            "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin"
           }
+        },
+        "locking": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.plugin",
+          "description": "The plugin to be used for locking context in and between APEX PDPs at runtime",
+          "required": false
+        },
+        "persistence": {
+          "type": "onap.datatypes.policies.controlloop.operational.apex.Plugin",
+          "description": "The plugin to be used for persisting context for APEX PDPs at runtime",
+          "required": false
         }
       }
     },
-    {
-      "onap.datatypes.policies.controlloop.operational.apex.Plugin": {
-        "derived_from": "tosca.datatypes.Root",
-        "properties": {
-          "name": {
-            "type": "string",
-            "description": "The name of the executor such as Javascript, Jython or MVEL",
-            "required": true
-          },
-          "plugin_class_name": {
-            "type": "string",
-            "description": "The class path of the plugin class for this executor"
-          }
+    "onap.datatypes.policies.controlloop.operational.apex.Plugin": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "name": {
+          "type": "string",
+          "description": "The name of the executor such as Javascript, Jython or MVEL",
+          "required": true
+        },
+        "plugin_class_name": {
+          "type": "string",
+          "description": "The class path of the plugin class for this executor"
         }
       }
     }
-  ]
+  }
 }
\ No newline at end of file
index 959df40..3106078 100644 (file)
@@ -61,7 +61,7 @@ RetrieveMonitoringPolicyTypes
      ${resp}=   Get Request   policy  /policy/api/v1/policytypes/onap.policies.Monitoring     headers=${headers}
      Log    Received response from policy ${resp.text}
      Should Be Equal As Strings    ${resp.status_code}     200
-     Dictionary Should Contain Key    ${resp.json()['policy_types'][0]}  onap.policies.Monitoring
+     List Should Contain Value    ${resp.json()['policy_types']}  onap.policies.Monitoring
 
 
 CreateNewMonitoringPolicy
index 1d1a4d6..f06247d 100644 (file)
 {
-    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
-    "policy_types": [
-        {
-            "onap.policies.Monitoring": {
-                "derived_from": "tosca.policies.Root",
-                "description": "a base policy type for all policies that governs monitoring provisioning"
+  "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+  "policy_types": {
+    "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"
+          }
+        }
+      }
+    }
+  },
+  "data_types": {
+    "onap.datatypes.monitoring.metricsPerEventName": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "controlLoopSchemaType": {
+          "type": "string",
+          "required": true,
+          "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM",
+          "constraints": [
+            {
+              "valid_values": [
+                "VM",
+                "VNF"
+              ]
             }
+          ]
+        },
+        "eventName": {
+          "type": "string",
+          "required": true,
+          "description": "Event name to which thresholds need to be applied"
+        },
+        "policyName": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope Name"
         },
-        {
-            "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"
-                        }
-                    }
-                }
+        "policyScope": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope"
+        },
+        "policyVersion": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope Version"
+        },
+        "thresholds": {
+          "type": "list",
+          "required": true,
+          "description": "Thresholds associated with eventName",
+          "entry_schema": {
+            "type": "onap.datatypes.monitoring.thresholds"
+          }
+        }
+      }
+    },
+    "onap.datatypes.monitoring.tca_policy": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "domain": {
+          "type": "string",
+          "required": true,
+          "description": "Domain name to which TCA needs to be applied",
+          "default": "measurementsForVfScaling",
+          "constraints": [
+            {
+              "equal": "measurementsForVfScaling"
             }
+          ]
+        },
+        "metricsPerEventName": {
+          "type": "list",
+          "required": true,
+          "description": "Contains eventName and threshold details that need to be applied to given eventName",
+          "entry_schema": {
+            "type": "onap.datatypes.monitoring.metricsPerEventName"
+          }
         }
-    ],
-    "data_types": [
-        {
-            "onap.datatypes.monitoring.metricsPerEventName": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "controlLoopSchemaType": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "VM",
-                                    "VNF"
-                                ]
-                            }
-                        ]
-                    },
-                    "eventName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Event name to which thresholds need to be applied"
-                    },
-                    "policyName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope Name"
-                    },
-                    "policyScope": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope"
-                    },
-                    "policyVersion": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope Version"
-                    },
-                    "thresholds": {
-                        "type": "list",
-                        "required": true,
-                        "description": "Thresholds associated with eventName",
-                        "entry_schema": {
-                            "type": "onap.datatypes.monitoring.thresholds"
-                        }
-                    }
-                }
+      }
+    },
+    "onap.datatypes.monitoring.thresholds": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "closedLoopControlName": {
+          "type": "string",
+          "required": true,
+          "description": "Closed Loop Control Name associated with the threshold"
+        },
+        "closedLoopEventStatus": {
+          "type": "string",
+          "required": true,
+          "description": "Closed Loop Event Status of the threshold",
+          "constraints": [
+            {
+              "valid_values": [
+                "ONSET",
+                "ABATED"
+              ]
+            }
+          ]
+        },
+        "direction": {
+          "type": "string",
+          "required": true,
+          "description": "Direction of the threshold",
+          "constraints": [
+            {
+              "valid_values": [
+                "LESS",
+                "LESS_OR_EQUAL",
+                "GREATER",
+                "GREATER_OR_EQUAL",
+                "EQUAL"
+              ]
             }
+          ]
         },
-        {
-            "onap.datatypes.monitoring.tca_policy": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "domain": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Domain name to which TCA needs to be applied",
-                        "default": "measurementsForVfScaling",
-                        "constraints": [
-                            {
-                                "equal": "measurementsForVfScaling"
-                            }
-                        ]
-                    },
-                    "metricsPerEventName": {
-                        "type": "list",
-                        "required": true,
-                        "description": "Contains eventName and threshold details that need to be applied to given eventName",
-                        "entry_schema": {
-                            "type": "onap.datatypes.monitoring.metricsPerEventName"
-                        }
-                    }
-                }
+        "fieldPath": {
+          "type": "string",
+          "required": true,
+          "description": "Json field Path as per CEF message which needs to be analyzed for TCA",
+          "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"
+              ]
             }
+          ]
         },
-        {
-            "onap.datatypes.monitoring.thresholds": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "closedLoopControlName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Closed Loop Control Name associated with the threshold"
-                    },
-                    "closedLoopEventStatus": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Closed Loop Event Status of the threshold",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "ONSET",
-                                    "ABATED"
-                                ]
-                            }
-                        ]
-                    },
-                    "direction": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Direction of the threshold",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "LESS",
-                                    "LESS_OR_EQUAL",
-                                    "GREATER",
-                                    "GREATER_OR_EQUAL",
-                                    "EQUAL"
-                                ]
-                            }
-                        ]
-                    },
-                    "fieldPath": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Json field Path as per CEF message which needs to be analyzed for TCA",
-                        "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"
-                                ]
-                            }
-                        ]
-                    },
-                    "severity": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Threshold Event Severity",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "CRITICAL",
-                                    "MAJOR",
-                                    "MINOR",
-                                    "WARNING",
-                                    "NORMAL"
-                                ]
-                            }
-                        ]
-                    },
-                    "thresholdValue": {
-                        "type": "integer",
-                        "required": true,
-                        "description": "Threshold value for the field Path inside CEF message"
-                    },
-                    "version": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Version number associated with the threshold"
-                    }
-                }
+        "severity": {
+          "type": "string",
+          "required": true,
+          "description": "Threshold Event Severity",
+          "constraints": [
+            {
+              "valid_values": [
+                "CRITICAL",
+                "MAJOR",
+                "MINOR",
+                "WARNING",
+                "NORMAL"
+              ]
             }
+          ]
+        },
+        "thresholdValue": {
+          "type": "integer",
+          "required": true,
+          "description": "Threshold value for the field Path inside CEF message"
+        },
+        "version": {
+          "type": "string",
+          "required": true,
+          "description": "Version number associated with the threshold"
         }
-    ]
+      }
+    }
+  }
 }
\ No newline at end of file
diff --git a/tests/policy/distribution/data/event.json b/tests/policy/distribution/data/event.json
new file mode 100644 (file)
index 0000000..9dbf279
--- /dev/null
@@ -0,0 +1,11 @@
+{
+    "nameSpace": "org.onap.policy.apex.sample.events",
+    "name": "Event0000",
+    "version": "0.0.1",
+    "source": "REST_0",
+    "target": "apex",
+    "TestSlogan": "Test slogan for External Event0",
+    "TestMatchCase": 3,
+    "TestTimestamp": 1536363522018,
+    "TestTemperature": 9080.866
+}
index 34dd169..2b1c6d6 100644 (file)
@@ -5,9 +5,10 @@ Library     OperatingSystem
 Library     json
 
 *** Test Cases ***
+
 Healthcheck
      [Documentation]    Runs Policy Distribution Health check
-     ${auth}=    Create List    healthcheck    zb!XztG34 
+     ${auth}=    Create List    healthcheck    zb!XztG34
      Log    Creating session https://${POLICY_DISTRIBUTION_IP}:6969
      ${session}=    Create Session      policy  https://${POLICY_DISTRIBUTION_IP}:6969   auth=${auth}
      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
@@ -15,9 +16,10 @@ Healthcheck
      Log    Received response from policy ${resp.text}
      Should Be Equal As Strings    ${resp.status_code}     200
      Should Be Equal As Strings    ${resp.json()['code']}  200
+
 Statistics
      [Documentation]    Runs Policy Distribution Statistics
-     ${auth}=    Create List    healthcheck    zb!XztG34 
+     ${auth}=    Create List    healthcheck    zb!XztG34
      Log    Creating session https://${POLICY_DISTRIBUTION_IP}:6969
      ${session}=    Create Session      policy  https://${POLICY_DISTRIBUTION_IP}:6969   auth=${auth}
      ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
@@ -25,3 +27,19 @@ Statistics
      Log    Received response from policy ${resp.text}
      Should Be Equal As Strings    ${resp.status_code}     200
      Should Be Equal As Strings    ${resp.json()['code']}  200
+
+InvokeDistributionAndRunEventOnEngine
+     Wait Until Keyword Succeeds    5 min    30 sec    InvokeDistributionUsingFile And RunEventOnApexEngine
+
+*** Keywords ***
+
+InvokeDistributionUsingFile And RunEventOnApexEngine
+    Copy File    ${SCRIPT_DIR}/config/distribution/csar/csar_temp.csar    ${SCRIPT_DIR}/config/distribution/csar/temp.csar
+    Move File    ${SCRIPT_DIR}/config/distribution/csar/temp.csar    ${SCRIPT_DIR}/config/distribution/temp/sample_csar_with_apex_policy.csar
+    Sleep    20 seconds    "Waiting for the Policy Distribution to call Policy API and PAP"
+    Create Session   apexSession  http://${APEX_IP}:23324   max_retries=1
+    ${data}=    Get Binary File     ${CURDIR}${/}data${/}event.json
+    &{headers}=  Create Dictionary    Content-Type=application/json    Accept=application/json
+    ${resp}=    Put Request    apexSession    /apex/FirstConsumer/EventIn    data=${data}   headers=${headers}
+    Should Be Equal As Strings    ${resp.status_code}   200
+    Remove Files    ${SCRIPT_DIR}/config/distribution/temp/sample_csar_with_apex_policy.csar
index 1d1a4d6..f06247d 100644 (file)
 {
-    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
-    "policy_types": [
-        {
-            "onap.policies.Monitoring": {
-                "derived_from": "tosca.policies.Root",
-                "description": "a base policy type for all policies that governs monitoring provisioning"
+  "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+  "policy_types": {
+    "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"
+          }
+        }
+      }
+    }
+  },
+  "data_types": {
+    "onap.datatypes.monitoring.metricsPerEventName": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "controlLoopSchemaType": {
+          "type": "string",
+          "required": true,
+          "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM",
+          "constraints": [
+            {
+              "valid_values": [
+                "VM",
+                "VNF"
+              ]
             }
+          ]
+        },
+        "eventName": {
+          "type": "string",
+          "required": true,
+          "description": "Event name to which thresholds need to be applied"
+        },
+        "policyName": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope Name"
         },
-        {
-            "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"
-                        }
-                    }
-                }
+        "policyScope": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope"
+        },
+        "policyVersion": {
+          "type": "string",
+          "required": true,
+          "description": "TCA Policy Scope Version"
+        },
+        "thresholds": {
+          "type": "list",
+          "required": true,
+          "description": "Thresholds associated with eventName",
+          "entry_schema": {
+            "type": "onap.datatypes.monitoring.thresholds"
+          }
+        }
+      }
+    },
+    "onap.datatypes.monitoring.tca_policy": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "domain": {
+          "type": "string",
+          "required": true,
+          "description": "Domain name to which TCA needs to be applied",
+          "default": "measurementsForVfScaling",
+          "constraints": [
+            {
+              "equal": "measurementsForVfScaling"
             }
+          ]
+        },
+        "metricsPerEventName": {
+          "type": "list",
+          "required": true,
+          "description": "Contains eventName and threshold details that need to be applied to given eventName",
+          "entry_schema": {
+            "type": "onap.datatypes.monitoring.metricsPerEventName"
+          }
         }
-    ],
-    "data_types": [
-        {
-            "onap.datatypes.monitoring.metricsPerEventName": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "controlLoopSchemaType": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Specifies Control Loop Schema Type for the event Name e.g. VNF, VM",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "VM",
-                                    "VNF"
-                                ]
-                            }
-                        ]
-                    },
-                    "eventName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Event name to which thresholds need to be applied"
-                    },
-                    "policyName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope Name"
-                    },
-                    "policyScope": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope"
-                    },
-                    "policyVersion": {
-                        "type": "string",
-                        "required": true,
-                        "description": "TCA Policy Scope Version"
-                    },
-                    "thresholds": {
-                        "type": "list",
-                        "required": true,
-                        "description": "Thresholds associated with eventName",
-                        "entry_schema": {
-                            "type": "onap.datatypes.monitoring.thresholds"
-                        }
-                    }
-                }
+      }
+    },
+    "onap.datatypes.monitoring.thresholds": {
+      "derived_from": "tosca.datatypes.Root",
+      "properties": {
+        "closedLoopControlName": {
+          "type": "string",
+          "required": true,
+          "description": "Closed Loop Control Name associated with the threshold"
+        },
+        "closedLoopEventStatus": {
+          "type": "string",
+          "required": true,
+          "description": "Closed Loop Event Status of the threshold",
+          "constraints": [
+            {
+              "valid_values": [
+                "ONSET",
+                "ABATED"
+              ]
+            }
+          ]
+        },
+        "direction": {
+          "type": "string",
+          "required": true,
+          "description": "Direction of the threshold",
+          "constraints": [
+            {
+              "valid_values": [
+                "LESS",
+                "LESS_OR_EQUAL",
+                "GREATER",
+                "GREATER_OR_EQUAL",
+                "EQUAL"
+              ]
             }
+          ]
         },
-        {
-            "onap.datatypes.monitoring.tca_policy": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "domain": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Domain name to which TCA needs to be applied",
-                        "default": "measurementsForVfScaling",
-                        "constraints": [
-                            {
-                                "equal": "measurementsForVfScaling"
-                            }
-                        ]
-                    },
-                    "metricsPerEventName": {
-                        "type": "list",
-                        "required": true,
-                        "description": "Contains eventName and threshold details that need to be applied to given eventName",
-                        "entry_schema": {
-                            "type": "onap.datatypes.monitoring.metricsPerEventName"
-                        }
-                    }
-                }
+        "fieldPath": {
+          "type": "string",
+          "required": true,
+          "description": "Json field Path as per CEF message which needs to be analyzed for TCA",
+          "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"
+              ]
             }
+          ]
         },
-        {
-            "onap.datatypes.monitoring.thresholds": {
-                "derived_from": "tosca.datatypes.Root",
-                "properties": {
-                    "closedLoopControlName": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Closed Loop Control Name associated with the threshold"
-                    },
-                    "closedLoopEventStatus": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Closed Loop Event Status of the threshold",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "ONSET",
-                                    "ABATED"
-                                ]
-                            }
-                        ]
-                    },
-                    "direction": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Direction of the threshold",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "LESS",
-                                    "LESS_OR_EQUAL",
-                                    "GREATER",
-                                    "GREATER_OR_EQUAL",
-                                    "EQUAL"
-                                ]
-                            }
-                        ]
-                    },
-                    "fieldPath": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Json field Path as per CEF message which needs to be analyzed for TCA",
-                        "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"
-                                ]
-                            }
-                        ]
-                    },
-                    "severity": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Threshold Event Severity",
-                        "constraints": [
-                            {
-                                "valid_values": [
-                                    "CRITICAL",
-                                    "MAJOR",
-                                    "MINOR",
-                                    "WARNING",
-                                    "NORMAL"
-                                ]
-                            }
-                        ]
-                    },
-                    "thresholdValue": {
-                        "type": "integer",
-                        "required": true,
-                        "description": "Threshold value for the field Path inside CEF message"
-                    },
-                    "version": {
-                        "type": "string",
-                        "required": true,
-                        "description": "Version number associated with the threshold"
-                    }
-                }
+        "severity": {
+          "type": "string",
+          "required": true,
+          "description": "Threshold Event Severity",
+          "constraints": [
+            {
+              "valid_values": [
+                "CRITICAL",
+                "MAJOR",
+                "MINOR",
+                "WARNING",
+                "NORMAL"
+              ]
             }
+          ]
+        },
+        "thresholdValue": {
+          "type": "integer",
+          "required": true,
+          "description": "Threshold value for the field Path inside CEF message"
+        },
+        "version": {
+          "type": "string",
+          "required": true,
+          "description": "Version number associated with the threshold"
         }
-    ]
+      }
+    }
+  }
 }
\ No newline at end of file
index 11b9880..47a9f21 100644 (file)
@@ -20,7 +20,7 @@
         {
           "artifactName": "manualdistributiontestvnf0_modules.json",
           "artifactType": "VF_MODULES_METADATA",
-          "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json",
+          "artifactURL": "/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/manualdistributiontestvnf0_modules.json",
           "artifactChecksum": "NTc0NDlkNzdmYzVmMDM3ZjMxMTE2NDBmYWJiMDM1NzY\u003d",
           "artifactDescription": "Auto-generated VF Modules information artifact",
           "artifactTimeout": 120,
@@ -31,7 +31,7 @@
         {
           "artifactName": "base_ves_med1.yaml",
           "artifactType": "HEAT",
-          "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.yaml",
+          "artifactURL": "/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.yaml",
           "artifactChecksum": "YTAwNTQ3NjczY2Y5MmUwZjUzZTY1ZjNhNTA0NGQyMDY\u003d",
           "artifactDescription": "created from csar",
           "artifactTimeout": 120,
@@ -40,7 +40,7 @@
           "generatedArtifact": {
             "artifactName": "base_ves_med1.env",
             "artifactType": "HEAT_ENV",
-            "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env",
+            "artifactURL": "/unzipped_sdc_csar/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,
@@ -53,7 +53,7 @@
         {
           "artifactName": "base_ves_med1.env",
           "artifactType": "HEAT_ENV",
-          "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/base_ves_med1.env",
+          "artifactURL": "/unzipped_sdc_csar/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,
@@ -64,7 +64,7 @@
         {
           "artifactName": "TOSCA.meta",
           "artifactType": "OTHER",
-          "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/TOSCA.meta",
+          "artifactURL": "/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/TOSCA.meta",
           "artifactChecksum": "NWE2ODcyOWY0NGI2MzEyOGViYjUxNTEwMjU5OWRhZmI\u003d",
           "artifactDescription": "created from csar",
           "artifactTimeout": 120,
@@ -75,7 +75,7 @@
         {
           "artifactName": "descriptor.yaml",
           "artifactType": "OTHER",
-          "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml",
+          "artifactURL": "/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/resourceInstances/manualdistributiontestvnf0/artifacts/descriptor.yaml",
           "artifactChecksum": "YWZkNTg2ZGMzZjRhZjgxNzNkODJiNjgwZmRlZjlmNDE\u003d",
           "artifactDescription": "created from csar",
           "artifactTimeout": 120,
@@ -90,7 +90,7 @@
     {
       "artifactName": "service-Manualdistributiontestservice-csar.csar",
       "artifactType": "TOSCA_CSAR",
-      "artifactURL": "/sdc/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar",
+      "artifactURL": "/unzipped_sdc_csar/v1/catalog/services/Manualdistributiontestservice/1.0/artifacts/service-Manualdistributiontestservice-csar.csar",
       "artifactChecksum": "YWYxNmUxNTlhMmE3MjA1NGVhNTBhYTdkMmU0OTZjNzM\u003d",
       "artifactDescription": "TOSCA definition package of the asset",
       "artifactTimeout": 0,
   ],
   "workloadContext": "Production"
 }
-
diff --git a/tests/so/etsi/data/vnfInstantiationRequest.json b/tests/so/etsi/data/vnfInstantiationRequest.json
new file mode 100644 (file)
index 0000000..a4cc5c9
--- /dev/null
@@ -0,0 +1,49 @@
+{
+  "requestDetails": {
+    "requestInfo": {
+      "instanceName": "CsitEtsiVnfInstance",
+      "source": "VID",
+      "suppressRollback": false,
+      "requestorId": "demo",
+      "productFamilyId": "f13844f4-dbf8-4d0e-a979-45204f3ddb4e"
+    },
+    "modelInfo": {
+      "modelType": "vnf",
+      "modelInvariantId": "0a0b9979-863d-4b7e-b7f4-d27725a182b3",
+      "modelVersionId": "8f43a8c9-c677-462a-ae36-8ddb5990a60d",
+      "modelName": "manualDistributionTestVNF",
+      "modelVersion": "1.0",
+      "modelCustomizationId": "82ad3aa0-edc6-410c-a217-655fb064323f",
+      "modelCustomizationName": "manualDistributionTestVNF 0"
+    },
+    "requestParameters": {
+      "userParams": [],
+      "testApi": "GR_API"
+    },
+    "cloudConfiguration": {
+      "lcpCloudRegionId": "EtsiCloudRegion",
+      "cloudOwner": "CloudOwner",
+      "tenantId": "693c7729b2364a26a3ca602e6f66187d"
+    },
+    "lineOfBusiness": {
+      "lineOfBusinessName": "EtsiCsitLineOfBusiness"
+    },
+    "platform": {
+      "platformName": "EtsiCsitPlatform"
+    },
+    "relatedInstanceList": [
+      {
+        "relatedInstance": {
+          "instanceId": "",
+          "modelInfo": {
+            "modelType": "service",
+            "modelName": "Sol004Zip4Service",
+            "modelInvariantId": "0ddc448d-5513-44bc-8b02-5759d84600d5",
+            "modelVersion": "1.0",
+            "modelVersionId": "99d59273-4450-4034-9141-027f0c1a807a"
+          }
+        }
+      }
+    ]
+  }
+}
\ No newline at end of file
index b2bf3ed..e35b536 100644 (file)
@@ -5,13 +5,14 @@ Library     OperatingSystem
 Library     json
 
 *** Variables ***
-
+${SLEEP_INTERVAL_SEC}=   5
+${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}=     48     # Represents the maximum number of attempts that will be made before a timeout. It sleeps for SLEEP_INTERVAL_SEC seconds before retry.
 
 *** Test Cases ***
 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'
@@ -23,20 +24,55 @@ Invoke Service Instantiation
     ${service_instantiation_request}=    Post Request    api_handler_session    /onap/so/infra/serviceInstantiation/v7/serviceInstances    data=${data}    headers=${headers}
     Run Keyword If  '${service_instantiation_request.status_code}' == '200'  log to console   \nexecuted with expected result
     log to console      ${service_instantiation_request.content}
-    ${service_instantiation_json_responce}=    Evaluate     json.loads("""${service_instantiation_request.content}""")    json
-
-    ${actual_request_state}=    SET VARIABLE    ""
+    ${service_instantiation_json_response}=    Evaluate     json.loads("""${service_instantiation_request.content}""")    json
+    ${request_ID}=          Set Variable         ${service_instantiation_json_response}[requestReferences][requestId]
+    ${service_instance_Id}=     Set Variable       ${service_instantiation_json_response}[requestReferences][instanceId]
+    SET GLOBAL VARIABLE       ${service_instance_Id}
+    ${actual_request_state}=    Set Variable    ""
 
-    : FOR    ${INDEX}    IN RANGE    48
-    \   ${orchestration_status_request}=   Get Request  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${service_instantiation_json_responce}[requestReferences][requestId]
+    : FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
+    \   ${orchestration_status_request}=   Get Request  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${request_ID}
     \   Run Keyword If  '${orchestration_status_request.status_code}' == '200'  log to console   \nexecuted with expected result
     \   log to console      ${orchestration_status_request.content}
-    \   ${orchestration_json_responce}=    Evaluate     json.loads("""${orchestration_status_request.content}""")    json
-    \   ${actual_request_state}=     SET VARIABLE       ${orchestration_json_responce}[request][requestStatus][requestState]
+    \   ${orchestration_json_response}=    Evaluate     json.loads("""${orchestration_status_request.content}""")    json
+    \   ${actual_request_state}=     SET VARIABLE       ${orchestration_json_response}[request][requestStatus][requestState]
     \   Log To Console    Received actual repsonse status:${actual_request_state}
     \   RUN KEYWORD IF   '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED'      Exit For Loop
-    \   log to console  Will try again after 5 seconds
-    \   SLEEP   5s
+    \   log to console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
+    \   SLEEP   ${SLEEP_INTERVAL_SEC}s
+
     Log To Console     final repsonse status received: ${actual_request_state}
     Run Keyword If  '${actual_request_state}' == 'COMPLETE'  log to console   \nexecuted with expected result
     Should Be Equal As Strings    '${actual_request_state}'    'COMPLETE'
+
+Invoke VNF Instantiation
+    Run Keyword If      "${service_instance_Id}"!="${EMPTY}"      Log to Console    Service Instance ID :${service_instance_Id} received
+    ...                ELSE      Fail           Log to Console  Invalid Service Instance ID :${service_instance_Id} recieved
+
+    Create Session   api_handler_session  http://${REPO_IP}:8080
+    ${data}=    Get Binary File     ${CURDIR}${/}data${/}vnfInstantiationRequest.json
+    ${vnf_instantiate_request_json}=    evaluate    json.loads('''${data}''')    json
+    set to dictionary    ${vnf_instantiate_request_json}[requestDetails][relatedInstanceList][0][relatedInstance]        instanceId=${service_instance_Id}
+    ${vnf_instantiate_request_string}=    evaluate    json.dumps(${vnf_instantiate_request_json})    json
+
+    &{headers}=  Create Dictionary    Authorization=Basic SW5mcmFQb3J0YWxDbGllbnQ6cGFzc3dvcmQxJA==    Content-Type=application/json    Accept=application/json
+    ${vnf_instantiate_request}=    Post Request    api_handler_session    /onap/so/infra/serviceInstantiation/v7/serviceInstances/${service_instance_Id}/vnfs   data=${vnf_instantiate_request_string}    headers=${headers}
+    Run Keyword If  '${vnf_instantiate_request.status_code}' == '200'  log to console   \nexecuted with expected result
+    ${vnf_instantiate_json_response}=    Evaluate     json.loads("""${vnf_instantiate_request.content}""")    json
+    ${request_ID}=          Set Variable         ${vnf_instantiate_json_response}[requestReferences][requestId]
+    ${actual_request_state}=    SET VARIABLE    ""
+
+    : FOR    ${INDEX}    IN RANGE    ${MAXIMUM_ATTEMPTS_BEFORE_TIMEOUT}
+    \   ${orchestration_status_request}=   Get Request  api_handler_session   /onap/so/infra/orchestrationRequests/v7/${request_ID}
+    \   Run Keyword If  '${orchestration_status_request.status_code}' == '200'  log to console   \nexecuted with expected result
+    \   Log To Console      ${orchestration_status_request.content}
+    \   ${orchestration_json_response}=    Evaluate     json.loads("""${orchestration_status_request.content}""")    json
+    \   ${actual_request_state}=     SET VARIABLE       ${orchestration_json_response}[request][requestStatus][requestState]
+    \   ${service_instance_Id}=     SET VARIABLE       ${orchestration_json_response}[request][instanceReferences][serviceInstanceId]
+    \   RUN KEYWORD IF   '${actual_request_state}' == 'COMPLETE' or '${actual_request_state}' == 'FAILED'      Exit For Loop
+    \   Log To Console  Will try again after ${SLEEP_INTERVAL_SEC} seconds
+    \   SLEEP   ${SLEEP_INTERVAL_SEC}s
+
+    Log To Console     final repsonse status received: ${actual_request_state}
+    Run Keyword If  '${actual_request_state}' == 'COMPLETE'  log to console   \nexecuted with expected result
+    Should Be Equal As Strings    '${actual_request_state}'    'COMPLETE'
\ No newline at end of file