首页 > 解决方案 > 在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"
}

标签: ansibleansible-inventory

解决方案


这是因为你在不应该留胡须的时候使用了胡须;如果你切换var=msg=它会按预期工作,但你写的相当于:

  tasks:
  - debug: var=80

这正是 ansible 运行的内容,解释了"80": "VARIABLE IS NOT DEFINED"文本


推荐阅读