2016-05-18 6 views
7

Ich bin ein Neuling auf ansible und ich bin mit einem sehr einfachen Textbuch sudo apt-get update und sudo apt-get upgrade auf ein paar Servern zu erteilen.Wie man ansible_become_pass in einem Tresor speichert und wie man es benutzt?

Dies ist das Textbuch ich verwende:

--- 

- name: Update Servers 
    hosts: my-servers 
    become: yes 
    become_user: root 
    tasks: 
    - name: update packages 
     apt: update_cache=yes 

    - name: upgrade packages 
     apt: upgrade=dist 

und dies ist ein Auszug aus meiner ~/.ansible/inventory/hosts Datei:

[my-servers] 
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-francisco> 
san-diego  ansible_host=san-diego  ansible_ssh_user=user ansible_become_pass=<my_sudo_password_for_user_on_san-diego> 

Dies ist, was ich, wenn ich das Textbuch zu starten:

$ ansible-playbook update-servers-playbook.yml                                  

PLAY [Update Servers] ********************************************************** 

TASK [setup] ******************************************************************* 
ok: [san-francisco] 
ok: [san-diego] 

TASK [update packages] ********************************************************* 
ok: [san-francisco] 
ok: [san-diego] 

TASK [upgrade packages] ******************************************************** 
ok: [san-francisco] 
ok: [san-diego] 

PLAY RECAP ********************************************************************* 
san-francisco    : ok=3 changed=0 unreachable=0 failed=0 
san-diego     : ok=3 changed=0 unreachable=0 failed=0 

Was mich stört, ist die Tatsache, dass ich das Passwort für meine Benutzer user im Klartext in meiner ~/.ansible/inventory/hosts Datei gespeichert.

Ich habe über vaults gelesen, ich habe auch über die best practices for variables and vaults gelesen, aber ich verstehe nicht, wie man dies auf meinen sehr minimalen Anwendungsfall anwendet.

Ich habe auch versucht lookups zu verwenden. Während sie in der Regel arbeitet auch in der Inventardatei, und ich bin in der Lage, so etwas zu tun:

[my-servers] 
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass="{{ lookup('env', 'ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO') }}" 

wo dieser Fall das Passwort in einer Umgebungsvariablen ANSIBLE_BECOME_PASSWORD_SAN_FRANCISCO genannt gespeichert werden würde; Es gibt keine Möglichkeit, Variablen in Tresoren nachzuschlagen, soweit ich weiß.

Also, wie kann ich meine Datei so organisieren, dass ich irgendwo meine Passwörter zum Nachschlagen der Lage wäre und sie sicher gelagert?

Antwort

9

Sie müssen lediglich einige Gewölbe variable Dateien erstellen und dann entweder schließen Sie sie in Ihrem oder Spielbuch auf der Kommandozeile.

Wenn Sie Ihre Inventardatei ändern diese Variable eine Variable für die sich den Ball zu verwenden wölbt werden:

[my-servers] 
san-francisco ansible_host=san-francisco ansible_ssh_user=user ansible_become_pass='{{ sanfrancisco_become_pass }}' 
san-diego  ansible_host=san-diego  ansible_ssh_user=user ansible_become_pass='{{ sandiego_become_pass }}' 

Dann ansible-vault create vaulted_vars.yml verwenden eine gewölbte Datei mit folgendem Inhalt zu erstellen:

sanfrancisco_become_pass: <my_sudo_password_for_user_on_san-francisco> 
sandiego_become_pass : <my_sudo_password_for_user_on_san-diego> 

Dann schließen Sie die gewölbte Datei als zusätzliche Variablen ein:

Oder gehören die Vars-Datei in Ihrem Textbuch mit einer include_vars Aufgabe:

- name  : include vaulted variables 
    include_vars: ~/.ansible/inventory/vault_vars 
+0

Dank! Ich habe die erste Lösung getestet (Angabe der Vault-Datei über die Befehlszeile als Option) und es funktioniert! Ich habe für andere darauf hin, die Aufmerksamkeit auf die '@' Zeichen zu zahlen, in der Tat der Dokumentation von 'ansible-playbook' sagt für die' -e' Option: «Um Variablen aus einer Datei zu laden, um die Datei voraus angeben, indem Sie @ (zB @ vars.yml). » – CristianCantoro