如何从库存文件调用/包含IP地址到ansible playbook

时间:2016-03-20 04:40:36

标签: linux shell unix ansible redhat

---

- 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] }}

提前致谢。

2 个答案:

答案 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 }}