DevOps
Infrastructure

Gestion de configuration en 2026 : Ansible, Puppet, Chef ou Salt ?

20 février 2026

12 min de lecture

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

  1. Le problème du configuration drift — Pourquoi cela demeure critique en 2026
  2. Ansible : l'agentless pragmatique — Architecture, force et pièges
  3. Puppet : le déclaratif enterprise — Rigueur et courbe d'apprentissage
  4. Chef : l'approche code — Ruby, flexibilité et complexité
  5. Salt : le rapide et polyvalent — Puissance brute et performance
  6. Comparatif détaillé — Table synthétique et pondération
  7. Ansible en pratique — Inventory, playbooks, roles et vault
  8. Intégration CI/CD — GitOps for config et détection de drift automatisée
  9. Tendances 2026 — Policy-as-Code, immutable infrastructure et Kubernetes
  10. Perspectives complémentaires — Articles liés et compléments
  11. Sources et ressources
  12. 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é :

  1. Contrôleur Ansible → SSH sur inventory_host
  2. Python bootstrap et exécution des tâches
  3. Résultat retourné en JSON
  4. 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 :

  1. Agent Puppet s'exécute localement (par cron ou daemon continu)
  2. Agent requête le puppet-server : « Donne-moi mon catalogue »
  3. Puppet-server compile le code Puppet → catalogue JSON
  4. Agent applique le catalogue localement
  5. 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 Ansible name: 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 :

  1. Chef Client s'exécute localement
  2. Client se connecte à Chef Server
  3. Chef Server envoie les recipes et data bags
  4. Client exécute les recipes (Ruby) en séquence
  5. 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) :

  1. Master Salt requête les minions via ZeroMQ
  2. Minions exécutent les états (states) ou commandes
  3. Résultat retourné en temps quasi-réel
  4. 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èreAnsiblePuppetChefSalt
ArchitectureAgentless (SSH)Pull (agent daemon)Pull (agent daemon)Push (ZeroMQ minion)
LangageYAML + Jinja2Puppet DSLRubyYAML + Jinja2
Courbe apprentissageTrès faibleHauteMoyenne-hauteMoyenne
ScalabilitéBonne (< 1000)ExcellenteBonneExcellente
Performance (latence)Moyenne (SSH overhead)Bonne (local)Bonne (local)Excellente (ZeroMQ)
Écosystème modulesGigantesqueTrès largeLargeMoyen
DebuggingFacileDifficileMoyenMoyen
Enterprise supportRed Hat AnsiblePuppet EnterpriseChef EnterpriseSalt Enterprise (limité)
Coût TCOTrès basMoyen-hautMoyen-hautBas
Meilleur pourPME, migration rapide, ops simpleEnterprise, compliance, scaleInfra-as-Code, compliancePerformance, 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 :


Sources et ressources


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 à :

  1. Quelle est votre échelle : 10 serveurs ou 1000+ ?
  2. Avez-vous une équipe DevOps ou des sysadmins classiques ?
  3. Conformité critique ou infrastructure simple ?
  4. 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.

Besoin d'aide sur ce sujet ?

Notre équipe d'experts est là pour vous accompagner dans vos projets d'infrastructure et d'infogérance.

Contactez-nous

Articles similaires