在ansible中使用循环时,如何将输出存储在变量中?

在ansible中使用循环时,如何将输出存储在变量中?,ansible,Ansible,我想检查json文件中ip列表所在服务器上的ip,如下所示, cat/tmp/iplist.json [ "10.10.10.182", "182.10.10.2", "192.168.200.2" ] 现在,条件是系统上只存在一个ip,所以我执行循环来存储变量中的唯一成功输出,但我不能这样做,有人知道我怎么做吗 这是我的剧本 --- - name: Load values from json file hosts: localhost gather_facts: false

我想检查json文件中ip列表所在服务器上的ip,如下所示, cat/tmp/iplist.json

[

"10.10.10.182",
"182.10.10.2",
"192.168.200.2"

]
现在,条件是系统上只存在一个ip,所以我执行循环来存储变量中的唯一成功输出,但我不能这样做,有人知道我怎么做吗 这是我的剧本

---
- 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
启用“收集事实:true”时,变量ansible\u all\u ipv4\u addresses将保留主机的所有ipv4地址列表。用于查找常用项。比如说

-调试: msg:{{ansible_all_ipv4_地址{124; intersectip}} 启用“收集事实:true”时,变量ansible\u all\u ipv4\u addresses将保留主机的所有ipv4地址列表。用于查找常用项。比如说

-调试: msg:{{ansible_all_ipv4_地址{124; intersectip}}
嗨,这只是我用ip做的例子,因为这是我可以在现场测试的,实际上我用这种方法查询交换机上的mac地址,如果mac发现它应该存储在变量中。ansible_接口包含接口列表,ansible_包含接口的所有细节,包括macaddress。要获取可用事实的全局id,可以执行ansible-i yourvinventory.ini yourtargethost-m安装程序。这是收集事实时playbook在每个主机上执行的操作:true。我从不同系统的数据库中取下了Mac,ansible不具备可访问性,因此我无法从ansible获取事实。现在我想查询交换机上的Mac地址以找出Mac,但在运行playbook后,它将返回连接的端口我只想将输出存储在变量中,以自动化我的网络配置…我已使用此选项进行测试,因为我目前没有iOS交换机进行测试。嗨,这只是ip的示例,因为这是我可以在live中测试的,实际上,我采用这种方法来查询交换机上的mac地址,如果mac发现它应该存储在变量中。ansible_接口包含接口列表,ansible_包含接口的所有详细信息,包括macaddress。要获取可用事实的全局id,您可以执行ansible-i yourinventory.ini yourtargethost-m设置。这是收集事实时playbook在每个主机上执行的操作:true。我从不同系统的数据库中取下了Mac,ansible不具备可访问性,因此我无法从ansible获取事实。现在我想查询交换机上的Mac地址以找出Mac,但在运行playbook后,它将返回连接的端口我只想将输出存储在变量中,以自动化我的网络配置…我已使用此选项进行测试,因为我现在还没有iOS交换机进行测试。