我需要使用 set_fact 将目标主机的 IP 地址保存到文件中。下面是我的剧本,但它以列表的形式给出输出。
hosts: all
tasks:
- set_fact:
data: "{{ ansible_all_ipv4_addresses }}"
- set_fact:
ip: "{{ data.split(',') }}"
- name: Show the devices
shell: echo {{ item }} >> /tmp/ips
with_items: "{{ ip }}"
输出: 好:[system1] => {“数据”:[“172.19.0.1”,“172.18.0.1”,“172.20.0.1”,“172.17.0.1”,“172.16.108.124”,“10.0.41.117” ] }
cat /tmp/ips
[u'172.19.0.1', u'172.18.0.1', u'172.20.0.1', u'172.17.0.1', u'172.16.108.124', u'10.0.41.117']
Desired o/p is
172.168.1.21
172.168.1.22
答案1
代替
shell: echo {{ item }} >> /tmp/ips
with_items: "{{ ip }}"
使用模板。
template:
src: ips.j2
dest: /tmp/ips
使用模板 ips.j2
{% for item in ip %}
{{ item }}
{% endfor %}
答案2
ansible_all_ipv4_addresses
已经是一个数组,所以你不需要split
它:
- copy:
dest: /tmp/ips
content: "{{ ansible_all_ipv4_addresses | join('\n') }}"
这将产生所需的输出。