てくなべ (tekunabe)

ansible / network / automation

[Ansible] awx コマンドでジョブの実行を終了までリアルタイムに見届ける(--monitor オプション)

はじめに

Ansible Tower、AWX をコマンドで操作できる awx コマンドというツールがあります。

tekunabe.hatenablog.jp

このコマンドツールのドキュメントの 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 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 実行ログのあとに表示されている idname-f human オプションのフォーマット指定によるものです。デフォルトは json で、"status": "successful" などもっと詳細なジョブの情報が表示されます。


■ ワークフロージョブテンプレートの起動と --monitor オプション

ワークフロージョブテンプレートの起動は、awx workflow_job_templates launch ワークフロージョブテンプレート名です。このコマンドにも --monitor オプションがあります。

コマンド実行例です。各ジョブのステータスを表示しながら進みます。

ログです。

$ 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 ラッパーだと思っていました。なので、今回のような表示の仕方を大きく変えるような事はできないと思っていたので、意外な発見でした。

参考