Introduction
Ansible est un outil open-source d'automatisation IT qui permet de configurer, déployer et orchestrer des infrastructures sans agent, via SSH. Contrairement à des outils comme Puppet ou Chef qui nécessitent des agents, Ansible utilise des playbooks en YAML déclaratifs, rendant l'automatisation accessible même aux débutants.
Pourquoi l'adopter en 2026 ? Avec la montée des clouds hybrides et Kubernetes, Ansible excelle dans la gestion idempotente : exécutez un playbook plusieurs fois, le résultat reste identique. Il gère des milliers de serveurs en parallèle, réduit les erreurs humaines et accélère les déploiements. Ce tutoriel vous guide pas à pas pour installer Ansible, créer un inventory, exécuter des playbooks simples (ping, installation de paquets) et utiliser des variables. À la fin, vous automatiserez vos premiers serveurs Linux comme un pro. (142 mots)
Prérequis
- Système Linux ou macOS (Ubuntu/Debian recommandé)
- Python 3.9+ installé
- Accès SSH aux machines cibles (utilisateur avec sudo sans mot de passe idéalement)
- Une machine cible pour tester (VM VirtualBox ou VPS)
- Connaissances basiques en ligne de commande
Installer Ansible
#!/bin/bash
# Mise à jour des paquets (Ubuntu/Debian)
sudo apt update
sudo apt upgrade -y
# Installation d'Ansible via pip (méthode recommandée pour la dernière version)
sudo apt install software-properties-common -y
sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt update
sudo apt install ansible -y
# Vérification de l'installation
ansible --versionCe script installe Ansible sur Ubuntu/Debian via le PPA officiel pour la version stable la plus récente. Utilisez pip si vous préférez une version développement : pip install ansible. Vérifiez toujours la version pour confirmer (ex: ansible 2.16+). Évitez snap qui pose des problèmes SSH.
Configurer l'inventory
L'inventory définit les hôtes cibles. C'est un fichier simple listant IP ou noms d'hôtes, groupés logiquement. Ansible utilise par défaut /etc/ansible/hosts, mais créez-en un local pour vos tests.
Créer le fichier inventory
[webservers]
web1 ansible_host=192.168.1.10 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
web2 ansible_host=192.168.1.11 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
[dbservers]
db1 ansible_host=192.168.1.20 ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa
[all:vars]
ansible_python_interpreter=/usr/bin/python3Ce fichier INI définit deux groupes : webservers et dbservers. Les variables comme ansible_host (IP), ansible_user et ansible_ssh_private_key_file évitent les mots de passe. [all:vars] applique python3 globalement. Testez avec ansible-inventory -i inventory.ini --list.
Premier test de connexion
Avant les playbooks, testez la connectivité avec le module ping. C'est idempotent et rapide.
Playbook de ping
---
- name: Test de connexion
hosts: all
gather_facts: yes
tasks:
- name: Ping les hôtes
ansible.builtin.ping:Ce playbook minimal cible all hôtes, collecte les faits (gather_facts) et exécute ping. Il vérifie SSH/Python sans rien changer. Lancez avec ansible-playbook -i inventory.ini ping.yml. Si succès : 'pong' pour chaque hôte. Piège : oubliez sudo pour SSH sans mot de passe.
Automatiser l'installation de paquets
Passons à une tâche réelle : mettre à jour les paquets et installer Nginx. Utilisez des modules comme apt pour Debian.
Playbook installer Nginx
---
- name: Installer et configurer Nginx
hosts: webservers
become: yes
gather_facts: yes
tasks:
- name: Mettre à jour apt cache
ansible.builtin.apt:
update_cache: yes
cache_valid_time: 3600
- name: Installer Nginx
ansible.builtin.apt:
name: nginx
state: present
- name: Démarrer Nginx
ansible.builtin.systemd:
name: nginx
state: started
enabled: yes
- name: Vérifier que Nginx écoute
ansible.builtin.uri:
url: http://localhost
status_code: 200Ce playbook cible webservers, utilise become: yes pour sudo, met à jour apt, installe/démarre Nginx et vérifie via uri. Idempotent : relancez sans risque. Cache_valid_time évite les updates inutiles. Testez sur VM.
Utiliser des variables et handlers
Les variables rendent les playbooks réutilisables. Les handlers notifient des changements (ex: restart service).
Playbook avec variables et handlers
---
- name: Configurer Nginx avec variables
hosts: webservers
become: yes
vars:
nginx_port: 8080
nginx_user: www-data
handlers:
- name: Restart Nginx
ansible.builtin.systemd:
name: nginx
state: restarted
tasks:
- name: Créer config Nginx personnalisée
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart Nginx
changed_when: false # Pour test
- name: Activer site
ansible.builtin.file:
src: /etc/nginx/sites-available/default
dest: /etc/nginx/sites-enabled/default
state: link
notify: Restart Nginx
post_tasks:
- name: Flush handlers
ansible.builtin.meta: flush_handlersDéfinissez vars locales (port, user). Handlers comme Restart Nginx s'exécutent si notifiés. template nécessite un fichier nginx.conf.j2 (créez-le). flush_handlers force l'exécution. Piège : sans become, permissions échouent.
Exécuter les playbooks
#!/bin/bash
INVENTORY="inventory.ini"
# Test ping
ansible-playbook -i $INVENTORY ping.yml -vvv
# Installer Nginx
echo "Installation Nginx..."
ansible-playbook -i $INVENTORY install-nginx.yml
# Config Nginx
echo "Configuration Nginx..."
ansible-playbook -i $INVENTORY nginx-config.yml
# Ad-hoc : arrêter tous les services Nginx
ansible webservers -i $INVENTORY -m systemd -a "name=nginx state=stopped"Ce script exécute tous les playbooks avec -i pour inventory et -vvv pour verbose. Commande ad-hoc ansible pour tâches one-shot. Utilisez --check pour dry-run. Assurez chmod +x run-playbooks.sh.
Bonnes pratiques
- Utilisez toujours des inventories dédiés : évitez
/etc/ansible/hostspour les prod. - Activez gather_facts pour des faits machine (OS, paquets).
- Variables en YAML : plus lisibles que INI pour complexes.
- Roles pour modularité : structurez playbooks en rôles réutilisables.
- Vault pour secrets : chiffrez mots de passe avec
ansible-vault.
Erreurs courantes à éviter
- SSH non configuré : 'UNREACHABLE' → vérifiez clés SSH et firewall (port 22).
- Python manquant : 'No Python interpreter' → installez python3 sur cibles.
- Become sans sudoers : 'insufficient privileges' → ajoutez utilisateur à sudoers.
- Playbooks non-idempotents : évitez
shellbrut, préférez modules dédiés.
Pour aller plus loin
Maîtrisez les rôles, Galaxy (ansible-galaxy install), AWX/Tower pour GUI, et intégration GitHub Actions.
Découvrez nos formations Learni sur DevOps et Ansible pour un parcours certifiant. Docs officielles : docs.ansible.com.