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

时间:2017-06-02 08:25:40

标签: 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:vars]
ansible_python_interpreter=/usr/bin/python3

因此,在我的奴隶任务中,只有奴隶运行,我想得到唯一的主人的IP。

从属tasks.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

我想在这里添加when,但主人不会点击slave-tasks.yml所以它永远不会成为True。有关如何管理这个的想法吗?

2 个答案:

答案 0 :(得分:3)

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

- name: Replicate data from Master
  command: repmgr -h {{ master_ip }} -U repmgr -d repmgr -D /var/lib/postgresql/9.5/main -f /etc/repmgr.conf standby clone
  become: true
  become_user: postgres
  vars:
    master_ip: "{{ hostvars | json_query('* | [?pg_master] | [0].ansible_host') }}"

json_query解释说:

* - 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

答案 1 :(得分:1)

这很简单。只需将另一个变量添加到hosts,例如pg_master_ip,并使用主人的IP,并在slave-tasks.yml中使用

- 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