---
- hosts: pupservers
sudo: yes
tasks:
- command: bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 2 --partitions 1 --topic my-replicated-topic
with_inventory_hostnames: zookservers
在上面的代码中,我需要在库存文件而不是本地主机中调用另一个声明为zookservers的变量的IP地址。
我尝试了不同的东西,但没有任何作用,尝试拨打{{ ansible_ssh_host }}
,{{ zookservers[ansible_ssh_host] }}
提前致谢。
答案 0 :(得分:1)
{{ hostvars['zookservers']['ansible_eth0']['ipv4']['address'] }}
答案 1 :(得分:1)
问题是,您的游戏仅限于群组pupservers
。 Ansible只会知道它应该运行的主机的事实。 zookservers
是一个不参与你游戏的不同群体,所以Ansible不会连接到这些主机而不收集事实(包括ip)
要让Ansible在小组zookservers
的主持人上收集事实,您只需在您的剧本中添加一个空白游戏即可。所以你的剧本会是这样的:
- hosts: zookservers
- hosts: pupservers
sudo: yes
tasks:
- ...
Fact caching将是另一种选择,但我想这应该适合您的需要。
在循环中,您应该能够使用
获取IP{{ hostvars[item].ansible_eth0.ipv4.address }}