mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-06 13:22:48 +00:00
Cache items when task.loop/with_items is evaluated to set delegate_to vars (#41969)
* If we evaluate task.loop/with_items when calculating delegate_to vars, cache the items. Fixes #28231 * Add comments about caching loop items * Add test for delegate_to+loop+random * Be more careful about where we update task.loop
This commit is contained in:
@@ -498,10 +498,19 @@ class VariableManager:
|
||||
# This task will be skipped later due to this, so we just setup
|
||||
# a dummy array for the later code so it doesn't fail
|
||||
items = [None]
|
||||
# Update task.loop with templated items, this ensures that delegate_to+loop
|
||||
# doesn't produce different restuls than TaskExecutor which may reprocess the loop
|
||||
# Set loop_with to None, so we don't do extra unexpected processing on the cached items later
|
||||
# in TaskExecutor
|
||||
task.loop_with = None
|
||||
task.loop = items
|
||||
else:
|
||||
raise AnsibleError("Failed to find the lookup named '%s' in the available lookup plugins" % task.loop_with)
|
||||
elif task.loop is not None:
|
||||
items = templar.template(task.loop)
|
||||
# Update task.loop with templated items, this ensures that delegate_to+loop
|
||||
# doesn't produce different restuls than TaskExecutor which may reprocess the loop
|
||||
task.loop = items
|
||||
else:
|
||||
items = [None]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user