如何解决如何借助Jinja2模板和Ansible将计算机IP地址放入HAProxy配置文件中?
我对Ansible hostvar有一些误解。我正在从3个主机的剧本中播放模板任务,清单文件如下。这是剧本任务:
- name: Template a HAProxy config
template:
src: ./haproxy.cfg.j2
dest: /etc/haproxy/haproxy.cfg
owner: root
group: root
mode: '0644'
这是我的示例清单文件:
server10 ansible_host=192.168.70.15
server20 ansible_host=192.168.70.20
server30 ansible_host=192.168.70.25
[servergroup]
server10
server20
server30
这是我的*.j2
配置文件的一部分:
{% for host in hostvars %}
server {{ host }} {{ ansible_default_ipv4.address }}
{% endfor %}
我想得到类似的东西:
server server10 192.168.70.15
server server20 192.168.70.20
server server30 192.168.70.25
这是问题所在-我正在收到类似的内容:
server server10 192.168.70.15
server server30 192.168.70.15
server server10 192.168.70.15
如何正确使用IP变量?
解决方法
ansible_default_ipv4.address
是您当前在其上运行任务的主机的默认ip4地址,即server10
(如果我相信您的示例清单)。
如果您要从其他主机获取事实,则需要通过hostvars
魔术词典浏览这些事实。有关更多信息,请参见the relevant section in the fine manual。
根据您的情况,您可以像这样修复模板:
{% for host in hostvars %}
server {{ host }} {{ hostvars[host].ansible_default_ipv4.address }}
{% endfor %}
请注意,ansible_default_ipv4
仅对于特定的host
存在,前提是您以前为该主机收集了事实。
或者,您可以使用已经在库存中注册的信息,而不必在这种情况下收集事实:
{% for host in groups['servergroup'] %}
server {{ host }} {{ hostvars[host].ansible_host }}
{% endfor %}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。