🔎 1. C’est quoi Ansible ?
Ansible est un outil d’automatisation :
- Configuration management
- Déploiement applicatif
- Orchestration
- Provisioning
✔ Agentless (SSH)
✔ Basé sur YAML
✔ Idempotent (rejouable sans casser)
📁 3. Structure de Projet Recommandée
ansible-project/
│
├── inventory/
│ ├── hosts.yml
│
├── group_vars/
│ ├── all.yml
│ ├── web.yml
│
├── host_vars/
│ ├── server1.yml
│
├── roles/
│ ├── nginx/
│ │ ├── defaults/
│ │ │ └── main.yml
│ │ ├── tasks/
│ │ │ └── main.yml
│ │ ├── handlers/
│ │ │ └── main.yml
│ │ ├── templates/
│ │ │ └── nginx.conf.j2
│ │ ├── files/
│ │ └── vars/
│
├── playbook.yml
└── ansible.cfg🏗 2. Architecture Type
📌 Composants
🖥 Control Node
- Machine où Ansible est installé
- Contient :
- Playbooks
- Inventory
- Roles
- Se connecte en SSH
🖥 Managed Nodes
- Serveurs cibles
- Pas d’agent requis
- Python installé
📂 Inventory
Liste des hôtes gérés.
📜 4. Inventory
YAML (recommandé)
all:
children:
web:
hosts:
web1:
ansible_host: 192.168.1.10
web2:
ansible_host: 192.168.1.11
db:
hosts:
db1:
ansible_host: 192.168.1.20▶ 5. Playbook Minimal
- name: Installer nginx
hosts: web
become: yes
tasks:
- name: Installer nginx
apt:
name: nginx
state: presentLancer :
ansible-playbook-i inventory/hosts.yml playbook.yml🔁 7. Conditions (when)
Oui, Ansible supporte les conditions.
- name: Installer Apache sur Debian
apt:
name: apache2
state: present
when: ansible_os_family == "Debian"Avec variable :
when: install_webserver is defined and install_webserver == true🧠 9. Variables
Définition
Dans group_vars/web.yml :
http_port: 80Utilisation :
- debug:
msg:"Le port est {{ http_port }}"🎭 6. Les Roles
Un rôle = module structuré réutilisable.
Dans roles/nginx/tasks/main.yml :
- name: Installer nginx
apt:
name: nginx
state: presentDans playbook.yml :
- hosts: web
roles:
- nginx🔄 8. Boucles (loop)
Boucle simple
- name: Installer plusieurs paquets
apt:
name:"{{ item }}"
state: present
with_items:
- git
- curl
- vimBoucle avec dictionnaire
- name: Créer utilisateurs
user:
name:"{{ item.name }}"
shell:"{{ item.shell }}"
loop:
- { name:"dev1", shell:"/bin/bash" }
- { name:"dev2", shell:"/bin/zsh" }🧩 10. Templates Jinja2
Ansible utilise Jinja.
📄 Template (nginx.conf.j2)
server {
listen {{ http_port }};
server_name {{ domain_name }};
location / {
proxy_pass http://{{ backend_ip }};
}
}📜 Task
- name: Déployer config nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart nginx🔔 11. Handlers
roles/nginx/handlers/main.yml
- name: Restart nginx
service:
name: nginx
state: restartedAppelé uniquement si changement 👍
📦 12. Modules Essentiels
| Module | Usage |
|---|---|
| apt / yum | Gestion paquets |
| service | Services |
| copy | Copier fichier |
| template | Template Jinja |
| file | Permissions |
| user | Gestion utilisateurs |
| command | Commande simple |
| shell | Commande shell |
🛠 13. Commandes Utiles
Test ping
ansible all-mping-i inventory/hosts.ymlDry-run
ansible-playbook playbook.yml--checkDiff
ansible-playbook playbook.yml--diff🎯 14. Bonnes Pratiques
✔ Utiliser des roles
✔ Séparer variables / tasks
✔ Utiliser --check
✔ Versionner avec Git
✔ Utiliser Ansible Vault pour secrets
🔐 15. Ansible Vault
ansible-vault create secrets.yml
ansible-vault edit secrets.yml
ansible-vault encrypt secrets.ymlDans playbook :
ansible-playbook playbook.yml--ask-vault-pass🚀 16. Workflow Type
- Écrire inventory
- Créer role
- Ajouter variables
- Tester en
-check - Déployer
🎓 Résumé Ultra Rapide
| Concept | Mot clé |
|---|---|
| Cible | hosts |
| Action | tasks |
| Logique | when |
| Boucle | loop |
| Réutilisable | roles |
| Config dynamique | template |
| Redémarrage | handlers |