Aller au contenu
Infrastructure as Code medium

Premiers pas avec Ansible : du lab vide au premier playbook

10 min de lecture

Logo Ansible

Cette section transforme la théorie de Découvrir en pratique. En une à deux heures, vous montez un lab Ansible reproductible (1 control node + 3 managed nodes sur KVM/libvirt), écrivez votre premier inventaire, distribuez vos clés SSH, lancez des commandes ad-hoc, écrivez votre premier playbook et apprenez à décoder les erreurs typiques. À la fin, vous avez un environnement de travail fonctionnel pour toute la suite du parcours RHCE EX294 — chaque commande est exécutée sur des VMs réelles, jamais en théorie.

  • Provisionner 4 VMs AlmaLinux 10 sur KVM/libvirt avec virt-install + cloud-init en quelques minutes ;
  • Préparer les managed nodes (compte sudoers, clé SSH, Python 3, firewall, NTP) — la base technique attendue par la RHCE ;
  • Écrire votre tout premier inventaire en INI puis en YAML, et le valider avec ansible-inventory --graph ;
  • Connecter Ansible à votre lab via SSH par clé, sans saisir de mot de passe à chaque commande ;
  • Lancer des commandes ad-hoc (ansible all -m ping, ansible web -m service -a "...") sur les patterns d’hôtes ;
  • Écrire votre premier playbook idempotent : installer nginx, ouvrir le port 80, démarrer le service, vérifier changed=0 au second run ;
  • Décoder les 10 erreurs fréquentes (Permission denied (publickey), MODULE FAILURE, indentation YAML, Failed to connect…).

Avant d’attaquer cette section, vous devez avoir :

  • Lu et compris la section Découvrir Ansible (idempotence, push SSH, ansible.cfg) ;
  • Installé ansible-core sur votre poste de contrôle (cf. Installer Ansible) ;
  • Une distribution Linux récente (Fedora 42+, Ubuntu 24.04+) avec KVM/libvirt opérationnel et virt-install disponible ;
  • Au moins 8 Go de RAM libre et 40 Go d’espace disque pour héberger 4 VMs AlmaLinux ;
  • Une paire de clés SSH (Ed25519 recommandé). Si ce n’est pas fait, suivez d’abord Créer et gérer des clés SSH.

Mon retour d’expérience — pour ceux qui veulent comprendre

Section intitulée « Mon retour d’expérience — pour ceux qui veulent comprendre »

Si l’une des cartes en haut de page vous a déjà orienté, vous êtes parti sur le bon pied. La suite de cette page s’adresse à ceux qui veulent comprendre la philosophie de cette section : pourquoi je pousse le lab KVM/libvirt plutôt que Docker, pourquoi l’inventaire INI avant YAML, et pourquoi ansible all -m ping est le rite de passage obligatoire.

J’ai animé plusieurs formations Ansible où la moitié de la première journée se passait à dépatouiller des labs cassés : Vagrant qui plante, Docker SSH qui refuse les clés, VMs cloud qui timeout. Tout ce temps perdu n’apprend pas Ansible — il enseigne juste que l’outil de virtualisation choisi était mauvais. Le lab KVM/libvirt que je propose ici est testé, reproductible, et tient en 5 minutes — vous attaquez le vrai sujet (Ansible) immédiatement.

Le parcours est séquentiel : chaque page suppose acquis ce qui précède. Comptez environ 30 minutes par page la première fois, moins lors des révisions.

Le lab utilisé tout au long de cette section et de la suite du parcours est la topologie RHCE de référence :

HôteIPRôleRessources
control-node.lab10.10.20.10Poste Ansible (push SSH)2 GiB RAM / 2 vCPU / 20 GiB disque
web1.lab10.10.20.21Serveur web (groupe webservers)1 GiB RAM / 1 vCPU / 10 GiB disque
web2.lab10.10.20.22Serveur web (groupe webservers)1 GiB RAM / 1 vCPU / 10 GiB disque
db1.lab10.10.20.31Base de données (groupe dbservers)1.5 GiB RAM / 1 vCPU / 15 GiB disque

