Em vez de
shell: echo {{ item }} >> /tmp/ips
with_items: "{{ ip }}"
Use o modelo .
template:
src: ips.j2
dest: /tmp/ips
com template ips.j2
{% for item in ip %}
{{ item }}
{% endfor %}
Eu preciso salvar os endereços IP do host de destino em um arquivo usando set_fact. Abaixo está o meu manual, mas está dando saída como uma lista.
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 }}"
saída: 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
Em vez de
shell: echo {{ item }} >> /tmp/ips
with_items: "{{ ip }}"
Use o modelo .
template:
src: ips.j2
dest: /tmp/ips
com template ips.j2
{% for item in ip %}
{{ item }}
{% endfor %}
ansible_all_ipv4_addresses
já é uma matriz, portanto, você não precisa split
it:
- copy:
dest: /tmp/ips
content: "{{ ansible_all_ipv4_addresses | join('\n') }}"
Isso produzirá a saída desejada.
Tags ansible