Иногда при запуске какого-либо Ansible Playbook у вас будут задачи, которые нужно выполнить если только предшествующая им задача была выполнена (этакая реализация условия if).

Для примера у вас есть Ansible Playbook где вы ставите nginx последней версии и перезапускаете службу nginx.

tasks:
  
  - name: Install nginx
    yum:
      name: nginx
      state: latest
      
  - name: Restart nginx
    service:
      name: nginx
      state: restarted

При первом запуске Ansible Playbook всё пройдёт по плану у вас установиться nginx и перезапуститься служба. Но представим ситуации что вы запускаете эту задачу повторно (возможно в надежде что вышла более новая версия nginx), и в таком случае может получиться что nginx у вас последней версии и установка будет пропущена, но сервис всё также перезапуститься. Логично в такой ситуации перезапускать сервис только если он был установлен либо обновлён. Для этого нам понадобится handlers, который вызывается с использованием notify.

tasks:
  
  - name: Install nginx
    yum:
      name: nginx
      state: latest
	notify: Restart nginx

handlers:     
  - name: Restart nginx
    service:
      name: nginx
      state: restarted

В такой реализации перезапуск сервиса будет только после того как сам сервис установился либо обновился, т.е задача Install nginx отработала.

По умолчанию handlers запускаются после того, как все задачи в конкретном Ansible Playbook были выполнены. Если вам нужно запустить handlers раньше восспользуйтесь млдулем meta.

tasks:
  
  - name: Install nginx
    yum:
      name: nginx
      state: latest
	notify: Restart nginx
	
  - name: Flush handlers
    meta: flush_handlers

  - name: Second task
    yum:
      name: vim
      state: latest	

handlers:     
  - name: Restart nginx
    service:
      name: nginx
      state: restarted

Для того, чтобы использовать handlers ролях прописываем их в файле roles/rolename/handlers/main.yml.