てくなべ (tekunabe)

ansible / network / automation

[Ansible] Ansible Tower / AWX のワークフローで別のジョブテンプレートに変数を渡せる set_stats と 追加変数の関係

はじめに

Ansible Tower / AWX のワークフローで、別のジョブテンプレートに変数を渡せる set_stats モジュールがあります。

set_stats に登録した変数は、かなり優先度が高く、追加変数(Extra Variables)を上書きするケースもあります。

この記事では一例を示します。

Playbook

以下2つの Playbook を利用します。

test01.ymlset_statsmsg という変数を登録し、test02.yml で表示します。

  • test01.yml (ジョブテンプレート task01 で利用)
---
- hosts: localhost
  gather_facts: no

  tasks:
    - name: set_stats test
      set_stats:
        data:
          msg: "msg by set_stats"
  • task02.yml (ジョブテンプレート task02 で利用)
---
- hosts: localhost
  gather_facts: no

  tasks:
    - name: debug test
      debug: 
        msg: "{{ msg }}"

ワークフローの構成

以下の構成にします。

f:id:akira6592:20200403215737p:plain
ワークフローの構成

この構成により msg 変数が3箇所で定義されます。

場所
ジョブテンプレート task01 の追加変数 overridden by test01!!
Playbook task01.ymlset_stats msg by set_stats
ジョブテンプレート task02 の追加変数 overridden by test02!!

実行

ジョブテンプレート task02 で表示される msg の値は msg by set_stats になります。

f:id:akira6592:20200403214929p:plain
task02 の追加変数が set_stats によって上書きされた

ジョブテンプレートtask01 のログ

ジョブテンプレート task01 実行時のログは以下の通りです。

f:id:akira6592:20200403215028p:plain
アーティファクトとして set_stats した値が登録される
追加変数には overridden by test01!! が、set_stats で登録した値は「アーティファクト」欄に表示されます。これが強いです。

ジョブテンプレートtask02 のログ

ジョブテンプレート task02 実行時のログは以下の通りです。

f:id:akira6592:20200403215116p:plain
task02 の追加変数が set_stats によって上書きされた

ジョブテンプレート設定としては、追加変数に overridden by test02!! を指定しましたが、test01set_stats した値 msg by set_stats になっています。

おわりに

いろいろな場所で変数が定義できるのは便利ですが、優先度には注意ですね。

ちなみに、(ジョブテンプレートではなく)ワークフロージョブテンプレートの追加変数で msg 変数を指定したら、set_stats より優先されました。