Ansible 如何根据变量获取其他主机IP?

Ansible 如何根据变量获取其他主机IP?,ansible,Ansible,我希望根据清单中给定主机的变量获取其IP 主机 [pgsql_servers] psql-01 ansible_host=10.11.12.13 pg_master=True pg_slave=False psql-02 ansible_host=10.11.12.14 pg_master=False pg_slave=True psql-03 ansible_host=10.11.12.15 pg_master=False pg_slave=True [pgsql_servers:v

我希望根据清单中给定主机的变量获取其IP

主机

[pgsql_servers]
psql-01 ansible_host=10.11.12.13  pg_master=True  pg_slave=False
psql-02 ansible_host=10.11.12.14  pg_master=False pg_slave=True
psql-03 ansible_host=10.11.12.15  pg_master=False pg_slave=True

[pgsql_servers:vars]
ansible_python_interpreter=/usr/bin/python3
因此,在我的从属任务(只为从属任务运行)中,我希望获得给定的唯一主任务的IP

从任务。yml

- name: Replicate data from Master
  command: repmgr -h HOW_TO_GET_MASTER-IP_HERE -U repmgr -d repmgr -D /var/lib/postgresql/9.5/main -f /etc/repmgr.conf standby clone
  become: true
  become_user: postgres

我想在这里添加一个
,但是主任务不会执行
从任务.yml,所以它永远不会成为
真任务。有什么办法吗?

很简单。只需将另一个变量添加到您的
主机
like
pg_master_ip
,并将其用于您的
从属任务。yml
like

- name: Replicate data from Master
  command: repmgr -h {{ pg_master_ip }} -U repmgr -d repmgr -D /var/lib/postgresql/9.5/main -f /etc/repmgr.conf standby clone
  become: true
  become_user: postgres

您可以在不定义额外变量的情况下获取master(这容易导致复制粘贴错误):

json_查询说明:

* - take all values of current dictionary as a list
[?pg_master] - select only elements that evaluate pg_master key as true
[0].ansible_host - select ansible_host of the first element

直到现在才知道json_查询甚至是可能的。非常感谢。
* - take all values of current dictionary as a list
[?pg_master] - select only elements that evaluate pg_master key as true
[0].ansible_host - select ansible_host of the first element