我想基于它拥有的变量获取我的库存中的给定主机的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
。有关如何管理这个的想法吗?
答案 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