如何 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 }}
---
- 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 }}