diff --git a/changelogs/fragments/79023-fix-flush_handlers-fqcn.yml b/changelogs/fragments/79023-fix-flush_handlers-fqcn.yml new file mode 100644 index 00000000000..070bc727215 --- /dev/null +++ b/changelogs/fragments/79023-fix-flush_handlers-fqcn.yml @@ -0,0 +1,2 @@ +bugfixes: + - "handlers - fix an issue where the ``flush_handlers`` meta task could not be used with FQCN: ``ansible.builtin.meta`` (https://github.com/ansible/ansible/issues/79023)" diff --git a/lib/ansible/plugins/strategy/linear.py b/lib/ansible/plugins/strategy/linear.py index a9406a20748..dc34e097bbe 100644 --- a/lib/ansible/plugins/strategy/linear.py +++ b/lib/ansible/plugins/strategy/linear.py @@ -118,7 +118,7 @@ class StrategyModule(StrategyBase): # once hosts synchronize on 'flush_handlers' lockstep enters # '_in_handlers' phase where handlers are run instead of tasks # until at least one host is in IteratingStates.HANDLERS - if (not self._in_handlers and cur_task.action == 'meta' and + if (not self._in_handlers and cur_task.action in C._ACTION_META and cur_task.args.get('_raw_params') == 'flush_handlers'): self._in_handlers = True diff --git a/test/integration/targets/handlers/runme.sh b/test/integration/targets/handlers/runme.sh index 1c597c66225..e2d521805f8 100755 --- a/test/integration/targets/handlers/runme.sh +++ b/test/integration/targets/handlers/runme.sh @@ -166,3 +166,7 @@ ansible-playbook test_flush_handlers_rescue_always.yml -i inventory.handlers "$@ [ "$(grep out.txt -ce 'rescue ran')" = "1" ] [ "$(grep out.txt -ce 'always ran')" = "2" ] [ "$(grep out.txt -ce 'should run for both hosts')" = "2" ] + +ansible-playbook test_fqcn_meta_flush_handlers.yml -i inventory.handlers "$@" 2>&1 | tee out.txt +grep out.txt -e "handler ran" +grep out.txt -e "after flush" diff --git a/test/integration/targets/handlers/test_fqcn_meta_flush_handlers.yml b/test/integration/targets/handlers/test_fqcn_meta_flush_handlers.yml new file mode 100644 index 00000000000..f9c67cf56aa --- /dev/null +++ b/test/integration/targets/handlers/test_fqcn_meta_flush_handlers.yml @@ -0,0 +1,14 @@ +- hosts: A + gather_facts: false + tasks: + - command: echo + notify: handler + + - ansible.builtin.meta: flush_handlers + + - debug: + msg: after flush + handlers: + - name: handler + debug: + msg: handler ran