Repository navigation
Changelog
馃摙 Breaking Changes
鈿狅笍 Breaking changes: AnsibleCLI outputs (#139)
Per-host results were stored three times in the task outputs (vars.playbooks, the typed playbooks and the flat
vars.outputs), and stdout_lines/stderr_lines doubled every command result. They are now stored once, and by
default the full results are offloaded to Kestra's internal storage. This changes the shape of the outputs, so
flows that read them downstream may need updating.
1. outputs.<id>.vars.playbooks is removed
Per-host results now live only in outputs.<id>.playbooks.
Migration: replace outputs.<id>.vars.playbooks with outputs.<id>.playbooks.
2. outputs.<id>.vars.outputs no longer holds raw host results
In ALL mode it used to be a list of per-host result maps. In both modes it is now a map of the values declared
through the kestra module, and it is empty when the playbook declares none.
Migration: read per-host results from outputs.<id>.playbooks (or resultsUri) instead of vars.outputs.
3. playbooks carries light results by default
The new resultsStorage property defaults to STORE. With STORE, playbooks only keeps, per host:
changed,failed,skipped,unreachable,rcmsg, truncated to 1 KB (a list or mapmsgkeeps its type and is cut only when its JSON is larger than 1 KB)- the last 1 KB of
stderr, for failed or unreachable hosts only - the output of
debugtasks (msg/var), with each value capped at 64 KB
Loop tasks keep the same subset per item under results. The full results are stored in a file exposed by the new
resultsUri output.
Any flow that reads stdout, stderr or other full fields from playbooks will now get missing or truncated
data.
Migration: read the full results with {{ read(outputs.<id>.resultsUri) }}, or set resultsStorage: INLINE to
keep the previous inline behaviour.
4. stdout_lines and stderr_lines are no longer captured
They are dropped at every nesting level, in both STORE and INLINE modes.
Migration: split stdout / stderr on newlines downstream.
5. maxOutputsSize now measures the whole task output
It used to measure only the merged outputs/playbooks payload. It now counts the whole serialized output
(vars, playbooks and the other output fields). With resultsStorage: STORE, the stored results file does not
count toward the limit. A task that stayed under the limit before can now fail, mostly in INLINE mode.
Migration: raise maxOutputsSize, use resultsStorage: STORE, or use outputsMode: EXPLICIT.
Also new (non-breaking)
- New
resultsStorageproperty (STOREdefault,INLINE) andresultsUrioutput. - A failed command now returns its
playbooksandresultsUrion the failed attempt.
Commits
cli
- 8e24ce4 馃毃 store AnsibleCLI per-host results once and offload them to internal storage (#139) - *
outputs.<id>.vars.playbooksis removed (useoutputs.<id>.playbooks);
outputs.<id>.vars.outputsno longer holds the raw host results in ALL mode, it holds the
kestra-module declared values in both modes; by defaultplaybookscarries light results
and the full ones are inresultsUri(setresultsStorage: INLINEfor the previous inline
behaviour);stdout_lines/stderr_linesare no longer captured;maxOutputsSizecounts
the whole output.
- fix(cli): keep debug output once in light results and strip *_lines at every depth
- debug tasks keep their output (msg or var) whole in the STORE-mode light result,
minus ansible* keys, loop items included - stdout_lines/stderr_lines are removed recursively, in the light result and the results file
- a non-string msg keeps its JSON type in the light result; over 1 KB of JSON it is
replaced by the first 1 KB of its JSON serialization plus a truncation marker
- fix(cli): always clean up results files and write them atomically
- delete the per-command results files and the merged file on every path out of run()
- log an ERROR when a failed run's outputs file was too large to read back
- the callback writes its files to a temp file and renames it, keeping 0600 and the
pre-created file's owner, falling back to an in-place write when it cannot - document that maxOutputsSize covers the whole task output
- test that EXPLICIT + STORE exposes no secret inline or in the stored file
- fix(cli): keep the Ansible failure when storing results fails and harden results merge
Storage errors after a failed command are logged instead of hiding the failure, the callback's in-place fallback commits its first byte last, a shrinking results file no longer loops forever, a missing resultsUri in STORE mode warns, and suppressed exceptions survive failedRun.
- fix(cli): address review on results storage warnings and callback cleanup
Skip the missing-results warning after a failure or storage error and for
non-run invocations (--version, --syntax-check, --list-*), test the storage
failure paths, and strip _full in a finally so a mid-loop error cannot leak it.
---------*, closes #139
馃摌 Subtasks
version
Contributors
We'd like to thank the following people for their contributions:
Claude Opus 5.5, GitHub, Malay Dewangan, jymaire