如何 call/include 从清单文件到 ansible playbook 的 ip 地址

How to call/include an ip address from inventory file to ansible playbook

---

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

提前致谢。

{{ hostvars['zookservers']['ansible_eth0']['ipv4']['address'] }}

问题是,你的游戏仅限于pupservers组。 Ansible 只会知道它应该 运行 上的主机的事实。 zookservers 是一个不参与你的游戏的不同组,所以 Ansible 不会连接到这些主机并且不会收集事实(包括 ip)

要让 Ansible 在组 zookservers 的主机上收集事实,您可以简单地向您的 playbook 添加一个空的 play。所以你的剧本看起来像这样:

- hosts: zookservers

- hosts: pupservers
  sudo: yes

  tasks:
  - ...

Fact caching 是另一种选择,但我想这应该适合您的需要。

在你的循环中,你应该能够通过

获取 IP
{{ hostvars[item].ansible_eth0.ipv4.address }}