2016-06-20 10 views
1

Neu bei Ansible, Laufversion 2.1.0. Ich habe ein Ansible-Playbook geschrieben, das eine PostgreSQL-Abfrage für eine Gruppe von Hosts ausführt. Wenn ich das SQL-DB-Passwort im Shell-Kommando anführe, funktioniert es, aber ich suche das Playbook gegen eine Gruppe von Hosts und brauche eine bessere Möglichkeit, die Passwörter einzugeben, da sie alle eindeutig sind. Könnte jemand einen besseren Weg vorschlagen, dies zu tun?Geben Sie die PostgreSQL-Passwörter in Ansible Playbook ein.

--- 

- hosts: Test_Hosts  
    sudo: yes  
    sudo_user: root  
    gather_facts: yes 
    tasks:  
    - name: Login to DB and run command  
    shell: export PGPASSWORD='Password'; psql -U 'user' -d 'db' -c 'select * FROM table'; 
    register: select_all_from_table 

    - name: Display table contents  
    debug: msg="{{ select_all_from_table.stdout }}" 

sah ich einen anderen Thread zu dem Thema aber war nicht sicher, wie den Vorschlag umzusetzen: Run a postgresql command with ansible playbook. Postgresql requires password

Antwort

3

ansible Sie Umgebungsvariablen für eine Aufgabe mit der environment parameter jeder Aufgabe festlegen können.

in Ihrem Fall So konnte man dies nur tun:

- name: Login to DB and run command  
    shell: export PGPASSWORD='Password'; psql -U 'user' -d 'db' -c 'select * FROM table'; 
    register: select_all_from_table 
    environment: 
     PGPASSWORD: '{{ pgpassword }}' 

und dann die pgpassword Variable am group oder host Ebene.

+0

Vielen Dank für Ihre Antwort, ich werde t ry deinen Vorschlag. – Sysadmin1234

0

Ich bin gerade in diese Ausgabe heute gerannt und das ist, was für mich gearbeitet hat. Unter Linux können Sie alle Anmeldeinformationen in eine versteckte Datei ~/.pgpass packen.

Erstellen Sie es einfach lokal (in diesem Fall in ./files/pgpass) und verwenden Sie dann ansible, um es auf den Host zu kopieren, bevor Sie die psql-Befehle ausführen.

- name: set passwd file for PSQL 
    copy: 
    src: files/pgpass 
    dest: ~/.pgpass 
    mode: 0600   ### important: will not work with wrong permissions 

- name: PSQL command 
    shell: "psql -U 'user' -d 'db' -c 'select * FROM table'" 
    register: select_all_from_table 

Der Inhalt der Datei in folgendem Format sein müssen:

hostname:port:database:username:password 

Allerdings können Sie Platzhalter verwenden, so meins sieht wie folgt aus, zum Beispiel:

*:*:db1:user1:passwd1 
*:*:db2:user2:passwd2 

siehe Dokumentation mehr Details: https://www.postgresql.org/docs/9.1/static/libpq-pgpass.html