Ansible:多个IP地址变量lineinfile

时间:2018-01-22 21:00:03

标签: ansible

我有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)"}

我可以使用某个地方的例子吗? 非常感谢你提前!

1 个答案:

答案 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