概要
こんにちは。サイオステクノロジー 吉田です。
今回はAnsible Towerの機能である”通知”で選択できるタイプwebhookの中身をキャプチャして見てみたいと思います。
前準備(通知とジョブテンプレートの作成)
Ansible Towerの管理画面から通知を作成します。
タイプにWebhookを選択すると、ターゲットURL,HTTPヘッダーの入力エリアが表示されますので設定していきます。
また、ジョブテンプレートを作成し通知を送るように設定します。
キャプチャ実行
通知で設定したターゲットURLのサーバ上でtcpdumpを使用してパケットキャプチャします。
ジョブテンプレートを実行し成功/失敗により通知が送られてきます。
キャプチャ結果 ※bodyは見やすいように整形しています。
ワークフロー成功時
POST / HTTP/1.1
Host: 192.168.138.140:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: Tower 3.4.3
Content-Length: 487
Content-Type: application/json
{
"status": "successful",
"body": "Workflow job summary:\n\n- node #33 spawns job #116, \"wordpress-web\", which finished with status successful.\n- node #34 spawns job #118, \"wordpress-db\", which finished with status successful.",
"name": "make-wordpress",
"started": "2019-05-27T08:19:59.616664+00:00",
"traceback": "",
"friendly_name": "Workflow Job",
"created_by": "admin",
"url": "https://192.168.138.139/#/workflows/115",
"finished": "2019-05-27T08:24:49.617842+00:00",
"id": 115
}
ワークフロー失敗時
POST / HTTP/1.1
Host: 192.168.138.140:8080
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: Tower 3.4.3
Content-Length: 479
Content-Type: application/json
{
"status": "failed",
"body": "Workflow job summary:\n\n- node #31 spawns job #111, \"wordpress-web\", which finished with status successful.\n- node #32 spawns job #113, \"wordpress-db\", which finished with status failed.",
"name": "make-wordpress",
"started": "2019-05-27T07:50:22.495226+00:00",
"traceback": "",
"friendly_name": "Workflow Job",
"created_by": "admin",
"url": "https://192.168.138.139/#/workflows/110",
"finished": "2019-05-27T07:52:12.080703+00:00",
"id": 110
}
webhook通知はPOSTリクエスト、Bodyはjson形式で送られてくるようです。jsonの中身はジョブのステータスやID,開始/終了時間,ワークフロー内の個別ジョブの結果などが含まれているようです。
まとめ
今回はWebhookの中身を見てみました。テンプレートの実行が終了したら通知が送られてくるようにして、中身に応じて他システムと連携する。などにも活用できそうです。

