tacker/doc/source/user/etsi_vnf_error_handling.rst

552 lines
14 KiB
ReStructuredText

===============================
ETSI NFV-SOL VNF error-handling
===============================
This document describes how to error-handling VNF in Tacker.
Prerequisites
-------------
The following packages should be installed:
* tacker
* python-tackerclient
A default VIM should be registered according to
:doc:`../cli/cli-legacy-vim`.
The VNF Package(sample_vnf_pkg.zip) used below is prepared
by referring to :doc:`./vnf-package`.
Execute up to "Instantiate VNF" in the procedure of
:doc:`./etsi_vnf_deployment_as_vm_with_tosca`.
In other words, the procedure after "Terminate VNF" is not executed.
VNF Error-handling Procedures
-----------------------------
As mentioned in Prerequisites, the VNF must be created
before performing error-handling.
Details of CLI commands are described in
:doc:`../cli/cli-etsi-vnflcm`.
There are some operations to error-handling VNF.
* Rollback VNF lifecycle management operation
* Fail VNF lifecycle management operation
* Retry VNF lifecycle management operation
In order to execute error-handling, it is necessary to specify
VNF_LCM_OP_OCC_ID, which is the ID for the target LCM operation.
First, the method of specifying the ID will be described.
Identify VNF_LCM_OP_OCC_ID
~~~~~~~~~~~~~~~~~~~~~~~~~~
To identify the VNF_LCM_OP_OCC_ID, you can get with the following ways.
* to check with CLI
* to check with notification API body
You can choose both ways.
This case uses openstack CLI:
Details of CLI commands are described in
:doc:`../cli/cli-etsi-vnflcm`.
Before checking the "VNF_LCM_OP_OCC_ID", you should get VNF_INSTANCE_ID first.
.. code-block:: console
$ openstack vnflcm op list
Result:
.. code-block:: console
+--------------------------------------+-----------------+--------------------------------------+-----------------+
| ID | Operation State | VNF Instance ID | Operation |
+--------------------------------------+-----------------+--------------------------------------+-----------------+
| 304538dd-d754-4661-9f17-5496dab9693d | FAILED_TEMP | 3aa5c054-c162-4d5e-9808-0bc30f92a4c7 | INSTANTIATE |
+--------------------------------------+-----------------+--------------------------------------+-----------------+
For this case, check notification API body:
In checking with Notification API, you should execute the following steps:
* Create a new subscription
* Execute LCM operations, such as 'Creates a new VNF instance resource'.
The procedure for executing the API using the curl command is shown below.
First, the method of generating Keystone-tokens will be described.
See `Keystone API reference`_. for details on Keystone APIs.
For **<username>** and **<password>**, **<project_name>**,
set values according to your environment.
Prepare get_token.json file to get token:
.. code-block:: json
{
"auth": {
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"name": "<username>",
"password": "<password>",
"domain": {
"name": "Default"
}
}
}
},
"scope": {
"project": {
"name": "<project_name>",
"domain": {
"name": "Default"
}
}
}
}
}
Get token:
.. code-block:: console
$ curl -i -X POST -H "Content-Type: application/json" -d @./get_token.json "$OS_AUTH_URL/v3/auth/tokens"
Result:
.. code-block:: console
HTTP/1.1 201 CREATED
Date: Tue, 17 Nov 2020 08:01:44 GMT
Server: Apache/2.4.41 (Ubuntu)
Content-Type: application/json
Content-Length: 7187
X-Subject-Token: gAAAAABfs4No8WVYIPagnJvnnImNHq_918oLgOiJwSXqXGJKfv_FEcgfeZajIl0NCk7Pr6YMn1Sa96ZhOnWioKGrOxBSEGVxgYqBFx3bFfKAHVmzgoEaN6zfHZvbm1QJgoeg1QV5i-VjfeeQRWZptYqd3yWMLzrWSfVBER9pL-nRi0CvMXJM0yE
Vary: X-Auth-Token
x-openstack-request-id: req-6b19a1ee-0eb0-4aa8-97e7-c54d750c9b64
Connection: close
...snip response-body...
Set the value of **X-Subject-Token** included in the above result to
the environment variable **$OS_AUTH_TOKEN**.
.. code-block:: console
$ export OS_AUTH_TOKEN="gAAAAABfs4No8WVYIPagnJvnnImNHq_918oLgOiJwSXqXGJKfv_FEcgfeZajIl0NCk7Pr6YMn1Sa96ZhOnWioKGrOxBSEGVxgYqBFx3bFfKAHVmzgoEaN6zfHZvbm1QJgoeg1QV5i-VjfeeQRWZptYqd3yWMLzrWSfVBER9pL-nRi0CvMXJM0yE"
Create subscription:
.. code-block:: console
$ curl -g -i -X POST http://127.0.0.1:9890/vnflcm/v1/subscriptions \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "X-Auth-Token: $OS_AUTH_TOKEN" \
-d '{"callbackUri": "http://127.0.0.1/"}'
Result:
.. code-block:: console
HTTP/1.1 201 Created
Content-Length: 199
Location: http://localhost:9890//vnflcm/v1/subscriptions/5bd3b81d-a6e9-45e7-922e-adc26328322d
Content-Type: application/json
X-Openstack-Request-Id: req-5f98782d-ca47-4144-a413-bd9641302f77
Date: Mon, 21 Dec 2020 08:21:47 GMT
{"id": "5bd3b81d-a6e9-45e7-922e-adc26328322d", "callbackUri": "http://127.0.0.1/", "_links": {"self": {"href": "http://localhost:9890//vnflcm/v1/subscriptions/5bd3b81d-a6e9-45e7-922e-adc26328322d"}}}
Show subscription:
.. code-block:: console
$ curl -g -i -X GET http://127.0.0.1:9890/vnflcm/v1/subscriptions/{subscriptionId} \
-H "Accept: application/json" \
-H "X-Auth-Token: $OS_AUTH_TOKEN"
Result:
.. code-block:: console
HTTP/1.1 200 OK
Content-Length: 213
Content-Type: application/json
X-Openstack-Request-Id: req-2d7503dc-1f75-40de-9d75-7c01180aee89
Date: Mon, 21 Dec 2020 08:22:59 GMT
{"id": "5bd3b81d-a6e9-45e7-922e-adc26328322d", "filter": {}, "callbackUri": "http://127.0.0.1/", "_links": {"self": {"href": "http://localhost:9890//vnflcm/v1/subscriptions/5bd3b81d-a6e9-45e7-922e-adc26328322d"}}}
Show VNF LCM operation occurrence:
.. code-block:: console
$ curl -g -i -X GET http://127.0.0.1:9890/vnflcm/v1/vnf_lcm_op_occs/{vnfLcmOpOccId} \
-H "Accept: application/json" \
-H "X-Auth-Token: $OS_AUTH_TOKEN"
Result:
.. code-block:: console
HTTP/1.1 200 OK
Content-Length: 3082
Content-Type: application/json
X-Openstack-Request-Id: req-d0720ffc-e7ee-4ee2-af61-a9a4a91c67cb
Date: Mon, 21 Dec 2020 08:30:25 GMT
{"id": "e3dc7530-e699-46ed-b65e-32911af1e414", "operationState": "FAILED_TEMP", "stateEnteredTime": "2020-12-21 06:52:06+00:00",
...snip response-body...
Error-handling can be executed only when **operationState** is **FAILED_TMP**.
With the above LCM operation trigger, 'Notification' is sent to
the **callbackUri** set in 'Create a new subscription'.
**vnfLcmOpOccId** included in this 'Notification' corresponds
to VNF_LCM_OP_OCC_ID.
See `VNF LCM v1 API`_ and `VNF LCM v2 API`_
for details on the APIs used here.
Rollback VNF LCM Operation
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. note::
Rollback of Scale-Out has a difference in operation result between v1 and v2.
In v1, the oldest VNFc(VM) is deleted. In v2, the newest VNFc(VM) is deleted.
.. list-table::
:widths: 10 40 15 15 10 10
:header-rows: 1
* - LCM Operation
- Description of Rollback
- Precondition
- Postcondition
- Support in v1
- Support in v2
* - Instantiate
- | VNFM removes all VMs and resources.
| e.g. Tacker executes Heat stack-delete for deletion of the target VM.
- FAILED_TEMP
- ROLLED_BACK or FAILED_TEMP
- X
- X
* - Scale-out
- | VNFM reverts changes of VMs and resources specified in the middle of scale-out operation.
| There are differences in the operation results of v1 and v2. See note.
| e.g. Tacker reverts desired_capacity and executes Heat stack-update.
- FAILED_TEMP
- ROLLED_BACK or FAILED_TEMP
- X
- X
* - Modify
- VNFM reverts the update of the VNF instance information.
- FAILED_TEMP
- ROLLED_BACK or FAILED_TEMP
-
- X
* - Change external connectivity
- | VNFM reverts changes of the external connectivity for VNF instances.
| e.g. Tacker reverts stack parameters and executes Heat stack-update.
- FAILED_TEMP
- ROLLED_BACK or FAILED_TEMP
-
- X
* - Change Current VNF Package
- | VNFM reverts changes of current vnf package for VNF instances.
| e.g. Tacker reverts stack parameters and executes Heat stack-update.
- FAILED_TEMP
- ROLLED_BACK or FAILED_TEMP
-
- X
.. note::
| In some cases, Rollback of Change external connectivity cannot recover
the IP address and Port Id of virtual resources.
| If the operation fails before performing VIM processing: updating stack,
the IP address and Port Id will be recovered by its rollback operation.
| Otherwise, dynamic IP address and Port Id are not recovered
by rollback operation.
| Currently, Instantiate VNF with kubernetes vim does not support rollback
operation when using v2 API.
This manual describes the following operations as use cases for
rollback operations.
* "Instantiate VNF" fails
* Rollback VNF lifecycle management operation
* Delete VNF
As shown below, if "Instantiate VNF" fails, "Delete VNF" cannot be executed
without executing "Rollback VNF lifecycle management operation".
.. code-block:: console
$ openstack vnflcm delete VNF_INSTANCE_ID
Result:
.. code-block:: console
Failed to delete vnf instance with ID '3aa5c054-c162-4d5e-9808-0bc30f92a4c7': Vnf 3aa5c054-c162-4d5e-9808-0bc30f92a4c7 in status ERROR. Cannot delete while the vnf is in this state.
Therefore, "Rollback VNF lifecycle management operation" with
the following CLI command.
.. code-block:: console
$ openstack vnflcm op rollback VNF_LCM_OP_OCC_ID
Result:
.. code-block:: console
Rollback request for LCM operation 304538dd-d754-4661-9f17-5496dab9693d has been accepted
If "Rollback VNF lifecycle management operation" is successful,
then "Delete VNF" is also successful.
.. code-block:: console
$ openstack vnflcm delete VNF_INSTANCE_ID
Result:
.. code-block:: console
Vnf instance '3aa5c054-c162-4d5e-9808-0bc30f92a4c7' deleted successfully
Fail VNF LCM Operation
~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:widths: 10 40 15 15 10 10
:header-rows: 1
* - LCM Operation
- Description of Fail
- Precondition
- Postcondition
- Support in v1
- Support in v2
* - Instantiate
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
- FAILED_TEMP
- FAILED
- X
- X
* - Terminate
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
- FAILED_TEMP
- FAILED
- X
- X
* - Heal
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
- FAILED_TEMP
- FAILED
- X
- X
* - Scale
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
- FAILED_TEMP
- FAILED
- X
- X
* - Modify
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
- FAILED_TEMP
- FAILED
- X
- X
* - Change external connectivity
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
- FAILED_TEMP
- FAILED
- X
- X
* - Change Current VNF Package
- Tacker simply changes LCM operation state to "FAILED" on Tacker-DB.
- FAILED_TEMP
- FAILED
-
- X
This manual describes the following operations as use cases for
fail operations.
* "Instantiate VNF" fails
* Fail VNF lifecycle management operation
* Delete VNF
As shown below, if "Instantiate VNF" fails, "Delete VNF" cannot be executed
after executing "Fail VNF lifecycle management operation".
.. code-block:: console
$ openstack vnflcm delete VNF_INSTANCE_ID
Result:
.. code-block:: console
Failed to delete vnf instance with ID '3aa5c054-c162-4d5e-9808-0bc30f92a4c7': Vnf 3aa5c054-c162-4d5e-9808-0bc30f92a4c7 in status ERROR. Cannot delete while the vnf is in this state.
Therefore, "Fail VNF lifecycle management operation" with
the following CLI command.
.. code-block:: console
$ openstack vnflcm op fail VNF_LCM_OP_OCC_ID
Result:
.. code-block:: console
Fail request for LCM operation 304538dd-d754-4661-9f17-5496dab9693d has been accepted
If "Fail VNF lifecycle management operation" is successful,
then "Delete VNF" is also successful.
.. code-block:: console
$ openstack vnflcm delete VNF_INSTANCE_ID
Result:
.. code-block:: console
Vnf instance '3aa5c054-c162-4d5e-9808-0bc30f92a4c7' deleted successfully
Retry VNF LCM Operation
~~~~~~~~~~~~~~~~~~~~~~~
.. list-table::
:widths: 10 40 15 15 10 10
:header-rows: 1
* - LCM Operation
- Description of Fail
- Precondition
- Postcondition
- Support in v1
- Support in v2
* - Instantiate
- VNFM retries a Instantiate operation.
- FAILED_TEMP
- COMPLETED or FAILED_TEMP
- X
- X
* - Terminate
- VNFM retries a Terminate operation.
- FAILED_TEMP
- COMPLETED or FAILED_TEMP
- X
- X
* - Heal
- VNFM retries a Heal operation.
- FAILED_TEMP
- COMPLETED or FAILED_TEMP
- X
- X
* - Scale
- VNFM retries a Scale operation.
- FAILED_TEMP
- COMPLETED or FAILED_TEMP
- X
- X
* - Modify
- VNFM retries a Modify operation.
- FAILED_TEMP
- COMPLETED or FAILED_TEMP
- X
- X
* - Change external connectivity
- VNFM retries a Change external connectivity operation.
- FAILED_TEMP
- COMPLETED or FAILED_TEMP
- X
- X
* - Change Current VNF Package
- VNFM retries a Change Current VNF Package operation.
- FAILED_TEMP
- COMPLETED or FAILED_TEMP
-
- X
.. note::
| Currently, Instantiate VNF with kubernetes vim does not support retry
operation when using v2 API.
This manual describes the following operations as use cases for
retry operations.
* "Instantiate VNF" fails
* Retry VNF lifecycle management operation
As shown below, if "Instantiate VNF" fails, If you want re-execute
previous(failed) operation , you execute "Retry" operation.
Therefore, "Retry VNF lifecycle management operation" with
the following CLI command.
.. code-block:: console
$ openstack vnflcm op retry VNF_LCM_OP_OCC_ID
Result:
.. code-block:: console
Retry request for LCM operation 304538dd-d754-4661-9f17-5496dab9693d has been accepted
If "Retry VNF lifecycle management operation" is successful,
then another LCM can be operational.
.. _VNF LCM v1 API : https://docs.openstack.org/api-ref/nfv-orchestration/v1/vnflcm.html
.. _VNF LCM v2 API : https://docs.openstack.org/api-ref/nfv-orchestration/v2/vnflcm.html
.. _Keystone API reference : https://docs.openstack.org/api-ref/identity/v3/#password-authentication-with-scoped-authorization