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

Как правильно перезапустить демон с помощью Ansible на целевой OSX?

Я создал простую роль Ansible с целью настройки dnsmasq для целей OSX (dnsmasq устанавливается из homebrew).

Я хочу создать обработчик, который перезапускал бы демон при изменении файла конфигурации (Ansible с версии 1.9.3 не реализует служебный модуль для OSX).

У меня есть задача:

- name: Create dnsmasq config file in /usr/local/etc/ from template
  template: src=dnsmasq.conf.j2 dest=/usr/local/etc/dnsmasq.conf
  notify:
  - restart dnsmasq

В /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist есть ключ <key>KeepAlive</key> который запускает демон автоматически, когда он не запущен, поэтому следующий обработчик выполняет свою работу. Могу ли я всегда на это рассчитывать?

- name: restart dnsmasq
  sudo: yes
  command: launchctl stop homebrew.mxcl.dnsmasq

Нет ли каких-либо сценариев или проблем с синхронизацией, которые могли бы привести к постоянной остановке демона? Как правильно написать такой обработчик?

Из launchctl(1):

 stop label
          Stop the specified job by label. If a job is on-demand, launchd
          may immediately restart the job if launchd finds any criteria
          that is satisfied.

Так что я бы предположил, что KeepAlive заставит демон возобновить работу, хотя эта подкоманда не работает в НАСЛЕДИЕ ПОДКОМАНДЫ блок, поэтому может быть удален Apple когда-нибудь в будущем? kickstart -k похоже, что он выполнит запуск или перезапуск, а не в устаревшем блоке ...