This patch is implementing skipping automatically actions based on the result of action pre_condition method. This will allow to manage properly situations as migration actions for vms which does not longer exist. This patch includes: - Adding a new state SKIPPED to the Action objects. - Add a new Exception ActionSkipped. An action which raises it from the pre_condition execution is moved to SKIPPED state. - pre_condition will not be executed for any action in SKIPPED state. - execute will not be executed for any action in SKIPPED or FAILED state. - post_condition will not be executed for any action in SKIPPED state. - moving transition to ONGOING from pre_condition to execute. That means that actions raising ActionSkipped will move from PENDING to SKIPPED while actions raising any other Exception will move from PENDING to FAILED. - Adding information on action failed or skipped state to the `status_message` field. - Adding a new option to the testing action nop to simulate skipping on pre_condition, so that we can easily test it. Implements: blueprint add-skip-actions Assisted-By: Cursor (claude-4-sonnet) Change-Id: I59cb4c7006c7c3bcc5ff2071886d3e2929800f9e Signed-off-by: Alfredo Moralejo <amoralej@redhat.com>
159 lines
3.8 KiB
ReStructuredText
159 lines
3.8 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
|
|
|
|
**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
|
|
|
|
**Example JSON representation of an Action:**
|
|
|
|
.. literalinclude:: samples/actions-show-response.json
|
|
:language: javascript
|