はじめに
Ansible Tower、AWX をコマンドで操作できる awx
コマンドというツールがあります。
このコマンドツールのドキュメントの Creating and Launching a Job Template
を見ていたときに、ジョブ起動時に --monitor
というオプションを利用できることに気が付きました。
通常、ジョブ起動のコマンドを実行すると、あくまでキックしておしまいです。すぐに結果が返ってきて、その後どうなったかは別途確認が必要です。
一方で --monitor
オプションを利用すると、ジョブの実行状態をほぼリアルタイムに表示し、終了するまで見届けることができます。
この記事では、ジョブテンプレートとワークフロージョブテンプレートのそれぞれの起動時に --monitor
オプションを利用する例をご紹介します。
- 動作確認環境
- AWX 11.0
※ awx
コマンドではなく、Ansible モジュールででジョブを起動する場合は、以下の記事をご参照ください
[Ansible] Tower/AWXのジョブテンプレートやワークフロージョブテンプレートを専用モジュールで起動する - てくなべ (tekunabe)
■ ジョブテンプレートの起動と --monitor
オプション
ジョブテンプレートの起動は、awx job_templates launch ジョブテンプレート名
です。このコマンドに --monitor
オプションがあります。
コマンド実行例です。まるで手元で、ansible-playbook
コマンドを実行しているような見え方です。
awx コマンドで AWX のジョブテンプレートを実行しているところ。--monitor オプション付けると、まるで Playbook を実行してるように見える。 pic.twitter.com/OuGWwDpHrL
— よこち(yokochi) (@akira6592) 2020年4月19日
一応ログも掲載します。
$ awx job_templates launch jt_01_show -f human --monitor ------Starting Standard Out Stream------ SSH password: PLAY [ios] ********************************************************************* TASK [show ip route] *********************************************************** ok: [iosao_latest] ok: [iosao] ASK [show ip route] *********************************************************** ok: [iosao_latest] => { "msg": [ "Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP", ...(略).... ] } ok: [iosao] => { "msg": [ "Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP", ...(略).... ] } ASK [gather ios_facts] ******************************************************** [WARNING]: default value for `gather_subset` will be changed to `min` from `!config` v2.11 onwards ok: [iosao_latest] ok: [iosao] ASK [debug ios_facts] ********************************************************* ok: [iosao] => { "ansible_facts.net_version": "16.09.03" } ok: [iosao_latest] => { "ansible_facts.net_version": "16.11.01a" } LAY RECAP ********************************************************************* iosao : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 iosao_latest : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ------End of Standard Out Stream-------- id name === ========== 711 jt_01_show
Playobook 実行ログのあとに表示されている id
、name
は -f human
オプションのフォーマット指定によるものです。デフォルトは json で、"status": "successful"
などもっと詳細なジョブの情報が表示されます。
■ ワークフロージョブテンプレートの起動と --monitor
オプション
ワークフロージョブテンプレートの起動は、awx workflow_job_templates launch ワークフロージョブテンプレート名
です。このコマンドにも --monitor
オプションがあります。
コマンド実行例です。各ジョブのステータスを表示しながら進みます。
続いて、awx コマンドで AWX のワークフローを実行しているところ。こちらは --monitor オプション付けると、各ジョブのステータスが分かる。 pic.twitter.com/zpl9uuKMCc
— よこち(yokochi) (@akira6592) 2020年4月19日
ログです。
$ awx workflow_job_templates launch wf_01 -f human --monitor ------Starting Standard Out Stream------ Launching wf_01... ↳ 729 - jt_01_show successful ↳ 731 - jt_02_debug successful ↳ 733 - jt_03_debug successful ------End of Standard Out Stream-------- id name === ===== 728 wf_01
■ 補足
エラーが発生すると終了コードが 0
以外になる
ジョブテンプレートもワークフロージョブテンプレートも、--monitor
オプションで実行して、途中でエラーが発生した場合、終了コードは 0
以外になるようです。/bin/false
を実行するジョブを挟んで意図的にエラーを発生させて試した限りは 1
でした。
この性質を利用して、テストに組み込んだりするのも良さそうです。
- ジョブテンプレート実行中にエラーの場合
$ awx job_templates launch jt_01_show -f human --monitor ------Starting Standard Out Stream------ SSH password: PLAY [localhost] *************************************************************** TASK [command] ***************************************************************** fatal: [localhost]: FAILED! => {"changed": true, "cmd": ["/bin/false"], "delta": "0:00:00.026619", "end": "2020-04-19 10:27:03.259847", "msg": "non-zero return code", "rc": 1, "start": "2020-04-19 10:27:03.233228", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []} LAY RECAP ********************************************************************* localhost : ok=0 changed=0 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0 ------End of Standard Out Stream-------- id name === ========== 739 jt_01_show $ echo $? # 終了コードの確認 1
- ワークフロージョブテンプレート実行中にエラーの場合
$ awx workflow_job_templates launch wf_01 -f human --monitor ------Starting Standard Out Stream------ Launching wf_01... ↳ 737 - jt_01_show failed ------End of Standard Out Stream-------- id name === ===== 736 wf_01 $ echo $? # 終了コードの確認 1
おわりに
いままで awx
コマンドを比較的単純な API ラッパーだと思っていました。なので、今回のような表示の仕方を大きく変えるような事はできないと思っていたので、意外な発見でした。
参考
awx
コマンドではなくAnsible モジュールでジョブを起動する場合(再掲)