はじめに
vars lookup pluginは、変数名を引数にして変数の値を取得できます。
この性質を利用すると、変数名を変数で指定して、その値を取得できます。
簡単な例でご紹介します。
サンプル Playbook
値を取得したい変数名を、var_name
変数の値で指定します。(以下の場合 var1
)
1つめのタスクでは、単純に var1
の値を表示します。
2つめのタスクでは、loop
で変数名の一部を可変にして、var1
, var2
, var3
の値を表示します。
- hosts: localhost gather_facts: no vars: var_name: var1 # 変数名を指定する変数 var1: value1 # 取得対象の変数その1 var2: value2 # 取得対象の変数その2 var3: value3 # 取得対象の変数その3 tasks: - name: lookup plugin debug: msg: "{{ lookup('vars', var_name) }}" # 変数 var1 の指定と等価 - name: using loop debug: msg: "{{ lookup('vars', 'var' + (item | string)) }}" # ループを利用して変数 var1, var2, var3 を指定 loop: - 1 - 2 - 3
Playbook 実行
Playbook を実行します。
$ ansible-playbook -i localhost, var.yml PLAY [localhost] ************************************************************************************************** TASK [lookup plugin] ********************************************************************************************** ok: [localhost] => { "msg": "value1" } TASK [using loop] ************************************************************************************************* ok: [localhost] => (item=1) => { "msg": "value1" } ok: [localhost] => (item=2) => { "msg": "value2" } ok: [localhost] => (item=3) => { "msg": "value3" } PLAY RECAP ******************************************************************************************************** localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
参考
When should I use {{ }}? Also, how to interpolate variables or dynamic variable names
別解
How do I access a variable of the first host in a group?