はじめに
Ansible Tower / AWX の操作に対応する awx.awx
コレクションには、ジョブテンプレートやワークフロージョブテンプレートを起動するモジュールがあります。
この記事では、簡単なサンプルをもとに使用例をご紹介します。
- 検証環境
- AWX 11.0
※ Ansible モジュールではなく、awx
コマンドでジョブを起動する場合は、以下の記事をご参照ください
[Ansible] awx コマンドでジョブの実行を終了までリアルタイムに見届ける(--monitor オプション) - てくなべ (tekunabe)
※ Ansible Tower への実行は ansible.tower
コレクションをおすすめします。
■ ジョブテンプレートの起動
ジョブテンプレートの起動には、awx.awx.tower_job_launch
モジュールを利用します。
name
オプションにジョブテンプレート名を指定します。
他にも、追加変数を指定する extra_vars
や タグを指定する tag
など、GUI の各オプションに対応するオプションが用意されています。詳細は、モジュールのドキュメント(のソース))を参照してください。
その1: 起動するだけ(ジョブの終了を待たない)
awx.awx.tower_job_launch
モジュール単体で利用すると、ジョブテンプレートを起動すするだけして、ジョブの終了を待たずにタスクが終了します。
job_launch.yml
--- - hosts: tower gather_facts: false connection: local environment: # 認証情報 TOWER_HOST: "http://{{ ansible_host }}" TOWER_USERNAME: "{{ conn.tower_username }}" TOWER_PASSWORD: "{{ conn.tower_password }}" tasks: # ジョブテンプレートの起動 - name: launch job awx.awx.tower_job_launch: name: jt_show # ジョブテンプレート名
この Playbook を実行すると、ジョブテンプレートが起動します。ステータスは changed
になります。
- 実行(すぐ終わる)
$ ansible-playbook -i ../inventory.ini job_launch.yml PLAY [tower] ***************************************************************************************************** TASK [launch job] ************************************************************************************************ changed: [awx1] PLAY RECAP ******************************************************************************************************* awx1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ジョブの終了は待たないので、この Playbook 終了後の AWX の画面では、まだジョブが実行中です。
その2: 起動してジョブの終了まで待つ
ジョブの終了まで待つ場合は、別途 awx.awx.tower_job_wait
モジュールを併用します。
awx.awx.tower_job_launch
のタスクの実行結果を register
で拾うと、ジョブID(起動ごとに振られるID)id
が取得できます。
この id
を awx.awx.tower_job_wait
モジュールの job_id
オプションに指定することで、ジョブの終了まで待つことができます。
job_launch_wait.yml
--- - hosts: tower gather_facts: false connection: local environment: # 認証情報 TOWER_HOST: "http://{{ ansible_host }}" TOWER_USERNAME: "{{ conn.tower_username }}" TOWER_PASSWORD: "{{ conn.tower_password }}" tasks: # ジョブテンプレートの起動 - name: launch job awx.awx.tower_job_launch: name: jt_show # ジョブテンプレート名 register: res_jt_launch # ジョブの終了まで待つ - name: wait job awx.awx.tower_job_wait: job_id: "{{ res_jt_launch.id }}" # 実行中のジョブIDを指定
この組み合わせにより、ジョブの終了まで待ってから、タスクを終了します。
- 実行
$ ansible-playbook -i ../inventory.ini job_launch_wait.yml PLAY [tower] ****************************************************************************************************** TASK [launch job] ************************************************************************************************* changed: [awx1] TASK [wait job] *************************************************************************************************** ok: [awx1] // ここで終了までそれなりに待つ PLAY RECAP ******************************************************************************************************** awx1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
待っている途中で、ジョブがエラーになると、タスクとしてもエラーになります。
ジョブでエラーが起きたら、Playbook のタスクとしてもエラーになってくれた pic.twitter.com/rhqs1Sb2sW
— よこち(yokochi) (@akira6592) 2020年4月19日
■ ワークフロージョブテンプレートの起動
ワークフロージョブテンプレートの起動には、awx.awx.tower_workflow_launch
モジュールを利用します。
name
オプションにワークフロージョブテンプレート名を指定します。
他にも、追加変数を指定する extra_vars
や タグを指定する tag
など、GUI の各オプションに対応するオプションが用意されています。詳細は、モジュールのドキュメント(のソース)を参照してください。
その1: 起動するだけ(ジョブの終了を待たない)
awx.awx.tower_job_launch
モジュールと違って、awx.awx.tower_workflow_launch
モジュールでは、ジョブの終了を待つか待たないかを wait
オプションでしていできます。
デフォルトは true
なので待ちます。
まずは false
(待たない)の場合の Playbook は以下のとおりです。
wf_lauch.yml
--- - hosts: tower gather_facts: false connection: local environment: # 認証情報 TOWER_HOST: "http://{{ ansible_host }}" TOWER_USERNAME: "{{ conn.tower_username }}" TOWER_PASSWORD: "{{ conn.tower_password }}" tasks: # ワークフロージョブテンプレートの起動 - name: launch wf awx.awx.tower_workflow_launch: name: wf_show wait: false # 待たない指定(デフォルト true) register: res_wf_launch
- 実行(すぐ終わる)
$ ansible-playbook -i ../inventory.ini job_launch.yml PLAY [tower] ****************************************************************************************************** TASK [launch wf] ************************************************************************************************** changed: [awx1] PLAY RECAP ******************************************************************************************************** awx1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
この Playbook が終了直後は、まだワークフローは実行中です。
その2: 起動してジョブの終了まで待つ
待つ場合は wait
オプション を true
に指定します。デフォルトなので省略もできます。
wf_launch_wait.yml
--- - hosts: tower gather_facts: false connection: local environment: # 認証情報 TOWER_HOST: "http://{{ ansible_host }}" TOWER_USERNAME: "{{ conn.tower_username }}" TOWER_PASSWORD: "{{ conn.tower_password }}" tasks: # ワークフロージョブテンプレートの起動 - name: launch wf awx.awx.tower_workflow_launch: name: wf_show wait: true # 待つ指定(デフォルト) register: res_wf_launch
- 実行
$ ansible-playbook -i ../inventory.ini wf_launch_wait.yml PLAY [tower] ***************************************************************************************************** TASK [launch wf] ************************************************************************************************* changed: [awx1] // ここで終了までそれなりに待つ PLAY RECAP ******************************************************************************************************* awx1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
待っている途中で、どこかのジョブがエラーになると、タスクとしてもエラーになります。
awx.awx.tower_workflow_launch モジュールでワークフローの完了を待ってるときにジョブがエラーにあったら、タスクとしてもエラーになってくれた pic.twitter.com/YeIaKgEwfq
— よこち(yokochi) (@akira6592) 2020年4月20日
途中で Approval ノードて止まってる場合も待ち続けます。タイムアウトは timeout
値で調整できます。
進めるには、別途承認操作が必要です。
おわりに
awx.awx.tower_job_launch
モジュールや、awx.awx.tower_workflow_launch
モジュールで、ジョブを起動する Playbook をご紹介しました。
GUI 以外の方法でジョブを起動したいときは便利ですね。
参考
- Ansible モジュールではなく、
awx
コマンドでジョブを起動する場合(再掲)