はじめに述べたタスクプロセッサが脚本ハンドラで、以前に同じタスクを定義するために使用されるタスクは、ハンドラは、一定の条件のタスク操作を満たすために必要性をトリガすること以外は、使用されている、タスクの対応する通知ハンドラを通知する必要があります後にタスクが実行されます。どんなにハンドラに通知どのように多くの情報提供、我々はすべてのタスクの実行のための脚本が完成し、最終的に対応するハンドラを実行し、一度だけ実行されますされるまで待つ必要はありません。
説明は、それがより周りのかもしれ理解することから始まる、このセクションでは、ケースを通じて理解して来るハンドラ具体的な行動。
1つのレビュー質問
「上 脚本の基礎」[ 2.1.5 ケース4 :設定ファイルを変更]、我々は問題を予約し、現在の時間に定義を見て脚本:
sandboxMP)[ルートの@ sandboxmp〜] $猫タスク/ modify_nginx.yml --- - ホスト:サーバー REMOTE_USER:ルート タスク: - 名前:デフォルトのポートを変更します。 lineinfile: パス:/etc/nginx/nginx.conf 正規表現: "聞く80(*)(*)(*。)" 行: '\ 1listen \ 2 8080 3 \' backrefs:はい 状態:現在 - 名前:再起動nginxの サービス:名前= nginxの状態=再起動
設定ファイルを変更した後私たちの本来の意図、変更を有効にすることを可能にするために、対応するサービス構成を再起動します。テスト実行時間では実際にこの機能を実現。
その後、再びこの実行脚本を結果を確認するには:
(sandboxMP)[ルートの@ sandboxmp〜] $ ansible-脚本タスク/ modify_nginx.yml PLAY [サーバー] ********************************************** ************************************************** ************************************************** ************************************* TASK [収集の事実] ********************************************* ************************************************** ************************************************** ***************************** [OK]:[172.16.3.101] [OK]:[172.16.3.102] TASK ******************************************* [既定のポートを変更します] ************************************************** ************************************************** *********************** [OK]:[172.16.3.101] [OK]:[172.16.3.102] TASKは********************************************* [nginxの再起動します] ************************************************** ************************************************** ******************************* 変更:[172.16.3.101] 変更:[172.16.3.102] RECAPを再生************************************************ ************************************************** ************************************************** ************************************** 172.16.3.101:OK = 3 = 0を失敗= 1到達不能= 0を変更 172.16.3.102:OK = 3 = 0を失敗= 1到達不能= 0を変更
実行記録を見てください:
- [ポートの変更デフォルト] :最初の実行では、設定ファイルの内容を変更完了しましたので、状態が再び実行されているので、[OK] 。このタスクは、リモートサーバー上の任意の変更を行っていません。
- [nginxの再起動] :これは、設定ファイルの内容を変更しなかったが、それでも再起動の実行nginxののサービスタスクを、ステータスがされて変更します。
2使用ハンドラ
残りの問題を解決するために2.1ハンドラ
使用するハンドラがあるため、上記の問題を回避するために非常に良いことができハンドラが動作タスクは、特定の条件を満たしている必要がありトリガされます。ハンドラが唯一の必要も非常に簡単で作業をして通知し、対応するハンドラができます。変更/tmp/modify_nginx.ymlを使用して、ハンドラを:
sandboxMP)[ルートの@ sandboxmp〜] $のVimのタスク/ modify_nginx.yml --- - ホスト:サーバー REMOTE_USER:ルート タスク: - 名前:デフォルトのポートを変更します。 lineinfile: パス:/etc/nginx/nginx.conf 正規表現: "聞く80(*)(*)(*。)" 行: '\ 1listen \ 2 8080 3 \' backrefs:はい 状態:現在 通知:再起動nginxのサービス#のハンドラは、名前を実行する必要があります ハンドラ: - 名前:タスク定義したハンドラで再起動nginxのサービス# サービス:名前= nginxの状態=再起動
私たちは見ることができますハンドラの定義をし、タスクの定義は、定義されたものと同じであるハンドラ合格する名、モジュール、およびモジュールパラメータ、タスクが唯一必要とmotify 実行したいhandlser 名前を。注インデント(導入YAMLの構文を記述が利用できなくなっている表、または有する友人有する表エラーの原因となって、インデントするために)。
ラン脚本:
(
sandboxMP)[ルートの@ sandboxmp〜]#ansible-脚本タスク/ modify_nginx.yml PLAY [サーバー] ********************************************** ************************************************** ************************************************** ************************************* TASK [収集の事実] ********************************************* ************************************************** ************************************************** ***************************** [OK]:[172.16.3.102] [OK]:[172.16.3.101] TASK ******************************************* [既定のポートを変更します] ************************************************** ************************************************** *********************** [OK]:[172.16.3.101] [OK]:[172.16.3.102] RECAPを再生************************************************ ************************************************** ************************************************** ************************************** 172.16.3.101:OK = 2 = 0を失敗= 0到達不能= 0を変更 172.16.3.102:OK = 2 = 0を失敗= 0到達不能= 0を変更
参照 [デフォルトポート修正] 実行結果がOK の動作に変化がない、発生し、ハンドラが実行されない(結果ないハンドラ実行情報)
ログイン SERVER01(172.16.3.101)を、変更/etc/nginx/nginx.confのに設定、モニタポートを80 :
[ルート@のSERVER01〜] $のVimの/etc/nginx/nginx.conf #「」「不作為の内容の前に」「サーバータブを探す80個のポートに耳を傾け、保存して終了」 サーバー{ 80 DEFAULT_SERVERを聞きます。 [::]聞く:80 DEFAULT_SERVERを。 サーバーの名前 _; ルートは、/ usr / share / nginxの/ htmlの。
[ルート@ SERVER01〜] $ systemctl nginxの再起動#再起動nginxのサービス
戻る sandboxMP(172.16.3.100)再放送脚本:
(sandboxMP)[ルートの@ sandboxmp〜] $ ansible-脚本タスク/ modify_nginx.yml PLAY [サーバー] ********************************************** ************************************************** ************************************************** ************************************* TASK [収集の事実] ********************************************* ************************************************** ************************************************** ***************************** [OK]:[172.16.3.102] [OK]:[172.16.3.101] TASK ******************************************* [既定のポートを変更します] ************************************************** ************************************************** *********************** 変更:[172.16.3.101] [OK]:[172.16.3.102] RUNNING HANDLER [再起動nginxのサービス] ******************************************* ************************************************** ************************************************** ************** 変更:[172.16.3.101] RECAPを再生************************************************ ************************************************** ************************************************** ************************************** 172.16.3.101:OK = 3 = 0を失敗= 2到達不能= 0を変更 172.16.3.102:OK = 2 = 0を失敗= 0到達不能= 0を変更
実行結果はそれを示しています。
- [変更ポートデフォルト] :というサーバー構成タスクの内容は(変更された80 となる8080 )、状態が変化し、かつservier02である8080 、タスクが変更されていない、ステータスがOK 。
- [再起動nginxのサービス] :ためSERVER01は(172.16.3.101)によるように、ファイルは、変更された通知の実装を成功ハンドラを、再起動nginxのサービスを、servier02(172.16.3.102)が実行されないハンドラ。
バッチへの必要性は、サービスを再起動する必要があり、コンフィギュレーションファイルを変更するときに、の使用の合理化ハンドラは、効果的に不要な再起動を回避することができます。
2.1複数のハンドラを作成します。
そして、タスクも複数作成することができますようハンドラを、タスクが可能に通知複数のハンドラを、複数のタスクができ通知同じハンドラを例えば、:
#以下の実施例は、単に例示のためのものであるシステム上でテストする必要はない(環境上のこれらのシステムのいずれも)
--- -ホスト:サーバーの
REMOTE_USER:ルート タスク:
-名前:アップロードプロジェクトファイル コピー: SRC:/ルート/プロジェクト DEST:を/ tmp / 通知: -再起動nginxのサービス
-再起動MySQLサービスの
ハンドラ: -名前:リスタートnginxのサービス
サービス:名= nginxの状態=再起動 -名前:再起動MySQLサービスの
サービス:名= mysqlの状態=再起動
上記のプレゼンテーションでは脚本再起動し、プロジェクトファイルをアップロードすると仮定nginxのとMySQLのサービスを。