В плейбуке Ansible я хотел бы перезапустить службу после обновления файла конфигурации, но только если это было уже работает.
Я не хочу контролировать состояние службы с помощью ansible, перезапускайте ее только в том случае, если она была запущена ранее.
Я мог бы использовать для этого специальную команду, но она не будет переносима между разными системами управления службами (upstart / systemd / sysvinit / openrc ...), как модуль службы ansible.
Спасибо за любые советы.
Зарегистрируйте переменную при обновлении конфигурации. Зарегистрируйте другую переменную, когда вы проверяете, запущена ли служба. Вызов обработчика перезапуска службы, только если обе переменные верны.
Что касается специфики различных ОС, вы можете иметь условное исполнение на основе семейства / распределения из фактов хоста.
Ансибл service:
модуль не предоставляет механизма для проверки того, запущена ли уже служба или нет. Поэтому вам придется прибегнуть к использованию чего-то вроде этого через shell:
модуль, чтобы сначала определить, запущена ли служба.
Здесь я определяю, запущены ли WebSphere или Tomcat8, а затем перезапускаю соответствующую службу в зависимости от ее статуса.
---
# handles tomcat8
- name: is tomcat8 already running?
shell: service tomcat8 status warn=false
register: _svc_tomcat8
failed_when: _svc_tomcat8.rc != 0 and ("unrecognized service" not in _svc_tomcat8.stderr)
ignore_errors: true
- name: restart tomcat8 if running
service: name=tomcat8 state=restarted
when: "_svc_tomcat8.rc == 0"
# handles WAS
- name: is WebSphere already running?
shell: service Node01_was.init status warn=false
register: _svc_websphere
failed_when: _svc_websphere.rc != 0 and ("unrecognized service" not in _svc_websphere.stderr)
ignore_errors: true
- name: restart WebSphere if running
service: name=Node01_was.init state=restarted
when: "_svc_websphere.rc == 0"
# vim:ft=ansible:
Чтобы вызвать перезапуск только в случае обновления определенного файла, вы можете использовать register:
на ваше copy:
или template:
задачи для сохранения состояния обновления файла. Результаты этого register:
затем может быть включен как часть when:
на service: name=XXXX state=restarted
задача.