2017-06-08 13 views
0

私は異なるホストと異なるネットワークを持つネットワークを持っています。それぞれのネットワークで各ホストにpingを実行したいと思います。ダイキャットアイランドの子要素を取得

私のhost_varsディレクトリには、すべてのホストとそのネットワークに関するすべての情報が専用のファイルに保存されています。ホストファイルは次のようになります:

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ディレクトリからすべてのファイルを取り込み、各ファイルの最初のボンド項目のip-addressをpingすることです。

--- 
- 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アドレスにアクセスするために各ボンドをループするのですか?あなたがホストごとに bond VARを定義した場合

- name: execute ping 
    command: ping {{ item.ip4 }} -c 3 
    with_items: "{{ r.results | map(attribute='ansible_facts.bond') | list }}" 

答えて

0

:コンスタンチンスヴォーロフのスニペットは、私のために働いていなかった、それが正しい解決策を見つけるために私を助けたにもかかわらず

ソリューション

host_vars経由でhostvarsの魔法の変数を使用することができます(この醜いタスクを行う必要はありません)。

実際にはこのJinja2式はリストのリストを返しますが、with_itemsはそれらを平坦化します。したがって、現在のプレイ中のすべてのホストのすべての結合からすべての要素を長いリストでリストアップします。

+0

ご協力いただきありがとうございます。 pingの実行に正しい構文を見つけるのに役立ちました。 – JustOneQuestion

関連する問題