Les scripts Bash, c'est bien pour un serveur. Mais quand vous devez mettre à jour 50 serveurs, cela devient un cauchemar. Ansible permet de décrire l'état désiré de votre infrastructure (ex: "Je veux que Nginx soit installé") et il se débrouille pour le faire. Le tout, sans installer aucun agent sur les serveurs cibles.
1. Pourquoi Ansible est génial ?
- Agentless : Il utilise simplement SSH. Si vous pouvez vous connecter au serveur, Ansible peut le gérer.
- Idempotent : Si vous lancez le script deux fois, il ne se passera rien la deuxième fois (car l'état désiré est déjà atteint). Un script Bash, lui, essaierait de réinstaller Nginx et planterait.
- YAML : Les "scripts" (Playbooks) sont lisibles par un humain.
2. Installation (Sur votre poste de contrôle)
Ansible ne s'installe que sur votre ordinateur (ou un serveur de rebond), jamais sur les cibles.
sudo apt update
sudo apt install ansible -y
Le prérequis vital : Clés SSH
Ansible doit pouvoir se connecter aux serveurs cibles sans mot de passe. Propagez votre clé SSH :
ssh-copy-id user@192.168.1.50
ssh-copy-id user@192.168.1.51
3. L'Inventaire (Inventory)
C'est l'annuaire de vos serveurs. Créez un fichier hosts.ini :
[webservers]
192.168.1.50
192.168.1.51
[dbservers]
192.168.1.60
[all:vars]
ansible_user=user # L'utilisateur SSH à utiliser partout
Testons la connexion avec le module "ping" :
ansible all -i hosts.ini -m ping
Si vous voyez du vert (SUCCESS), vous êtes prêt.
4. Votre premier Playbook
Un Playbook est une liste de tâches. Créons install_nginx.yml pour installer un serveur web.
---
- name: Installation et configuration de Nginx
hosts: webservers # On cible le groupe défini dans l'inventaire
become: true # On passe en root (sudo)
tasks:
- name: Mettre à jour le cache APT
apt:
update_cache: yes
- name: Installer Nginx
apt:
name: nginx
state: present
- name: S'assurer que Nginx est démarré
service:
name: nginx
state: started
enabled: yes # Démarrage automatique au boot
- name: Copier ma page d'accueil perso
copy:
src: index.html
dest: /var/www/html/index.html
mode: '0644'
5. Lancement
Exécutez le playbook :
ansible-playbook -i hosts.ini install_nginx.yml
Vous verrez quelque chose comme :
PLAY [Installation de Nginx] *************************************************** TASK [Gathering Facts] ... ok TASK [Installer Nginx] ... changed TASK [Démarrer Nginx] ... changed PLAY RECAP ********************************************************************* 192.168.1.50 : ok=4 changed=2 unreachable=0 failed=0
Si vous relancez la commande, vous verrez changed=0. C'est ça, la puissance de l'idempotence : Ansible ne fait rien s'il n'y a rien à faire.
Conclusion
Ceci n'est que la surface. Ansible peut gérer des templates (Jinja2), des rôles complexes, et même configurer des switchs réseaux Cisco. C'est l'outil qui fait passer un SysAdmin du statut d'artisan à celui d'industriel.