Skip to content

Ansible

Auteur : Gautier RAYEROUX | Date : 2026-02-24 00:00:00

Ansible est un outil d’automatisation :

  • Configuration management
  • Déploiement applicatif
  • Orchestration
  • Provisioning

✔ Agentless (SSH)

✔ Basé sur YAML

✔ Idempotent (rejouable sans casser)

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
  • Machine où Ansible est installé
  • Contient :
    • Playbooks
    • Inventory
    • Roles
  • Se connecte en SSH
  • Serveurs cibles
  • Pas d’agent requis
  • Python installé

Liste des hôtes gérés.

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
- name: Installer nginx
hosts: web
become: yes
tasks:
- name: Installer nginx
apt:
name: nginx
state: present

Lancer :

ansible-playbook-i inventory/hosts.yml playbook.yml

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

Dans group_vars/web.yml :

http_port: 80

Utilisation :

- debug:
msg:"Le port est {{ http_port }}"

Un rôle = module structuré réutilisable.

Dans roles/nginx/tasks/main.yml :

- name: Installer nginx
apt:
name: nginx
state: present

Dans playbook.yml :

- hosts: web
roles:
- nginx
- name: Installer plusieurs paquets
apt:
name:"{{ item }}"
state: present
with_items:
- git
- curl
- vim
- name: Créer utilisateurs
user:
name:"{{ item.name }}"
shell:"{{ item.shell }}"
loop:
- { name:"dev1", shell:"/bin/bash" }
- { name:"dev2", shell:"/bin/zsh" }

Ansible utilise Jinja.

server {
listen {{ http_port }};
server_name {{ domain_name }};
location / {
proxy_pass http://{{ backend_ip }};
}
}
- name: Déployer config nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart nginx

roles/nginx/handlers/main.yml

- name: Restart nginx
service:
name: nginx
state: restarted

Appelé uniquement si changement 👍


ModuleUsage
apt / yumGestion paquets
serviceServices
copyCopier fichier
templateTemplate Jinja
filePermissions
userGestion utilisateurs
commandCommande simple
shellCommande shell


ansible all-mping-i inventory/hosts.yml
ansible-playbook playbook.yml--check
ansible-playbook playbook.yml--diff

✔ Utiliser des roles

✔ Séparer variables / tasks

✔ Utiliser --check

✔ Versionner avec Git

✔ Utiliser Ansible Vault pour secrets


ansible-vault create secrets.yml
ansible-vault edit secrets.yml
ansible-vault encrypt secrets.yml

Dans playbook :

ansible-playbook playbook.yml--ask-vault-pass

  1. Écrire inventory
  2. Créer role
  3. Ajouter variables
  4. Tester en -check
  5. Déployer

ConceptMot clé
Ciblehosts
Actiontasks
Logiquewhen
Boucleloop
Réutilisableroles
Config dynamiquetemplate
Redémarragehandlers