Gestion de configuration en 2026 : Ansible, Puppet, Chef ou Salt ?
La gestion de configuration est un pilier fondamental de l'infrastructure moderne. En 2026, malgré l'émergence de conteneurs et d'infrastructure immuable, les outils de configuration restent essentiels pour les environnements existants, les systèmes critiques et les déploiements hybrides.
Mais quelle est la meilleure approche ? Ansible, Puppet, Chef ou Salt ? Chacun offre une philosophie différente, une courbe d'apprentissage distincte et des forces particulières. Cet article vous aide à naviguer ce paysage fragmenté et à faire un choix pragmatique adapté à votre contexte.
Plan de l'article
- Le problème du configuration drift — Pourquoi cela demeure critique en 2026
- Ansible : l'agentless pragmatique — Architecture, force et pièges
- Puppet : le déclaratif enterprise — Rigueur et courbe d'apprentissage
- Chef : l'approche code — Ruby, flexibilité et complexité
- Salt : le rapide et polyvalent — Puissance brute et performance
- Comparatif détaillé — Table synthétique et pondération
- Ansible en pratique — Inventory, playbooks, roles et vault
- Intégration CI/CD — GitOps for config et détection de drift automatisée
- Tendances 2026 — Policy-as-Code, immutable infrastructure et Kubernetes
- Perspectives complémentaires — Articles liés et compléments
- Sources et ressources
- Conclusion — Choosing pragmatically
Le problème du configuration drift
Qu'est-ce que le configuration drift ?
Un snowflake server est un serveur modifié manuellement, session par session, patch par patch. Zéro documentation, zéro reproductibilité. Quand il tombe en panne, on l'appelle l'administrateur qui s'en occupait, qui est parfois absent.
Le configuration drift c'est quand l'état réel de votre infrastructure diverge de votre définition attendue :
État attendu : Apache 2.4.52 + SSL TLS 1.3
État réel : Apache 2.4.47 + SSL TLS 1.2 (patch manuel non documenté)
En 2026, ceci reste un cauchemar :
- Compliance et audit : Vous ne pouvez pas prouver l'état de vos systèmes
- Incident response : Chaque serveur est une énigme
- Scalabilité : Ajouter 50 serveurs manuellement = 50 configurations différentes
- Sécurité : Des vulnérabilités imprévues car vous ne savez pas ce qui s'exécute réellement
Les outils de gestion de configuration résolvent ce problème en déclarant « voici l'état idéal, maintiens-le ». La mécanique varie (agentless vs agent, push vs pull, impératif vs déclaratif), mais l'objectif demeure constant.
Ansible : l'agentless pragmatique
Architecture
Ansible est agentless : pas de daemon permanent sur les nœuds. Chaque exécution SSH ouvre une connexion, pousse un playbook, l'exécute via Python, et ferme la connexion.
Flux simplifié :
- Contrôleur Ansible → SSH sur
inventory_host - Python bootstrap et exécution des tâches
- Résultat retourné en JSON
- Fermeture SSH
Force principales
- Zéro friction d'adoption : YAML + SSH = pas de préalable alien
- Bas overhead : Pas d'agent à gérer, pas de daemon, pas de base de données centralisée obligatoire
- Idempotence garantie : Chaque module est écrit pour l'être
- Python standardisé : Présent sur 99% des systèmes Unix/Linux
- Utilisé par des scale-ups et des grands groupes (Red Hat supporte Ansible, community massif)
Points faibles
- Perte de performance à scale massive : 200+ nœuds simultanés → séquençage et attentes
- Langage YAML limité : Pas de vraie programmation, jinja2 templates ≠ Ruby/DSL
- Gestion des secrets basique : Vault fonctionne mais interface moins intégrée qu'avec Puppet
- Peu de rigueur d'architecture : Facile de créer du spaghetti playbook
- Convergence moins intelligente : Redémarrage au lieu d'orchestration fine
Meilleur pour
- Environnements sans expertise DevOps antérieure
- Migration rapide depuis configuration manuelle
- Automatisation légère et ponctuelle (déploiement, patch)
- Équipes IT classiques (sysadmins) plutôt que dev
Puppet : le déclaratif enterprise
Architecture
Puppet utilise un agent-pull model : chaque nœud exécute un agent daemon qui interroge un serveur Puppet central (puppet-server) à intervalles réguliers.
Flux :
- Agent Puppet s'exécute localement (par cron ou daemon continu)
- Agent requête le puppet-server : « Donne-moi mon catalogue »
- Puppet-server compile le code Puppet → catalogue JSON
- Agent applique le catalogue localement
- Résultat envoyé au server (optionnel, pour rapports)
Force principales
- Déclaratif pur : Code Puppet décrit l'état, pas les étapes
- Enterprise-ready : RBAC, rapports, audit trail, compliance reporting
- Langage turing-complet : Variables, boucles, conditionnels
- Gestion des secrets robuste : Puppet Vault, Hiera avec backend chiffré
- Écosystème large : Puppet Forge a des milliers de modules officiels
- Scalabilité éprouvée : Netflix, Booking, Twitter tournent sur Puppet depuis 10+ ans
Points faibles
- Courbe d'apprentissage raide : Puppet DSL est un langage propriétaire
- Overhead agent : Chaque nœud exécute un Ruby daemon
- Debugging difficile : Erreurs Puppet DSL cryptiques
- Coût commercial : Version open-source (Puppet Community) vs Puppet Enterprise (payant)
- Syntaxe indigeste :
Package { 'apache2': ensure => present }vs Ansiblename: apache2 state: present
Meilleur pour
- Grandes organisations avec équipes DevOps dédiées
- Infrastructure très hétérogène (centaines de serveurs, configs variées)
- Conformité réglementaire stricte (finance, santé)
- Besoin de rapports centralisés et audit trail
- Serveurs long-lived (cattle vs pets)
Chef : l'approche code
Architecture
Chef utilise également un pull model (Chef Client daemon) mais l'approche est radicalement différente : tout est du Ruby code. Un « cookbook » Chef est un artefact versionné contenant des « recipes ».
Flux :
- Chef Client s'exécute localement
- Client se connecte à Chef Server
- Chef Server envoie les recipes et data bags
- Client exécute les recipes (Ruby) en séquence
- Résultat envoyé à Chef Server
Force principales
- Flexibilité totale : C'est du Ruby, on peut tout faire
- Infrastructure-as-Code vrai : Code versionné, testable, reviewable
- Intégration DevOps naturelle : Philosophie "code first"
- InSpec intégré : Testing et compliance-as-code dans la même plateforme
- Communauté développeurs : Des ressources pour les infra-as-code hardcore
Points faibles
- Courbe d'apprentissage haute : Ruby + concepts Chef (attributes, notifications, guards)
- Surengineering facile : Trop de puissance mène à du code compliqué et peu maintenable
- Performance : Ruby est plus lent que Python (Ansible) ou Go (Salt)
- Coût : Chef Enterprise est payant, support limité en Community
- Moins de modules officiels : Community moins grande qu'Ansible ou Puppet
Meilleur pour
- Organisations avec forte culture DevOps et développeurs infrastructure
- Besoin de logique conditionnelle complexe
- Compliance-as-Code (InSpec)
- Déploiements application-centric (base de Chef)
Salt : le rapide et polyvalent
Architecture
Salt est un push model (par défaut) mais offre aussi un pull model optionnel. Salt utilise ZeroMQ (réseau asynchrone haute performance) et un minion daemon léger sur chaque nœud.
Flux (push) :
- Master Salt requête les minions via ZeroMQ
- Minions exécutent les états (states) ou commandes
- Résultat retourné en temps quasi-réel
- Master orchestre ensuite (optional)
Force principales
- Exécution ultra-rapide : ZeroMQ vs SSH = temps de réponse millisecondes
- Polyvalent : Parfait pour remote execution, pas juste CM
- Scalabilité éprouvée : Peut gérer 10 000+ minions
- YAML + Jinja2 : Syntax proche d'Ansible, apprentissage facile
- Event-driven : Peut réagir à des événements (watch, beacon)
- Orchestration intégrée : Runners permettent multi-step, orchestration complexe
Points faibles
- Minion daemon à gérer : Overhead vs agentless
- Syntaxe moins intuitive : States/Pillars concept moins évident
- Documentation fragmentée : Grande surface d'API, moins de tutoriels
- Communauté plus petite : Moins de modules community
- Ecosystem professionnel moins mature : Salt Enterprise existe mais moins adopté que Puppet Enterprise
Meilleur pour
- Environnements où performance est critique (1000+ nœuds)
- Organisations avec besoin de remote execution ad-hoc + configuration
- Event-driven infrastructure
- Équipes ayant déjà de l'expérience avec Ansible et voulant la performance
Comparatif détaillé
| Critère | Ansible | Puppet | Chef | Salt |
| Architecture | Agentless (SSH) | Pull (agent daemon) | Pull (agent daemon) | Push (ZeroMQ minion) |
| Langage | YAML + Jinja2 | Puppet DSL | Ruby | YAML + Jinja2 |
| Courbe apprentissage | Très faible | Haute | Moyenne-haute | Moyenne |
| Scalabilité | Bonne (< 1000) | Excellente | Bonne | Excellente |
| Performance (latence) | Moyenne (SSH overhead) | Bonne (local) | Bonne (local) | Excellente (ZeroMQ) |
| Écosystème modules | Gigantesque | Très large | Large | Moyen |
| Debugging | Facile | Difficile | Moyen | Moyen |
| Enterprise support | Red Hat Ansible | Puppet Enterprise | Chef Enterprise | Salt Enterprise (limité) |
| Coût TCO | Très bas | Moyen-haut | Moyen-haut | Bas |
| Meilleur pour | PME, migration rapide, ops simple | Enterprise, compliance, scale | Infra-as-Code, compliance | Performance, event-driven |
Ansible en pratique
1. Inventory
# inventory.yml
all:
children:
webservers:
hosts:
web1.example.com:
ansible_user: ubuntu
environment: production
web2.example.com:
ansible_user: ubuntu
environment: production
databases:
hosts:
db1.example.com:
ansible_user: ubuntu
2. Playbook simple
# playbooks/deploy-apache.yml
---
- name: Deploy and configure Apache
hosts: webservers
become: yes
tasks:
- name: Update package cache
apt:
update_cache: yes
when: ansible_os_family == "Debian"
- name: Install Apache2
package:
name: apache2
state: present
- name: Copy config from template
template:
src: apache-vhost.j2
dest: /etc/apache2/sites-available/default-ssl.conf
backup: yes
notify: restart apache
- name: Enable SSL module
community.general.apache2_module:
name: ssl
state: present
notify: restart apache
handlers:
- name: restart apache
service:
name: apache2
state: restarted
3. Roles et structure
roles/
webserver/
tasks/
main.yml # Tâches principales
handlers/
main.yml # Handlers (notifications)
templates/
vhost.j2 # Templates Jinja2
files/
ssl-cert.pem # Fichiers statiques
vars/
main.yml # Variables
defaults/
main.yml # Variables par défaut
4. Idempotence et Vault
# Vault pour les secrets
$ ansible-vault create group_vars/webservers/vault.yml
# Chiffré avec passphrase
# Dans le playbook
- name: Configure database credentials
copy:
content: |
DB_HOST={{ db_host }}
DB_USER={{ vault_db_user }}
DB_PASS={{ vault_db_password }}
dest: /app/.env
mode: '0600'
L'idempotence = exécuter le playbook 100 fois = même résultat qu'une seule exécution. Chaque module Ansible (apt, copy, template, service) est conçu pour cela.
Intégration CI/CD et détection de drift
GitOps for configuration
# .github/workflows/config-deploy.yml
name: Config deploy
on:
push:
branches: [main]
paths: ['playbooks/**', 'inventory/**']
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: ansible/ansible-lint-action@master
with:
targets: playbooks/
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
pip install ansible ansible-core molecule
molecule test # Test les roles Ansible
deploy:
needs: [lint, test]
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v4
- run: |
ansible-playbook -i inventory.yml playbooks/deploy.yml
Détection de drift automatisée
#!/bin/bash
# check-drift.sh
REPORT_FILE="/tmp/drift-report-$(date +%Y%m%d).txt"
ansible all -i inventory.yml \
--check \
--diff > "$REPORT_FILE" 2>&1
if grep -q "changed" "$REPORT_FILE"; then
echo "Configuration drift detected!"
cat "$REPORT_FILE"
exit 1
fi
echo "No drift detected. All systems in expected state."
Exécuté quotidiennement en cronjob, cela vous alerte si un serveur diverge.
Tendances 2026 et évolutions
Policy-as-Code avec OPA/Rego
# policies/enforce-tls.rego
package config.enforcement
deny[msg] {
input.service.tls_version < "1.3"
msg := sprintf("TLS version %s below minimum 1.3", [input.service.tls_version])
}
deny[msg] {
input.service.certificate_validity < 90
msg := sprintf("Certificate expires in %d days, below minimum 90", [input.service.certificate_validity])
}
Policy-as-Code émerge comme couche au-dessus de la CM : avant d'appliquer une config, on la valide contre des politiques centrales.
Infrastructure immuable réduisant le besoin de CM
Conteneurs et immutable deployments (Kubernetes, Nomad) réduisent le besoin de CM continue. Au lieu de modifier, on redéploie l'image.
# Au lieu de CM, on bake l'image
FROM ubuntu:24.04
RUN apt-get update && apt-get install -y apache2 openssl
COPY ./ssl-cert.pem /etc/ssl/certs/
COPY ./vhost.conf /etc/apache2/sites-available/
Mais : Infrastructure hybride (VM + conteneurs), serverless + on-prem = CM toujours critique.
Kubernetes ConfigMaps et Secrets
Sur Kubernetes, CM = ConfigMaps + Secrets, pas Ansible/Puppet. Mais sur les nœuds workers, la CM traditionnelle s'applique encore (OS-level, network, storage).
Perspectives complémentaires
Pour approfondir les sujets abordés :
- Automatiser sa configuration avec Ansible — Deep dive sur Ansible dans un contexte entreprise
- Ansible Galaxy et ses 10 000 roles — Réutiliser la communauté
- Infrastructure-as-Code avec Terraform — Terraform vs CM, différences et complémentarité
- Terraform + Ansible : orchestration complète — Combiner provisioning et configuration
- AWX : orchestration Ansible en web UI — Ansible Tower gratuit (AWX) pour les équipes
Sources et ressources
- Ansible Documentation Officielle (2026) — https://docs.ansible.com
- Puppet Labs — Best Practices — https://puppet.com/docs
- Chef Documentation — https://docs.chef.io
- Salt Project — State System — https://docs.saltproject.io/en/latest/ref/states/
- Linux Academy / A Cloud Guru — Configuration Management Courses
- SANS/NIST — Secure Configuration Management Guidelines
- "Infrastructure as Code" - Kief Morris (O'Reilly) — Reference architecture comparisons
- RedHat & Ansible Community Blogs — Latest trends in automation
Conclusion
En 2026, Ansible demeure le choix pragmatique par défaut pour 80% des organisations : faible friction, courbe d'apprentissage douce, écosystème massif.
Puppet s'impose pour large scale, compliance strict, et équipes DevOps rodées. Chef excelle dans la philosophie code-first pour infra as code hardcore. Salt brille quand performance ultrarapide et orchestration event-driven sont critiques.
Chez SHPV, nous opérons sur une infrastructure backbone AS41652 150 Gbps avec 500+ peerings directs. La gestion de configuration est fondamentale pour maintenir notre SLA 99.9%+ : déploiement cohérent d'IDS, firewall policies, monitoring templates, et patches de sécurité sur 3 datacenters français sans configuration drift. Ansible nous permet cette automatisation en minimisant la friction opérationnelle.
Votre choix dépend de vos réponses à :
- Quelle est votre échelle : 10 serveurs ou 1000+ ?
- Avez-vous une équipe DevOps ou des sysadmins classiques ?
- Conformité critique ou infrastructure simple ?
- Budget pour outils commerciaux ?
Testez sur 3-5 serveurs de test, mesurez temps de déploiement et satisfaction équipe. Le meilleur outil est celui que votre équipe maîtrisera et maintiendra.
Vous avez des questions sur Ansible ou la gestion de configuration en production ? Rendez-vous avec nos experts infogérance.


