diff --git a/specs/zed/faultnotification-autoheal.rst b/specs/zed/faultnotification-autoheal.rst new file mode 100644 index 00000000..f2b75b2a --- /dev/null +++ b/specs/zed/faultnotification-autoheal.rst @@ -0,0 +1,962 @@ +====================================================== +Support VNF AutoHealing triggered by FaultNotification +====================================================== + +https://blueprints.launchpad.net/tacker/+spec/support-autoheal-queue + +Problem description +=================== + +This spec provides an implementation for supporting AutoHealing using +FaultNotification interface between Tacker and VIM. + +When fault events occur in VIM, VIM notifies fault event to Tacker +via the interface. + +Tacker takes initiative of AutoHealing. According to configuration, +Tacker checks faultID attribute in the fault event and determines +whether AutoHealing should be performed. In case of performing +AutoHealing, VMs are deleted or created via Heat [#Openstack_Heat]_. + +The FaultNotification interface can be alerted by multiple events. +To prevent invoking multiple heal operations to single VNF, +the FaultNotification requests to Tacker are packed for a configured +period of time. + +Proposed change +=============== + +The following changes are needed: + +#. Add support of RESTful API for FaultNotification between + Tacker and VIM + + + POST `/vnf_instances/{vnf_instance_id} + /servers/{server_id}/notify` + for notification of fault event from VIM to Tacker. + + + Support queueing and packing of multiple requests for above API. + +#. Add MgmtDriver support for FaultNotification destination handling + + + instantiate_end + + + Set FaultNotification destination URI with VIM + via `/v2/{tenant_id}/ + servers/{server_id}/alarms` + for created VMs. + + + terminate_start + + + Delete alarmID + via `/v2/{tenant_id} + /servers/{server_id}/alarms/{alarm_id}` + for deleted VMs. + + + scale_start + + + In case of Scale-in, delete alarmID + via `/v2/{tenant_id} + /servers/{server_id}/alarms/{alarm_id}` + for deleted VMs. + + + scale_end + + + In case of Scale-out, set FaultNotification destination URI with VIM + via `/v2/{tenant_id} + /servers/{server_id}/alarms` + for added VMs. + + + heal_start + + + Delete alarmID + via `/v2/{tenant_id} + /servers/{server_id}/alarms/{alarm_id}` + for failure VMs. + + + heal_end + + + Set FaultNotification destination URI with VIM + via `/v2/{tenant_id} + /servers/{server_id}/alarms` + for added VMs. + +AutoHeal VNF on FaultNotification trigger +----------------------------------------- + +AutoHealing is mainly composed of two services. + +The Server Notifier is a monitoring service that may have dedicated interfaces +implemented by each operators, thus it is not included in Tacker. +When the Server Notifier detects fault events in VIM, it will send +FaultNotification to Tacker. + +Within the Tacker, VnfServerNotificationController has external interface +of RESTful API. VnfServerNotificationDriver decides whether AutoHealing +should be performed. After that, it is almost same as manual healing +that is performed by VnfLcmDriverV2. + +Design of AutoHealing operation on FaultNotification trigger +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The following is a schematic diagram of +AutoHealing on FaultNotification trigger: + +.. code-block:: console + + +------------------------+ + | | + | Client (NFVO) <--------+ + | | | + +------------------------+ | 8,18.POST VnfLcmOperationOccurrenceNotification + | 9.POST grants + +-----------------------------------|-------------------------------------------+ + | | VNFM | + | +-------------------------+ +----|----------------------------+ | + | | Tacker | | | Tacker | | + | | Server | | | Conductor | | + | | | | +-+-------------+ | | + | | | | | NfvoClient | | | + | | | | +-^-------------+ | | + | | | | | | | + | | +--------------+ | | +-+-------------+ | | + | | | Vnflcm +---------> ConductorV2 | | | + | | | ControllerV2 <--+ | | +-+-^---+-------+ | | + | | +--------------+ | | | | | | | | + 4.POST | | 7.perform | | | | | | +--+ 6.check faultID,| | + | | healing | | | | | | | | pack multiple | | + /vnf_instances | | | | | | | | | | requests | | + /{vnf_instance_id} | | +--------------+ | | | | | +-v-+--v--------+ | +--------+ | + /servers | | | VnfServer | +------------+ VnfServer +------------> Tacker | | + /{server_id}/notify | | | Notification | | | | | | Notification | +-------> DB | | + +-----------------------> Controller +-------------+ | Driver | | | +--------+ | + | | | +--------------+ | | | +---------------+ | | 2,17.Save | + | | | 5.post | | | | | parameters | + | | | notification | | | | | 12.Delete | + | | | | | | | | parameters | + | | | | | | +--------------+ | | | + | | | | | +----> VnfLcm +----+ | | + | | | | | | DriverV2 | | | + | | | | | +----+------+--+ | | + | | | | | 10.heal_start| | | | + | | | | | 15.heal_end | | | | + | | | | | +----------v-+ +--v---------+ | | + | | | | | | Mgmt | | Infra | | | + | | | | | | Driver | | Driver | | | + | | | | | +----+-------+ +---+--------+ | | + | | +-------------------------+ +--------|-------------|----------+ | + | +---------------------------------------|-------------|-------------------------+ + | +----------------------------------------------+ | + +------|-------|------------------------------------------------------------|--------------+ + | | | 1,16.Set FaultNotification destination URI | VIM/NFVI | + | | | 11.Delete alarmID | | + | | | +---------------+--------+ | + | | | 13.Delete failed VNF | | 14.Create new VNF | + | +--+-------v--+ +--------v----+ +------v------+ | + | | Server | 3.Detects fault event | +--------+ | | +--------+ | | + | | Notifier +-------------------------> VNF | | | | VNF | | | + | | | | +--------+ | | +--------+ | | + | | | | VM | | VM | | + | +-------------+ +-------------+ +-------------+ | + +------------------------------------------------------------------------------------------+ + +* ``1-2.`` Tacker sets FaultNotification destination URI and faultIDs + to VIM for each VM when a VNF is instantiated (see note 1.). + In return, an alarmID is obtained. Then, ServerNotifier URI and + faultIDs are saved on ``VnfInstance.instantiatedVnfInfo.metadata``, + and obtained alarmID is saved on + ``VnfInstance.instantiatedVnfInfo.vnfcResourceInfo.metadata``. + +* ``3.`` Server Notifier watches and detects fault events on VNF. + +* ``4-5.`` Server Notifier notifies fault event to Tacker via + the FaultNotification interface. VnfServerNotificationController forwards + the notification to VnfServerNotificationDriver via ConductorV2. + +* ``6.`` VnfServerNotificationDriver checks if its faultID attribute is + included in faultIDs being set in term 1 above. + In case of alerting by multiple events, to prevent invoking + multiple heal operations to single VNF, the fault events are packed into + a single heal request for a configured period of time (see note 2.). + +* ``7-9.`` The remaining process is same as the manual healing. VnfLcmDriverV2 + sends VnfLcmOperationOccurrenceNotification and grants to the Client. + This process is specified in [#spec_lcm_y]_, [#spec_lcm_v]_. + +* ``10-12.`` Tacker deletes alarmID for new VNF. It also removes alarmID on DB + (``VnfInstance.instantiatedVnfInfo.vnfcResourceInfo.metadata``) + at the same time. + +* ``13-14.`` Failed VNF is deleted and new VNF is created. This process is + performed by Heat interface of OpenStack [#Openstack_Heat]_. + +* ``15-17.`` Tacker sets FaultNotification destination URI for new VNF. + It saves alarmID on DB + (``VnfInstance.instantiatedVnfInfo.vnfcResourceInfo.metadata``). + at the same time. + +* ``18.`` VnfLcmDriverV2 sends VnfLcmOperationOccurrenceNotification + to the Client. This process is specified in [#spec_lcm_y]_, [#spec_lcm_v]_. + +.. note:: + #. ServerNotifier URI and faultIDs are set in + ``InstantiateVnfRequest.additionalParams`` field of VNF LCM interface. + (see `REST API impact`_) + This additionalParams field is defined as key/value pair in ETSI + NFV-SOL003 v3.3.1 [#SOL003_v3.3.1]_ + + #. When a single VNF raises multiple fault events for its VNFCs + at a moment, Tacker targets these VNFCs and performs healing all at once. + In this healing operation, ``HealVnfRequest.vnfcInstanceId`` includes + all these VNFCs. So that, VnfLcmOperationOccurrenceNotification and + grants are performed only once. + +Request parameters for AutoHealing operation on FaultNotification trigger +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The detail of API is described at `REST API impact`_. + +Sequence for AutoHealing operation on FaultNotification trigger +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The following describes the processing flow of the +AutoHealing triggered by FaultNotification. + +.. seqdiag:: + + seqdiag { + node_width = 100; + edge_length = 150; + + NFVO + VnflcmControllerV2 + VnfServerNotificationController + NfvoClient + ConductorV2 + VnfServerNotificationDriver + VnfLcmDriverV2 + MgmtDriver + InfraDriver + ServerNotifier + VNF + + + "ServerNotifier" -> "VNF" + [label = "1. Fault events occurred in VNF"] + "ServerNotifier" <-- "VNF" + [label="return"] + + "ServerNotifier" -> "VnfServerNotificationController" + [label = "2. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", + note="Multiple events \ncan be reported at the same time.\n + This is ignored if faultID is invalid."] + + "VnfServerNotificationController" ->> "ConductorV2" + [label = "3. notify fault event"] + "ConductorV2" -> "VnfServerNotificationDriver" + [label = "4. fault event"] + "ServerNotifier" <-- "VnfServerNotificationController" + [label = "Response: 204"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "5. Queueing fault event"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "6. start packing timer"] + "ConductorV2" <-- "VnfServerNotificationDriver" + [label = "return"] + "VnfServerNotificationController" <-- "ConductorV2" + [style=none] + + "ServerNotifier" -> "VnfServerNotificationController" + [label = "7. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", + note="This is ignored if faultID is invalid."] + + "VnfServerNotificationController" ->> "ConductorV2" + [label = "8. notify fault event"] + "ConductorV2" -> "VnfServerNotificationDriver" + [label = "9. fault event"] + "ServerNotifier" <-- "VnfServerNotificationController" + [label = "Response: 204"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "10. Queueing fault event"] + "ConductorV2" <-- "VnfServerNotificationDriver" + [label = "return"] + "VnfServerNotificationController" <-- "ConductorV2" + [style=none] + + + "ServerNotifier" -> "VnfServerNotificationController" + [label = "11. POST /vnf_instances/{vnf_instance_id}/servers/{server_id}/notify", + note="This is ignored if faultID is invalid."] + + "VnfServerNotificationController" ->> "ConductorV2" + [label = "12. notify fault event"] + "ConductorV2" -> "VnfServerNotificationDriver" + [label = "13. fault event"] + "ServerNotifier" <-- "VnfServerNotificationController" + [label = "Response: 204"] + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "14. Queueing fault event"] + "ConductorV2" <-- "VnfServerNotificationDriver" + [label = "return"] + "VnfServerNotificationController" <-- "ConductorV2" + [style=none] + + "VnfServerNotificationDriver" <-- "ServerNotifier" + [style=none] + + "ConductorV2" -> "VnfServerNotificationDriver" + [style=none] + + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "15. packing timer is expired"] + + "VnfServerNotificationDriver" -> "VnfServerNotificationDriver" + [label = "16. Multiple events are packed for a configured period of time"] + + "VnfServerNotificationDriver" -> "VnflcmControllerV2" + [label = "17. POST /vnflcm/v2/vnf_instances/{vnfInstanceId}/heal"] + + "VnflcmControllerV2" -> "ConductorV2" + [label = "18. start_lcm_op"] + + "VnfServerNotificationDriver" <-- "VnflcmControllerV2" + [label = "Response: 202"] + + "ConductorV2" <-- "VnfServerNotificationDriver" + [style=none] + + "ConductorV2" -> "NfvoClient" + [label = "19. send_lcmocc_notification"] + "NfvoClient" -> "NFVO" + [label="20. POST /VnfLcmOperationOccurrenceNotification(STARTING)"] + "NfvoClient" <-- "NFVO" + [label="Response: 204"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "ConductorV2" -> "NfvoClient" + [label = "21. grant"] + "NfvoClient" -> "NFVO" + [label="22. POST /grants"] + "NfvoClient" <-- "NFVO" + [label="Response: 201"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "ConductorV2" -> "NfvoClient" + [label = "23. send_lcmocc_notification"] + "NfvoClient" -> "NFVO" + [label="24. POST /VnfLcmOperationOccurrenceNotification(PROCESSING)"] + "NfvoClient" <-- "NFVO" + [label="Response: 204"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "ConductorV2" -> "VnfLcmDriverV2" + [label="25. perform healing"] + + "VnfLcmDriverV2" -> "MgmtDriver" + [label="26. heal_start"] + "MgmtDriver" -> "VNF" + [label="27. DELETE v2/{tenant_id}/servers/{server_id}/alarms/{alarm_id}"] + "MgmtDriver" <-- "VNF" + [label="Response: 204"] + "VnfLcmDriverV2" <-- "MgmtDriver" + [label="return"] + + "VnfLcmDriverV2" -> "InfraDriver" + [label = "28. heal"] + + "InfraDriver" -> "VNF" + [label="29. Mark resource unhealthy via Heat"] + "InfraDriver" <-- "VNF" + [label="return"] + + "InfraDriver" -> "VNF" + [label="30. Update stack via Heat"] + "InfraDriver" <-- "VNF" + [label="return"] + + "InfraDriver" -> "VNF" + [label="31. Get updated resource data via Heat"] + "InfraDriver" <-- "VNF" + [label="return"] + + "VnfLcmDriverV2" <-- "InfraDriver" + [label="return"] + + "VnfLcmDriverV2" -> "MgmtDriver" + [label="32. heal_end"] + "MgmtDriver" -> "VNF" + [label="33. POST v2/{tenant_id}/servers/{server_id}/alarms"] + "MgmtDriver" <-- "VNF" + [label="Response: 201"] + "VnfLcmDriverV2" <-- "MgmtDriver" + [label="return"] + + "ConductorV2" <-- "VnfLcmDriverV2" + [label="return"] + + "ConductorV2" -> "NfvoClient" + [label = "34. send_lcmocc_notification"] + "NfvoClient" -> "NFVO" + [label="35. POST /VnfLcmOperationOccurrenceNotification(COMPLETED)"] + "NfvoClient" <-- "NFVO" + [label="Response: 204"] + "ConductorV2" <-- "NfvoClient" + [label="return"] + + "VnflcmControllerV2" <-- "ConductorV2" + [style=none] + + } + +* ``1.`` ServerNotifier watches and detects fault events on VNF. + +* ``2-5.`` VNF notifies fault event to Tacker via the FaultNotification + interface. Tacker ignores it when faultID is invalid. + fault events are queued temporarily. + +* ``6-14.`` In case of alerting by multiple events, fault events are + packed into a single request for a configured period of time. + +* ``15-16.`` When timer expires, + the fault events are packed into a single request. + +* ``17-18.`` VnfServerNotificationDriver requests healing to + VnflcmControllerV2 and healing operations are started. + +* ``19-24.`` Tacker sends + VnfLcmOperationOccurrenceNotification(STARTING,PROCESSING) to the Client + and grants. This process is specified in + [#spec_lcm_y]_, [#spec_lcm_v]_ + +* ``25.`` VnfLcmDriverV2 performs healing. + + .. note:: + In this heal operation, ``additionalParams.all`` cannot be specified from + users, thus only the VNFC itself (i.e. storages are not included) will be + the target of heal operation. See [#spec_lcm_y]_ for the detail of + behavior of ``additionalParams.all``. + +* ``26-27.`` Tacker deletes alarmID for new VNF. + +* ``28-31.`` Failed VNF is deleted and new VNF is created. This process is + performed by Heat interface of OpenStack [#Openstack_Heat]_. + +* ``32-33.`` Tacker sets FaultNotification destination URI for new VMs + (see note). + +* ``34-35.`` Tacker sends + VnfLcmOperationOccurrenceNotification(COMPLETE) to the Client. + This process is specified in [#spec_lcm_y]_, [#spec_lcm_v]_. + + .. note:: + * ServerNotifier URI and faultIDs are set in + ``InstantiateVnfRequest.additionalParams`` field of VNF LCM interface. + (see `REST API impact`_) + This additionalParams field is defined as key/value pair in + ETSI NFV-SOL003 v3.3.1 [#SOL003_v3.3.1]_ + +Alternatives +------------ + +None + +Data model impact +----------------- + +None + +REST API impact +--------------- + +VIM sends following RESTful API to notify fault event to Tacker. + +* | **Name**: Notify fault event + | **Description**: notifies Tacker with fault event + when a fault event occur in VIM. + | **Method type**: POST + | **URL for the resource**: /vnf_instances/ + {vnf_instance_id}/servers/{server_id}/notify + | **Path parameters**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Name + - Cardinality + - Description + * - + - 1 + - Prefix of URI for notifying fault event on Tacker. + This parameter is described ``fault_notification_uri`` + in tacker.conf file. + * - vnf_instance_id + - 1 + - VNF instance ID. + * - server_id + - 1 + - VM ID. + + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - ServerNotification + - 1 + - fault information to Tacker when a fault event occur in VIM. + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 50 + + * - Attribute name (ServerNotification) + - Data type + - Cardinality + - Description + * - notification + - Structure (inlined) + - 1 + - + * - >host_id + - Identifier + - 0..1 + - Physical server ID. Specified only in case that fault + is occurred on physical server. + * - >alarm_id + - Identifier + - 1 + - ID to identify alarm. + * - >fault_id + - String + - 1 + - Target fault IDs + * - >fault_type + - String + - 1 + - Fault type. + "10": Physical server fault, + "11": Physical server OUS, + "20": Inconsistency of VM status, + "21": VM reboot detection. + * - >fault_option + - KeyValuePairs + - 0..1 + - Optional information for fault. + + | **Response**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 18 50 + + * - Data type + - Cardinality + - Response Codes + - Description + * - n/a + - 1 + - Success: 204 + - Shall be returned when ServerNotification has + been accepted successfully. + * - n/a + - 1 + - Error: 400 + - Malformed request syntax. + * - n/a + - 1 + - Error: 404 + - The server can not find the requested resource. + * - n/a + - 1 + - Error: 500 + - The server has encountered a situation it does not know how to + handle. + * - n/a + - 1 + - Error: 503 + - This error response means that the server, while working as + a gateway to get a response needed to handle the request, got + an invalid response. + +The LCM interface is modified to set parameters for ServerNotifier. + +* | **Name**: Instantiate VNF task + | **Description**: This task resource represents the "Instantiate VNF" + operation. The client can use this resource to instantiate a VNF instance. + ``Only the additionalParams for FaultNotification are described here``. + | **Method type**: POST + | **URL for the resource**: /vnflcm/v2/vnf_instances/ + {vnfInstanceId}/instantiate + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 50 + + * - Attribute name (InstantiateVnfRequest) + - Data type + - Cardinality + - Description + * - additionalParams + - 0..1 + - KeyValuePairs (inlined) + - Additional input parameters for the instantiation process, + specific to the VNF being instantiated. + * - >ServerNotifierUri + - 1 + - String + - Base Uri for ServerNotifier. The latter part of Uri + (the part of "v2/{tenant_id}/..." as described in + `Notifications impact`_) + is added internally by Tacker, so only the first part should be set. + * - >ServerNotifierFaultID + - 1..N + - String + - List of string that indicates which type of alarms to detect. + +Security impact +--------------- + +None + +Notifications impact +-------------------- + +Tacker sends notifications below to set/unset ServerNotifier configuration: + +* | **Name**: Set FaultNotification destination URI from VNFM to VIM + | **Description**: set FaultNotification destination URI from VNFM to VIM + | **Method type**: POST + | **URL for the resource**: v2/{tenant_id}/servers/{server_id}/alarms + | **Path parameters**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Name + - Cardinality + - Description + * - tenant_id + - 1 + - tenant ID. + * - server_id + - 1 + - VM ID. + + | **Request Header**: + + .. list-table:: + :header-rows: 1 + :widths: 18 50 + + * - Name + - Description + * - Authorization + - Access token provided via Keystone + + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - ServerNotificationRegisterRequest + - 1 + - URI and filter for Fault Management. + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 50 + + * - Attribute name (ServerNotificationRegisterRequest) + - Data type + - Cardinality + - Description + * - fault_action + - String + - 0..1 + - FaultNotification destination URI for fault occurrence. + Either fault_action or recovery_action must be specified. + * - recovery_action + - String + - 0..1 + - FaultNotification destination URI for fault recovery. + Either fault_action or recovery_action must be specified. + (This attribute is for future use and is not used currently.) + * - fault_id + - String + - 0..n + - Target fault IDs. + + | **Response**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 18 50 + + * - Data type + - Cardinality + - Response Codes + - Description + * - ServerNotificationRegisterResponse + - 1 + - Success: 201 + - Shall be returned when ServerNotificationRegisterRequest has + been registered successfully. + * - n/a + - 1 + - Error: 400 + - Malformed request syntax. + * - n/a + - 1 + - Error: 404 + - The server can not find the requested resource. + * - n/a + - 1 + - Error: 408 + - The server is shutting down its connection. + * - n/a + - 1 + - Error: 500 + - The server has encountered a situation it does not know how to + handle. + * - n/a + - 1 + - Error: 503 + - This error response means that the server, while working as + a gateway to get a response needed to handle the request, got + an invalid response. + + .. list-table:: + :header-rows: 1 + :widths: 18 18 10 50 + + * - Attribute name (ServerNotificationRegisterResponse) + - Data type + - Cardinality + - Description + * - fault_action + - String + - 0..1 + - FaultNotification destination URI for fault occurrence. + Either fault_action or recovery_action must be specified. + * - recovery_action + - String + - 0..1 + - FaultNotification destination URI for fault recovery. + Either fault_action or recovery_action must be specified. + (This attribute is for future use and is not used currently.) + * - fault_id + - String + - 0..n + - Target fault IDs. + * - alarm_id + - Identifier + - 1 + - ID to identify alarm destination. + +* | **Name**: Delete alarmID from VNFM to VIM + | **Description**: delete alarmID from VNFM to VIM + | **Method type**: DELETE + | **URL for the resource**: v2/{tenant_id}/servers/ + {server_id}/alarms/{alarm_id} + | **Path parameters**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Name + - Cardinality + - Description + * - tenant_id + - 1 + - tenant ID. + * - server_id + - 1 + - VM ID. + * - alarm_id + - 1 + - alarm ID. + + | **Request Header**: + + .. list-table:: + :header-rows: 1 + :widths: 18 50 + + * - Name + - Description + * - Authorization + - Access token provided via Keystone + + | **Request**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 50 + + * - Data type + - Cardinality + - Description + * - n/a + - + - + + | **Response**: + + .. list-table:: + :header-rows: 1 + :widths: 18 10 18 50 + + * - Data type + - Cardinality + - Response Codes + - Description + * - n/a + - 1 + - Success: 204 + - Shall be returned when the registered + resource has been deleted successfully. + * - n/a + - 1 + - Error: 400 + - Malformed request syntax. + * - n/a + - 1 + - Error: 404 + - The server can not find the requested resource. + * - n/a + - 1 + - Error: 408 + - The server is shutting down its connection. + * - n/a + - 1 + - Error: 500 + - The server has encountered a situation it does not know how to + handle. + * - n/a + - 1 + - Error: 503 + - This error response means that the server, while working as + a gateway to get a response needed to handle the request, got + an invalid response. + +.. note:: + * When using above set/delete API, + Access Token should be obtained via Keystone in advance + for authentication. + +Other end user impact +--------------------- + +None + +Performance Impact +------------------ + +None + +Other deployer impact +--------------------- + +None + +Developer impact +---------------- + +None + +Implementation +============== + +Assignee(s) +----------- + +Primary assignee: + Masaki Ueno + +Other contributors: + Koji Shimizu + + Yoshiyuki Katada + + Ayumu Ueha + + Yusuke Niimi + +Work Items +---------- + +Implement Tacker to support: + + Add new Rest API |post-fault-event| to + notify fault event to Tacker when a fault event occur in VIM. + + .. |post-fault-event| replace:: + ``POST /vnf_instances/{vnf_instance_id}/servers/ + {server_id}/notify`` + + + Tacker sends ``POST v2/{tenant_id}/servers/{server_id}/alarms`` + to set FaultNotification destination URI with VIM. + + + Tacker sends |delete-alarm| to delete FaultNotification destination + URI with VIM. + + .. |delete-alarm| replace:: + ``DELETE v2/{tenant_id}/servers/{server_id}/alarms/{alarm_id}`` + + + Add MgmtDriver support for FaultNotification destination URI handling: + + + instantiate_end to set FaultNotification destination URI + and get alarmID. + + + terminate_start to delete alarmID. + + + scale_start to delete alarmID. + + + scale_end to set FaultNotification destination URI and get alarmID. + + + heal_start to delete alarmID. + + + heal_end set FaultNotification destination URI with VIM and get alarmID. + +Add new unit and functional tests. + +Dependencies +============ + +None. + +Testing +======= + +Unit and functional tests will be added to cover cases required in the spec. + +Documentation Impact +==================== + +* Complete user guide will be added to explain how to configure + AutoHealing operation on FaultNotification trigger. + +* Update API documentation on the API additions mentioned in + `REST API impact`_. + +References +========== + +.. [#Openstack_Heat] https://docs.openstack.org/heat/latest/ +.. [#SOL003_v3.3.1] https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/003/03.03.01_60/gs_nfv-sol003v030301p.pdf +.. [#spec_lcm_y] https://specs.openstack.org/openstack/tacker-specs/specs/yoga/enhance-nfv-solv3-lcm-operation.html +.. [#spec_lcm_v] https://specs.openstack.org/openstack/tacker-specs/specs/victoria/support-notification-api-based-on-etsi-nfv-sol.html