From 66de31f8359e708393de425af4f4da504bf2ad49 Mon Sep 17 00:00:00 2001 From: Hiroo Kitamura Date: Fri, 15 Oct 2021 05:30:06 +0000 Subject: [PATCH] Enhance NFV SOL_v3 LCM operation This specification supports a new version of VNF lifecycle management APIs complying with ETSI NFV SOL v3. It adds a new version of APIs involved in operating instantiated VNF instances (scale, heal, modify, and change external vnf connectivity). Co-authored-By: Hirofumi Noguchi Implements: blueprint support-nfv-solv3-scale-vnf Implements: blueprint support-nfv-solv3-heal-vnf Implements: blueprint support-nfv-solv3-modify-vnf Implements: blueprint support-nfv-solv3-change-external-connectivity Change-Id: Ib8910e549076d0fe782909dfe702976948a5461f --- .../yoga/enhance-nfv-solv3-lcm-operation.rst | 1129 +++++++++++++++++ 1 file changed, 1129 insertions(+) create mode 100644 specs/yoga/enhance-nfv-solv3-lcm-operation.rst diff --git a/specs/yoga/enhance-nfv-solv3-lcm-operation.rst b/specs/yoga/enhance-nfv-solv3-lcm-operation.rst new file mode 100644 index 00000000..96b0bb3d --- /dev/null +++ b/specs/yoga/enhance-nfv-solv3-lcm-operation.rst @@ -0,0 +1,1129 @@ +.. + This work is licensed under a Creative Commons Attribution 3.0 Unported + License. + http://creativecommons.org/licenses/by/3.0/legalcode + + +================================ +Enhance NFV SOL_v3 LCM operation +================================ + +.. Blueprints: + +- https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-scale-vnf +- https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-heal-vnf +- https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-modify-vnf +- https://blueprints.launchpad.net/tacker/+spec/support-nfv-solv3-change-external-connectivity + +This specification supports a new version of VNF lifecycle management APIs +complying with ETSI NFV SOL v3. +It adds a new version of APIs involved in operating instantiated VNF instances +(scale, heal, modify, and change external vnf connectivity). + +Problem description +=================== + +ETSI specifications within the NFV Architecture Framework [#etsi_nfv]_ +describe the main aspects of NFV development and usage based on 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. + +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. +To integrate Tacker into a wide variety of products, +it should comply with multiple versions of ETSI NFV SOL specifications. +Tacker has already supported VNF lifecycle management operations +defined in ETSI NFV SOL002 v2.6.1 [#NFV-SOL002_261]_ and +SOL003 v2.6.1 [#NFV-SOL003_261]_. +Furthermore, Xena release supported a part of VNF lifecycle management operations +defined in ETSI NFV SOL002 v3.3.1 [#NFV-SOL002_331]_ and SOL003 v3.3.1 [#NFV-SOL003_331]_. +The details of supported APIs are described in Tacker Xena Specifications +[#SOL_v3_starting_and_terminating]_ [#SOL_v3_getting_LCM_information]_. +Tacker should support more VNF lifecycle management operations +defined in ETSI NFV SOL002/003 v3.3.1. + + +Proposed change +=============== + +Since the VNF lifecycle management interface version specified in ETSI NFV SOL v3 +is "2.0.0", the API major version included in the URI shall be set +to "v2". Supporting v2 APIs involves changing the data type of some attributes and adding +or removing attributes. +To avoid impact on the existing implementation, APIs corresponding to "v2" +should be implemented as a process independent of that of "v1". + +This interface supports the following APIs +involved in getting information of lifecycle management operation. + +* Scale VNF (POST /vnf_instances/{vnfInstanceId}/scale) +* Heal VNF (POST /vnf_instances/{vnfInstanceId}/heal) +* Modify VNF Information (PATCH /vnf_instances/{vnfInstanceId}) +* Change External VNF Connectivity (POST /vnf_instances/{vnfInstanceId}/change_ext_conn) + + +1) Flow of Scale VNF +-------------------- + +.. seqdiag:: + + seqdiag { + node_width = 72; + edge_length = 100; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/scale"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + NFVO <- "tacker-conductor" [label = "POST /grants"]; + NFVO --> "tacker-conductor" [label = "201 Created"]; + "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" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" ->> "VnfLcmDriver" [label = "calculate the number of VMs to scale-out or scale-in"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "[only for scale-in] mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } + +The procedure consists of the following steps as illustrated in above sequence: + +Precondition: VNF instance in INSTANTIATED state. + +#. Client sends VNFM a POST request for the Scale VNF Instance. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "STARTING" state to indicate the start occurrence of + the lifecycle management operation. +#. VNFM and NFVO exchange granting information. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "PROCESSING" state to indicate the processing + occurrence of the lifecycle management operation. +#. MgmtDriver executes preamble operation according to a MgmtDriver script. +#. The number of VMs to scale is calculated by multiplying + "number_of_steps" contained in Scale VNF request and "number_of_instances" + contained in VNFD. +#. Only for scale-in, OpenstackDriver sends Heat mark stack unhealthy request + for the removed VM. +#. OpenstackDriver sends Heat stack-update request with the incremented + or decremented "desired_capacity" of AutoScalingGroup for the target VM. +#. MgmtDriver executes postamble operation according to a MgmtDriver script. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "COMPLETED" state or "FAILED_TEMP" state + to indicate the result of the lifecycle management operation. + + +Postcondition: VNF instance is still in INSTANTIATED state and VNF has been +scaled. + +.. note:: Scale API version 1 supports *is_reverse* option. + Scale-in operation with this option deletes VNF from the last registered VM. + Scale API version 2 does not support this option + because it deletes VM in this order by default. + +.. note:: Tacker does not support *non-uniform deltas* + defined in ETSI NFV SOL001 [#NFV-SOL001_331]_. + Therefore, *uniform delta* corresponding to "number_of_instances" can be set + and "number_of_instances" is the same regardless of scale_level. + +2) Flow of Heal VNF +------------------- + +The client can specify the target resources for healing +with two parameters in the API request. + +- *vnfcInstanceId* is a list which indicates VNFC instances + for which a healing action is requested. + +- *all* indicates whether network resources and storage resources + are included in the heal target. This is set in the attribute + of *additionalParams*. + +With the combination of these parameters, +Tacker supports the following patterns of healing. + +- Pattern A. *vnfcInstanceId* is included in the request. + - Pattern A-1. *all = False* is included in the request or *all* is not included in the request. + - Only specified VNFC instances are healed. + - Pattern A-2. *all = True* are included in the request. + - Specified VNFC instances and storage resources are healed. +- Pattern B. *vnfcInstanceId* is not included in the request. + - Pattern B-1. *all = False* is included in the request or *all* is not included in the request. + - All VNFC instances included in the VNF instance are healed. + - Pattern B-2. *all = True* are included in the request. + - All resources included in the VNF instance are healed. + It includes VNFC instances, network resources, and storage resources + but not external virtual networks. + +The heal operation of pattern B-2 can be implemented by +combining terminate vnf and instantiate vnf. + +The following shows the sequence of patterns A-1, A-2, and B-1. + +.. seqdiag:: + + seqdiag { + node_width = 72; + edge_length = 100; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "NFVO" <- "tacker-conductor" [label = "POST /grants"]; + "NFVO" --> "tacker-conductor" [label = "201 Created"]; + "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" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "mark stack unhealthy (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id}/resources/{resource_name_or_physical_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "openstackDriver" -> "heat" [label = "update stack (PATCH /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } + +The procedure consists of the following steps as illustrated in above sequence: + +Precondition: VNF instance in INSTANTIATED state. + +#. Client sends a POST request for the Heal VNF Instance. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "STARTING" state to indicate the start occurrence of + the lifecycle management operation. +#. VNFM and NFVO exchange granting information. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "PROCESSING" state to indicate the processing + occurrence of the lifecycle management operation. +#. MgmtDriver executes preamble operation according to a MgmtDriver script. +#. OpenstackDriver sends Heat mark stack unhealthy request for the target VM + according to the heal request parameter. +#. OpenstackDriver sends Heat stack-update request to execute heal. + When scaling multiple VMs, stack-update are repeated as a set for each VM. +#. MgmtDriver executes postamble operation according to a MgmtDriver script. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "COMPLETED" state or "FAILED_TEMP" state + to indicate the result of the lifecycle management operation. + +Postcondition: VNF instance in "INSTANTIATED" state, and healed. + + + +3) Flow of the Modify VNF Information +------------------------------------- + +.. seqdiag:: + + seqdiag { + node_width = 140; + edge_length = 340; + + Client; tacker-server; tacker-conductor; + + Client -> "tacker-server" [label = "PATCH vnflcm/v2/vnf_instances/{vnfInstanceId}"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" -> "tacker-conductor" [label = "trigger 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 or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } + + +Precondition: The resource representing the VNF instance has been created. + +#. Client sends VNFM a PATCH request for the Modify VNF instance's information. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "PROCESSING" state to indicate the processing + occurrence of the lifecycle management operation. +#. VNFM modifies the VNF instance's information. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "COMPLETED" state or "FAILED_TEMP" state + to indicate the result of the lifecycle management operation. + +Postcondition: After successful completion, information of the VNF instance +is updated. + + +4) Flow of Change external VNF connectivity +------------------------------------------- + +.. seqdiag:: + + seqdiag { + node_width = 72; + edge_length = 100; + + Client; NFVO; tacker-server; tacker-conductor; VnfLcmDriver; MgmtDriver; openstackDriver; heat; VNF; + + Client -> "tacker-server" + [label = "POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_ext_conn"]; + Client <-- "tacker-server" [label = "Response 202 Accepted"]; + "tacker-server" ->> "tacker-conductor" + [label = "trigger asynchronous task"]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (STARTING)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + "NFVO" <- "tacker-conductor" [label = "POST /grants"]; + "NFVO" --> "tacker-conductor" [label = "201 Created"]; + "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" -> "VnfLcmDriver" [label = "execute preamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute preamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute LCM operation"]; + "VnfLcmDriver" -> "openstackDriver" [label = "execute openstackDriver"]; + "openstackDriver" -> "heat" [label = "update stack (PUT /v1/{tenant_id}/stacks/{stack_name}/{stack_id})"]; + "openstackDriver" <-- "heat" [label = ""]; + "VnfLcmDriver" <-- "openstackDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" -> "VnfLcmDriver" [label = "execute postamble operation"]; + "VnfLcmDriver" -> "MgmtDriver" [label = "execute postamble operation"]; + "MgmtDriver" -> "VNF" [label = "VNF Configuration"]; + "MgmtDriver" <-- "VNF" [label = ""]; + "VnfLcmDriver" <-- "MgmtDriver" [label = ""]; + "tacker-conductor" <-- "VnfLcmDriver" [label = ""]; + "tacker-conductor" ->> "tacker-conductor" + [label = "execute notification process"]; + Client <- "tacker-conductor" [label = "POST {callback URI} (COMPLETED or FAILED_TEMP)"]; + Client --> "tacker-conductor" [label = "Response: 204 No Content"]; + } + + +The procedure consists of the following steps as illustrated in above sequence: + +Precondition: VNF instance in INSTANTIATED state. + +#. Client sends VNFM a POST request for the change external VNF connectivity. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "STARTING" state to indicate the start occurrence of + the lifecycle management operation. +#. VNFM and NFVO exchange granting information. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "PROCESSING" state to indicate the processing + occurrence of the lifecycle management operation. +#. MgmtDriver executes preamble operation according to a MgmtDriver script. +#. OpenstackDriver sends Heat stack-update request + with the external Virtual Link (VL) and external Connection Point to change. +#. MgmtDriver executes postamble operation according to a MgmtDriver script. +#. VNFM sends endpoints such as Client + a VNF lifecycle management operation occurrence + notification with the "COMPLETED" state or "FAILED_TEMP" state + to indicate the result of the lifecycle management operation. + + +Postcondition: VNF instance is still in INSTANTIATED state and the external +VNF connectivity has been changed. + +This specification supports the following VL's changes. + - port + - network. + - ip address/mac address/allowed_address_pair in VLs. + +This specification does not support trunk-parent-port and trunk-sub-port. + + +Data model impact +----------------- + +The change has no impact for data model. + +Since Xena release has already supported all attributes defined +in SOL002 v3.3.1 [#NFV-SOL002_331]_ and SOL003 v3.3.1 [#NFV-SOL003_331]_, +data objects and database tables do not need to be changed. + + +REST API impact +--------------- + +All defined attributes should be supported in API validation. + +* | **Name**: Scale a VNF instance + | **Description**: Scale-in or scale-out for VNF instance. + | **Method type**: POST + | **URL for the resource**: /vnflcm/v2/vnf_instances/{vnfInstanceId}/scale + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - ScaleVnfRequest + - 1 + - Parameters for the scale VNF operation. + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 10 10 50 + + * - Attribute name + - Data type + - Cardinality + - Supported in API v2 + - Supported in API v1 + - Description + * - type + - Enum + - 1 + - Yes + - Yes + - | Indicates the type of the scale operation requested. + Permitted values: + | SCALE_OUT: adding additional VNFC instances to + the VNF to increase capacity. + | SCALE_IN: removing VNFC instances from the + VNF in order to release unused capacity. + * - aspectId + - IdentifierInVnfd + - 1 + - Yes + - Yes + - + * - numberOfSteps + - Integer + - 0..1 + - Yes + - Yes + - + * - additionalParams + - KeyValuePairs + - 0..1 + - Yes + - Yes + - + * - >is_reverse + - Boolean + - 0..1 + - No + - Yes + - Tacker original attribute + + | **Response**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 18 50 + + * - Data type + - Cardinality + - Response Codes + - Description + * - n/a + - + - Success: 202 + - The request has been accepted for processing. + * - ProblemDetails + - 0..1 + - Error: 404 + - The API producer did not find a current representation + for the target resource or is not willing to disclose + that one exists. + * - ProblemDetails + - 1 + - Error: 409 + - The operation cannot be executed currently, due to a + conflict with the state of the resource. + * - ProblemDetails + - See clause 6.4 of [#NFV-SOL013_341]_ + - Error: 4xx, 5xx + - Any common error response code as defined in clause 6.4 + of ETSI GS NFV-SOL 013 [#NFV-SOL013_341]_ may be returned. + + +* | **Name**: Heal a VNF instance + | **Description**: Heal for VNF instance. + | **Method type**: POST + | **URL for the resource**: /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - HealVnfRequest + - 1 + - Parameters for the heal VNF operation. + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 10 10 50 + + * - Attribute name + - Data type + - Cardinality + - Supported in API v2 + - Supported in API v1 + - Description + * - vnfcInstanceId + - Identifier + - 0..N + - Yes + - Yes + - This attribute is defined in only SOL 002. + * - cause + - String + - 0..1 + - Yes + - Yes + - + * - additionalParams + - KeyValuePairs + - 0..1 + - Yes + - No + - + * - >all + - Boolean + - 0..1 + - Yes + - No + - Tacker original attribute + * - healScript + - String + - 0..1 + - No + - No + - This attribute is defined in only SOL 002. + + | **Response**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 18 50 + + * - Data type + - Cardinality + - Response Codes + - Description + * - n/a + - + - Success: 202 + - The request has been accepted for processing. + * - ProblemDetails + - 0..1 + - Error: 404 + - The API producer did not find a current representation + for the target resource or is not willing to disclose + that one exists. + * - ProblemDetails + - 1 + - Error: 409 + - The operation cannot be executed currently, due to a + conflict with the state of the resource. + * - ProblemDetails + - See clause 6.4 of [#NFV-SOL013_341]_ + - Error: 4xx, 5xx + - Any common error response code as defined in clause 6.4 + of ETSI GS NFV-SOL 013 [#NFV-SOL013_341]_ may be returned. + + +* | **Name**: Modify VNF information + | **Description**: Update information about a VNF instance. + | **Method type**: PATCH + | **URL for the resource**: vnflcm/v2/vnf_instances/{vnfInstanceId} + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - VnfInfoModificationRequest + - 1 + - Parameters for the VNF modification. + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 10 10 50 + + * - Attribute name + - Data type + - Cardinality + - Supported in API v2 + - Supported in API v1 + - Description + * - vnfInstanceName + - String + - 0..1 + - Yes + - Yes + - + * - vnfInstanceDescription + - String + - 0..1 + - Yes + - Yes + - + * - vnfPkgId + - Identifier + - 1 + - No + - Yes + - Although this attribute is not available in SOL 002/003 v2.6.1, + Tacker support it in v1 API. See note. + * - vnfdId + - Identifier + - 0..1 + - Yes + - Yes + - + * - vnfConfigurableProperties + - KeyValuePairs + - 0..1 + - Yes + - No + - + * - metadata + - KeyValuePairs + - 0..1 + - Yes + - Yes + - + * - extensions + - KeyValuePairs + - 0..1 + - Yes + - No + - + * - vimConnectionInfo + - map(VimConnectionInfo) + - 0..N + - Yes + - Yes + - This attribute is defined in only SOL 003. + * - >vimId + - Identifier + - 0..1 + - Yes + - Yes + - + * - >vimType + - String + - 1 + - Yes + - Yes + - + * - >interfaceInfo + - KeyValuePairs + - 0..1 + - Yes + - Yes + - + * - >accessInfo + - KeyValuePairs + - 0..1 + - Yes + - Yes + - + * - >extra + - KeyValuePairs + - 0..1 + - Yes + - No + - + * - vnfcInfoModifications + - VnfcInfoModifications + - 0..N + - Yes + - No + - This attribute is defined in only SOL 002. + * - >id + - IdentifierInVnf + - 1 + - Yes + - No + - + * - >vnfcConfigurableProperties + - KeyValuePairs + - 1 + - Yes + - No + - + + .. note:: vnfPkgId is not available in SOL 002/003 v2.6.1. + It is available in v2.4.1. + However, Tacker have supported it for some NFV related equipment, + utilizing v2.4.1 API. + + + | **Response**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 18 50 + + * - Data type + - Cardinality + - Response Codes + - Description + * - n/a + - + - Success: 202 + - The request has been accepted for processing. + * - ProblemDetails + - 1 + - Error: 409 + - The operation cannot be executed currently, due to a + conflict with the state of the resource. + * - ProblemDetails + - See clause 6.4 of [#NFV-SOL013_341]_ + - Error: 4xx, 5xx + - Any common error response code as defined in clause 6.4 + of ETSI GS NFV-SOL 013 [#NFV-SOL013_341]_ may be returned. + + .. note:: Since current Tacker does not support *http Etag*, + it does not support Error Code: 412 Precondition Failed. + According to the ETSI NFV SOL document, + there is no API request/response specification for Etag yet, + and transactions using Etag are not defined by standardization. + Tacker will support Etag after the ETSI NFV specification defines + relevant transactions. + +* | **Name**: Change external VNF connectivity + | **Description**: Change the external connectivity of a VNF instance. + | **Method type**: POST + | **URL for the resource**: /vnflcm/v2/vnf_instances/{vnfInstanceId}/change_ext_conn + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - ChangeExtVnfConnectivityRequest + - 1 + - Parameters for the change external VNF connectivity. + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 10 10 50 + + * - Attribute name + - Data type + - Cardinality + - Supported in API v2 + - Supported in API v1 + - Description + * - extVirtualLinks + - ExtVirtualLinkData + - 1..N + - Yes + - Yes + - + * - >id + - Identifier + - 1 + - Yes + - Yes + - + * - >vimConnectionId + - Identifier + - 0..1 + - Yes + - Yes + - + * - >resourceProviderId + - Identifier + - 0..1 + - Yes + - No + - + * - >resourceId + - IdentifierInVim + - 1 + - Yes + - Yes + - + * - >extCps + - VnfExtCpData + - 1..N + - Yes + - Yes + - + * - >>cpdId + - IdentifierInVnfd + - 1 + - Yes + - Yes + - + * - >>cpConfig + - map(VnfExtCpConfig) + - 1..N + - Yes + - Yes + - + * - >>>parentCpConfigId + - IdentifierInVnf + - 0..1 + - Yes + - Yes + - + * - >>>linkPortId + - Identifier + - 0..1 + - Yes + - Yes + - + * - >>>cpProtocolData + - CpProtocolData + - 0..N + - Yes + - Yes + - + * - >>>>layerProtocol + - Enum + - 1 + - Yes + - Yes + - Permitted values: IP_OVER_ETHERNET. + * - >>>>ipOverEthernet + - IpOverEthernetAddressData + - 0..1 + - Yes + - Yes + - + * - >>>>>macAddress + - MacAddress + - 0..1 + - Yes + - Yes + - + * - >>>>>segmentationId + - String + - 0..1 + - Yes + - not defined + - New attribute in API v2. + * - >>>>>ipAddresses + - Structure + - 0..N + - Yes + - Yes + - + * - >>>>>>type + - Enum + - 1 + - Yes + - Yes + - Permitted values: IPV4, IPV6. + * - >>>>>>fixedAddresses + - IpAddress + - 0..N + - Yes + - Yes + - + * - >>>>>>numDynamicAddresses + - Integer + - 0..1 + - Yes + - Yes + - + * - >>>>>>addressRange + - Structure + - 0..1 + - Yes + - Yes + - + * - >>>>>>>minAddress + - IpAddress + - 1 + - Yes + - Yes + - + * - >>>>>>>maxAddress + - IpAddress + - 1 + - Yes + - Yes + - + * - >>>>>>subnetId + - IdentifierInVim + - 0..1 + - Yes + - Yes + - + * - >extLinkPorts + - ExtLinkPortData + - 0..N + - Yes + - Yes + - + * - >>id + - Identifier + - 1 + - Yes + - Yes + - + * - >>resourceHandle + - ResourceHandle + - 1 + - Yes + - Yes + - + * - >>>vimConnectionId + - Identifier + - 0..1 + - Yes + - Yes + - + * - >>>resourceProviderId + - Identifier + - 0..1 + - Yes + - No + - + * - >>>resourceId + - IdentifierInVim + - 1 + - Yes + - Yes + - + * - >>>vimLevelResourceType + - String + - 0..1 + - Yes + - Yes + - + * - vimConnectionInfo + - map(VimConnectionInfo) + - 0..N + - Yes + - Yes + - This attribute is defined in only SOL 003. + * - >vimId + - Identifier + - 0..1 + - Yes + - Yes + - + * - >vimType + - String + - 1 + - Yes + - Yes + - + * - >interfaceInfo + - KeyValuePairs + - 0..1 + - Yes + - Yes + - + * - >accessInfo + - KeyValuePairs + - 0..1 + - Yes + - Yes + - + * - >extra + - KeyValuePairs + - 0..1 + - Yes + - No + - + * - additionalParams + - KeyValuePairs + - 0..1 + - Yes + - Yes + - + + | **Response**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 18 50 + + * - Data type + - Cardinality + - Response Codes + - Description + * - n/a + - + - Success: 202 + - The request has been accepted for processing. + * - ProblemDetails + - 1 + - Error: 409 + - The operation cannot be executed currently, due to a + conflict with the state of the resource. + * - ProblemDetails + - See clause 6.4 of [#NFV-SOL013_341]_ + - Error: 4xx, 5xx + - Any common error response code as defined in clause 6.4 + of ETSI GS NFV-SOL 013 [#NFV-SOL013_341]_ may be returned. + + +Security impact +--------------- + +None + +Notifications impact +-------------------- + +None + +Other end user impact +--------------------- + +None + +Performance Impact +------------------ + +None + +Other deployer impact +--------------------- + +None + +Developer impact +---------------- + +None + +Implementation +============== + +Assignee(s) +----------- + +Hirofumi Noguchi + + +Work Items +---------- + +* Add new attributes supported by v2 API to python-tackerclient. +* Add new version API endpoints to Tacker-server. +* Implement new version API processings for Tacker-conductor. +* Add new unit and functional tests. +* Update the Tacker's API reference. + + +Dependencies +============ + +None + +Testing +======= + +Unit and functional test cases will be added for VNF lifecycle management +of VNF instances. + +Documentation Impact +==================== + +New supported APIs need to be added into Tacker API reference. + +References +========== + +.. [#etsi_nfv] https://www.etsi.org/technologies-clusters/technologies/NFV +.. [#NFV-SOL002_261] + 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_261] + 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) +.. [#NFV-SOL002_331] + https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.03.01_60/gs_nfv-sol002v030301p.pdf + (Chapter 5: VNF Lifecycle Management interface) +.. [#NFV-SOL003_331] + https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf + (Chapter 5: VNF Lifecycle Management interface) +.. [#SOL_v3_starting_and_terminating] + https://specs.openstack.org/openstack/tacker-specs/specs/xena/support-nfv-solv3-start-and-terminate-vnf.html +.. [#SOL_v3_getting_LCM_information] + https://specs.openstack.org/openstack/tacker-specs/specs/xena/support-nfv-solv3-get-information.html +.. [#NFV-SOL001_331] + https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/011/03.03.01_60/gs_nfv-sol011v030301p.pdf +.. [#NFV-SOL013_341] + https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/013/03.04.01_60/gs_nfv-sol013v030401p.pdf