ansible - 在ansible中直接使用变量和hostvars时输出之间的区别是什么
问题描述
我有 ansible 库存,其中包含以下条目。
[local]
localhost port=80
[apacheweb]
kputtegowda2c.mylabserver.com
[appserver]
kputtegowda3c.mylabserver.com
现在,如果我想访问本地组的主机变量“端口”。我有一个简单的剧本来显示变量值。
- hosts: local
gather_facts: yes
tasks:
- debug: var={{ port }}
上面的示例产生输出。
TASK [debug] *************
ok: [localhost] => {
"80": "VARIABLE IS NOT DEFINED!"
}
如果我使用 hostvars[inventory_hostname].port 而不是直接访问端口变量,我得到如下输出。
TASK [debug] ****************
ok: [localhost] => {
"hostvars[inventory_hostname].port": "80"
}
解决方案
这是因为你在不应该留胡须的时候使用了胡须;如果你切换var=
到msg=
它会按预期工作,但你写的相当于:
tasks:
- debug: var=80
这正是 ansible 运行的内容,解释了"80": "VARIABLE IS NOT DEFINED"
文本