Introduction à Ansible
Bash automatise une machine à la fois. Ansible automatise des parcs entiers depuis un poste de contrôle, sans agent sur les serveurs cibles. C'est le pont naturel entre les scripts shell et l'infrastructure as code.
Concepts fondamentaux
- Inventory : la liste des serveurs à gérer (fichier texte ou dynamique)
- Playbook : le fichier YAML décrivant les tâches à exécuter
- Module : l'unité d'action Ansible (apt, file, service, copy, template...)
- Idempotence : exécuter un playbook plusieurs fois produit le même résultat
- SSH : Ansible se connecte aux cibles via SSH, sans daemon ni agent
Installation
apt install ansible # sur le poste de contrôle uniquement
ansible --versionInventory
# ./inventory
[webservers]
web1.exemple.fr
web2.exemple.fr ansible_user=romain ansible_port=2222
[dbservers]
db1.exemple.fr
[all:vars]
ansible_user=romain
ansible_ssh_private_key_file=~/.ssh/id_ed25519Tester la connectivité :
ansible all -i inventory -m ping
ansible webservers -i inventory -m pingPremier playbook
# deploy-nginx.yml
---
- name: Installer et configurer Nginx
hosts: webservers
become: true # équivalent de sudo
tasks:
- name: Mettre à jour le cache apt
apt:
update_cache: yes
- name: Installer Nginx
apt:
name: nginx
state: present # present / absent / latest
- name: Démarrer et activer Nginx
service:
name: nginx
state: started
enabled: true
- name: Copier la configuration
copy:
src: files/nginx.conf
dest: /etc/nginx/nginx.conf
mode: '0644'
notify: Recharger Nginx
handlers:
- name: Recharger Nginx
service:
name: nginx
state: reloadedansible-playbook -i inventory deploy-nginx.yml # exécuter
ansible-playbook -i inventory deploy-nginx.yml --check # dry-run
ansible-playbook -i inventory deploy-nginx.yml --diff # afficher les différencesModules essentiels
- apt : gestion des paquets Debian
- service : démarrer, arrêter, activer des services
- copy : copier des fichiers sur les cibles
- template : copier des fichiers Jinja2 avec variables
- file : gérer permissions, propriétaires, liens symboliques
- user : créer et modifier des utilisateurs
- command / shell : exécuter une commande (à éviter si un module existe)
En pratique
La valeur d'Ansible se révèle dès le deuxième serveur : ce qui prenait deux fois plus de temps se fait en une seule exécution. L'idempotence change l'approche : un playbook n'est pas "exécuté une fois", il décrit l'état désiré du système. Même résultat sur 10 ou 100 serveurs. Le passage de Bash à Ansible est naturel : les scripts shell restent pour les tâches locales ponctuelles, Ansible prend la main pour tout ce qui touche plusieurs machines ou doit être reproductible et auditable.