Как сохранить вывод в переменной при использовании l oop in ansible? - PullRequest
0 голосов
/ 09 мая 2020

Я хочу проверить ip на сервере, где у меня есть список ip в файле json, как показано ниже, cat /tmp/iplist.json

[

"10.10.10.182",
"182.10.10.2",
"192.168.200.2"

]

теперь условие только одно ip существует в системе, поэтому я выполнял l oop, чтобы сохранить единственный результат успеха в переменной, но я не могу этого сделать, знает ли кто-нибудь, как я могу это сделать
вот моя книга

---
- name: Load values from json file
  hosts: localhost
  gather_facts: false

  vars:
    ip: "{{ lookup('file', '/tmp/iplist.json') | from_json }}"

  tasks:

    - name: Loop over imported iplist
      shell: ip a | grep {{ item }}
      loop: "{{ ip }}"
      changed_when: true
      register: echo

    - debug:
        msg: "{{ echo }}"

И вот как получается ошибка

PLAY [Load values from json file] *************************************************************************************************************************

TASK [Loop over imported iplist] *******************************************************************************************************************************
changed: [localhost] => (item=10.10.10.182)
failed: [localhost] (item=182.10.10.2) => {"ansible_loop_var": "item", "changed": true, "cmd": "ip a | grep 182.10.10.2", "delta": "0:00:00.012178", "end": "2020-05-09 11:30:06.919913", "item": "182.10.10.2", "msg": "non-zero return code", "rc": 1, "start": "2020-05-09 11:30:06.907735", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
failed: [localhost] (item=192.168.200.2) => {"ansible_loop_var": "item", "changed": true, "cmd": "ip a | grep 192.168.200.2", "delta": "0:00:00.029234", "end": "2020-05-09 11:30:07.178768", "item": "192.168.200.2", "msg": "non-zero return code", "rc": 1, "start": "2020-05-09 11:30:07.149534", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP *****************************************************************************************************************************************************
localhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0

1 Ответ

2 голосов
/ 09 мая 2020

Когда вы включаете gather_facts: true, переменная ansible_all_ipv4_addresses будет хранить список всех IPv4-адресов хоста. Используйте пересечение , чтобы найти общие предметы. Например,

    - debug:
        msg: "{{ ansible_all_ipv4_addresses | intersect(ip) }}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...