Configuration management¶
Gérer la configuration avec Ansible — inventaire, playbooks, rôles, vault — et alternatives push vs pull.
Architecture Ansible¶
Ansible est un outil de configuration management agentless : pas de daemon a installer sur les machines gérées. La communication se fait via SSH (Linux) ou WinRM (Windows) depuis le control node.
Les composants¶
- Control node : la machine depuis laquelle Ansible s'exécuté. Nécessité Python.
- Managed nodes : les machines cibles. Nécessité uniquement SSH et Python.
- Inventaire : la liste des machines cibles et leurs groupes.
- Playbook : le fichier YAML qui décrit les opérations a exécuter.
- Rôle : unite de réutilisation qui regroupe tasks, handlers, templates, variables et fichiers.
graph TD
CN["Control Node"] -->|"SSH"| MN1["Managed Node 1"]
CN -->|"SSH"| MN2["Managed Node 2"]
CN -->|"SSH"| MN3["Managed Node 3"]
PB["Playbook"] --> CN
INV["Inventaire"] --> CN
PB --> R1["Role A"]
PB --> R2["Role B"]
R1 --> T["Tasks"]
T --> H["Handlers"] Inventaire¶
L'inventaire définit les machines cibles et leur organisation en groupes.
Inventaire statique (INI ou YAML)¶
[webservers]
web01.example.com
web02.example.com
[databases]
db01.example.com ansible_user=ubuntu
[production:children]
webservers
databases
Inventaire dynamique¶
Pour les environnements cloud ou les flottes variables, les inventaires dynamiques interrogent une API (AWS, Azure, GCP, Netbox…) au moment de l'exécution. Ansible fournit des plugins d'inventaire pour les principaux providers.
Inventaire dynamique = source de vérité unique
Avec un inventaire dynamique, l'inventaire Ansible reflete l'état réel de l'infrastructure en temps réel. Plus de synchronisation manuelle entre les VMs existantes et une liste statique.
Playbooks et bonnes pratiques¶
Un playbook est un fichier YAML qui définit une serie de plays. Chaque play cible un groupe de l'inventaire et exécuté une liste de tasks.
Structure recommandee¶
site.yml # playbook principal
roles/
webserver/
tasks/
main.yml
handlers/
main.yml
templates/
nginx.conf.j2
vars/
main.yml
defaults/
main.yml
group_vars/
webservers.yml
host_vars/
web01.yml
Bonnes pratiques¶
- Privilegier les modules natifs Ansible (
apt,yum,copy,template,service) aux commandes shell brutes — ils sont idempotents - Utiliser des tags pour exécuter uniquement des parties du playbook
- Séparer les vars (variables fixes) des defaults (valeurs par défaut surchargeable)
- Les handlers ne s'exécutent qu'une seule fois à la fin du play, même si notifies plusieurs fois
Ansible Vault pour les secrets
Ne jamais stocker de mot de passe, token ou clé en clair dans un playbook ou un fichier de variables. Ansible Vault chiffre les fichiers sensibles avec AES256. La clé de dechiffrement peut être fournie via une variable d'environnement en CI, sans jamais apparaître dans le code.
Push vs pull¶
| Critère | Push (Ansible, Salt SSH) | Pull (Puppet, Chef, Salt minion) |
|---|---|---|
| Architecture | Control node pousse vers les cibles | Chaque agent tire la configuration depuis un serveur |
| Agent | Aucun | Daemon sur chaque machine |
| Déclenchement | À la demande ou en CI/CD | Périodique (toutes les N minutes) |
| Scalabilité | Limite par la bande passante du control node | Meilleure — les agents se repartissent |
| Sécurité | SSH standard | Infrastructure PKI pour l'authentification des agents |
| Reconciliation automatique | Non — exécution explicite | Oui — convergence permanente |
Alternatives¶
| Outil | Approche | Avantage | Inconvénient |
|---|---|---|---|
| Ansible | Push, agentless, YAML | Simple, adoption large, zero agent | Performance à grande échelle, pas de reconciliation auto |
| Salt | Push et pull, Python | Rapide, evenementiel (reactor) | Complexité de setup, courbe d'apprentissage |
| Puppet | Pull, DSL propre | Maturité, audit et reporting natifs | Agent obligatoire, DSL spécifique |
| Chef | Pull, Ruby | Flexibilite, écosystème riche | Courbe Ruby, legacy |
Outils¶
| Outil | Description | Lien |
|---|---|---|
| Ansible | Configuration management agentless | ansible.com |
| Ansible Vault | Chiffrement des secrets dans les playbooks | Inclus avec Ansible |
| AWX / AAP | Interface web et API pour Ansible (open source / commercial) | github.com/ansible/awx |
| Molecule | Framework de test pour les rôles Ansible | molecule.readthedocs.io |