Aller au contenu

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