Skip to content
Learni
Voir tous les tutoriels
DevOps

Comment débuter avec Ansible pour l'automatisation en 2026

Read in English

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

install-ansible.sh
#!/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 --version

Ce 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

inventory.ini
[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/python3

Ce 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

ping.yml
---
- 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

install-nginx.yml
---
- 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: 200

Ce 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

nginx-config.yml
---
- 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_handlers

Dé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

run-playbooks.sh
#!/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/hosts pour 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 shell brut, 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.