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

SaltStack: выполнить `systemctl --system daemon-reload`, если служебный файл был изменен

Мы развертываем и меняем системные служебные файлы через SaltStack.

Например, если файл /etc/systemd/system/superfoo.service изменяется, то systemd выдает это предупреждение:

Warning: Unit file of superfoo.service changed on disk, 
         'systemctl --system daemon-reload' recommended.

Как это автоматизировать с помощью солонки?

Я хотел бы предоставить более полное решение, хотя @MaksaSila ответил первым.

Вам просто нужен cmd.run, который будет обрабатывать изменение файла, я использую аналогичный подход:

# sample.sls

systemd-reload:
  cmd.run:
   - name: systemctl --system daemon-reload
   - onchanges:  
     - file: superbar.service

superbar.service:
  file.managed:
    - name: /etc/systemd/system/superbar.service

superfoo.service:
  file.managed:
    - name: /etc/systemd/system/superfoo.service
    - onchanges_in:
       - cmd: systemd-reload

Последний подход позволит вам разделить часть systemd и часть службы на разные файлы SLS (не забудьте включить systemd для каждого файла sls, который вы делаете. onchanges_in в).

Видеть эта страница руководства чтобы получить более подробную информацию о государственных отношениях и зависимостях.

Ответ @ jollyroger подходит для версии <0.15.0

Начиная с версии 0.15.0, мы можем использовать systemd_service.systemctl_reload: https://docs.saltstack.com/en/latest/ref/modules/all/salt.modules.systemd_service.html#salt.modules.systemd_service.systemctl_reload

superbar.service
  file.managed:
    - name: /etc/systemd/system/superbar.service
  module.run: 
    - name: service.systemctl_reload
    - onchanges:
      - file: /etc/systemd/system/superbar.service

Я считаю, что это значительно упрощает код.

[Edit] Директива systemctl_reload может выглядеть так: systemctl reload, но он выполняет systemctl --system daemon-reload под. https://github.com/saltstack/salt/blob/9bbbd3629418b2b086360f5b303323ec55ca0315/salt/modules/systemd_service.py#L377-L399

В документе Saltstack также четко указано, что

«Перезагружает systemctl - действие, необходимое при обновлении файлов модулей».

Я бы посоветовал после копирования этого файла запустить это в вашем состоянии:

update-systemd:
  cmd.run:
    - name: systemctl --system daemon-reload