Les 4 VMs sont sur un réseau libvirt isolé lab-ansible en 10.10.20.0/24, avec NAT sortant et baux DHCP statiques (les MACs sont fixées dans le réseau libvirt pour garantir des IPs stables sans toucher à NetworkManager).

Cinq positions tranchées que cette section assume :

  • Lab KVM/libvirt natif, pas Docker, pas Vagrant, pas multipass. KVM est le plus proche d’un environnement de production RHEL — même réseau libvirt, même cloud-init, même init systemd. Vous apprenez l’outil avec lequel vous travaillerez vraiment, pas un succédané.
  • Inventaire INI avant YAML. L’INI est plus simple, lisible en deux secondes, suffit pour 90 % des cas. Le YAML viendra naturellement quand vous aurez besoin de variables structurées. Démarrer en YAML pour « faire propre » est un piège qui ralentit.
  • Tester le ping AVANT le premier playbook. ansible all -m ansible.builtin.ping vérifie la chaîne SSH + Python + sudo. Si le ping échoue, votre playbook échouera aussi — autant le diagnostiquer maintenant avec une seule commande qu’au milieu d’un playbook de 30 lignes.
  • Idempotence vérifiée à chaque run. Un playbook se relance deux fois : changed=N au premier, changed=0 au second. Si vous voyez changed=N au second run, votre playbook a un bugcommand: sans creates:, ou module mal utilisé.
  • make provision versionné dans Git. Le lab doit pouvoir être détruit et recréé en 5 minutes. Aucun setup manuel non documenté : tout dans Makefile + cloud-init.yaml. Sinon vous perdez votre lab le jour où vous changez de poste, et avec lui 3 mois de mémoire musculaire.

Cinq erreurs typiques de démarrage — chacune coûteuse en temps perdu :

  • Lire la doc sans monter le lab. Lire un playbook ne le fait pas tourner. Vous devez écrire 50 playbooks ratés pour comprendre Ansible, pas en lire 50 sur le web.
  • ansible -m shell -a 'dnf install -y nginx' comme premier réflexe. shell: rejoue à chaque exécution. Toujours chercher le module dédié : ansible.builtin.dnf est idempotent par construction.
  • Ignorer le PLAY RECAP. Les colonnes ok, changed, failed, unreachable, skipped racontent tout ce qui s’est passé. Lire le RECAP est non négociable — sinon vous croyez que ça marche alors que des hôtes ont été silencieusement skippés.
  • Continuer après un Permission denied. Permission denied (publickey) au ping = chaîne cassée. Réparer avant d’avancer, sinon chaque playbook suivant vous coûtera 30 minutes de debug. La page Debug couvre les 10 erreurs typiques avec leur fix.
  • Sauter le quiz de fin de section. 25 questions vérifient le lab, l’inventaire, les ad-hoc et le premier playbook. Si vous séchez sur 5/25, retournez sur les pages concernées avant d’attaquer Écrire du code — sinon vous accumulez la dette technique cognitive.

Êtes-vous prêt à passer à l’écriture de code

Section intitulée « Êtes-vous prêt à passer à l’écriture de code »

Vous pouvez basculer sur la section Écrire du code Ansible (variables, facts, conditions, boucles, templates Jinja2) quand vous savez :

  • Provisionner votre lab de zéro en moins de 10 minutes (make provision) ;
  • Lancer ansible all -m ping et obtenir 4 pong sans saisir de mot de passe ;
  • Écrire un playbook idempotent qui installe + configure + démarre un service ;
  • Lire un PLAY RECAP et expliquer chaque colonne (ok, changed, failed, unreachable, skipped) ;
  • Décoder une erreur SSH ou Python sans Google.

Le quiz Premiers pas ci-dessous (25 questions) vérifie ces capacités.

Une fois le quiz validé, vous attaquez l’écriture systématique de code Ansible : variables, facts, conditions, boucles, handlers, templates Jinja2. C’est la couche la plus volumineuse du parcours, mais aussi celle qui occupe la plus grosse part de la RHCE EX294.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn