Aller au contenu

🧠 Mémo Ansible – Utilisation générale

Ce mémo est une référence rapide Ansible pour un usage quotidien (admin système, infra, automatisation). Formaté pour MkDocs.


📦 Concepts clés

Terme Description
Inventory Liste des hôtes gérés
Playbook Fichier YAML décrivant les actions
Play Exécution sur un groupe d’hôtes
Task Action unique
Module Brique d’action (reboot, apt, service…)
Role Structure réutilisable (tasks, vars, handlers…)
Facts Infos système collectées par Ansible

📁 Structure typique

ansible/
├── inventory.ini
├── ansible.cfg
├── playbook.yml
├── group_vars/
│   └── all.yml
├── host_vars/
│   └── srv01.yml
└── roles/
    └── nginx/
        ├── tasks/main.yml
        ├── handlers/main.yml
        ├── templates/
        └── vars/main.yml

📜 Inventory

Inventory simple

[web]
web1
web2

[db]
db1 ansible_host=192.168.1.10

Variables dans l’inventory

[all:vars]
ansible_user=admin
ansible_become=true

▶️ Commandes de base

Tester la connectivité

ansible all -m ping

Exécuter une commande

ansible web -a "uptime"

Avec sudo

ansible all -a "apt update" --become

📘 Playbook minimal

- hosts: web
  become: true
  tasks:
    - name: Installer nginx
      apt:
        name: nginx
        state: present

Exécution :

ansible-playbook playbook.yml

🔁 Reboot (cas fréquent)

Reboot séquentiel

- hosts: all
  serial: 1
  tasks:
    - reboot:
        reboot_timeout: 600

🔀 Gestion de l’ordre (rolling)

serial: 25%

Ou :

serial:
  - 1
  - 2
  - 5

🔧 Modules essentiels

Module Usage
ping Test connexion
command Commande brute
shell Commande shell
apt / dnf Paquets
service Services
copy Copier fichier
template Jinja2
reboot Redémarrage
user Gestion utilisateurs
cron Tâches cron

🧠 Facts

Afficher les facts

ansible all -m setup

Utilisation dans un playbook

- debug:
    msg: "OS={{ ansible_distribution }}"

🧮 Variables

Variables simples

my_var: value

Priorité (simplifiée)

  1. extra-vars (-e)
  2. host_vars
  3. group_vars
  4. playbook vars

🧩 Conditions

- name: Seulement sur Debian
  apt:
    name: htop
  when: ansible_os_family == "Debian"

🔄 Handlers

tasks:
  - name: Modifier conf
    template:
      src: nginx.conf.j2
      dest: /etc/nginx/nginx.conf
    notify: restart nginx

handlers:
  - name: restart nginx
    service:
      name: nginx
      state: restarted

📂 Templates Jinja2

server_name {{ domain }};
listen {{ port }};

🔐 Vault

Chiffrer un fichier

ansible-vault encrypt secrets.yml

Utiliser

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

🧪 Mode check (dry-run)

ansible-playbook playbook.yml --check

🧹 Bonnes pratiques

  • 1 rôle = 1 responsabilité
  • Pas de shell si un module existe
  • Toujours tester avec --check
  • Séparer vars / tasks / handlers
  • Inventaire clair et commenté

📌 Cas d’usage typiques

  • Rolling reboot
  • Déploiement config
  • Mise à jour OS
  • Gestion utilisateurs
  • Automatisation infra (Proxmox, LXC, VM)