web-dev-qa-db-ja.com

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.

これをソルトスタックで自動化する方法は?

5
guettli

@MaksaSilaが最初に回答しましたが、より完全なソリューションを提供したいと思います。

ファイルの変更を処理するcmd.runが必要なだけです。私は同様のアプローチを使用しています。

#sample.sls 
 
 systemd-reload:
 cmd.run:
-名前:systemctl --system daemon-reload 
-onchanges: 
-ファイル:superbar.service 
 
 superbar.service:
 file.managed:
-名前:/ etc/systemd/system/superbar .service 
 
 superfoo.service:
 file.managed:
-name:/etc/systemd/system/superfoo.service
-onchanges_in :
-cmd:systemd-reload 

後者のアプローチでは、systemd部分とサービス部分を異なるSLSファイルに分割できます(行うすべてのslsファイルにsystemdを含めることを忘れないでくださいonchanges_in in)。

状態の関係と依存関係の詳細については、 このマニュアルページ を参照してください。

6
jollyroger

@jollyrogerの回答は、バージョン0.15.0未満に適しています

0.15.0から、systemd_service.systemctl_reloadhttps://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

これによりコードが大幅に簡略化されると思います。

[編集]ディレクティブ "systemctl_reload"はsystemctl reload、しかしそれはsystemctl --system daemon-reloadの下に。 https://github.com/saltstack/salt/blob/9bbbd3629418b2b086360f5b303323ec55ca0315/salt/modules/systemd_service.py#L377-L399

Saltstack Docはまた、

「systemctlをリロードします。これは、ユニットファイルが更新されるたびに必要なアクションです。」

2
clony

このファイルをコピーした後、あなたの状態でこれを実行することをお勧めします:

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