diff --git a/docs/docsite/rst/playbook_guide/playbooks_handlers.rst b/docs/docsite/rst/playbook_guide/playbooks_handlers.rst index 1f54ce2968f..3f536c44ee6 100644 --- a/docs/docsite/rst/playbook_guide/playbooks_handlers.rst +++ b/docs/docsite/rst/playbook_guide/playbooks_handlers.rst @@ -79,6 +79,38 @@ Tasks can instruct one or more handlers to execute using the ``notify`` keyword. In the above example the handlers are executed on task change in the following order: ``Restart memcached``, ``Restart apache``. Handlers are executed in the order they are defined in the ``handlers`` section, not in the order listed in the ``notify`` statement. Notifying the same handler multiple times will result in executing the handler only once regardless of how many tasks notify it. For example, if multiple tasks update a configuration file and notify a handler to restart Apache, Ansible only bounces Apache once to avoid unnecessary restarts. +Notifying and loops +------------------- + +Tasks can use loops to notify handlers. This is particularly useful when combined with variables to trigger multiple dynamic notifications. + +.. code-block:: yaml + + tasks: + - name: Template services + ansible.builtin.template: + src: "{{ item }}.j2" + dest: /etc/systemd/system/{{ item }}.service + notify: Restart {{ item }} + loop: + - memcached + - apache + + handlers: + - name: Restart memcached + ansible.builtin.service: + name: memcached + state: restarted + + - name: Restart apache + ansible.builtin.service: + name: apache + state: restarted + +Note that the handlers are triggered if the task as a whole is changed, for loops that is if any loop item changes. +In the above example both memcached and apache will be restarted if either template file is changed, neither will be restarted if no file changes. + + Naming handlers ---------------