실제로 출력되는 항목을 나열해야 합니다.

실제로 출력되는 항목을 나열해야 합니다.

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') }}"

그러면 원하는 출력이 생성됩니다.

관련 정보