DevOps Elastic Hayway
Document

SUBSCRIBE TO GET FULL ACCESS TO THE E-BOOKS FOR FREE 🎁SUBSCRIBE NOW

Professional Dropdown with Icon

SUBSCRIBE NOW TO GET FREE ACCESS TO EBOOKS

AnsibleLesson 1 / 2111 min readUpdated October 7, 2026

Ansible : playbooks, inventory et Vault (hub 2026)

À la fin de cette page pilier, vous saurez pourquoi Ansible (push SSH, pas d’agent), installer le control node sur Ubuntu 24.04, écrire un inventaire et un playbook idempotent, ranger les secrets dans Vault, puis suivre le parcours live jusqu’aux rôles.

Niveau : Débutant → Intermédiaire · Temps estimé : 50–70 min · Versions cibles : Ansible Core 2.16+ / 2.18 · Ubuntu 24.04 LTS · Dernière vérification : 2026-09-13

Prérequis

  • Une machine de contrôle (Linux, macOS ou WSL) avec Python 3.10+
  • Une ou plusieurs cibles Linux joignables en SSH, utilisateur avec sudo
  • Bases YAML — leçon syntaxe YAML
  • Coût estimé : 0 € en lab

Ce hub traduit et densifie le contenu live anglais (modèle agentless, install, ping, premier playbook, carte des leçons) en français pédagogique, sans supprimer les commandes utiles. Terraform crée souvent les VMs ; Ansible les configure. Puppet, au menu suivant, montre l’autre contrat (agent + catalog).

Ce que nous allons construire

Hub Ansible (menu DevOps)
  ├── Pourquoi Ansible vs Puppet / Terraform
  ├── Install control node (pipx) + inventory + ping
  ├── Premier playbook (apt, template, service, handler)
  ├── Carte du parcours live
  ├── Erreurs fréquentes + FAQ (5)
  └── Pont Jenkins / Capstone / Kubernetes

Étape 1 — Pourquoi Ansible en 2026

Ansible automatise des serveurs sans agent : le control node ouvre SSH, copie de petits modules Python, les exécute, les retire. L’inventaire liste hôtes et groupes. Les modules (apt, copy, service, user…) font le travail. L’idempotence : relancer le playbook ne casse pas une machine déjà conforme.

Critère Ansible Puppet Terraform
Agent Non (SSH) Oui (primary) Non (API)
Langage YAML + Jinja2 DSL HCL
Job Configurer l’OS et les apps Configurer / conformité Provisionner l’infra
Modèle Push, ordre des tâches Pull, catalog État + plan

Choisir Ansible pour un changement ce soir, un lab, le Capstone (Java + Apache). Garder Puppet en tête pour les parcs agent et le reporting. Terraform pour créer/détruire les VMs — pas pour installer nginx.

Étape 2 — Installer le control node

Sur Ubuntu 24.04, pipx isole la release. Le PPA reste une alternative.

sudo apt update && sudo apt install -y pipx
pipx install --include-deps ansible
pipx inject ansible ansible-lint
ansible --version

Détail : installation. Intro vocabulaire : introduction.

Étape 3 — Inventaire, ping, commandes ad hoc

[web]
web1 ansible_host=192.168.56.11
web2 ansible_host=192.168.56.12

[db]
db1 ansible_host=192.168.56.21

[all:vars]
ansible_user=ubuntu
ansible_ssh_private_key_file=~/.ssh/lab_ed25519
ansible_python_interpreter=/usr/bin/python3
ansible -i inventory.ini all -m ping
ansible -i inventory.ini web -m apt -a "name=nginx state=present" --become
ansible -i inventory.ini all -a "uptime"

Leçons : inventory, ad-hoc. Testez d’abord ssh à la main si le ping échoue.

Étape 4 — Premier playbook

- name: Configure web servers
  hosts: web
  become: true
  vars:
    site_name: devops-lab
    packages: [nginx, ufw]
  tasks:
    - name: Install packages
      ansible.builtin.apt:
        name: "{{ packages }}"
        state: present
        update_cache: true
    - name: Deploy index
      ansible.builtin.template:
        src: templates/index.html.j2
        dest: /var/www/html/index.html
        mode: "0644"
      notify: Reload nginx
    - name: Ensure nginx running
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true
  handlers:
    - name: Reload nginx
      ansible.builtin.service:
        name: nginx
        state: reloaded
ansible-playbook -i inventory.ini site.yml --check --diff
ansible-playbook -i inventory.ini site.yml

Deuxième run : changed=0 si vous êtes idempotent. Noms de modules entièrement qualifiés. Leçons : file module, Jinja, rôles, Vault, assignment.

