J'ai un réseau avec différents hôtes et différents réseaux et je veux utiliser ansible pour ping chaque hôte dans chaque réseau.obtenir des éléments enfants d'un dictonairy
Dans mon répertoire host_vars, toutes les informations sur chaque hôte et son réseau sont stockées dans son propre fichier. Un fichier hôte ressemble à ceci:
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
Mon but est d'obtenir toutes les valeurs ip4 et de les envoyer à chaque hôte. ce que je peux faire est d'inclure tous les fichiers du répertoire host_vars et de faire un ping sur l'adresse ip du premier élément de liaison de chaque fichier.
---
- 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 }}"
Mais le lien peut avoir de 2 à 4 réseaux. Comment puis-je faire une boucle sur chaque lien pour accéder à toutes les adresses IP?
Solution
Même si l'extrait de Konstantin Suvorov ne fonctionnait pas pour moi, il m'a aidé à trouver la bonne solution:
- name: execute ping
command: ping {{ item.ip4 }} -c 3
with_items: "{{ r.results | map(attribute='ansible_facts.bond') | list }}"
merci pour votre aide. cela m'a aidé à trouver la syntaxe correcte pour l'exécution du ping. – JustOneQuestion