2016-05-03 2 views
1

最近、ピラー内のいくつかの静的変数からいくつかのサーバのnginx設定を処理するソルト状態を作成しました。私はこれをすべてのサーバーに展開したかったのですが、これを行う前に、最初にテストされたサーバーにconfigが適用される前に確認したかったのです。コンフィギュレーションが成功した場合に限り、salt状態からnginx configをリロードする

Nginxには、コマンドラインで頻繁に使用するinbuilt configtestがあり、saltにはconfigtestを実行するために使用できるnginxモジュールがあることがわかりました。

私は私の状態ファイルに次があります。

reload-nginx: 
    service.running: 
    - enabled: True 
    - reload: True 
    - watch: 
     - pkg: nginx 
     - file: /etc/nginx/sites-available/* 
     - file: /etc/nginx/nginx.conf 

これは、設定ファイルが変更された場合nginxのリロード、またはnginxのインストールがアップグレードされた場合/変更しなければなりません。私は私の状態ファイル(未テスト)で、以下を使用して設定・テストを実行することができると信じて:

nginx-config-test: 
    module.run: 
    - name: nginx.configtest 

そして私は、私はリロード-nginxの状態で時計にこの状態を追加した場合、設定試験に合格した場合、それはリロードと信じて。

はしかし、私はリロードがnginxのは、設定試験のパスを変更した場合、設定ファイルのいずれかが設定テストに合格したを変更、またはしている場合にのみ発生します。 ALLが本当であれば、経験を使って同じメソッドを複数使用することができます(私は3つの異なるonlyifを持つことはできません - 私が間違っていれば私を修正することができます)。

しかし、設定ファイルが変更された(またはnginxが更新されていて)configtestが成功した場合に限り、nginxをリロードする方法はありません。

これは可能ですか?

+1

私は私の答えを更新しました。 watchプロパティが期待どおりに動作するためには、module.waitではなくmodule.waitを使用する必要があるようです。私は周りに初めてそれをキャッチしなかった、申し訳ありません。 – Andrew

答えて

1

リロード状態でコンフィグテスト状態を確認してください。 config-testステートにconfigファイルの状態とpkgの状態を見てください。テストは何かが変更された場合にのみ実行され、再ロードはテストが実行されてパスする場合にのみ発生します。

警告:これは構造的には動作しますが、nginx.configテストを使用したことはありません。そのため、あなたの思うように動作するとは約束できません。

また、module.waitではなくmodule.waitを使用する必要があります。 watch文は.runでは動作しません。参照番号here

だからそれは次のようになります。

reload-nginx: 
    service.running: 
    - name: nginx 
    - enable: True 
    - reload: True 
    - watch: 
     - module: nginx-config-test 

nginx-config-test: 
    module.wait: 
    - name: nginx.configtest 
    - watch: 
     - file: /etc/nginx/sites-available/* 
+0

ありがとう、私はそれを試してみましょう! – Rumbles

+0

あなたの提案をお寄せいただきありがとうございます。私はあなたの提案を使用して見つけたもので質問を更新しました。 forループで何をしたのか分からないと、次の部分が動作しなくなります。それ以上の提案は大変ありがとうございます! – Rumbles

+0

もう一度ありがとう、私はこれを朝にしよう! – Rumbles

関連する問題