Обработчик уведомляется задачей, если эта задача что-то изменила.Таким образом, «предварительный обработчик» невозможен, так как задача должна быть запущена, чтобы увидеть, если она что-то меняет или нет.
Однако вы можете уведомить обработчик о задаче, работающей в режиме проверки .Если вы хотите сделать все по порядку, вам потребуется принудительно запустить обработчики с помощью модуля meta
.
. Решит ли что-то подобное из приведенного ниже примера вашу проблему?
- name: Check if .bashrc has the correct content
copy: &bashrc_copy_params
src: bashrc_root
dest: /root/.bashrc
owner: root
group: root
mode: 0644
check_mode: true
notify: remount root fs rw
- meta: flush_handlers
- name: Really copy .bashrc
copy: *bashrc_copy_params
Обратите внимание, что в этом конкретном случае вы можете получить точно такой же результат без обработчика.Ниже приведен другой пример с блоком, который будет запускаться только тогда, когда проверка сообщает об изменении.Это даже лучше, чем в предыдущем примере, поскольку реальная задача копирования будет полностью пропущена, если в ней нет необходимости.
- name: Check if .bashrc has the correct content
copy: &bashrc_copy_params
src: bashrc_root
dest: /root/.bashrc
owner: root
group: root
mode: 0644
check_mode: true
register: bashrc_state
- when: bashrc_state.changed | bool
block:
- name: remount root fs rw
debug:
msg: for example only, replace with your own task
- name: Really copy .bashrc
copy: *bashrc_copy_params
Примечание: обозначения &bashrc_copy_params
и *bashrc_copy_params
в моих приведенных выше примерах являются якорями yaml.См. Learn Yaml в Y минутах для объяснения, если это необходимо.Они разрешены в ansible, но должны быть объявлены и использованы в одном файле.