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

Как можно перезапустить службу, только если она уже запущена, с помощью SaltStack?

Скажем, у меня есть служба на нескольких серверах, управляемая кластерным способом (пульс), отключенная (при запуске), потому что я хочу, чтобы она запускалась только на активном узле:

haproxy:
  service.disabled: []

Я хочу иметь возможность обновить его файл конфигурации:

/etc/haproxy/haproxy.cfg:
  file.managed:
    - source: salt://haproxy.cfg
    - watch_in:
      - service: haproxy

Указав, что за этим файлом следит haproxy service, он вызовет перезапуск службы, если этот файл будет изменен. Это то, что я хотел бы, за исключением того, что эта служба должна работать только для активного сервера в кластере.

Итак, мой вопрос: как я могу достичь своей цели - перезапустить эту службу после изменения конфигурации, не запуская ее на всех пассивных узлах?

Первый вопрос, на который вам нужно ответить:

Как узнать, активен ли текущий узел?

Тогда вместо watch_in то service состояние, вы можете использовать cmd государство с onlyif состояние, примерно так:

haproxy:
  pkg:
    - installed
  file:
    - managed
    - name: /etc/haproxy/haproxy.cfg
    - source: salt://haproxy/config.cfg
    - require:
      - pkg: haproxy
    - watch_in:
      - cmd: haproxy
  cmd:
    - run
    - name: /etc/init.d/haproxy restart
    - onlyif: /this/node/is/the/active

Не полностью протестирован. Пожалуйста, дайте мне знать, работает ли это для вас.