Назад | Перейти на главную страницу

Всегда запускать выполнение обработчика в Ansible

Я использую Ansible для подготовки своего сервера разработки.

Я хочу, чтобы он всегда запускал для меня какие-то службы. У меня есть обработчики для этой цели, но как лучше всего запустить выполнение обработчика без условий, например заставить его работать всегда?

Что-то вроде этого:

tasks:
    - name: Trigger handler
      run_handler: name=nginx-restart

Если вам абсолютно необходимо каждый раз запускать обработчик, есть два варианта:

1) запустите команду оболочки noop, которая всегда будет сообщать об изменении

-  name: trigger nginx-restart
   command: /bin/true
   notify: nginx-restart

2) используйте отладку вместе с changed_when: вызвать обработчик

-  debug: msg="trigger nginx-restart"
   notify: nginx-restart
   changed_when: true

Также из нота для варианта 1 и режима проверки: вы можете использовать check_mode: no при использовании Ansible версии 2.2 или выше или always_run: yes при использовании более ранних версий, чем эта, чтобы задача не пропустила в режиме проверки. Из моего ручного тестирования похоже, что обработчики остаются в режиме проверки, но будьте осторожны, так как ваш случай может отличаться.

Ansible предоставляет несколько опций для форсирования обработчиков:

1) Чтобы всегда принудительно запускать все обработчики, запустите ansible-playbook playbook.yml --force-handlers, как описано здесь: https://github.com/ansible/ansible/issues/4777

2) Чтобы заставить обработчики, которые были уведомлены в определенной точке в playbook, вы можете использовать метазадачу https://docs.ansible.com/playbooks_intro.html:

tasks: 
  - shell: some tasks go here
  - meta: flush_handlers
  - shell: some other tasks

3) Однако похоже, что вы просто хотите убедиться, что служба запущена или перезапущена, независимо от результата другой задачи. В этом случае не используйте обработчик, используйте новую задачу, которая вызывает Ansible's service модуль: http://docs.ansible.com/service_module.html

tasks: 
  - name: ensure ntp is running
    service: name=ntp state=started enabled=yes

  - name: always reload nginx
    service: name=nginx state=reloaded

  - name: always restart MySQL
    service: name=mysql state=restarted

Одно дело перезапуск службы; обеспечение его работы - другое. Если вы хотите ansible Чтобы убедиться nginx выполняется, вы делаете это:

tasks:
  - name: Ensure nginx is running
    service: name=nginx state=started