我有一个 jinja2 模板,我试图遍历一个主机组,并在我的模板中插入所有主机的 ipv4 地址。但是当我这样做时,我遇到了错误,即使我这样做的方式是每篇文章和文章都建议应该这样做的方式。
这是产生错误的模板:
{% if groups['linux-hosts'] %}
{% for item in groups['linux-hosts'] %}
define host {
use generic-host-normal
host_name {{ item }}
alias {{ item }}
address {{ hostvars[item].ansible_default_ipv4.address }}
}
{% endfor %}
{% endif %}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
失败: [server] (item=servers.cfg) => {"changed": false, "item": "servers.cfg", "msg": "AnsibleUndefinedVariable: 'ansible.vars.hostvars.HostVarsVars 对象'没有属性 'ansible_default_ipv4'"}
如果我不使用方括号中的变量“item”,而是从清单中指定特定主机,Ansible 就能够获取 ipv4 地址。示例(“服务器”是我库存中的主机名):
{{ hostvars['server'].ansible_default_ipv4.address }}
Run Code Online (Sandbox Code Playgroud)