Ansible
| Ansible | |
|---|---|
| Première Version | 20 février 2012 |
| Dernière Version | 2.20.1 |
| Fonction | Gestionnaire de configuration |
| Infrastructure automation software | |
| Infrastructure as Code | |
| Site web | www.ansible.com |
Ansible est un outil d’automatisation IT open-source développé par Red Hat. Il permet de gérer la configuration, le déploiement d’applications et l’orchestration de tâches sur un parc de machines, sans installer d’agent sur les cibles.
Architecture
Machine de contrôle
Inventory Ansible Playbooks
ansible.cfg
SSH / WinRM
[Serveur 1] [Serveur 2] [Serveur 3]
(Ubuntu) (Ubuntu) (Ubuntu)
Agentless : Ansible se connecte via SSH (Linux) ou WinRM (Windows). Rien à installer sur les machines cibles, juste Python.
Structure d’un projet Ansible
mon-projet/
ansible.cfg # Configuration globale
inventory/
hosts.yml # Liste des machines
group_vars/ # Variables par groupe
all.yml
webservers.yml
playbooks/
site.yml # Playbook principal
webservers.yml
databases.yml
roles/
nginx/
tasks/
main.yml
templates/
nginx.conf.j2
handlers/
main.yml
defaults/
main.yml
postgresql/
tasks/
main.yml
Concepts fondamentaux
1. Inventory - Le parc de machines
# inventory/hosts.yml
all:
children:
webservers:
hosts:
web1:
ansible_host: 192.168.1.10
web2:
ansible_host: 192.168.1.11
databases:
hosts:
db1:
ansible_host: 192.168.1.20
monitoring:
hosts:
grafana:
ansible_host: 192.168.1.30
2. Playbook — Le scénario d’automatisation
# playbooks/webservers.yml
---
- name: Configuration des serveurs web
hosts: webservers
become: yes # sudo
vars:
http_port: 80
app_version: "1.2.3"
tasks:
- name: Installer Nginx
apt:
name: nginx
state: present
update_cache: yes
- name: Démarrer et activer Nginx
service:
name: nginx
state: started
enabled: yes
- name: Déployer la config Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Reload Nginx # déclenche le handler
handlers:
- name: Reload Nginx
service:
name: nginx
state: reloaded
3. Modules — Les briques de base
Ansible dispose de milliers de modules intégrés :

4. Roles — La réutilisabilité
Les rôles permettent d’organiser et réutiliser son code :
# roles/nginx/tasks/main.yml
---
- name: Installer Nginx
apt:
name: nginx
state: present
- name: Configurer Nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: Reload Nginx
# Utilisation dans un playbook
- hosts: webservers
roles:
- nginx
- nodejs
- monitoring
5. Variables & Templates Jinja2
# group_vars/webservers.yml nginx_worker_processes: 4 nginx_max_connections: 1024 app_domain: "monsite.fr"
# templates/nginx.conf.j2
worker_processes {{ nginx_worker_processes }};
events {
worker_connections {{ nginx_max_connections }};
}
server {
listen 80;
server_name {{ app_domain }};
}
Fonctionnalités avancées
Conditions & boucles
Vault — Chiffrement des secrets
Tags — Exécution sélective
Ansible AWX/Tower
AWX (open-source) ou Ansible Tower (Red Hat, payant) ajoutent :
- Interface web graphique
- Gestion des jobs et scheduling
- RBAC (contrôle d’accès)
- Historique des exécutions
- API REST
Forces & Limites
Forces
- Agentless, facile à démarrer
- YAML lisible, courbe d’apprentissage douce
- Énorme communauté et Galaxy
- Idempotent par conception
Limites
- Peut être lent sur de très grands parcs (exécution séquentielle par défaut)
- Moins adapté que Puppet/Chef pour des états complexes en temps réel
- La gestion des secrets reste manuelle sans Vault bien configuré
