Answers:
通过执行以下操作,您可以访问几乎所有库存事实/变量:
{{ 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文档提供的示例:
例如,想象一下一个拥有数千台主机的超大型基础架构。可以将事实缓存配置为每晚运行,但是一小部分服务器的配置可以临时运行或全天运行。启用事实缓存后,不必“命中”所有服务器来引用变量和有关它们的信息。