Ansible
⚙️ Ansible, c'est quoi ?
Ansible est un outil d'automatisation qui permet de gérer des serveurs, installer des logiciels et configurer des systèmes de manière simple et efficace.
Avec Ansible, tu peux :
✅ Gérer plusieurs machines en même temps avec un seul script
✅ Automatiser les tâches répétitives comme l’installation de logiciels
✅ Éviter les erreurs humaines grâce à des configurations reproductibles
✅ Utiliser un système sans agent, car Ansible fonctionne via SSH (pour Linux) et WinRM (pour Windows)
Ansible est déclaratif : tu écris ce que tu veux obtenir (ex: "Apache installé"), et il s’occupe du comment.
🏗 Les concepts de base
🔹 Inventaire : Un fichier listant les machines à gérer (ex: hosts.ini
).
🔹 Module : Un composant préfait pour exécuter une tâche (ex: apt
, yum
, win_chocolatey
).
🔹 Playbook : Un fichier YAML qui décrit un ensemble de tâches à exécuter.
🔹 Rôle : Une organisation plus avancée des playbooks pour les projets complexes.
🔹 Idempotence : Si une action est déjà en place, Ansible ne la refait pas inutilement.
Installer Nginx
Crée un fichier install_nginx.yml
:
- name: Installer et démarrer Nginx
hosts: web
become: yes
tasks:
- name: Mettre à jour la liste des paquets
apt:
update_cache: yes
- name: Installer Nginx
apt:
name: nginx
state: present
- name: Démarrer Nginx
service:
name: nginx
state: started
Puis exécute-le :
ansible-playbook -i hosts.ini install_nginx.yml
Résultat : Nginx est installé et lancé sur tous les serveurs du groupe web
! 🚀
🛠 Les commandes Ansible essentielles
Configuration d’Ansible
Cette commande permet de créer le fichier de configuration d’Ansible qui sera présent dans la racine du projet :
ansible-config init --disabled > ansible.cfg
Gather facts
récupère les informations de la machine cible. Par exemple :
- L’OS
- L’IP
- La RAM
- name: Show OS and IP
hosts: all
gather_facts: yes
tasks:
- name: Display OS and IP
ansible.builtin.debug:
msg: "OS: {{ ansible_distribution }}, IP: {{ ansible_default_ipv4.address }}"
💡 Sans gather_facts: yes
, ces variables ne seraient pas disponibles, sauf si tu les collectes manuellement avec le module setup
.
Ping vers les machines
ansible -i hosts.ini all -m ping
Vérifie si Ansible peut accéder aux machines via SSH.
Lancer un playbook Ansible
ansible-playbook -i hosts.ini install_nginx.yml
Exécuter une commande sur une machine distante
ansible -i hosts.ini web -m shell -a "uptime"
Exécute la commande uptime
sur les serveurs du groupe web
.
Installer un paquet avec Ansible
ansible -i hosts.ini web -m apt -a "name=nginx state=present" --become
Installe Nginx sur les machines du groupe web
(avec apt
pour Debian/Ubuntu).
Exécute un fichier YAML qui installe et configure un service.
Ansible Galaxy
Une collection regroupe différents types de contenu, tels que des rôles, modules, playbooks, plugins et même des scripts de tests, dans une structure modulaire et bien définie.
Ca permet de faciliter la mise à jour et la distribution de modules ou de rôles et enfin permettre une meilleure gestion des dépendances.
Installation depuis Ansible Galaxy
Pour installer une collection depuis Ansible Galaxy, utilisez la commande suivante :
ansible-galaxy collection install <namespace>.<collection_name>
Cela installe la collection dans le répertoire local des collections par défaut: ~/.ansible/collections/
ou /usr/share/ansible/collections/
.
Egalement possible d’installer via le fichier requirement.yml
.
Avec la commande :
ansible-galaxy collection install -r requirements.yml
Créer un rôle avec Ansible Galaxy
ansible-galaxy init nom_du_role
Ce qui donne l’arborescence suivante :
user_creation/
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
9 directories, 8 files
Ansible Vault
Créer un fichier chiffré
ansible-vault create dir/secret.yml
Fichier où sera stocké toutes les informations importantes à cacher.
Editer fichier chiffré
ansible-vault edit dir/secret.yml
Modifier mdp du fichier chiffré
ansible-vault rekey dir/secret.yml
Chiffrer fichier non chiffré
ansible-vault encrypt fichier_non_chiffre.yml
Déchiffrer un fichier déjà chiffré
ansible-vault decrypt fichier_deja_chiffre.yml
Affichier contenu d’un fichier chiffré
ansible-vault view dir/secret.yml