0
我有一个网络与不同的主机和不同的网络,我想使用可以ping每个网络中的每个主机。得到一个dictonairy的子元素
在我的host_vars目录中,有关每个主机及其网络的所有信息都存储在它自己的文件中。一个hostfile看起来像这样:
bond:
- conn_name: net1
ip4: '10.10.44.21'
gw4: '10.10.44.1'
- conn_name: net2
ip4: '10.10.47.21'
gw4: '10.10.47.1'
- conn_name: net3
ip4: '10.10.46.21'
gw4: '10.10.46.1'
bond_slave:
- conn_name: eno1
ifname: eno1
master: net1
- conn_name: eno2
ifname: eno2
master: net2
- conn_name: ens2f1
ifname: ens2f1
master: net2
- conn_name: ens2f0
ifname: ens2f0
master: net2
- conn_name: ens4f1
ifname: ens4f1
master: net3
- conn_name: ens4f0
ifname: ens4f0
master: net3
我的目的是获得每个ip4值并从每台主机ping它。我可以做的是包含来自host_vars目录的所有文件,并ping每个文件的第一个bond项的ip-address。
---
- hosts: all
- name: Include information about all hosts
include_vars: ../../host_vars/{{ item }}.yaml
with_items: hosts
register: "r"
- name: execute ping
command: ping {{ bond[0].ip4 }} -c 3
with_items: "{{ r.results }}"
但键可以具有从2至4级的网络。我如何通过每个债券循环访问所有的IP地址?
解决方案
即使康斯坦丁·苏沃洛夫的片段没有工作对我来说,它帮我找到合适的解决方案:
- name: execute ping
command: ping {{ item.ip4 }} -c 3
with_items: "{{ r.results | map(attribute='ansible_facts.bond') | list }}"
感谢您的帮助。它帮助我找到ping执行的正确语法。 – JustOneQuestion