为何引用Ansible Facts时需移除‘ansible_’前缀?
为什么Ansible Playbook中访问facts需要去掉
ansible_前缀? 这是Ansible内置的facts处理逻辑导致的,核心原因是Ansible会自动对setup模块返回的带ansible_前缀的键进行去前缀转换,具体细节如下:
Setup模块的原始输出 vs Playbook中的变量结构
当你运行ansible localhost -m setup时,看到的是模块返回的原始数据结构:ansible_facts下确实包含带ansible_前缀的键(比如ansible_default_ipv4)。但当Ansible把这些facts加载到Playbook的变量空间时,会自动处理这些键:将所有以ansible_开头的键去掉前缀,作为ansible_facts的子键存储。正确的访问方式
经过转换后,Playbook中需要用去前缀后的键来访问:{{ ansible_facts.default_ipv4.address }}而不能使用原始的带前缀键,因为转换后的
ansible_facts字典里已经不存在ansible_default_ipv4这个键了。额外说明
除了通过ansible_facts.xxx访问,这些去前缀后的变量也会被直接注入到全局变量空间(比如可以直接写{{ default_ipv4.address }}),不过Ansible官方推荐使用ansible_facts.xxx的方式,避免和自定义变量冲突。
内容的提问来源于stack exchange,提问作者timothepoznanski
相关产品推荐
相关产品推荐

