From 84ec2c841e9393c6cf81cea82df223d079cf6bde Mon Sep 17 00:00:00 2001 From: Keiko Kuriu Date: Fri, 29 May 2020 17:47:03 +0900 Subject: [PATCH] Support VNF update operation based on ETSI NFV-SOL specification Introduce a new interface to invoke VNF update operation towards Tacker. Blueprint: support-etsi-nfv-specs Change-Id: Iccb3eff554126748c7ee953c13f949392c8bf9e6 --- ...t-vnf-update-api-based-on-etsi-nfv-sol.rst | 338 ++++++++++++++++++ 1 file changed, 338 insertions(+) create mode 100644 specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst diff --git a/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst new file mode 100644 index 00000000..0acb1a95 --- /dev/null +++ b/specs/victoria/support-vnf-update-api-based-on-etsi-nfv-sol.rst @@ -0,0 +1,338 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + http://creativecommons.org/licenses/by/3.0/legalcode + + +================================================================= +Support VNF update operations based on ETSI NFV-SOL specification +================================================================= + +https://blueprints.launchpad.net/tacker/+spec/support-etsi-nfv-specs + +ETSI specifications within the NFV Architecture Framework [#etsi_nfv]_ +describe the main aspects of NFV development and usage based on of the +industry needs, feedback from SDN/NFV vendors and telecom operators. +These specifications include the REST API and data model architecture +which is used by NFV users and developers in related products. + +Problem description +=================== + +In the current Tacker implementation based on ETSI NFV-SOL, +Tacker uses its own API which describes VNF update operations +which is Ability to execute a VNF application software modification. + +However, these operations are not aligned with the current ETSI NFV +data-model. As a result, there might be lack of compatibility with `3rd +party VNFs` [#etsi_plugtest2]_, as they are developed according to ETSI +NFV specifications. Support of key ETSI NFV specifications will +significantly reduce efforts for Tacker integration into Telecom production +networks and also will simplify further development and support of future +standards. + +Proposed change +=============== + +Introduce a new interface for updating information about a VNF instance. + +The operation provided through this interface is: +* Modify VNF + +The following items can be updated by this operation.: +- vnfInstanceName +- vnfInstanceDescription +- vnfdId +- metadata +- vimConnectionInfo + +1) Flow of the Modify VNF Information operation (change vnfdId) +--------------------------------------------------------------- + +Precondition: The resource representing the VNF instance has been created. +The VNF Package used for "Modify VNF" has been onboarded in NFVO. + +.. seqdiag:: + + seqdiag { + Client; NFVO; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "PATCH /vnf_instances/{vnfInstanceId}"]; + "tacker-server" -> "tacker-conductor" [label = "execute vnf_package list process{filter}"]; + NFVO <- "tacker-conductor" [label = "GET /vnf_packages/ with attribute filter(vnfdId)"]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VnfPkgInfo"]; + "tacker-server" <<- "tacker-conductor" [label = "(VnfPkgInfo)"]; + "tacker-server" ->> "tacker-server" [label = "Update VNF instance resource(VnfPkgInfo)"]; + "tacker-server" -> "tacker-conductor" [label = "execute vnf_package content process{vnfPkgId}"]; + NFVO <- "tacker-conductor" [label = "GET /vnf_packages/{vnfPkgId}/package_content "]; + NFVO --> "tacker-conductor" [label = "Response 200 OK with VNF package file"]; + "tacker-server" <<- "tacker-conductor" [label = "(VNF package content file)"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } + + +The procedure consists of the following steps as illustrated in above sequence: + +#. The Client sends a PATCH request to the "Individual VNF instance" resource. +#. If VNFM does not have target VNF Package, VNFM gets it from NFVO. +#. VNFM sends to the Client a VNF lifecycle management operation occurrence + notification with the "PROCESSING" state to indicate the processing + occurrence of the lifecycle management operation. +#. The VNFM has finished the modification operation. +#. VNFM sends to the Client a VNF lifecycle management operation occurrence + notification with the "COMPLETED" state to indicate the completion + occurrence of the lifecycle management operation. + +Postcondition: After successful completion, information of the VNF +instance is updated. + +2) Flow of the Modify VNF Information operation (Other changes) +------------------------------------------------------------------ + +Precondition: The resource representing the VNF instance has been created. + +.. seqdiag:: + + seqdiag { + Client -> "tacker-server" [label = "PATCH /vnf_instances/{vnfInstanceId}"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" [label = "trriger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (PROCESSING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "tacker-conductor" ->> "tacker-conductor" [label = "VNF Modification"]; + "tacker-conductor" ->> "tacker-conductor" [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } + + +#. The Client sends a PATCH request to the "Individual VNF instance" resource. +#. VNFM sends to the Client a VNF lifecycle management operation occurrence + notification with the "PROCESSING" state to indicate the processing + occurrence of the lifecycle management operation. +#. The VNFM has finished the modification operation. +#. VNFM sends to the Client a VNF lifecycle management operation occurrence + notification with the "COMPLETED" state to indicate the completion + occurrence of the lifecycle management operation. + +Postcondition: After successful completion, information of the VNF instance +is updated. + +Alternatives +------------ + +None + +Data model impact +----------------- + +Modify following tables in current ‘tacker’ database. The corresponding +schemas are detailed below:- + +vnf_instances:: + vnf_metadata vnf_metadata json + +REST API impact +--------------- + +The following restFul API will be added. This restFul API will be based on +ETSI NFV SOL002 [#NFV-SOL002]_ and SOL003 [#NFV-SOL003]_. + +* | **Name**: Modify VNF Instances + | **Description**: Modify an Individual VNF instance resource. + | **Method type**: PATCH + | **URL for the resource**: /vnflcm/v1/vnf_instances/{vnfInstanceId} + | **Request**: Resource URI variables for this resource + + +------------------------+------------------------------------------------+ + | Name | Description | + +========================+================================================+ + | VnfModificationRequest | Identifier of the VNF instance to be modified. | + +------------------------+------------------------------------------------+ + + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - VnfModificationRequest + - 1 + - Parameters for the Scale VNF operation. + + .. list-table:: + :header-rows: 1 + + * - Attribute name + - Data type + - Cardinality + - Supported in (V) + * - vnfInstanceName + - String + - 0..1 + - Yes + * - vnfInstanceDescription + - String + - 0..1 + - Yes + * - vnfPkgId + - Identifier + - 1 + - Yes + * - vnfdId + - Identifier + - 1 + - Yes + * - vnfConfigurableProperties + - KeyValuePairs + - 0..1 + - No + * - vimConnectionInfo + - VimConnectionInfo + - 0..N -> 0..1 + - Yes + * - metadata + - KeyValuePairs + - 0..1 + - Yes + * - extensions + - KeyValuePairs + - 0..1 + - No + * - vnfcInfoModifications + - VnfcInfoModificartions + - 0..1 + - No + * - vnfcInfoModificationsDeleteIds + - Identifier + - 0..N + - No + * - vimConnectionInfoDeleteIds + - Identifier + - 0..N + - No + + .. note:: + vnfPkgId is not available in SOL 002 /003 v2.6.1 but in v2.4.1. However, + most NFV related equipment, such as NFVO, still utilize v2.4.1 API + and this attribute is mondatory for executing VNF update operation. + So, Tacker will support vnfPkgId in Victoria release. Whether or not + continue to support v2.4.1 API and attributes for the future release + will be decided based on the requirements of service providers and the + situation of NFV product. + + .. note:: + vimConnectionInfo shows multiple VIMs per VNF. However due to the + partial support of this feature in the ETSI present release, the number + of entries in the VIMs attribute is not greater than 1. + + | **Response**: + + .. list-table:: + :widths: 10 10 20 50 + :header-rows: 1 + + * - Data type + - Cardinality + - Response Codes + - Description + * - n/a + - n/a + - | Success 202 + | Error 409 412 + - The request was accepted for processing, but the processing has not + been completed. + +Security impact +--------------- + +None + +Notifications impact +-------------------- + +None + +Other end user impact +--------------------- + +Add new OSC commands in python-tackerclient to invoke VNF update operations +of VNF instances API. + +Performance Impact +------------------ + +None + +Other deployer impact +--------------------- + +The previously created VNFs will not be allowed to be managed using the newly +introduced APIs. + +Developer impact +---------------- + +None + + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + Keiko Kuriu + +Work Items +---------- + +* Add new REST API endpoints to Tacker-server for VNF update operations + of VNF instances. +* Make changes in python-tackerclient to add new OSC commands for calling + updating operations of VNF instances restFul APIs. +* Add new unit and functional tests. +* Change API Tacker documentation. + +Dependencies +============ + +None + +Testing +======== + +Unit and functional test cases will be added for VNF lifecycle management +of VNF instances. + +Documentation Impact +==================== + +Complete user guide will be added to explain how to invoke VNF lifecycle +management of VNF instances with examples. + +References +========== + +.. [#etsi_nfv] https://www.etsi.org/technologies-clusters/technologies/NFV +.. [#NFV-SOL002] + https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/02.06.01_60/gs_nfv-sol002v020601p.pdf + (Chapter 5: VNF Lifecycle Management interface) +.. [#NFV-SOL003] + https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/02.06.01_60/gs_nfv-sol003v020601p.pdf + (Chapter 5: VNF Lifecycle Management interface) +.. [#etsi_plugtest2] + https://portal.etsi.org/Portals/0/TBpages/CTI/Docs/2nd_ETSI_NFV_Plugtests_Report_v1.0.0.pdf