Ответ 1
Вы правы, что существуют значительные различия между исполняемыми модулями и модулями состояния. К сожалению, термин модуль немного перегружен.
Модуль выполнения - это команда, отправленная в солярий Minion для немедленного выполнения. Примерами являются "установить apache" или "перезапустить memcached".
Модуль состояния сообщает Солт-Миньону, каков конечный результат или "состояние". Например, "убедитесь, что apache установлен" или "убедитесь, что этот конкретный файл конфигурации существует в файловой системе". Важным отличием является то, что модуль состояния проверяет систему, чтобы убедиться, что машина соответствует желаемому состоянию, прежде чем что-либо делать. Таким образом, в случае "убедитесь, что apache установлен", Salt Minion проверит, установлен ли Apache и ничего не делает, если Apache установлен. Если это не очевидно, Salt будет устанавливать Apache при необходимости.
Теперь, чтобы выполнить перезапуск селена- node, как вы отметили в своем вопросе, вы хотите, чтобы ваша служба смотрела что-то; как правило, изменение пакета и/или изменение конфигурации. Таким образом, Selenium будет перезагружаться только тогда, когда это необходимо. Вот пример. Я не знаком с установкой selenium-node, поэтому, пожалуйста, рассмотрите пример файла sls. Я предполагаю, что selenium-node может быть установлен из вашего репозитория системного пакета.
cat /srv/salt/selenium-node.sls
selenium-node:
pkg:
- installed
service:
- running
- watch:
- pkg: selenium-node
- file: /etc/selenium-node.conf
file:
- managed
- name: /etc/selenium-node.conf
- source: salt://selenium/selenium-node.conf # assuming config located at /srv/salt/selenium/selenium-node.conf on the Salt Master
Здесь мы имеем 3 состояния в соответствии с декларацией идентификатора "selenium- node". Мы управляем системным пакетом, службой и конфигурационным файлом. Вы заметите, что служба просматривает как пакет selenium- node, так и файл конфигурации. Когда служба просматривает что-то, служба перезагружается по умолчанию, когда "наблюдаемая" вещь сообщает об изменениях.
Как правило, вы пытаетесь обработать перезапуск службы при использовании Солевых состояний. Таким образом, служба будет только перезагружаться по мере необходимости. Это помогает вашим солевым государствам быть идемпотентными и только вызывает изменения в вашей системе, когда это действительно необходимо.
Теперь, чтобы ответить на вторую часть вашего вопроса. Да, можно запустить исполняемый модуль из файла состояния или sls. Вы можете выполнить это через состояние "module.run". Документы находятся здесь: http://docs.saltstack.com/ref/states/all/salt.states.module.html#module-salt.states.module
Здесь вы можете заставить свою службу перезапускать каждый раз при запуске этого состояния или файла sls:
cat/srv/salt/selenium/selenium-restart.sls
restart_selenium:
module.run:
- name: service.restart
- m_name: selenium-node # m_name gets passed to the execution module as "name"