The testcase is currently part of the robot image onap/testsuite:1.5.3-STAGING-latest.
About
This page contains instructions for executing the VNF Lifecycle Validation automation flow for heat-based VNFs. The result will be a .tar.gz file that can be used to submit to the OVP Portal to obtain a certification badge for a VNF. The execution is very similar to running the other ONAP demo VNFs, however there are some additional steps detailed below.
This will be introduced in the El Alto release, and will not be backwards compatible with previous ONAP releases.
Prerequisites
- ONAP deployed via OOM.
- An OpenStack deployment.
- kubectl
- bash
- VNF Heat Templates
- Preload json files
After deploying ONAP, you need to configure ONAP with:
- A cloud owner
- A cloud region
- A subscriber
- A service type
- A project name
- An owning entity
- A platform
- A line of business
- A cloud site
If you're not familiar with how to configure ONAP, there are guides that use robot or direct api requests available to help, as well as a guide for adding a new OpenStack site to ONAP.
Preparing the VNF
The vnf lifecycle validation testsuite requires the VNF to be packaged into a specific directory hierarchy, shown below.
vnf_folder ├── /templates | └── base.yaml | └── base.env | └── incremental_0.yaml | └── incremental_0.env | └── ... ├── /preloads | └── base_preload.json | └── incremental_0_preload.json | └── ... └── vnf-details.json
- The name for vnf_folder is free-form, and can be located anywhere on your computer. The path to this folder will be passed to the testsuite as an argument.
- /templates should contain your VVP-compliant VNF heat templates.
- /preloads should contain a preload file for each VNF module (TODO: add link to preload documentation).
- For a VNF-API preload: vnf-name, vnf-type, generic-vnf-type, and generic-vnf-name should be empty strings.
- For a GR-API preload: vnf-name, vnf-type, vf-module-type, and vf-module-name should be empty strings.
- This information will be populated at runtime by the testsuite.
- vnf-details should be a json file with the information that will be used by ONAP to instantiate the VNF. The structure of vnf-details is shown below.
vnf-details.json
{ "vnf_name": "The Vnf Name", "description": "Description of the VNF", "modules": [ { "filename": "base.yaml", "isBase": "true", "preload": "base_preload.json" }, { "filename": "incremental_0.yaml", "isBase": "false", "preload": "incremental_0.json" }, ... ], "api_type": "[gr_api] or [vnf_api]", "subscriber": "<subscriber name>", "service_type": "<service type>", "tenant_name": "<name of tenant>", "region_id": "<name of region>", "cloud_owner": "<name of cloud owner>", "project_name": "<name of project>", "owning_entity": "<name of owning entity>", "platform": "<name of platform>", "line_of_business": "<name of line of business>", "os_password": "<openstack password>" }
- modules must contain an entry for each module of the VNF. Only one module can be a base module.
- api_type should match the format of the preloads that are provided in the package.
- The other information should match what was used to configure ONAP during the pre-requisite section of this guide.
Running the testsuite
The script to execute the testsuite is located in the OOM project. Clone the OOM repository and cd to the robot folder.
$ git clone ssh://<username>@gerrit.onap.org:29418/oom --recurse-submodules $ cd oom/kubernetes/robot $ ./instantiate-k8s.sh --help ./instantiate-k8s.sh [options] required: -n, --namespace <namespace> namespace that robot pod is running under. -f, --folder <folder> path to folder containing heat templates, preloads, and vnf-details.json. additional options: -p, --poll some cloud environments (like azure) have a short time out value when executing kubectl. If your shell exits before the testsuite finishes, using this option will poll the testsuite logs every 30 seconds until the test finishes. -t, --tag <tag> robot testcase tag to execute (default is instantiate_vnf). This script executes the VNF instantiation robot testsuite. - It copies the VNF folder to the robot container that is part of the ONAP deployment. - It models, distributes, and instantiates a heat-based VNF. - It copies the logs to an output directory, and creates a tarball for upload to the OVP portal.
Execution
$ ./instantiate-k8s.sh --namespace onap --folder /tmp/vnf-instantiation/examples/VNF_API/pass/multi_module/ --poll ... ... ... ... ------------------------------------------------------------------------------ Testsuites.Vnf Instantiation :: The main driver for instantiating ... | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ============================================================================== Testsuites | PASS | 1 critical test, 1 passed, 0 failed 1 test total, 1 passed, 0 failed ============================================================================== Output: /share/logs/0003_ete_instantiate_vnf/output.xml + set +x testsuite has finished Copying Results from pod... /tmp/vnf-instantiation /tmp/vnf-instantiation a log.html a results.json a stack_report.json a validation-scripts.json /tmp/vnf-instantiation VNF test results: /tmp/vnfdata.46749/vnf_heat_results.tar.gz
The testsuite takes about 10-15 minutes for a simple VNF, and will take longer for a more complicated VNF.
Results
Once the testsuite is finished, it will create a directory and tarball in /tmp (the name of the directory and file is shown at the end of the stdout of the script). There will be a results.json in that directory that has the ultimate outcome of the test, in the structure shown below.
Log files
The output file will have 4 log files in it.
- results.json: This is high-level results file of all of the test steps, and is consumed by the OVP portal.
- report.json: This is the output of the vvp validation scripts.
- stack_report.json: This is the output from querying openstack to validate the heat modules.
- log.html: This is the robot log, and contains each execution step of the testcase.
results.json
{ "vnf_checksum": "afc57604a3b3b7401d5b8648328807b594d7711355a2315095ac57db4c334a50", "build_tag": "vnf-validation-53270", "version": "2019.09", "test_date": "2019-09-04 17:50:10.575", "duration": 437.002, "vnf_type": "heat", "testcases_list": [ { "mandatory": "true", "name": "onap-vvp.validate.heat", "result": "PASS", "objective": "onap heat template validation", "sub_testcase": [], "portal_key_file": "report.json" }, { "mandatory": "true", "name": "onap-vvp.lifecycle_validate.heat", "result": "PASS", "objective": "onap vnf lifecycle validation", "sub_testcase": [ { "name": "model-and-distribute", "result": "PASS" }, { "name": "instantiation", "result": "PASS" } ], "portal_key_file": "log.html" }, { "mandatory": "true", "name": "stack_validation", "result": "PASS", "objective": "onap vnf openstack validation", "sub_testcase": [], "portal_key_file": "stack_report.json" } ] }
If the result is "PASS", that means the testsuite was successful and the tarball is ready for submission to the OVP portal.
Examples
Attached to this page are simple examples that you can use to try out the testcase, along with the output tarballs that are generated. To run one of the examples, download one of the zip files named input-* and unzip it to your computer, then follow the instructions from the section Running the testsuite above.