🔎 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: present

Lancer :

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: 80

Utilisation :

- 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: present

Dans playbook.yml :

- hosts: web
  roles:
    - nginx

🔄 8. Boucles (loop)

Boucle simple

- name: Installer plusieurs paquets
  apt:
    name:"{{ item }}"
    state: present
  with_items:
    - git
    - curl
    - vim

Boucle 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: restarted

Appelé uniquement si changement 👍


📦 12. Modules Essentiels

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


🛠 13. Commandes Utiles

Test ping

ansible all-mping-i inventory/hosts.yml

Dry-run

ansible-playbook playbook.yml--check

Diff

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.yml

Dans playbook :

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

🚀 16. Workflow Type

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

🎓 Résumé Ultra Rapide

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