Я использую 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
при использовании более ранних версий, чем эта, чтобы задача не пропустила в режиме проверки. Из моего ручного тестирования похоже, что обработчики остаются в режиме проверки, но будьте осторожны, так как ваш случай может отличаться.
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