2017-06-02 5 views
3

Ich möchte die IP eines bestimmten Hosts in meinem Inventar basierend auf den Variablen erhalten, die es hat.Wie bekomme ich eine Host IP basierend auf Variablen?

Gastgeber

[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 

Also in meinen Slave-Aufgaben, die nur für Sklaven laufen, würde Ich mag die IP des einzigen Master gegeben bekommen.

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

Ich dachte an einen when hier hinzufügen, aber der Master den slave-tasks.yml so wird es nie True werden nicht getroffen. Irgendwelche Ideen, wie man das schafft?

Antwort

3

Sie Master holen können zusätzliche Variable, ohne zu definieren (die zu kopier Einfügen fehleranfällig ist):

- 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 erklärt:

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

nicht wusste bis jetzt json_querys noch möglich sind. Vielen Dank! – Thomas

1

Es ist einfach. Fügen Sie einfach eine andere Variable zu Ihrem hosts wie pg_master_ip mit der IP-Adresse des Master und verwenden Sie es in Ihrem slave-tasks.yml wie

- 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 
Verwandte Themen