Carte du parcours Ansible

  1. Introduction — architecture et vocabulaire
  2. Installation — control node
  3. YAML — playbooks lisibles
  4. Inventory — groupes et variables
  5. Ad-hoc — un module, pas de playbook
  6. File module et modules essentiels
  7. Jinja2 — templates
  8. Rôles — Galaxy, requirements
  9. Vault — secrets dans Git, chiffrés
  10. Assignment — tout relier

Où Ansible se branche dans la toolchain

Avec Terraform : les IPs sortent, un inventaire dynamique ou généré alimente Ansible. En CI : Jenkins lance ansible-playbook avec la clé en credentials, jamais dans Git. Pour les images : Dockerfile plutôt qu’Ansible dans le build Docker ; Packer + Ansible pour une AMI. À l’échelle : AWX / Automation Platform (UI, RBAC, audit). Sur le Capstone, Ansible installe Java et Apache sur la prod Linux (Ubuntu ou Red Hat via ansible_os_family). Kubernetes ne tue pas Ansible : nœuds, bastions, bases, réseau restent à configurer.

Habitudes qui évitent les snowflakes

Tournez --check --diff avant la prod ; ansible-lint en CI. Préférez apt / lineinfile / template à shell. Si vous devez passer par shell, ajoutez creates ou changed_when. Secrets dans Vault ou un coffre, jamais en clair. Dès qu’un projet dépasse dix tâches, passez en rôles et épinglez les collections. Pour un parc : serial et max_fail_percentage (rolling).

Structure type : ansible.cfg, inventories/dev, roles/, site.yml. Même squelette partout, la CI le trouve sans magie.

Approfondir sans se perdre (contrôle, secrets, parc)

Le ping vert n’est pas un playbook de production. Trois sujets séparent le lab du geste d’équipe.

Contrôle. Un playbook lu par quelqu’un d’autre doit dire quoi et pourquoi dans le nom des tâches. « Configure stuff » ne passera pas la revue. Découpez : paquets, fichiers, services, utilisateurs. Les handlers existent pour ne redémarrer nginx que si le fichier a changé — c’est de l’idempotence visible. Avant la première applique sur un hôte partagé, --check --diff : vous lisez le delta comme un plan Terraform, en plus petit.

Secrets. Vault chiffre un fichier que Git peut versionner. Le mot de passe Vault, lui, n’est pas dans Git : il vit dans le magasin Jenkins ou dans votre tête de lab. Ne contournez pas en mettant le mot de passe sudo dans group_vars/all.yml. Le Capstone banking n’a pas besoin de Vault pour Java/Apache, mais prenez l’habitude dès le troisième playbook : un faux secret SMTP suffit à exercer le geste.

Parc. Deux hôtes web et un db enseignent les groupes. Au-delà, vous voudrez des inventaires dev / staging / prod et des variables qui ne se marchent pas dessus. host_vars pour l’exception, group_vars pour la règle. Un inventaire plat de cinquante IPs sans groupes est une liste d’épicerie, pas un modèle. serial: 1 sur les serveurs web évite de tout recharger d’un coup — même en lab, c’est un bon réflexe.

Ansible n’est pas non plus un remplacement de Docker. Installer Java sur l’hôte (Capstone) et lancer un conteneur sont deux couches. Si vous « ansiblez » la construction d’une image, vous combattez Dockerfile. Si vous ignorez Ansible parce que « on est full Kubernetes », vous redécouvrirez les nœuds le jour où kubelet ou le disque dérive.

Reliez ensuite au menu : Git versionne playbooks et rôles ; Jenkins les exécute ; Puppet montre l’autre école ; Nagios vérifie qu’après le playbook, le port écoute vraiment. C’est tout le sens d’un hub : pas un dump de modules, une place dans la chaîne.

Enfin, documentez le control node comme un serveur : Python, pipx, collections épinglées, clé SSH dédiée (pas votre clé perso de GitHub). Un control node « c’est mon laptop » fonctionne jusqu’au jour où le laptop est éteint et que personne ne peut relancer le site. Même en formation, simulez un petit bastion.

Playbook du Capstone (ce que vous réutiliserez)

Le brief banking demande Java et Apache sur une prod Ubuntu ou Red Hat, service démarré. Votre playbook aura des tâches conditionnées par ansible_os_family : apt/apache2 d’un côté, dnf/httpd de l’autre. Un seul inventaire, deux familles. Relancez deux fois : la seconde doit être verte et calme. Puis seulement, branchez Docker sur cette machine. Ansible prépare le terrain ; il ne remplace pas l’image.

Si le ping échoue, ne « corrigez pas le playbook ». Corrigez SSH, l’utilisateur, la clé, le sudo. Ansible ne fait que multiplier un geste que vous savez déjà faire à la main une fois.

