はじめに
set_fact
モジュールは、Playbook 内のタスクとして、新たな変数を定義できるモジュールです。
便利といえば便利なのですが、プログラムでいう変数の代入のようなことをタスクで実現させるには、少々大げさに感じることがあります。
set_fact
モジュールにしかできない変数の定義方法もありますが、簡単な定義であれば他の方法でも定義できます。
この記事では、他の方法を検討するためのポイントをご紹介します。
前提 (set_fact
を利用する場合)
以下のような Playbook をベースに考えます。set_fact
モジュールで、test_var
変数を定義し、その値を debug
モジュールで表示するという簡単なものです。
- hosts: localhost gather_facts: no tasks: - name: set_fact set_fact: test_var: hogehoge - name: debug test debug: msg: "{{ test_var }}"
■ Play レベルの vars でよいのではないか
set_fact
モジュールではなく、Play レベルの vars
で定義する方法です。
- hosts: localhost gather_facts: no vars: test_var: hogehoge tasks: - name: debug test debug: msg: "{{ test_var }}"
タスクの数も減ります。Playbook の実行ログは以下のとおりです。
$ ansible-playbook -i localhsot, test_vars.yml PLAY [localhost] ************************************************************************************************** TASK [debug test] ************************************************************************************************* ok: [localhost] => { "msg": "hogehoge" } PLAY RECAP ******************************************************************************************************** localhost : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
ただし、set_fact
モジュールのように、ループとは併用できません。
■ Task レベルの vars でよいのではないか
set_fact
モジュールではなく、Task レベルの vars
で定義する方法です。
- hosts: localhost gather_facts: no tasks: - name: debug test debug: msg: "{{ test_var }}" vars: test_var: hogehoge
実行ログは、前述のPlay レベルの vars
で定義した場合と同じです。
ただし、スコープはこのタスクの範囲なので、他のタスクへの使いまわしはできません。逆にスコープを閉じ込めたい場合はメリットになるかも知れません。