はじめに
以前の記事で、Ansible Tower / AWX の各種オブジェクトを作成、管理できる tower モジュールのうち、Collection 版のモジュールについてご紹介しました。
Collection 版のモジュールでは、ワークフローを扱うモジュールとしては新たに、以下の2つが開発されています。
tower_workflow_job_template
モジュールtower_workflow_job_template_node
モジュール
もともとあった、tower_workflow_template
とは別物で、内部で tower-cli
を利用していないタイプであり、後継版ような位置づけです。
この記事では、tower_workflow_job_template
、tower_workflow_job_template_node
モジュールを利用して、簡単なワークフローを作成するサンプルをご紹介します。
- 動作確認環境
- Ansible 2.9.6
- AWX 10.0
- awx.awx モジュール 10.0
■ 目指すワークフロー
こんな感じのワークフローを作ることにします。
nodexxx
は、各ノードを内部的に識別する id のようなもので、上図には独自に付加しました。GUI で設定する場合は意識しないのですが、あとで Playbook に出てきます。
■ 準備
まず予め、ansible-galaxy collection install awx.awx
でモジュールをインストールします。
詳細はこちら: [Ansible] tower モジュールの最近の事情と Collection 版モジュールの使い方 - てくなべ (tekunabe)
■ Playbook
手抜きですが、実行するジョブテンプレートはすべて同じです。
本当はノードの作成とリンクをいっぺんにやりたかったのですが、先にノードが作成された後でないとリンクできないようでした。そのため、先にノード作成、あとでリンク、というように別のタスクにしています。
※ 少し改善版はこちら: [Ansible] tower_workflow_job_template_node モジュールでノード定義とリンク定義をうまくやる - てくなべ (tekunabe))
また、node301
では、「[Ansible/AWX] ワークフローですべてのジョブが正常で収束したときみ処理を進めるには(CONVERGENCEオプション) - てくなべ (tekunabe)」でもご紹介したCONVERGENCE オプションの「すべて」を再現するために、all_parents_must_converge: true
を指定しています。
すべてのオプションについての説明は、ansible-doc
コマンドで参照してください。
ansible-doc awx.awx.tower_workflow_job_template_node
ansible-doc awx.awx.tower_workflow_job_template_node_node
- hosts: tower gather_facts: no connection: local vars: conn: &conn tower_host: https://AWXのホスト tower_username: admin tower_password: xxxx validate_certs: no tasks: ################################################ # ワークフロージョブテンプレート本体の作成 - name: creat WFJT awx.awx.tower_workflow_job_template: <<: *conn name: test_WF # 名前 ################################################ # ワークフローノードの作成 # 左の列 - name: create WFJT node101 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node101 # 内部識別ID unified_job_template: tower-sample-ok # 実行するジョブテンプレート workflow_job_template: test_WF # 関連付けるワークフロージョブテンプレート名 # 真ん中の列 3つ - name: create WFJT node201 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node201 unified_job_template: tower-sample-ok workflow_job_template: test_WF - name: create WFJT node202 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node202 unified_job_template: tower-sample-ok workflow_job_template: test_WF - name: create WFJT node209 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node209 unified_job_template: tower-sample-ok workflow_job_template: test_WF # 右の列 - name: create WFJT node301 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node301 unified_job_template: tower-sample-ok workflow_job_template: test_WF all_parents_must_converge: true # すべてのノードが成功で収束したときのみ実行 ################################################ # ワークフローノード間のリンクの作成 - name: link 100 to 200 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node101 workflow_job_template: test_WF success_nodes: # 成功時に進めるノード(緑のリンク) - node201 - node202 failure_nodes: # 障害発生時に進めるノード(赤のリンク) - node209 - name: link 201 to 301 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node201 workflow_job_template: test_WF success_nodes: # 成功時に進めるノード(緑のリンク) - node301 - name: link 202 to 301 awx.awx.tower_workflow_job_template_node: <<: *conn identifier: node202 workflow_job_template: test_WF success_nodes: # 成功時に進めるノード(緑のリンク) - node301
■ 実行
Playbook を実行します。
$ ansible-playbook -i ../inventory.ini wf01.yml PLAY [tower] ***************************************************************************************************** TASK [creat WFJT] ************************************************************************************************ changed: [awx1] TASK [create WFJT node101] *************************************************************************************** changed: [awx1] TASK [create WFJT node201] *************************************************************************************** changed: [awx1] TASK [create WFJT node202] *************************************************************************************** changed: [awx1] TASK [create WFJT node209] *************************************************************************************** changed: [awx1] TASK [create WFJT node301] *************************************************************************************** changed: [awx1] TASK [link 100 to 200] ******************************************************************************************* changed: [awx1] TASK [link 201 to 301] ******************************************************************************************* changed: [awx1] TASK [link 202 to 301] ******************************************************************************************* changed: [awx1] PLAY RECAP ******************************************************************************************************* awx1 : ok=9 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
■ 確認
AWX 側で確認します。
無事に作れました。
■ まとめ
tower_workflow_job_template
、tower_workflow_job_template_node
モジュールを利用して、ワークフローを作成する Playbook をご紹介しました。
tower-cli
を利用しなくていい点や、分岐からの収束するワークフローも作れるのが良いと思いました。もともとあった tower_job_template
モジュールの schema
オプションでは表現できなかった気がします。