Executer un playbook avec Vault
# Demander le mot de passe interactivement
ansible-playbook site.yml --ask-vault-pass
# Utiliser un fichier de mot de passe
ansible-playbook site.yml --vault-password-file ~/.vault_pass.txt
# Le fichier contient uniquement le mot de passe
echo "MonMotDePasseVault" > ~/.vault_pass.txt
chmod 600 ~/.vault_pass.txt
Configurer le mot de passe dans ansible.cfg
# ansible.cfg
[defaults]
vault_password_file = ~/.vault_pass.txt
# Avec cette config, plus besoin de --ask-vault-pass
ansible-playbook site.yml
Vault IDs : multiples mots de passe
# Chiffrer avec un ID specifique
ansible-vault encrypt --vault-id prod@~/.vault_prod.txt secrets-prod.yml
ansible-vault encrypt --vault-id dev@~/.vault_dev.txt secrets-dev.yml
# Executer avec plusieurs vault IDs
ansible-playbook site.yml \
--vault-id prod@~/.vault_prod.txt \
--vault-id dev@~/.vault_dev.txt
Exemple complet avec Vault
# Structure du projet
project/
ansible.cfg
inventory/hosts
vars/
common.yml # Variables non sensibles
secrets.yml # Variables chiffrees avec Vault
playbooks/
deploy.yml
# vars/common.yml
app_name: myapp
app_port: 8080
db_host: db.example.com
# vars/secrets.yml (chiffre)
db_password: "SuperSecret123!"
api_key: "sk-abc123def456"
# playbooks/deploy.yml
---
- name: Deployer l'application
hosts: webservers
become: yes
vars_files:
- ../vars/common.yml
- ../vars/secrets.yml
tasks:
- name: Deployer la config avec les secrets
template:
src: templates/app.conf.j2
dest: /etc/myapp/app.conf
mode: "0600"
# templates/app.conf.j2
[database]
host = {{ db_host }}
password = {{ db_password }}
[api]
key = {{ api_key }}
Bonne pratique : Separez les variables sensibles (chiffrees) des variables normales dans des fichiers distincts. Ajoutez le fichier vault_pass.txt au .gitignore.