Skip to main content

Ansible : Automatisation d'infrastructure sans agent

· 4 min read

Ansible est devenu un outil incontournable dans le monde DevOps pour l'automatisation des infrastructures. Sa simplicité d'utilisation et sa puissance en font une solution privilégiée pour déployer des configurations, orchestrer des systèmes et gérer l'infrastructure as code. 🚀

Qu'est-ce qu'Ansible ? 🤔

Ansible est un outil open-source d'automatisation qui simplifie la configuration des systèmes, le déploiement d'applications et l'orchestration des tâches. Contrairement à d'autres outils similaires, Ansible ne nécessite pas l'installation d'un agent sur les machines cibles, ce qui facilite grandement son adoption.

Les principaux avantages d'Ansible sont :

  • Simplicité : utilise YAML comme langage de description, facile à lire et à écrire
  • Sans agent : fonctionne via SSH, ne nécessitant rien sur les machines cibles
  • Idempotence : peut être exécuté plusieurs fois sans effet secondaire
  • Extensibilité : plus de 3000 modules disponibles pour interagir avec différents systèmes
  • Multi-plateforme : compatible avec Linux, macOS, Windows et de nombreux fournisseurs cloud

Architecture d'Ansible 🏗️

L'architecture d'Ansible est simple mais efficace :

  1. Machine de contrôle : où Ansible est installé et depuis laquelle les playbooks sont exécutés
  2. Inventaire : liste des hôtes à gérer, groupés logiquement
  3. Modules : unités de code exécutées sur les hôtes cibles
  4. Playbooks : fichiers YAML décrivant les tâches à effectuer
  5. Rôles : regroupements réutilisables de playbooks, variables et fichiers

La communication entre la machine de contrôle et les hôtes se fait généralement via SSH, ce qui élimine le besoin d'agents dédiés et simplifie la gestion.

Les concepts fondamentaux 📚

Inventaire

L'inventaire définit les machines cibles et permet de les organiser en groupes :

[webservers]
web1.example.com
web2.example.com

[databases]
db1.example.com
db2.example.com

[production:children]
webservers
databases

Playbooks

Les playbooks sont des fichiers YAML qui décrivent les tâches à exécuter sur les hôtes :

---
- name: Installer et configurer un serveur web
hosts: webservers
become: true # Équivalent de sudo
vars:
http_port: 80

tasks:
- name: Installer nginx
apt:
name: nginx
state: present
update_cache: yes

- name: Démarrer et activer le service nginx
service:
name: nginx
state: started
enabled: yes

Modules

Les modules sont les unités de travail d'Ansible. Voici quelques modules courants :

  • apt/yum/dnf : gestion des paquets
  • copy/template : transfert et génération de fichiers
  • service : gestion des services
  • user/group : gestion des utilisateurs et groupes
  • git : interaction avec les dépôts Git
  • file : manipulation de fichiers et répertoires

Rôles

Les rôles permettent d'organiser le code Ansible de manière modulaire et réutilisable :

roles/
common/
tasks/
main.yml
handlers/
main.yml
files/
templates/
vars/
main.yml
defaults/
main.yml
meta/
main.yml

Cas d'utilisation courants 🛠️

Ansible excelle dans de nombreux scénarios :

  1. Configuration de serveurs : installation et configuration cohérente de services
  2. Déploiement d'applications : processus de déploiement automatisés et reproductibles
  3. Gestion de la configuration : maintien de l'état souhaité des systèmes
  4. Orchestration : coordination d'actions complexes sur plusieurs systèmes
  5. Provisionnement cloud : création et configuration de ressources cloud

Installation et premiers pas 🚶‍♂️

L'installation d'Ansible est simple :

# Sur Debian/Ubuntu
sudo apt update
sudo apt install ansible

# Sur RHEL/CentOS
sudo dnf install ansible

# Via pip (recommandé pour les dernières versions)
pip install ansible

Une fois installé, vous pouvez vérifier votre installation :

ansible --version

Pour un test rapide, créez un fichier d'inventaire et testez la connectivité :

echo "localhost ansible_connection=local" > inventory
ansible -i inventory localhost -m ping

Ansible vs autres outils IaC 🥊

CaractéristiqueAnsiblePuppetChefTerraform
Agent requisNonOuiOuiNon
LangageYAMLDSLRubyHCL
Courbe d'apprentissageFacileMoyenneDifficileMoyenne
IdempotenceOuiOuiOuiOui
FocusConfig. managementConfig. managementConfig. managementProvisionnement
ModèleProcéduralDéclaratifProcéduralDéclaratif

Bonnes pratiques 👍

  1. Utiliser des rôles pour organiser et réutiliser le code
  2. Versionner les playbooks et l'inventaire avec Git
  3. Éviter les commandes shell brutes, préférer les modules natifs
  4. Utiliser les variables pour rendre les playbooks flexibles
  5. Tester avec --check avant d'exécuter réellement les changements
  6. Structurer logiquement l'inventaire en groupes et sous-groupes

Conclusion 🎯

Ansible est un outil puissant mais accessible qui peut considérablement améliorer l'efficacité des équipes DevOps et des administrateurs système. Sa simplicité, son absence d'agents et sa grande communauté en font un choix de prédilection pour l'automatisation d'infrastructure.

Ressources utiles 📖