2017-06-02 53 views
3

我想根據它所擁有的變量來獲取庫存中給定主機的IP。如何根據變量獲取其他主機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。任何想法如何管理?

回答

3

您可以獲取主沒有定義額外的變量(這是容易的複製粘貼錯誤):

- 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 
+0

不知道到現在爲止json_querys甚至可能。謝謝! – Thomas

1

很簡單。只是另一個變量添加到您的hostspg_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