Ansible est l’un des outils d’automatisation les plus populaires dans le monde de l’IT et du DevOps. Sa simplicité, sa puissance et son approche sans agent en font un choix privilégié pour automatiser la configuration des serveurs, le déploiement d’applications et l’orchestration de tâches complexes. Que vous soyez débutant ou que vous cherchiez à approfondir vos connaissances, cet article vous guidera à travers la structure, le vocabulaire et l’environnement d’Ansible pour vous permettre de maîtriser cet outil essentiel.
1. Qu’est-ce qu’Ansible ?
Ansible est un outil d’automatisation open-source qui permet de gérer des infrastructures informatiques de manière simple et efficace. Il est utilisé pour :
- Automatiser la configuration des serveurs (Configuration Management).
- Déployer des applications (Application Deployment).
- Orchestrer des tâches complexes (Orchestration).
- Automatiser les workflows IT (IT Automation).
Ansible se distingue par son approche sans agent : il utilise SSH pour communiquer avec les serveurs, ce qui le rend léger et facile à déployer.
2. La Structure d’Ansible
Pour comprendre Ansible, il est essentiel de maîtriser sa structure. Voici les composants clés :
2.1 Inventaire (Inventory)
L’inventaire est un fichier qui liste les hôtes (serveurs) sur lesquels Ansible va agir. Il peut être écrit en format INI ou YAML. Les hôtes peuvent être organisés en groupes pour une gestion plus facile.
Exemple d’inventaire en format INI :
[webservers] server1.example.com server2.example.com [dbservers] db1.example.com db2.example.com
Exemple d’inventaire en format YAML :
all: hosts: server1.example.com: server2.example.com: children: webservers: hosts: server1.example.com: server2.example.com: dbservers: hosts: db1.example.com: db2.example.com:
2.2 Playbooks
Les playbooks sont au cœur d’Ansible. Ce sont des fichiers YAML qui décrivent les tâches à exécuter sur les hôtes. Un playbook contient une ou plusieurs plays, chaque play ciblant un groupe d’hôtes et définissant des tasks (tâches).
Exemple de playbook simple :
- hosts: webservers tasks: - name: Ensure Apache is installed apt: name: apache2 state: present - name: Ensure Apache is running service: name: apache2 state: started
2.3 Modules
Les modules sont les unités de travail dans Ansible. Chaque module effectue une action spécifique, comme installer un paquet, démarrer un service ou copier un fichier. Ansible dispose de centaines de modules intégrés, et vous pouvez également écrire vos propres modules.
Exemples de modules courants :
apt
: Gère les paquets sur les systèmes Debian/Ubuntu.yum
: Gère les paquets sur les systèmes Red Hat/CentOS.copy
: Copie des fichiers sur les hôtes distants.service
: Gère les services (démarrage, arrêt, etc.).
2.4 Rôles (Roles)
Les rôles permettent d’organiser les playbooks de manière modulaire. Un rôle peut inclure des tâches, des variables, des fichiers, des templates et des handlers. Cela facilite la réutilisation du code et rend les playbooks plus lisibles.
Structure typique d’un rôle :
roles/ common/ tasks/ handlers/ files/ templates/ vars/ defaults/ meta/
2.5 Templates
Ansible utilise le moteur de templates Jinja2 pour générer des fichiers de configuration dynamiques. Les templates permettent d’insérer des variables et des conditions dans les fichiers de configuration.
Exemple de template Jinja2 :
server { listen 80; server_name {{ server_name }}; root {{ document_root }}; }
2.6 Variables
Les variables permettent de rendre les playbooks plus flexibles. Elles peuvent être définies dans plusieurs endroits : dans les playbooks, les rôles, l’inventaire ou des fichiers de variables séparés.
Exemple de définition de variables :
- hosts: webservers
vars:
http_port: 80
max_clients: 200
tasks:
- name: Ensure Apache is configured
template:
src: templates/httpd.conf.j2
dest: /etc/httpd/conf/httpd.conf
3. Le Vocabulaire d’Ansible
Voici quelques termes clés à connaître pour bien comprendre Ansible :
- Task : Une action spécifique à exécuter, comme installer un paquet ou copier un fichier.
- Play : Un ensemble de tâches appliquées à un groupe d’hôtes.
- Handler : Une tâche qui ne s’exécute que si elle est notifiée par une autre tâche (par exemple, redémarrer un service après une mise à jour).
- Facts : Des informations collectées sur les hôtes (comme l’OS, l’adresse IP, etc.) qui peuvent être utilisées dans les playbooks.
- Ad-Hoc Commands : Des commandes rapides exécutées directement depuis la ligne de commande sans passer par un playbook.
- Idempotence : Un concept clé d’Ansible. Une tâche est idempotente si elle peut être exécutée plusieurs fois sans changer le système après la première exécution.
4. L’Environnement Ansible
Pour commencer avec Ansible, vous avez besoin de :
4.1 Un Nœud de Contrôle
C’est la machine sur laquelle Ansible est installé. Elle peut être un ordinateur local ou un serveur. Ansible ne nécessite pas d’installation sur les nœuds gérés, ce qui simplifie la configuration.
4.2 Des Nœuds Gérés
Ce sont les serveurs ou machines que vous souhaitez configurer ou gérer. Ansible utilise SSH pour communiquer avec eux.
4.3 SSH
Ansible utilise SSH pour se connecter aux nœuds gérés. Assurez-vous que le nœud de contrôle peut se connecter aux nœuds gérés via SSH sans mot de passe (en utilisant des clés SSH).
4.4 Python
Ansible nécessite Python sur les nœuds gérés pour exécuter les modules. La plupart des distributions Linux incluent Python par défaut.
5. Fichiers de Configuration d’Ansible
Ansible utilise plusieurs fichiers de configuration pour définir son comportement. Voici les principaux fichiers et leur emplacement :
5.1 Fichier de Configuration Principal (ansible.cfg
)
Ce fichier contient les paramètres de configuration d’Ansible. Il peut être situé à plusieurs endroits, et Ansible utilise le premier fichier trouvé dans l’ordre suivant :
- Répertoire courant :
./ansible.cfg
- Répertoire utilisateur :
~/.ansible.cfg
- Répertoire système :
/etc/ansible/ansible.cfg
Exemple de contenu d’un fichier ansible.cfg
:
[defaults] inventory = ./inventory.ini remote_user = ansible_user private_key_file = /path/to/private/key
5.2 Fichier d’Inventaire (inventory.ini
ou inventory.yml
)
Ce fichier liste les hôtes et les groupes d’hôtes. Par défaut, Ansible cherche ce fichier dans le répertoire courant ou dans le chemin spécifié dans ansible.cfg
.
5.3 Fichiers de Variables
Les variables peuvent être définies dans plusieurs fichiers, notamment :
- Dans les playbooks : Directement dans les fichiers YAML.
- Dans les rôles : Sous
roles/role_name/vars/
ouroles/role_name/defaults/
. - Dans des fichiers séparés : Par exemple,
group_vars/
ethost_vars/
pour définir des variables par groupe ou par hôte.
5.4 Fichiers de Rôles
Les rôles sont organisés dans des répertoires spécifiques, généralement sous roles/
. Chaque rôle a sa propre structure de fichiers, comme tasks/
, handlers/
, vars/
, etc.
6. Premiers Pas avec Ansible
6.1 Installation d’Ansible
Sur un système basé sur Debian/Ubuntu :
sudo apt update sudo apt install ansible
Sur un système basé sur Red Hat/CentOS :
sudo yum install ansible
6.2 Configurer l’Inventaire
Créez un fichier inventory.ini
et ajoutez vos hôtes :
[webservers] server1.example.com server2.example.com [dbservers] db1.example.com
6.3 Tester la Connexion
Utilisez la commande suivante pour vérifier que Ansible peut communiquer avec vos hôtes :
ansible all -i inventory.ini -m ping
6.4 Écrire un Playbook Simple
Créez un fichier playbook.yml
:
- hosts: webservers tasks: - name: Ensure Apache is installed apt: name: apache2 state: present
Exécutez le playbook :
ansible-playbook -i inventory.ini playbook.yml
7. Bonnes Pratiques
- Utilisez des rôles pour organiser vos playbooks et faciliter la réutilisation du code.
- Gardez vos playbooks sous contrôle de version avec Git.
- Utilisez des variables pour rendre vos playbooks plus flexibles.
- Testez vos playbooks dans un environnement de staging avant de les déployer en production.
- Documentez vos playbooks pour faciliter leur maintenance.
8. Ressources pour Aller Plus Loin
- Documentation Officielle d’Ansible : https://docs.ansible.com
- Ansible Galaxy : Une plateforme pour partager et découvrir des rôles Ansible. https://galaxy.ansible.com
- Livres : Ansible for DevOps de Jeff Geerling est une excellente ressource pour approfondir vos connaissances.