回答:
次のようなことを行うことで、ほとんどすべての在庫ファクト/変数にアクセスできます。
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
または、グループへのインデックスを使用して実行する場合:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
大きなトリックは、興味のあるすべてのホスト/グループのファクトを収集する必要があることです。そのため、レポーターグループに対して実行するプレイブックを修正して、適用されるノーオペレーション(ダミー)タスクを含める必要があります。コレクターグループに。これにより、Ansibleはコレクターホストに関する事実を収集し、レポーターグループからアクセスできるようになります。そのため、レポータープレイブックの先頭に次のようなものを追加することをお勧めします。
- hosts: collectors
name: Gather facts from collectors
tasks: [ ]
空のカッコは基本的にタスクが実行されないことを意味しますが、これによりAnsibleがコレクターに関する事実を収集するように強制し、レポーターに対して実行するタスクでそれらを参照できるようにします。
Ansibleのバージョン1.8の時点で、ファクトキャッシング機能が利用可能になったことにも言及する必要があることに気付きました。ファクトキャッシングは、プレイブックの実行の間にファクトを保存するためにredisサーバーに依存しています。これを有効にすると、あるプレイブックは、以前に実行された別のプレイブックによって取得されたファクトを参照できます。Ansibleドキュメントの例:
たとえば、数千のホストがある非常に大規模なインフラストラクチャを想像してください。ファクトキャッシングは夜間に実行するように構成できますが、少数のサーバーセットの構成は、アドホックまたは1日を通して定期的に実行できます。ファクトキャッシングを有効にすると、すべてのサーバーを「ヒット」させて変数とそれらに関する情報を参照する必要がなくなります。