Подтвердить что ты не робот

Солевой стек: использование исполняемых модулей в SLS

Насколько я могу видеть в документации Salt (например, здесь), поддерживаются два основных типа поддерживаемых модулей: состояния модулей и исполняемые модули (я знаю, что есть также рендереры, возвратные устройства и т.д.). Большинство примеров файлов SLS содержат инструкции, относящиеся только к государственным модулям (в пространстве имен salt.state), тогда как для исполняемых модулей показаны только примеры командной строки. Например, у нас есть два модуля с именем "service": salt.states.service и salt.modules.service. Прямо сейчас у меня проблемы с использованием исполняемых модулей в файлах SLS, и кажется, что либо они вообще недоступны, либо я пропускаю что-то, чтобы сделать их доступными. Мой вопрос: Можно ли использовать исполняемые модули в файлах SLS и как, например, я могу перезапустить службу на машине Ubuntu, используя функцию salt.modules.service.restart? Также я не понимаю разница между этими типами модулей.

Мое имя службы - selenium- node, и я попробовал несколько комбинаций, и все они потерпели неудачу:

# First attempt:
selenium-node:
  service.restart

# Another one:
service:
  - restart
  - name: selenium-node

# Or even:
selenium-node:
  service:
    - restart

Я столкнулся с такой же проблемой при работе с состояниями и модулями git. Однако, когда я запускаю следующую команду на миньоне (как показано в документации), она преуспевает:

$ sudo salt-call service.restart selenium-node
4b9b3361

Ответ 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"