概要
こんにちは。サイオステクノロジー 吉田です。
今回は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の中身を見てみました。テンプレートの実行が終了したら通知が送られてくるようにして、中身に応じて他システムと連携する。などにも活用できそうです。