diff --git a/changelogs/fragments/loop-empty-literal-list.yaml b/changelogs/fragments/loop-empty-literal-list.yaml new file mode 100644 index 00000000000..f86f5b5d116 --- /dev/null +++ b/changelogs/fragments/loop-empty-literal-list.yaml @@ -0,0 +1,2 @@ +bugfixes: +- loop - Do not evaluate a empty literal list ``[]`` as falsy, it should instead cause the task to skip () diff --git a/lib/ansible/executor/task_executor.py b/lib/ansible/executor/task_executor.py index d1f67af8a2a..2666666d40d 100644 --- a/lib/ansible/executor/task_executor.py +++ b/lib/ansible/executor/task_executor.py @@ -236,7 +236,7 @@ class TaskExecutor: else: raise AnsibleError("Unexpected failure in finding the lookup named '%s' in the available lookup plugins" % self._task.loop_with) - elif self._task.loop: + elif self._task.loop is not None: items = templar.template(self._task.loop) if not isinstance(items, list): raise AnsibleError( diff --git a/test/integration/targets/loops/tasks/main.yml b/test/integration/targets/loops/tasks/main.yml index 1b8a7450504..8cdd612aaa5 100644 --- a/test/integration/targets/loops/tasks/main.yml +++ b/test/integration/targets/loops/tasks/main.yml @@ -252,3 +252,9 @@ loop: "{{ fake_var }}" register: result failed_when: result is not skipped + +- name: Loop on literal empty list + debug: + loop: [] + register: literal_empty_list + failed_when: literal_empty_list is not skipped