Enhance VNF package (TOSCA CSAR) in Tacker¶
https://blueprints.launchpad.net/tacker/+spec/tosca-csar-mgmt-driver
This specification describes enhancement of VNF Packages Management in Tacker.
Problem description¶
In Train release, we have added limited support of VNF Package Management as defined in ETSI NFV-SOL 005 [1]. Now, we want to extend that support and implement following REST APIs.
Read VNFD of an on-boarded VNF package
GET /vnf_packages/{vnfPkgId}/vnfd
.Fetch an on-boarded VNF package
GET /vnf_packages/{vnfPkgId}/package_content
.Update information about an individual VNF package
PATCH /vnf_packages/{vnfPkgId}
.Implement query parameter support for list VNF packages.
Upload VNF Package from URI REST API `` POST /vnf_packages/{id}/package_content/upload_from_uri`` accepts userName and password parameter but internally these parameters are not used while getting the CSAR zip file from the URI as specified in the addressInformation. If the server serving the CSAR zip requires authentication, it would return 401 error and the downloading of VNF package will fail thereby reverting back VNF package
PackageOnboardingStateType
status fromuploading
tocreate
. UseuserName
andpassword
parameters to createAuthorization
HTTP header so that the server requiring authentication for getting VNF package will succeed.
Proposed change¶
To implement new REST APIs we will need to make changes in the following components:
Tacker API service
Add new APIs for managing VNF Packages.
Modify the list VNF package API
GET {apiRoot}/vnfpkgm/v1/vnf_packages
to accept query parameters and filter out VNF packages accordingly.Modify the upload VNF package from URI API to enable authentication using given username and password.
Add new OSC commands in python-tackerclient to support management of VNF packages.
Tacker-server’s new REST API Resources and methods overview:
Resource URI |
HTTP Method |
Meaning |
---|---|---|
{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/vnfd |
GET |
Read VNFD of an on-boarded VNF package |
{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content |
GET |
Fetch an on-boarded VNF package |
{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId} |
PATCH |
Update information about an individual VNF package |
{apiRoot}/vnfpkgm/v1/vnf_packages?filter= (eq, vnfSoftwareVersion,’value’) |
GET |
Get list of VNF packages using query URI parameters. This REST API is already supported in Train release except URI query parameters. |
Fetch an on-boarded VNF Package¶
In order to fetch an on-boarded VNF package based on HTTP_RANGE
HTTP
request header, it’s important to know the size of the CSAR zip file in
advance but currently size is not persisted in the vnf_packages
db
table. So we need to add size
db column of BigInteger
type in
vnf_package
db table. For existing VNF packages, we will need to
calculate the size of the CSAR file and store it in the size
db
column at the time of fetching an on-boarded VNF package if it’s not
set. For new VNF packages, size will be calculated and set at the time
of uploading VNF package.
Use auth parameters for uploading VNF package from URI¶
Use userName
and password
parameters to set “Authorization”
header as shown below if these parameters are passed in the request body
of POST /vnf_packages/{id}/package_content/upload_from_uri
REST API.
The userName and password are combined with a single colon (:). This means that the userName itself cannot contain a colon.
The resulting string is encoded using a variant of Base64.
The authorization method (Basic and a space (e.g. “Basic “) is then prepended to the encoded string.
For example, if userName and password are “xyz” and “xyzpassword”, then the field’s value is the base64-encoding of xyz:xyzpassword, or eHl6Onh5enBhc3N3b3Jk and the Authorization header will appear as:
Authorization: Basic eHl6Onh5enBhc3N3b3Jk
Data model Impact¶
Modify vnf_packages
db table to add size
column of type
BigInteger
. The default value of size
column will be set to 0.
REST API impact¶
Below RestFul APIs will be added:
Resource URI |
HTTP Method |
Meaning |
Response Codes |
---|---|---|---|
{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/vnfd |
GET |
Read VNFD of an on-boarded VNF package |
Success: 200 Error: 401,403 404, 406, 409 |
{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId}/package_content |
GET |
Fetch an on-boarded VNF package |
Success: 200 Error: 401, 403 404, 406, 409, 416 |
{apiRoot}/vnfpkgm/v1/vnf_packages/{vnfPkgId} |
PATCH |
Update information about an individual VNF package |
Success: 200 Error: 401,403 404, 409 |
{apiRoot}/vnfpkgm/v1/vnf_packages?filter= (eq, vnfSoftwareVersion,’value’) |
GET |
Get list of VNF packages using query URI parameters. This REST API is already supported in Train release except URI query parameters. |
Success: 200 Error: 400, 401, 403 |
Implementation¶
Assignee(s)¶
- Primary assignee:
Hiroyuki Jo <hiroyuki.jo.mt@hco.ntt.co.jp>
- Other contributors:
Nitin Uikey <nitin.uikey@nttdata.com>
Niraj Singh <niraj.singh@nttdata.com>
Work Items¶
Implement new REST APIs in /vnfpkgm/v1 endpoint.
Add new OSC commands in python-tackerclient to support new REST APIs.
Modify OSC
vnf package list
command to add command line options to filter out VNF packages.Add
Authorization
HTTP header support for downloading VNF package requiring authentication.Add unit and functional tests.
Dependencies¶
None
Testing¶
Unit and functional test cases will be added for onboarding of VNF Packages.
Documentation Impact¶
None