Processing triggered outside the API — python-ironicclient — branch stable/2026.2
Branch
stable/2026.2@af2ceeb9c4f2— repository https://opendev.org/openstack/python-ironicclient — analysed on 2026-11-01
None in the background. The inventory found 0 triggers (_inventory/inventory_stable-2026.2.md), and reading the code confirms it: no consumer, no periodic task, no event, no background thread. Each command does its work in sequence, then the process ends. The one lock guards the first negotiation, for callers of the Python API that share a client (ironicclient/common/http.py:399, ironicclient/common/http.py:437).
The processing that does exist is client-side waiting, while the work happens in Ironic.
Polling a node: --wait
ironicclient/v1/node.py:1162, through ironicclient/osc/v1/baremetal_node.py:190, for the commands in 01 § 2.
- Trigger:
--wait [seconds]. The default is 0, which means no limit (ironicclient/common/utils.py:438). Each node is requested again until it reaches the state. - Interval: 2 or 10 seconds by action (
ironicclient/v1/utils.py:23), or 2 by default in the Python API. The first check is immediate. The timeout is checked after the sleep, so a 1-second timeout waited 2 seconds [observedwait-manage-timeout]. - Request:
GET /v1/nodes/{id}with all fields (ironicclient/v1/node.py:1129). - Several nodes: all are polled together, and finished ones leave the list (
ironicclient/v1/node.py:1216). The first failure stops the whole wait. - Decision (
ironicclient/v1/node.py:1134), for one node: | Node seen | Result | |---|---| |{}from the server | keep waiting | |provision_stateequals the expected state | done | |error, or a state ending infailed|StateTransitionFailed, withlast_error| | notarget_provision_state, other state |StateTransitionFailed, unexpected stable state; the Python API can turn this off | | anything else | keep waiting | - What the code requires:
provision_state,target_provision_stateandlast_errorin the node. A nullprovision_stategives a Python error at.endswith[inferred fromironicclient/v1/node.py:1141].
stateDiagram-v2
[*] --> Polling: PUT states/provision accepted
Polling --> Done: provision_state = expected
Polling --> Failed: error or "... failed"
Polling --> Failed: stable and not expected
Polling --> TimedOut: timeout > 0 and elapsed
Polling --> Polling: still moving, or {}A timeout or a Ctrl-C stops only the client. The action goes on in Ironic.
Polling an allocation: --wait
ironicclient/v1/allocation.py:89, through ironicclient/osc/v1/baremetal_allocation.py:115: every second, GET /v1/allocations/{uuid}, until state is active. error raises with last_error. Other states continue [observed wait-allocation-ok, wait-allocation-error].
Retries
A short wait of its own: see 03 § 4.
Not implemented
No command waits for power state changes, or for console or BIOS operations. abort and unhold have no --wait (ironicclient/v1/utils.py:47, ironicclient/osc/v1/baremetal_node.py:196, ironicclient/osc/v1/baremetal_node.py:1070).
Source: reverse-spec-python-ironicclient/05-async-processing_stable-2026.2.md. The _rewrite/ and _inventory/ files are not published on the site.