需要列出事实输出中的项目

需要列出事实输出中的项目

我需要使用 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') }}"

这将产生所需的输出。

相关内容