spec for add option to enable/disable a segment

If 'enable' of one failover segment is set False, all notifications
which belong to this failover segment will be ignored, so that
no recovery flow executes.

Change-Id: I418aaa9c34826dd908363d91e0df718f55721536
Implements: bp enable-to-segment
This commit is contained in:
suzhengwei 2020-02-05 15:27:08 +08:00
parent 11f58a2168
commit d0fe45c9c5
1 changed files with 269 additions and 0 deletions

View File

@ -0,0 +1,269 @@
..
This work is licensed under a Creative Commons Attribution 3.0 Unported
License.
http://creativecommons.org/licenses/by/3.0/legalcode
=======================================
Add option to enable/disable a segment
=======================================
https://blueprints.launchpad.net/masakari/+spec/enable-to-segment
Problem description
===================
Sometimes, operators want to disable instance-ha temporarily. For example,
when we plan to update the hardware or pull the latest code on the compute
nodes where the masakari-monitors are running, we are required to stop
masakari-api and masakari-engine services so that it won't execute any ha
recovery workflow. If you forgot to stop these services, then it would
end up in a mess and you will need to spend lot of your time in recovering
instances which are messed up.
So, we need a simple solution which will allow masakari to disable instance-ha
for a temporarily period without needing operator to stop these services.
Proposed change
===============
This spec is mainly to add an option to enable/disable a segment
* Add ``enabled`` option to a segment. When creating a new segment, it will be
enabled by default. Option ``enabled`` has a boolean value: 'True' means the
segment is enabled, notifications of this segment will be processed; 'False'
means the segment is disabled, notifications of this segment will be
ignored.
* User can modify ``enabled`` option by ``PUT /segment/<segment_uuid>`` API.
Alternatives
------------
None
Data model impact
-----------------
Yes, add a new db column ``enabled`` of type Boolean with default value
``True`` to ``failover_segments`` table.
REST API impact
---------------
Following changes will be introduced in a new API micro-version.
* POST /segments
request example::
{
"segment": {
"service_type": "COMPUTE",
"recovery_method": "AUTO",
"name": "segment",
"enabled": True
}
}
response example::
{
"segment": {
"uuid": "5fd9f925-0379-40db-a7f8-786a0b655b2a",
"deleted": false,
"created_at": "2017-04-21T08:59:53.991030",
"description": null,
"recovery_method": "AUTO",
"updated_at": null,
"service_type": "COMPUTE",
"deleted_at": null,
"id": 4,
"name": "segment",
"enabled": True
}
}
* PUT /segments/{segment_id}
request example::
{
"segment": {
"name": "new_segment",
"enabled": False
}
}
response example::
{
"segment": {
"uuid": "5fd9f925-0379-40db-a7f8-786a0b655b2a",
"deleted": false,
"created_at": "2017-04-21T08:59:54.000000",
"description": null,
"recovery_method": "AUTO",
"updated_at": "2017-04-21T09:47:03.748028",
"service_type": "COMPUTE",
"deleted_at": null,
"id": 4,
"name": "new_segment",
"enabled": False
}
}
* GET /segments
response example::
{
"segments": [
{
"uuid": "9e800031-6946-4b43-bf09-8b3d1cab792b",
"deleted": false,
"created_at": "2017-04-20T10:17:17.000000",
"description": "Segment1",
"recovery_method": "auto",
"updated_at": null,
"service_type": "Compute",
"deleted_at": null,
"id": 1,
"name": "segment2",
"enabled": True
}
]
}
* GET /segments/<segment_uuid>
response example::
{
"segment": {
"uuid": "5fd9f925-0379-40db-a7f8-786a0b655b2a",
"deleted": false,
"created_at": "2017-04-21T08:59:53.991030",
"description": null,
"recovery_method": "AUTO",
"updated_at": null,
"service_type": "COMPUTE",
"deleted_at": null,
"id": 4,
"name": "new_segment",
"enabled": False
}
}
Security impact
---------------
None
Notifications impact
--------------------
Field ``enabled`` will be added into segment in masakari notifications.
For example the wire format of the ``create.segment.start`` notification
looks like the following::
{
"event_type": "segment.create.start",
"message_id": "e44cb15b-dcba-409e-b0e1-9ee103b9a168",
"payload": {
"masakari_object.data": {
"description": null,
"fault": null,
"name": "test",
"recovery_method": "auto",
"service_type": "compute",
"enabled": True
},
"masakari_object.name": "SegmentApiPayload",
"masakari_object.namespace": "masakari",
"masakari_object.version": "1.1"
},
"publisher_id": "masakari-api:fake-mini",
"timestamp": "2018-11-22 09:25:12.393979"
}
Other end user impact
---------------------
The python-masakariclient, masakari-dashboard and openstacksdk will be updated
to support ``enabled`` parameter of the segment in a new micro-version.
Performance Impact
------------------
None
Other deployer impact
---------------------
None
Developer impact
----------------
None
Implementation
==============
Assignee(s)
-----------
Primary assignee:
* suzhengwei <sugar-2008@163.com>
Work Items
----------
* Create a new API microversion to handle ``enabled`` parameter in segments.
* Update docs for enabled to segment
* Update python-masakariclient, masakari-dashboard and openstacksdk to
manage ``enabled`` parameter of the segment..
* Add functional tests
Dependencies
============
None
Testing
=======
Unit and functional test is neccessary.
Add required unit and functional tests which will run in gate.
Documentation Impact
====================
Update Masakari API reference documentation.
References
==========
None
History
=======
.. list-table:: Revisions
:header-rows: 1
* - Release Name
- Description
* - Ussuri
- Introduced
* - Victoria
- Re-proposed