我有3个主机,X,Y,Z。 在主机Q上我有一个目录/ root。 我有一个名为temp.txt的文件。
在该文件中,我想在Q上将X,Y和Z的IP地址添加到主机。
这怎么可能? 我一直在阅读Magic Variables,但我还没有与小组合作......
因此,我得到了:
test: {% for host in groups['node'] %}
{{ hostvars[host]['ansible_all_ipv4_addresses']['ipv4']['address'] }}
{% endfor %}
然而,当我运行它来测试时,这就出错...:
fatal: [10.0.0.1]: FAILED! => {"ansible_facts": {}, "changed": false, "failed": true, "message": "Syntax Error while loading YAML.\n\n\nThe error appears to have been in 'True': line 2, column 8, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\n(could not open file to display line)"}
我可以使用某个地方的例子吗? 非常感谢你提前!
答案 0 :(得分:2)
我认为你接近错误的方式。没有理由尝试按照你现在的方式设置一个变量。
这里最好的选择可能是使用Ansible循环来处理这个问题,如下所示:
---
- hosts: all
# there are no tasks in this play; this is just to explicitly gather
# facts on all the hosts in the inventory.
- hosts: hostQ
tasks:
- lineinfile:
create: true
line: "{{ hostvars[item].ansible_default_ipv4.address }}"
dest: /root/temp.txt
with_items:
- hostX
- hostY
- hostZ
这将收集清单中所有主机上的事实(填充ansible_default_ipv4
hostvar之类的内容),然后遍历主机名列表以将这些地址提取到名为/root/temp.txt
的文件中主持人Q
。