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 }}"
출력: OK: [system1] => {"data": ["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') }}"
그러면 원하는 출력이 생성됩니다.