25

Salt のドキュメント (例:ここ) で確認できる限り、状態モジュール実行モジュールの 2 つの主なタイプのモジュールがサポートされています(レンダラー、リターナーなどもあることがわかっています)。SLS ファイルの例のほとんどには、状態モジュール (salt.state 名前空間の下) のみに関連するステートメントが含まれていますが、実行モジュールの場合は、コマンド ラインの例のみが示されています。たとえば、「サービス」という名前の 2 つのモジュール、salt.states.service と salt.modules.service があります。現在、SLS ファイルで実行モジュールを使用する際に問題が発生しています。それらがまったく利用できないか、利用可能にするための何かが不足しているようです。私の質問は:SLS ファイルで実行モジュールを使用することは可能ですか?たとえば、salt.modules.service.restart 関数を使用して Ubuntu マシンでサービスを再起動するにはどうすればよいですか? また、これらのモジュール タイプの違いが明確にわかりません。

私のサービス名は 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
4

1 に答える 1

50

実行モジュール状態モジュールには大きな違いがあることは間違いありません。残念ながら、モジュールという用語は少しオーバーロードされています。

実行モジュールは、Salt Minion に送信されてすぐに実行されるコマンドです。例としては、「Apache のインストール」または「memcached の再起動」があります。

状態モジュールは、Salt Minionに最終結果、つまり「状態」がどうあるべきかを伝えます。例としては、「apache がインストールされていることを確認する」または「この特定の構成ファイルがファイルシステムに存在することを確認する」などがあります。重要な違いは、状態モジュールがシステムをチェックして、何かを行う前にマシンが目的の状態に適合しているかどうかを確認することです。そのため、「Apache がインストールされていることを確認してください」の場合、Salt Minion は Apache がインストールされているかどうかを確認し、Apache がインストールされている場合は何もしません。明らかでない場合、Salt は必要に応じて Apache をインストールします。

質問で指摘したようにセレンノードの再起動を完了するには、サービスに何かを監視させたいと思うでしょう。通常、パッケージの変更および/または構成の変更。そうすれば、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

ここでは、「selenium-node」ID 宣言の下に 3 つの状態があります。システム パッケージ、サービス、および構成ファイルを管理しています。サービスが selenium-node パッケージと構成ファイルの両方を監視していることに気付くでしょう。サービスが何かを監視している場合、デフォルトでは、「監視された」モノが変更を報告すると、サービスは再起動します。

これは通常、Salt States を使用するときにサービスの再起動を処理する方法です。このようにして、サービスは必要なときにのみ再起動されます。これにより、ソルト状態が冪等になり、実際に必要な場合にのみシステムに変更が加えられます。

さて、あなたの質問の2番目の部分に答えてください。はい、状態または sls ファイル内から実行モジュールを実行することは可能です。これは、「module.run」状態を通じて実現できます。ドキュメントはこちら: http://docs.saltstack.com/ref/states/all/salt.states.module.html#module-salt.states.module

この状態または sls ファイルを実行するたびに、サービスを再起動する方法は次のとおりです。

猫/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"
于 2013-12-26T17:18:53.767 に答える