Files
tacker-specs/specs/victoria/support-sol003-vnfm-operations.rst
Yasufumi Ogawa af542c4418 Remove sphinxcontrib-*diag
As suggested open openstack-discuss ML[1], some sphinxcontrib packages
have not been updated for several years and might going to be
maintained anymore. In tacker-specs repo, many diagrams are compiled
with sphinxcontrib-seqdiag and sphinxcontrib-nwdiag. This update is to
drop using the packages and add image files instead. The embedded
source codes are remained as separated files and named as "*.diag".

In addition, it includes two updates other than that.

* usage of the dropped diagram support described in the
  `specs/template.rst` is also removed because it's no longer
  supported.

* Upgrade the version of `pillow` to the latest 11.0.0 since
  installation is failed if the version is old.

[1] https://lists.openstack.org/archives/list/openstack-discuss@lists.openstack.org/message/4IID4UEXY4PJJGBTMFMTRYLKJIN4GOQ6/

Change-Id: I8cede6de0770b68a9984617643aa4aa81e47ba5c
2024-12-04 09:01:41 +00:00

502 lines
12 KiB
ReStructuredText

..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
===========================================================
Support ETSI NFV SOL003 to interoperate with 3rd-party NFVO
===========================================================
https://blueprints.launchpad.net/tacker/+spec/support-vnfm-operations
Enables Tacker to operate as a VNFM that can interoperate with 3rd-party NFVO.
Therefore, support ETSI NFV SOL003 [#NFV-SOL003]_ Or-Vnfm specifications and
VNF lifecycle operations interoperating with NFVO.
Problem description
===================
In current Tacker implementation, functions of VNFM and NFVO are tightly coupled.
The reason for such an implementation is that users can easily build NFV
environment(VNFM + NFVO) to small start using Tacker. On the other hand,
it is also important for Tacker to cooperate with 3rd-party NFVO as VNFM when
considering the practical application of Tacker.
So, Tacker as VNFM will support VNF package and grant APIs based on ETSI NFV
SOL003 [#NFV-SOL003]_.
Proposed change
===============
This feature supports the functionality for Tacker to connect to NFVO as VNFM.
When Tacker connects to 3rd-party NFVO (as referred to NFVO) as VNFM,
Tacker(VNFM) needs the following information from NFVO, so the operations
to get them will be implemented.
- VNF package information
- Grant information
1) NFVO information management
------------------------------
1-1) Flow of Getting VNF package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
When operating as VNFM connected to NFVO, Tacker-VNFM uses the following API
to get the VNF package information from NFVO when starting
lifecycle management(LCM) operation.
The following APIs sent from VNFM can be sent or suppressed by the Tacker
configuration.
VNF packages uses "vnf_packages" API.
Precondition: One or more "Individual VNF package" resources are created.
.. image:: ./support-sol003-vnfm-operations/01.png
* VNF packages (GET)
When VNFM receives Create VNF request, VNFM will request get
vnfPkgInformation to NFVO.
VNFM sets the attribute based filtering parameter to get vnfPkgId.
NFVO sends http response with vnfPkgInfo that is based on the vnfPkgId.
After http response is received, VNFM stores the received vnfPkgId.
* VNF package content (GET)
* VNFD in an individual VNF package (GET)
* Individual VNF package artifact (GET)
VNFM requests to get information of content/VNFD/artifact.
NFVO provides such information to VNFM.
After http response is received, VNFM stores the contents received.
* Individual VNF package (GET)
In a case of having vnfPkgId, VNFM can get only related vnfPkgInformation.
ModifyVNF Information can send this API.
1-2) Flow of grant request with synchronous response
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This operation allows the VNFM to request a grant for authorization of a VNF
LCM operation. This interface supports multiple use cases, such as:
* The NFVO can approve or reject a request based on policies (e.g. dependencies
between VNFs) and available capacity.
* When applicable, the NFVO can reserve resources based on the VNFM's
virtualised resources request.
* The NFVO can provide to the VNFM information about the VIM where cloud
resources are allocated. This can include additional information such as
the availability zone.
Grant API is sent in below sequences:
- Instantiation
- Healing
- Scaling
- Termination
.. image:: ./support-sol003-vnfm-operations/02.png
After receiving 201 created with body data, VNFM updates the grant information.
Postcondition: The grant information is available to the VNFM.
2) A judgement of NFVO operation condition
--------------------------------------------
Since API transmission is performed for connection with NFVO, communication
with NFVO is enabled by setting URI in the Tacker configuration.
If no URI is set, all API transmissions for NFVO will be suppressed.
The following APIs sent from VNFM can be sent or suppressed by the Tacker
configuration.
- VNF package information
- Grant information
3) Authorization of API requests and notifications
--------------------------------------------------
3-1) A support of OAuth2.0
~~~~~~~~~~~~~~~~~~~~~~~~~~
SOL013 [#NFV-SOL013]_ stipulates that ETSI NFV MANO API call uses
OAuth2 [#NFV-SOL013]_, and sending a notification uses OAuth2 or HTTP Basic
authentication.
Currently Tacker does not support the operation corresponding to OAuth2.
Tacker requires IETF RFC 6749 compliant authorization.
3-2) A support of TLS1.2
~~~~~~~~~~~~~~~~~~~~~~~~
Currently Tacker supports SSL. Transport security support is required to
prevent falsification of transmitted information and to secure a free
communication path.
SOL013 [#NFV-SOL013]_ recommends TLS1.2 (IETF RFC 5246). Tacker also needs to
be TLS1.2 compliant.
4) API enhancement of CreateVNF
-------------------------------
For enhancement of receiving VNF package metadata, VNFM support "metadata" parameter
on "Create VNF" request.
This parameter is stored in VNFM.
This parameter overwrites 6.2.35
tosca.datatypes.nfv.VnfInfoModifiableAttributesMetadata in SOL001
[#NFV-SOL001]_.
However, metadata does not affect lifecycle based on SOL003 [#NFV-SOL003]_
5.5.2.2 Type: VnfInstance. Therefore, Tacker just save metadata.
Alternatives
------------
None
Data model impact
-----------------
Add a table in ``tacker`` database.
placement_constraint:
.. code-block:: python
id id varchar(36) Not Null
vnf_instance_id vnf_instance_id varchar(36) Not Null
affinity_or_anti_affinity affinity_or_anti_affinity varchar(255) Not Null
scope scope varchar(255) Not Null
server_group_name server_group_name varchar(255) Not Null
resource resource json Not Null
created_at created_at datetime Not Null
updated_at updated_at datetime
deleted_at deleted_at datetime
deleted deleted tinyint(1) Not Null
This table has `id` as primary key. `vnf_instance_id` is a foreign
key of `vnf_instances`.`id`.
REST API impact
---------------
None
Security impact
---------------
All APIs are authenticated by OAuth2 and encrypted by TLS1.2.
Notifications impact
--------------------
None
Other end user impact
---------------------
None
Performance Impact
------------------
VNFM get pkg data/Image during Instantiation execute.
The process may take some time.
Other deployer impact
---------------------
None
Developer impact
----------------
Tacker-VNFM calls the following APIs as a client.
These attributes are based on ETSI NFV SOL003 [#NFV-SOL003]_.
* | **Name**: Grants
| **Description**: Request a grant
| **Method type**: POST
| **URL for the resource**: /grant/v1/grants
| **Request**:
+--------------+-------------+--------------------------------------------+
| Data type | Cardinality | Description |
+==============+=============+============================================+
| GrantRequest | 1 | Parameters for requesting Grants resource. |
+--------------+-------------+--------------------------------------------+
.. list-table::
:header-rows: 1
* - Attribute name
- Data type
- Cardinality
- Support
* - vnfInstanceId
- Identifier
- 1
- Yes
* - vnfLcmOpOccId
- Identifier
- 1
- Yes
* - vnfdId
- Identifier
- 1
- Yes
* - flavourId
- Identifier
- 0..1
- Yes
* - operation
- GrantedLcmOperationType
- 1
- Yes
* - isAutomaticInvocation
- Boolean
- 1
- Yes
* - instantiationLevelId
- Identifier
- 0..1
- No
* - addResources
- ResourceDefinition
- 0..N
- Yes
* - tempResources
- ResourceDefinition
- 0..N
- No
* - removeResources
- ResourceDefinition
- 0..N
- Yes
* - updateResources
- ResourceDefinition
- 0..N
- No
* - placementConstraints
- PlacementConstraint
- 0..N
- Yes
* - vimConstraints
- VimConstraint
- 0..N
- No
* - additionalParams
- KeyValuePairs
- 0..1
- No
* - _links
- Structure (inlined)
- 1
- Yes
* - >vnfLcmOpOcc
- Link
- 1
- Yes
* - >vnfInstance
- Link
- 1
- Yes
| **Response**:
.. list-table::
:widths: 10 10 20 50
:header-rows: 1
* - Data type
- Cardinality
- Response Codes
- Description
* - Grant
- 1
- | Success 201
| Error 400 401 403
- The grant has been created successfully (synchronous mode).
.. list-table::
:header-rows: 1
* - Attributename
- Datatype
- Cardinality
- Support
* - id
- Identifier
- 1
- Yes
* - vnfInstanceId
- Identifier
- 1
- Yes
* - vnfLcmOpOccId
- Identifier
- 1
- Yes
* - vimConnections
- VimConnectionInfo
- 0..N
- Yes
* - zones
- ZoneInfo
- 0..N
- Yes
* - zoneGroups
- ZoneGroupInfo
- 0..N
- No
* - computeReservationId
- IdentifierInVim
- 0..1
- No
* - networkReservationId
- IdentifierInVim
- 0..1
- No
* - storageReservationId
- IdentifierInVim
- 0..1
- No
* - addResources
- GrantInfo
- 0..N
- Yes
* - tempResources
- GrantInfo
- 0..N
- No
* - removeResources
- GrantInfo
- 0..N
- Yes
* - updateResources
- GrantInfo
- 0..N
- No
* - vimAssets
- Structure(inlined)
- 0..1
- Yes
* - >computeResourceFlavours
- VimComputeResourceFlavour
- 0..N
- Yes
* - >softwareImages
- VimSoftwareImage
- 0..N
- Yes
* - extVirtualLinks
- ExtVirtualLinkData
- 0..N
- No
* - extManagedVirtualLinks
- ExtManagedVirtualLinkData
- 0..N
- No
* - additionalParams
- KeyValuePairs
- 0..1
- Yes
* - _links
- Structure(inlined)
- 1
- Yes
* - >self
- Link
- 1
- Yes
* - >vnfLcmOpOcc
- Link
- 1
- Yes
* - >vnfInstance
- Link
- 1
- Yes
* | **Name**: VNF packages
| **Description**: Query VNF packages information
| **Method type**: GET
| **URL for the resource**: /vnf_packages
* | **Name**: VNF package content
| **Description**: Fetch an on-boarded VNF package
| **Method type**: GET
| **URL for the resource**: /vnf_packages/{vnfPkgId}/package_content
* | **Name**: VNFD of an individual VNF package
| **Description**: Read VNFD of an onboarded VNF package
| **Method type**: GET
| **URL for the resource**: /vnf_packages/{vnfPkgId}/vnfd
* | **Name**: Individual VNF package artifact
| **Description**: Fetch individual VNF package artifact
| **Method type**: GET
| **URL for the resource**: /vnf_packages/{vnfPkgId}/artifacts/{artifactPath}
* | **Name**: Individual VNF package
| **Description**: Read information about an individual VNF package
| **Method type**: GET
| **URL for the resource**: /vnf_packages/{vnfPkgId}
Implementation
==============
Assignee(s)
-----------
Primary assignee:
Makoto Hamada <makoto.hamada.xu@hco.ntt.co.jp>
Work Items
----------
* Implement process of Getting VNF package and Grant.
* Add new config and change Tacker Config documentation.
* Support OAuth2.0 and TLS1.2
* Support API enhancement of CreateVNF.
* Add new unit and functional tests.
Dependencies
============
"Create VNF" referred in "Proposed change" is ETSI SOL based API proposed
in the spec [#enhance_spec]_.
Testing
=======
Unit and functional test cases will be added for VNF package and Grant.
Documentation Impact
====================
A new configuration options for connection of NFV will be added to
configuration reference.
References
==========
.. [#NFV-SOL001] https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/001/02.06.01_60/gs_nfv-sol001v020601p.pdf
.. [#NFV-SOL003] https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/02.06.01_60/gs_nfv-sol003v020601p.pdf
.. [#NFV-SOL013] https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/013/02.06.01_60/gs_nfv-sol013v020601p.pdf
.. [#enhance_spec] https://specs.openstack.org/openstack/tacker-specs/specs/victoria/enhancement_enhance-vnf-lcm-api-support.html