Fixed action status_message update restrictions to allow updates when action is already in SKIPPED state. Previously, users could only update the status_message when initially transitioning to SKIPPED state. Changes include: - Modified validation logic to allow status_message updates for SKIPPED actions - Changed exception type from PatchError to Conflict for better semantics - Added comprehensive test coverage for the new behavior - Updated API documentation and samples - Added release note documenting the fix This enables administrators to fix typos, provide more detailed explanations, or expand on reasons in action status messages after the action has been skipped. Generated-By: claude-code Closes-Bug: #2121601 Change-Id: I64def708389a8ecd32080fba1638a4499ead349d Signed-off-by: Sean Mooney <work@seanmooney.info>
262 lines
6.4 KiB
ReStructuredText
262 lines
6.4 KiB
ReStructuredText
.. -*- rst -*-
|
|
|
|
=======
|
|
Actions
|
|
=======
|
|
|
|
An ``Action`` is what enables Watcher to transform the current state of a
|
|
``Cluster`` after an ``Audit``.
|
|
|
|
An ``Action`` is an atomic task which changes the current state of a target
|
|
Managed resource of the OpenStack ``Cluster`` such as:
|
|
|
|
- Live migration of an instance from one compute node to another compute
|
|
node with Nova
|
|
- Changing the power level of a compute node (ACPI level, ...)
|
|
- Changing the current state of a compute node (enable or disable) with Nova
|
|
|
|
In most cases, an ``Action`` triggers some concrete commands on an existing
|
|
OpenStack module (Nova, Neutron, Cinder, Ironic, etc.).
|
|
|
|
An ``Action`` has a life-cycle and its current state may be one of the
|
|
following:
|
|
|
|
- **PENDING** : the ``Action`` has not been executed yet by the
|
|
``Watcher Applier``.
|
|
- **SKIPPED** : the ``Action`` will not be executed because a predefined
|
|
skipping condition is found by ``Watcher Applier`` or is explicitly
|
|
skipped by the ``Administrator``.
|
|
- **ONGOING** : the ``Action`` is currently being processed by the
|
|
``Watcher Applier``.
|
|
- **SUCCEEDED** : the ``Action`` has been executed successfully
|
|
- **FAILED** : an error occurred while trying to execute the ``Action``.
|
|
- **DELETED** : the ``Action`` is still stored in the ``Watcher database``
|
|
but is not returned any more through the Watcher APIs.
|
|
- **CANCELLED** : the ``Action`` was in **PENDING** or **ONGOING** state and
|
|
was cancelled by the ``Administrator``
|
|
|
|
``Actions`` are created by ``Watcher Planner`` as result of Audit's execution.
|
|
``Action`` can't be created, modified or deleted by user.
|
|
|
|
List Action
|
|
===========
|
|
|
|
.. rest_method:: GET /v1/actions
|
|
|
|
Returns a list of Action resources.
|
|
|
|
Normal response codes: 200
|
|
|
|
Error codes: 400,401
|
|
|
|
Request
|
|
-------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- action_plan_uuid: r_action_plan
|
|
- audit_uuid: r_audit
|
|
- limit: limit
|
|
- marker: marker
|
|
- sort_dir: sort_dir
|
|
- sort_key: sort_key
|
|
|
|
Response
|
|
--------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- uuid: uuid
|
|
- action_type: action_type
|
|
- state: action_state
|
|
- action_plan_uuid: action_action_plan_uuid
|
|
- parents: action_parents
|
|
- links: links
|
|
|
|
**Example JSON representation of an Action:**
|
|
|
|
.. literalinclude:: samples/actions-list-response.json
|
|
:language: javascript
|
|
|
|
List Action Detailed
|
|
====================
|
|
|
|
.. rest_method:: GET /v1/actions/detail
|
|
|
|
Returns a list of Action resources with complete details.
|
|
|
|
Normal response codes: 200
|
|
|
|
Error codes: 400,401
|
|
|
|
Request
|
|
-------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- action_plan_uuid: r_action_plan
|
|
- audit_uuid: r_audit
|
|
- limit: limit
|
|
- marker: marker
|
|
- sort_dir: sort_dir
|
|
- sort_key: sort_key
|
|
|
|
Response
|
|
--------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- uuid: uuid
|
|
- action_type: action_type
|
|
- state: action_state
|
|
- action_plan_uuid: action_action_plan_uuid
|
|
- parents: action_parents
|
|
- description: action_description
|
|
- input_parameters: action_input_parameters
|
|
- links: links
|
|
- status_message: action_status_message
|
|
|
|
**Example JSON representation of an Action:**
|
|
|
|
.. literalinclude:: samples/actions-list-detailed-response.json
|
|
:language: javascript
|
|
|
|
Show Action
|
|
===========
|
|
|
|
.. rest_method:: GET /v1/actions/{action_ident}
|
|
|
|
Shows details for an Action.
|
|
|
|
Normal response codes: 200
|
|
|
|
Error codes: 404
|
|
|
|
Request
|
|
-------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- action_ident: action_ident
|
|
|
|
Response
|
|
--------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- uuid: uuid
|
|
- action_type: action_type
|
|
- state: action_state
|
|
- action_plan_uuid: action_action_plan_uuid
|
|
- parents: action_parents
|
|
- description: action_description
|
|
- input_parameters: action_input_parameters
|
|
- links: links
|
|
- status_message: action_status_message
|
|
|
|
**Example JSON representation of an Action:**
|
|
|
|
.. literalinclude:: samples/actions-show-response.json
|
|
:language: javascript
|
|
|
|
Skip Action
|
|
===========
|
|
|
|
.. rest_method:: PATCH /v1/actions/{action_ident}
|
|
|
|
Skips an Action resource by changing its state to SKIPPED.
|
|
|
|
.. note::
|
|
Only Actions in PENDING state can be skipped. The Action must belong to
|
|
an Action Plan in RECOMMENDED or PENDING state. This operation requires
|
|
API microversion 1.5 or later.
|
|
|
|
Normal response codes: 200
|
|
|
|
Error codes: 400,404,403,409
|
|
|
|
Request
|
|
-------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- action_ident: action_ident
|
|
|
|
**Example Action skip request:**
|
|
|
|
.. literalinclude:: samples/action-skip-request.json
|
|
:language: javascript
|
|
|
|
**Example Action skip request with custom status message:**
|
|
|
|
.. literalinclude:: samples/action-skip-request-with-message.json
|
|
:language: javascript
|
|
|
|
Response
|
|
--------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- uuid: uuid
|
|
- action_type: action_type
|
|
- state: action_state
|
|
- action_plan_uuid: action_action_plan_uuid
|
|
- parents: action_parents
|
|
- description: action_description
|
|
- input_parameters: action_input_parameters
|
|
- links: links
|
|
- status_message: action_status_message
|
|
|
|
**Example JSON representation of a skipped Action:**
|
|
|
|
.. literalinclude:: samples/action-skip-response.json
|
|
:language: javascript
|
|
|
|
Update Action Status Message
|
|
============================
|
|
|
|
.. rest_method:: PATCH /v1/actions/{action_ident}
|
|
|
|
Updates the status_message of an Action that is already in SKIPPED state.
|
|
|
|
.. note::
|
|
The status_message field can only be updated for Actions that are currently
|
|
in SKIPPED state. This allows administrators to fix typos, provide more
|
|
detailed explanations, or expand on reasons that were initially omitted.
|
|
This operation requires API microversion 1.5 or later.
|
|
|
|
Normal response codes: 200
|
|
|
|
Error codes: 400,404,403,409
|
|
|
|
Request
|
|
-------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- action_ident: action_ident
|
|
|
|
**Example status_message update request for a SKIPPED action:**
|
|
|
|
.. literalinclude:: samples/action-update-status-message-request.json
|
|
:language: javascript
|
|
|
|
Response
|
|
--------
|
|
|
|
.. rest_parameters:: parameters.yaml
|
|
|
|
- uuid: uuid
|
|
- action_type: action_type
|
|
- state: action_state
|
|
- action_plan_uuid: action_action_plan_uuid
|
|
- parents: action_parents
|
|
- description: action_description
|
|
- input_parameters: action_input_parameters
|
|
- links: links
|
|
- status_message: action_status_message
|
|
|
|
**Example JSON representation of an Action with updated status_message:**
|
|
|
|
.. literalinclude:: samples/action-update-status-message-response.json
|
|
:language: javascript |