# Tutoriel Ansible Vault - Pas à Pas
## Étape 1 : Préparation de l'environnement
Créons d'abord une structure simple :
```
mon-projet/
├── ansible.cfg
├── inventory
│ └── hosts
└── deploy.yml
```
1. Créez le fichier `ansible.cfg` :
```ini
[defaults]
inventory = inventory/hosts
```
2. Créez le fichier `inventory/hosts` :
```ini
[webservers]
monserveur ansible_host=node1
```
## Étape 2 : Premier Fichier Vault
1. Créons notre premier fichier chiffré :
```bash
# Création d'un fichier vault pour stocker nos secrets
ansible-vault create secrets.yml
```
2. Ansible vous demandera un mot de passe. Entrez-en un simple pour ce tutoriel (par exemple : 'monmotdepasse')
3. Un éditeur s'ouvrira. Ajoutez ces lignes :
```yaml
---
db_password: MonSuperMotDePasse123
api_key: cle_secrete_123
```
4. Sauvegardez et quittez l'éditeur
## Étape 3 : Utilisation basique
1. Créez un playbook simple `deploy.yml` :
```yaml
---
- name: Test des variables vault
hosts: webservers
vars_files:
- secrets.yml
tasks:
- name: Afficher une variable secrète
debug:
msg: "La clé API est : {{ api_key }}"
```
2. Exécutez le playbook :
```bash
# L'option --ask-vault-pass demandera le mot de passe
ansible-playbook deploy.yml --ask-vault-pass
```
## Étape 4 : Manipulation du Fichier Vault
Voici les commandes de base pour manipuler un fichier vault :
1. Voir le contenu :
```bash
ansible-vault view secrets.yml
```
2. Modifier le contenu :
```bash
ansible-vault edit secrets.yml
```
3. Changer le mot de passe :
```bash
ansible-vault rekey secrets.yml
```
## Étape 5 : Utilisation d'un Fichier de Mot de Passe
1. Créez un fichier pour stocker le mot de passe :
```bash
echo "monmotdepasse" > .vault_pass
chmod 600 .vault_pass
```
2. Modifiez `ansible.cfg` pour utiliser ce fichier :
```ini
[defaults]
inventory = inventory/hosts
vault_password_file = .vault_pass
```
3. Maintenant vous pouvez exécuter sans saisir le mot de passe :
```bash
ansible-playbook deploy.yml
```
⚠️ NOTE : Ne committez jamais le fichier .vault_pass dans git !
## Étape 6 : Organisation avec group_vars
1. Créez une meilleure structure :
```
mon-projet/
├── ansible.cfg
├── inventory/
│ ├── group_vars/
│ │ └── webservers/
│ │ ├── vars.yml # Variables non-sensibles
│ │ └── vault.yml # Variables sensibles
│ └── hosts
└── deploy.yml
```
2. Dans `inventory/group_vars/webservers/vars.yml` (non chiffré) :
```yaml
---
app_name: mon_application
app_port: 8080
```
3. Dans `inventory/group_vars/webservers/vault.yml` (à chiffrer) :
```yaml
---
vault_db_password: MonSuperMotDePasse123
vault_api_key: cle_secrete_123
```
4. Chiffrez le fichier vault :
```bash
ansible-vault encrypt inventory/group_vars/webservers/vault.yml
```
## Étape 7 : Bonnes Pratiques de Variables
1. Modifiez `inventory/group_vars/webservers/vars.yml` pour utiliser les variables vault de manière indirecte :
```yaml
---
app_name: mon_application
app_port: 8080
# Référence aux variables vault
db_password: "{{ vault_db_password }}"
api_key: "{{ vault_api_key }}"
```
2. Modifiez votre playbook pour utiliser ces variables :
```yaml
---
- name: Configuration application
hosts: webservers
tasks:
- name: Configurer l'application
debug:
msg: "Configuration avec {{ app_name }} sur le port {{ app_port }} avec la clé API {{ api_key }}"
```
## Exercices Pratiques
1. **Exercice Simple**
- Créez un nouveau fichier vault nommé `database_creds.yml`
- Ajoutez-y un utilisateur et mot de passe de base de données
- Créez un playbook qui affiche ces informations
2. **Exercice Intermédiaire**
- Organisez vos variables sensibles dans group_vars
- Créez des variables de référence dans vars.yml
- Utilisez ces variables dans un playbook