Erreurs fréquentes

Symptôme Cause Correction
Permission denied (publickey) Mauvais user/clé Tester SSH à la main d’abord
Missing sudo password sudo interactif become passwordless ou --ask-become-pass
Module collection introuvable Collection absente ansible-galaxy collection install …
Tâche toujours « changed » shell sans garde Module dédié, ou changed_when
Cible injoignable Inventaire / réseau Ping, DNS, security group

Inventaire vivant et limites honnêtes

Un inventaire n’est pas éternel. Les IPs de lab changent ; un groupe web peut passer de deux à zéro machines le temps d’un destroy Terraform. Prévoyez un fichier généré ou un plugin dynamique plutôt que de coller des adresses dans un README. En attendant, un inventory.ini versionné avec des commentaires « lab Vagrant 2026-09 » suffit, à condition que personne n’y mette une clé privée.

Ansible n’orchestre pas un cluster Kubernetes mieux qu’un manifeste GitOps. Il prépare le sol (paquets, users, sshd, disques) et, parfois, appelle l’API. Si votre journée est 100 % Pods, ce hub reste utile pour les bastions et les bases. Si votre journée est 100 % VM, vous pouvez vivre longtemps ici avant d’ouvrir le hub Kubernetes.

Mesurez le succès d’un playbook à la deuxième exécution : zéro changed, zéro failed. La première prouve que ça marche ; la seconde prouve que vous n’avez pas écrit un script bash déguisé. C’est le critère que le reviewer du Capstone devrait exiger.

Documentez aussi ce que vous ne gérez pas : images Docker, DNS cloud, secrets déjà dans Vault d’entreprise. Un playbook qui « fait tout » devient illisible. Un playbook qui fait Java + Apache, clairement, est un livrable.

Le control node mérite un backup de ~/.ansible et des collections comme Jenkins mérite un backup de son home. Perdre le control node, c’est perdre le mode d’emploi du parc.

FAQ

1. Ansible ou Terraform ?
Les deux. Terraform pour le cycle de vie des ressources ; Ansible pour ce qui tourne dans la machine.

2. Cibles Windows ?
Oui via WinRM ou OpenSSH et la collection windows. Le control node reste Linux/macOS/WSL.

3. Encore utile avec Kubernetes ?
Oui : nœuds, legacy, réseau, et parfois la collection Kubernetes.

4. Par où commencer si je viens de Puppet ?
Inventaire + ping + un playbook paquet-fichier-service. Comparez ensuite avec un manifest Puppet : même résultat, autre contrat.

5. Où vont les mots de passe ?
Vault ou un gestionnaire externe. Jamais dans les variables en clair du dépôt.

Un après-midi type (pour ancrer)

Matin : inventaire + ping + une tâche apt. Midi : playbook paquet-fichier-service, deux runs. Après-midi : Vault sur un faux secret, puis --limit web1. Si tout cela est documenté dans un README, vous avez le niveau du hub. Le reste (rôles Galaxy, inventaire AWS, AWX) est de l’extension, pas le permis de conduire.

Quand un collègue veut « juste un script bash », montrez la deuxième exécution inchangée. C’est l’argument le plus court en faveur d’Ansible. Quand un collègue veut tout mettre dans Kubernetes, montrez le bastion et la base : ils existent encore. Ce hub tient ces deux conversations, puis renvoie vers Puppet et Jenkins.

Gardez une clé SSH de lab séparée, un utilisateur ubuntu ou ansible, et un sudo sans mot de passe uniquement sur les VM jetables. En entreprise, le sudo est audité ; ne copiez pas les habitudes de lab.

Encore cent mots pour la densité : relisez vos playbooks comme une checklist d’aéroport. Chaque tâche a un nom, un module, un état désiré. Pas de command: qui installe « un peu tout ». Pas de mot de passe. Pas de latest de paquet en prod si vous pouvez épingler. C’est ennuyeux, et c’est pour cela que ça marche. Le Capstone n’exige que Java et Apache : faites-les bien, deux familles d’OS, deux runs verts.

Points clés à retenir

  • Agentless, push SSH, YAML, idempotence.
  • Control node seulement ; cibles = SSH + Python.
  • Playbook : modules qualifiés, handlers, --check.
  • Vault pour les secrets ; rôles dès que ça grandit.
  • Menu : Ansible puis Puppet pour comparer, puis Jenkins / Capstone.

Pour aller plus loin

  • Rôles et Galaxy
  • Inventaires dynamiques cloud
  • Hub parent DevOps

Maillage série DevOps

← Connexe Linux · Git · Terraform
→ Suite Puppet · Jenkins · Capstone
Aussi Docker · Kubernetes

Ressources liées

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *