Ich bin neu bei Ansible und habe Probleme mit Ansible-Tresoren in Kombination mit Inventar-Dateien.Wie können Passwörter in verschlüsselten vars-Dateien (Vault) in Ansible-Inventar verwendet werden?
Was ich erreichen möchte, ist ein Playbook, das drei Maschinen aktualisiert. Zwei dieser Maschinen benötigen ein Passwort (für sudo
), damit ich root werden kann.
Also hier ist mein Textbuch ...
---
- name: update all hosts, make sure default software is installed
hosts:
- vhosts
- physical
vars_files:
- 'vars/main.yml'
tasks:
- name: Update apt cache
apt: update_cache=yes
- name: Upgrade packages
apt: upgrade=dist
... und das ist mein Inventar (Dateiname inventory
) mit Passwörtern immer noch im Klartext:
[vhosts]
10.0.0.1 ansible_user=root
[physical]
10.0.0.200 ansible_user=xxx ansible_become=yes ansible_become_method=sudo ansible_become_pass=secretpassword1
10.0.0.201 ansible_user=yyy ansible_become=yes ansible_become_method=sudo ansible_become_pass=secretpassword2
Dies funktioniert gut.
Aus dem Grund möchte ich secretpassword1
oder secretpassword2
im Inventar nicht. Also habe ich ein Depot (gespeichert in Datei vars/main.yml
, die so aussieht:
---
- vars:
pass1:secretpassword1
pass2:secretpassword2
Und änderte ich die Inventardatei dazu:
[vhosts]
10.0.0.1 ansible_user=root
[physical]
10.0.0.200 ansible_user=xxx ansible_become=yes ansible_become_method=sudo ansible_become_pass="{{ pass1 }}"
10.0.0.201 ansible_user=yyy ansible_become=yes ansible_become_method=sudo ansible_become_pass="{{ pass2 }}"
Nun, wenn ich versuche, die Güte mit ansible-playbook update.yml -i inventory --ask-vault-pass
auszuführen I erhalten folgende Fehler:
fatal: [10.0.0.200]: FAILED! => {"msg": "The field 'become_pass' has an invalid value, which includes an undefined variable. The error was: 'pass1' is undefined\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'pass1' is undefined"}
fatal: [10.0.0.201]: FAILED! => {"msg": "The field 'become_pass' has an invalid value, which includes an undefined variable. The error was: 'pass2' is undefined\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'pass2' is undefined"}
Es scheint, als ob ich nicht in der Lage war, meine Variablen richtig zu definieren, aber ich habe absolut keine Ahnung, wie dies zu tun ist, wenn jemand mir geben konnte.. eine Hand würde ich super glücklich sein. Vielen Dank.