はじめに
Ansible Tower / AWX の操作に対応する awx.awx
コレクション には、ジョブテンプレートやワークフロージョブテンプレートを起動するモジュールがあります。
この記事では、簡単なサンプルをもとに使用例をご紹介します。
※ 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
モジュール単体で利用すると、ジョブテンプレートを起動すするだけして、ジョブの終了を待たずにタスクが終了します。
---
- 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
オプションに指定することで、ジョブの終了まで待つことができます。
---
- 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 }}"
この組み合わせにより、ジョブの終了まで待ってから、タスクを終了します。
$ 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
待っている途中で、ジョブがエラーになると、タスクとしてもエラーになります。
■ ワークフロージョブテンプレートの起動
ワークフロージョブテンプレートの起動には、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 は以下のとおりです。
---
- 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
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
に指定します。デフォルトなので省略もできます。
---
- 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
待っている途中で、どこかのジョブがエラーになると、タスクとしてもエラーになります。
途中で Approval ノードて止まってる場合も待ち続けます。タイムアウト は timeout
値で調整できます。
進めるには、別途承認操作が必要です。
おわりに
awx.awx.tower_job_launch
モジュールや、awx.awx.tower_workflow_launch
モジュールで、ジョブを起動する Playbook をご紹介しました。
GUI 以外の方法でジョブを起動したいときは便利ですね。
参考
Ansible モジュールではなく、awx
コマンドでジョブを起動する場合(再掲)