Мы развертываем и меняем системные служебные файлы через 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