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

Ansible: перезапустите службу, только если она была запущена

В плейбуке 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 задача.