无法读取 Ansible 事实
Can't read an Ansible fact
我知道访问 Ansible facts 是 well documented,但我无法让这段代码工作。
# site.yml
---
- name: get fact
hosts: webservers
tasks:
- debug: msg="{{ hostvars['web01.example.com']['ansible_all_ipv4_addresses'] }}"
- fail:
当我 运行 它时,我得到这个错误:
fatal: [web01.example.com] => One or more undefined variables: 'dict object' has no attribute 'ansible_all_ipv4_addresses'
然而,当我 运行 命令 "ansible -i inventory -m setup" 时,我确实看到了字典键:
web01.example.com | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"<ip_address>"
],
(other objects...)
}
}
这是我的库存文件:
# inventory
[webservers]
web01.example.com ansible_host=<ip_address>
我也尝试了以下 hostvars 设置,但我得到了同样的错误:
hostvars['web01.example.com']['ansible_facts']['ansible_all_ipv4_addresses']
我在这里做错了什么?看来这应该很容易。
这应该可以解决问题:
- debug: msg="{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'] }}"
它与ansible有点混淆,但你只是使用(中间没有ansible_facts
):
hostvars['web01.example.com']['ansible_all_ipv4_addresses']
或@oley 发布
hostvars[inventory_hostname]['ansible_all_ipv4_addresses']
对于任务中的相应主机
在您发布的文档中,中间也总是没有 ansible_facts
,但很容易忽略 :)
我知道访问 Ansible facts 是 well documented,但我无法让这段代码工作。
# site.yml
---
- name: get fact
hosts: webservers
tasks:
- debug: msg="{{ hostvars['web01.example.com']['ansible_all_ipv4_addresses'] }}"
- fail:
当我 运行 它时,我得到这个错误:
fatal: [web01.example.com] => One or more undefined variables: 'dict object' has no attribute 'ansible_all_ipv4_addresses'
然而,当我 运行 命令 "ansible -i inventory -m setup" 时,我确实看到了字典键:
web01.example.com | success >> {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"<ip_address>"
],
(other objects...)
}
}
这是我的库存文件:
# inventory
[webservers]
web01.example.com ansible_host=<ip_address>
我也尝试了以下 hostvars 设置,但我得到了同样的错误:
hostvars['web01.example.com']['ansible_facts']['ansible_all_ipv4_addresses']
我在这里做错了什么?看来这应该很容易。
这应该可以解决问题:
- debug: msg="{{ hostvars[inventory_hostname]['ansible_all_ipv4_addresses'] }}"
它与ansible有点混淆,但你只是使用(中间没有ansible_facts
):
hostvars['web01.example.com']['ansible_all_ipv4_addresses']
或@oley 发布
hostvars[inventory_hostname]['ansible_all_ipv4_addresses']
对于任务中的相应主机
在您发布的文档中,中间也总是没有 ansible_facts
,但很容易忽略 :)