假设有一个收集一些数据的主机,它在一个组[collectors]
。 [reporters]
团里也有主持人。 所以我想为记者设置一个variablesgroups['collectors'][0]
ip地址。 但是设立记者的手册不在[collectors]
团体中运行,所以不收集这位主持人的事实。 有没有办法不硬编码的IP地址?
你可以通过这样的方式访问几乎所有的库存事实/variables:
{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}
或者,如果你想通过索引进入一个组:
{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}
最大的窍门就是你需要收集你感兴趣的所有主机/群组的事实。所以你想要修改你的对战记者小组的操作手册,以包含一个无操作(虚拟)任务到collections家小组 这将导致Ansible收集有关collections家的事实,以便他们可以从记者组访问。 所以你可能想把这样的东西添加到记者手册的顶部:
- hosts: collectors name: Gather facts from collectors tasks: [ ]
空括号基本上意味着不会执行任务,但是这仍然会迫使Ansible收集关于收集者的事实,以便你可以参考你对记者的任务。
我想到我还应该提到,从Ansible的1.8版本开始,现在有一个事实cachingfunction。 事实上的caching依赖于一个redis服务器来存储操作手册之间的事实。 启用它后,一个剧本可以参考先前运行的另一个剧本所获得的事实。 Ansible文档给出的例子:
例如,想象一下,拥有数千个主机的非常大的基础架构。 事实上caching可以configuration为每晚运行,但是一小部分服务器的configuration可以特别运行或者全天定期运行。 在启用事实caching的情况下,不必“命中”所有服务器来引用variables和关于它们的信息。