Ansible 変数名が「vars」の場合の変数参照の仕方について
↓のように定義された変数を参照するとき
varfile1.yml
vars:
var1: hogehoge
vars.var1
→ 不正解
$ ansible -m debug -a "var=vars.var1" -e "@varfile1.yml" localhost
localhost | SUCCESS => {
"vars.var1": "VARIABLE IS NOT DEFINED!"
}
vars.vars.var1
→ 正解
$ ansible -m debug -a "var=vars.vars.var1" -e "@varfile1.yml" localhost
localhost | SUCCESS => {
"vars.vars.var1": "hogehoge"
}
なんで?
varfile1.yml
vars:
var1: hogehoge
vars.var1
→ 不正解$ ansible -m debug -a "var=vars.var1" -e "@varfile1.yml" localhost
localhost | SUCCESS => {
"vars.var1": "VARIABLE IS NOT DEFINED!"
}
vars.vars.var1
→ 正解$ ansible -m debug -a "var=vars.vars.var1" -e "@varfile1.yml" localhost
localhost | SUCCESS => {
"vars.vars.var1": "hogehoge"
}
調べてみた
環境
environment | version |
---|---|
Python | 3.8.0 |
Ansible | 2.9.3 |
vars
を見てみる
$ ansible -m debug -a "var=vars" -e "@varfile1.yml" localhost
localhost | SUCCESS => {
"vars": {
"ansible_check_mode": false,
"ansible_connection": "local",
"ansible_dependent_role_names": [],
"ansible_diff_mode": false,
"ansible_facts": {},
...
"playbook_dir": "/Users/answer_d/work/20200208_vars_test",
"role_names": [],
"vars": {
"var1": "hogehoge"
}
}
}
vars
にはそもそもAnsibleが内部的に使う色々な値が入ってる- 定義した変数も一緒に入ってる
変数名がvars
でない場合はどうなるか
varfile2.yml
var1: fugafuga
$ ansible -m debug -a "var=vars" -e "@varfile2.yml" localhost
localhost | SUCCESS => {
"vars": {
"ansible_check_mode": false,
...
"var1": "fugafuga"
}
}
この場合はvar1
でもvars.var1
でも参照可能
$ ansible -m debug -a "var=var1" -e "@varfile2.yml" localhost
localhost | SUCCESS => {
"var1": "fugafuga"
}
$ ansible -m debug -a "var=vars.var1" -e "@varfile2.yml" localhost
localhost | SUCCESS => {
"vars.var1": "fugafuga"
}
結論(予想)
- まず定義した変数は
vars.<定義名>
で参照できる - ↑に加えて、単に
<定義名>
だけでも参照できるようになってる - でも定義名に
vars
を含んでる場合、Ansibleが内部で使っている変数名と被るので2の方法が使えない
だからvars.vars.var1
と参照しなければいけなかった!
Author And Source
この問題について(Ansible 変数名が「vars」の場合の変数参照の仕方について), 我々は、より多くの情報をここで見つけました https://qiita.com/answer_d/items/a1c28f4c664934bd03b3著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .