如何解决调试/模板等时未定义 Ansible 主机变量变量
我正在尝试通过从所有主机收集事实并循环遍历生成的 null
以获取第二个接口的 IP(我需要一个这个接口的私有IP,而不是另一个接口的公网IP)
我可以使用以下播放从单个主机获取此信息:
hostvars
...但我想做的是遍历所有主机并从每个主机获取此值,最终将此信息写入我的主机文件,但我只需要获取一些调试信息:)
我试过了
- name: play 1
hosts: all
- name: play 2
hosts: localhost
connection: local
become: no
tasks:
- debug:
var: hostvars['mysinglehost'].ansible_all_ipv4_addresses[1]
...它给出了我期望的输出,但是当我尝试使用此调试任务输出 ...
- debug:
var: hostvars[item].ansible_all_ipv4_addresses[1]
with_inventory_hostnames:
- all
...
时:
msg
我收到以下错误(就像我尝试使用 ...
- debug:
msg: "{{ hostvars[item].ansible_all_ipv4_addresses[1] }}"
with_inventory_hostnames:
- all
...
写入文件时所做的那样):
lineinfile
我不确定为什么会发生这种情况,因为它试图引用完全相同的变量。有没有办法做到这一点?
解决方法
我没有测试过这个,但原则上,这可能会奏效吗?
- hosts: all
- hosts: localhost
gather_facts: false
tasks:
- set_fact:
my_hosts: |
{
{% for a_host in hostvars | dict2items %}
"{{ a_host.key }}": "{{ a_host.value.ansible_all_ipv4_addresses[1] }}",{% endfor %}
}
然后,不是在主机变量上循环,而是在 my_hosts
上循环?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。