Skip actions automatically based on pre_condition results

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>
This commit is contained in:
Alfredo Moralejo
2025-08-05 17:16:42 +02:00
parent 5048a6e3ba
commit 6d35be11ec
12 changed files with 467 additions and 15 deletions

View File

@@ -23,6 +23,9 @@ 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
@@ -152,4 +155,4 @@ Response
**Example JSON representation of an Action:**
.. literalinclude:: samples/actions-show-response.json
:language: javascript
:language: javascript