Aller au contenu
Infrastructure as Code medium

Exercices RHCE EX294, entraînement par objectif officiel + quiz interactif

45 min de lecture

Logo Ansible

Cette page rassemble les outils d'entraînement à la RHCE EX294 du site. Vous y trouverez le quiz interactif (653 questions catégorisées par sujet RHCE), des exercices commentés par objectif officiel, et le mock examen complet (lab rhce/mock-ex294, 19 tâches en 4h chrono). À utiliser après avoir parcouru les sections de cours et avant de réserver l'examen Red Hat.

L'EX294 ne peut pas se réviser uniquement par lecture, c'est un examen performance-based qui demande de l'écriture sous pression. Vous devez avoir tapé du YAML jusqu'à ce que ansible.builtin.copy mode: "0644" become: true sorte de vos doigts sans réfléchir. Cette page vous aide à mesurer où vous en êtes.

  • un quiz interactif (653 questions) organisé par sujet ;
  • des exercices commentés alignés sur les objectifs officiels ;
  • le mock examen complet (lab rhce/mock-ex294), 19 tâches, 4h chrono ;
  • une grille d'auto-évaluation pour savoir si vous êtes prêt.

Avant de tenter ces exercices, vous devez avoir terminé le parcours :

Sans ces bases, les exercices vont vous frustrer plus que vous former.

Le quiz Ansible du site contient 653 questions réparties sur 10 banques thématiques alignées sur le programme officiel EX294 :

BanqueQuestions
Découvrir (architecture, ansible.cfg, idempotence)54
Premiers pas25
Écrire du code (variables, conditions, boucles, templates, custom facts, import/include)121
Modules (fichiers, paquets, services, RHEL, réseau, diagnostic)74
Inventaires79
Rôles80
Vault & Secrets69
Execution Environments (ansible-navigator, builder)50
Troubleshooting50
Collections (FQCN, requirements, init, CI, migration)51

Chaque question affiche son niveau (debutant / intermediaire / avance / expert) et son lien direct vers la page de cours qui couvre le sujet. Le tirage ne sert jamais la banque entière : le moteur de quiz alloue un budget fixe par niveau (12 questions en débutant, 20 en intermédiaire, 30 en avancé, 40 en expert) qu'il répartit entre les banques ayant des questions de ce niveau. Une banque sans question du niveau demandé est ignorée, donc un tirage « expert » ne vous resservira pas une question de découverte.

Les deux liens ci-dessous ouvrent la même banque de questions. Le second est simplement étiqueté RHCE, ce qui est utile pour retrouver votre historique de passages quand vous alternez révision Ansible générale et préparation examen.

Le lab rhce/mock-ex294 (labs/rhce/mock-ex294/) reproduit l'examen EX294 réel : 19 tâches indépendantes, 4 heures chrono, validation par une suite pytest. Les tâches les plus piégeuses portent plusieurs tests, parce qu'une tâche RHCE se rate rarement en bloc : un port ouvert mais non permanent, un booléen SELinux qui retombe au reboot, un montage sans entrée fstab, un NOPASSWD plus large que demandé. À chaque fois l'état est juste à l'instant T et faux après redémarrage.

Le point le plus déstabilisant du lab est son setup.yaml : il défait volontairement le résultat attendu avant de vous rendre la main. Vous ne partez donc pas d'une machine neuve mais d'un système partiellement configuré de travers, exactement comme en salle d'examen.

Cette liste sert de grille de dépouillement. Après chaque passage, cochez ce qui est passé et notez la catégorie des échecs : c'est le regroupement par catégorie, pas le score brut, qui vous dit quelle section de cours reprendre. Les tâches 13 à 19 sont celles qui font basculer un candidat, parce qu'elles ne se vérifient pas en relisant son YAML mais en interrogeant la machine (PLAY RECAP, crontab -l -u appuser, ansible-galaxy collection list).

  1. Inventaire statique, hosts.yml avec 2 groupes (webservers, dbservers) et ansible_python_interpreter
  2. Variables hiérarchiques, group_vars/ et host_vars/, vérification de la précédence
  3. Ansible Vault, vault.yml chiffré par ansible-vault encrypt puis consommé dans un playbook
  4. Modules fichiers, copy: et template: avec mode: "0640" et owner: app
  5. Modules paquets, dnf pour nginx, mariadb-server, python3-libselinux
  6. Services, systemd pour nginx et mariadb (started + enabled)
  7. Utilisateurs, appuser (UID 2001) + appgroup (GID 2001) + sudo NOPASSWD limité à systemctl
  8. SELinux, booléen permanent httpd_can_network_connect
  9. Firewalld, permanent: true, immediate: true sur http/https/mysql
  10. Stockage, LV lv_data de 300 Mo, fs xfs, monté sur /mnt/data avec entrée fstab
  11. Rôle complet, app_deploy combinant 2 modules, 1 handler et 1 template
  12. Conditions et boucles, 5 fichiers /tmp/file1 à /tmp/file5 au contenu dépendant de la parité
  13. Gestion d'erreur, rattraper un échec réel (rescued=1, ignored=0), en consigner la trace, poursuivre
  14. Déploiement par vagues, traiter les webservers un à la fois avec stabilisation entre les vagues
  15. Délégation, écrire un journal unique sur db1.lab depuis un play qui cible les webservers
  16. Tâches planifiées, rapport quotidien à 04h05 dans la crontab d'appuser
  17. Tags, tâches sélectionnables par --tags, un tag systématique et une purge hors de portée
  18. Facts personnalisés, publier lab100 dans /etc/ansible/facts.d et prouver qu'il remonte
  19. Content Collections, installer une collection épinglée via requirements.yml, prouver qu'elle est résolvable, utiliser un de ses modules

Le barème ci-dessous raisonne en tâches validées, pas en tests pytest : une même tâche peut échouer sur deux tests pour une seule cause (le booléen SELinux posé mais non persistant, par exemple). Comptez donc une tâche comme ratée dès qu'un de ses tests est rouge, et lisez la ligne correspondante. Le temps compte autant que le score : réussir 19 tâches en 4h05 signifie que vous échouerez à l'examen réel, qui coupe la session à 4h.

Score mockVerdict
19/19 en moins de 3h30Prêt pour l'examen réel
17-18/19 en moins de 4hRéviser les catégories ratées avant de tenter
14-16/19 ou plus de 4hRefaire le mock dans 1 semaine après révision ciblée
moins de 14/19Reprendre les sections de cours correspondantes

Recommandation : refaire 2 fois le mock à 1 semaine d'intervalle. La première fois pour identifier les faiblesses, la deuxième pour valider les corrections sous pression chrono. L'écart entre les deux passages est plus informatif que le score absolu : une progression faible signale un problème de méthode (vous cherchez la syntaxe au lieu de la connaître), pas un manque de révision.

Les exercices suivants sont regroupés par grand objectif du programme officiel Red Hat. La numérotation est celle de ce site et démarre à 2 : l'objectif 1, les tâches attendues d'un RHCSA, est un prérequis de la certification et se révise dans la section Linux, pas ici. Chaque tableau donne le sujet, le lab dédié dans le dépôt ansible-training, et la page de cours à relire en cas d'échec.

Lisez ces tableaux dans l'ordre inverse de votre confort : commencez par les objectifs où le quiz vous a le plus fait perdre de points. Un exercice réussi du premier coup ne vous apprend rien de neuf à ce stade.

Cet objectif est celui qu'on croit acquis et qui coûte des points en salle. Le jury ne teste pas votre capacité à réciter la liste des fichiers de configuration, mais votre réflexe de poser un ansible.cfg dans le répertoire du projet avant d'écrire la moindre tâche. Le deuxième exercice porte sur la précédence : ANSIBLE_CONFIG écrase tout le reste, et c'est la cause classique d'un playbook qui se comporte différemment selon le terminal utilisé.

ExerciceLabPage de cours
Configurer ansible.cfg projet avec callbacksLab 03aConfiguration Ansible
Vérifier la précédence ANSIBLE_CONFIGLab 03aIdem

Les commandes ad-hoc ne rapportent pas de points directement, elles vous font gagner du temps. Pendant l'examen, elles servent à vérifier l'état d'une machine sans écrire de playbook : un paquet installé, un service actif, un fact remonté. Le second exercice, setup -a 'filter=ansible_local', est celui à maîtriser en priorité, car c'est la seule façon rapide de prouver qu'un fact personnalisé déposé dans /etc/ansible/facts.d est bien collecté.

ExerciceLabPage de cours
ansible all -m pingLab 03Commandes ad-hoc
setup -a 'filter=ansible_local'Lab 14aCustom facts

L'inventaire est la première tâche du mock et la plus coûteuse à rater : toutes les tâches suivantes ciblent des groupes que vous avez définis ici. Une erreur de groupe ne se voit pas, elle se traduit par des tâches qui s'exécutent partout ou nulle part. L'exercice sur l'inventaire dynamique sort du strict périmètre de l'examen, mais il fait comprendre pourquoi group_vars/ est indexé sur le nom de groupe et non sur le fichier d'inventaire.

ExerciceLabPage de cours
Inventaire YAML 2 groupes + group_varsLab 55Inventaires
Inventaire dynamique (KVM plugin)Lab 57Idem

Un seul exercice ici, mais il couvre deux réglages qu'on confond souvent. forks fixe le nombre de connexions simultanées ouvertes par le nœud de contrôle, c'est un paramètre de performance. serial découpe le play en vagues d'hôtes traitées l'une après l'autre, c'est un paramètre de disponibilité. La tâche 14 du mock attend le second, pas le premier.

ExerciceLabPage de cours
forks=20, serial: 2 rolling updateLab 09Parallélisme

Objectif 6, ansible-navigator et environnements d'exécution

Section intitulée « Objectif 6, ansible-navigator et environnements d'exécution »

ansible-navigator est l'outil que Red Hat pousse depuis RHEL 8, et l'examen s'attend à ce que vous sachiez lancer un playbook dans un environnement d'exécution conteneurisé. Le premier exercice vous fait exécuter un playbook avec l'image creator-ee ; le second vous fait inspecter un environnement pour répondre à la seule question qui compte en examen : quelles collections sont réellement embarquées dedans. Un playbook correct qui échoue parce que la collection manque dans l'image reste un playbook raté.

ExerciceLabPage de cours
ansible-navigator run avec creator-eeLab 84Modes interactifs
Inspecter un EELab 85Inspecter un EE

C'est le bloc le plus lourd du programme, et les quatre exercices sont classés par difficulté croissante. Les deux derniers sont ceux qui départagent : block/rescue/always est attendu à la tâche 13 du mock avec un compteur rescued=1 et ignored=0, ce qui interdit de tricher avec ignore_errors: true. Quant à import_tasks contre include_tasks, retenez que le premier est résolu avant l'exécution, ce qui le rend incompatible avec une boucle ou une variable calculée à la volée.

ExerciceLabPage de cours
Premier playbook nginx idempotentLab 04Premier playbook
block/rescue/alwaysLab 23Blocks
Conditions when: + boucles loop:Labs 19-21Contrôle de flux
import_tasks vs include_tasksLab 30aImport vs Include

Ces exercices reprennent des tâches d'administration que vous savez déjà faire à la main, ce qui est précisément le piège : l'examen ne vous demande pas le résultat, il vous demande le résultat persistant et idempotent. Un port ouvert avec firewall-cmd sans --permanent, un booléen SELinux positionné sans persistent: true, un montage sans entrée fstab : dans les trois cas la machine est conforme jusqu'au prochain redémarrage, et la suite pytest du mock teste explicitement cette persistance.

ExerciceLabPage de cours
User + group + sudoersLabs 40-43Module user · group · sudoers
Firewalld + SELinuxLabs 44-45Module firewalld · SELinux
LVM + XFS + mountLab 48Idem

Les templates Jinja2 et Ansible Vault tombent presque toujours ensemble, parce que l'examen vous fait générer un fichier de configuration contenant un mot de passe. Les filtres default() et combine() du premier exercice évitent le playbook qui plante sur une variable non définie, cas fréquent quand le correcteur relance votre code avec un inventaire légèrement différent. Le troisième exercice, les vault-id multiples, est le seul qui demande un vrai entraînement au clavier : la syntaxe --vault-id prod@prompt ne s'improvise pas sous chrono.

ExerciceLabPage de cours
Template Jinja2 avec default() + combine()Lab 19Filtres Jinja2
Vault encrypt_stringLab 78Chiffrer fichier ou variable
Multi vault-idLab 79Vault-id multiples

Le rôle est la structure que l'examen sanctionne le plus mécaniquement : un handler mal déclaré, un defaults/main.yml absent, et la tâche tombe. Entraînez-vous à créer l'arborescence complète sans réfléchir, ansible-galaxy role init fait le gros du travail. Sur les collections, la tâche 19 du mock exige une version épinglée dans requirements.yml et la preuve que la collection est résolvable via ansible-galaxy collection list, pas seulement téléchargée. Le dernier exercice combine les deux sujets précédents : un vars/main.yml chiffré à l'intérieur d'un rôle, avec la difficulté que vars/ écrase defaults/ dans la précédence.

ExerciceLabPage de cours
Créer un rôle complet (defaults + handlers + meta)Lab 58Créer un premier rôle
requirements.yml multi-sourcesLab 94requirements.yml
Vault dans un rôle (defaults + vars/main.yml chiffré)Lab 81Vault dans les rôles

Cette progression en six temps tient en trois semaines si vous disposez de quelques heures par jour. Son principe : le quiz mesure la connaissance, les labs construisent le réflexe, le mock valide la tenue sous chrono. Sauter une étape produit le profil classique du candidat recalé, celui qui sait répondre à toutes les questions et n'arrive pas à écrire un rôle complet en vingt minutes.

  1. Quiz par sujet, pour chaque banque (Découvrir, Premiers pas, Écrire du code...) : viser 70 % minimum au niveau avancé. Si <70 %, retourner sur les pages de cours.

  2. Exercices ciblés, refaire les labs où vous avez raté des questions du quiz. Le lab vous oblige à écrire du code sous contrainte d'idempotence.

  3. Mock 1, premier passage du lab rhce/mock-ex294. Score attendu : 13-16/19. Identifier les faiblesses.

  4. Révision ciblée, relire les sections où vous avez perdu des points au mock 1.

  5. Mock 2, second passage du lab rhce/mock-ex294, 1 semaine plus tard, en chrono strict 4h. Score attendu : 19/19 en moins de 3h30.

  6. Réservation examen, si Mock 2 atteint 18/19 en moins de 4h, vous pouvez réserver. Sinon, ajouter une semaine de révision avant Mock 3.

Cette liste ne mesure pas vos connaissances mais votre automatisme. Chaque point est formulé en « sans relire la doc » ou « sans hésitation » parce que l'EX294 ne sanctionne pas l'ignorance, il sanctionne la lenteur : quatre heures pour une vingtaine de tâches laissent environ douze minutes par tâche, écriture, exécution et vérification comprises. Cochez honnêtement, un point sur lequel vous hésitez vous coûtera trois fois ce budget le jour J.

Critères non négociables avant de réserver l'examen :

  • Vous écrivez un playbook idempotent sans relire la doc à chaque module.
  • Vous structurez un rôle (defaults / vars / tasks / handlers / meta / templates) sans hésitation.
  • Vous chiffrez et utilisez un Ansible Vault (encrypt_string, vault-id multi-environnements).
  • Vous lancez ansible-navigator run --eei creator-ee sans relire la commande.
  • Vous résolvez un changed=N au second run en quelques minutes.
  • Vous avez réussi le mock à 19/19 en moins de 3h30, deux fois consécutivement.
  • Vous avez 70 % minimum sur chaque banque du quiz interactif niveau avancé.

Si un seul de ces points hésite, ajoutez une semaine de révision.

Ces huit rappels ne sont pas les notions les plus difficiles du programme, ce sont celles qui font perdre des points alors que le raisonnement était juste. Le cas du mode: le montre bien : sur ansible-core 2.20, mode: 644 sans zéro initial et sans guillemets donne un fichier en 1204, sticky bit compris, parce que le nombre est lu en décimal ; mode: 0644 passe encore, le zéro initial déclenchant l'interprétation octale du parseur YAML. Quoter systématiquement, mode: "0644", supprime la question. Relisez cette liste juste avant l'examen, puis rendez la feuille : elle sert à recharger la mémoire de travail, pas à réviser.

  • ansible.cfg : la variable ANSIBLE_CONFIG gagne sur tout, puis le fichier du répertoire courant, puis ~/.ansible.cfg, puis /etc/ansible/ansible.cfg.
  • FQCN systématique : ansible.builtin.copy, jamais copy.
  • mode: toujours quoté : mode: "0644".
  • firewalld : permanent: true, immediate: true.
  • python3-libselinux côté cible si SELinux est en enforcing.
  • changed_when: false sur toute commande de lecture.
  • Vérifier l'idempotence : le second run doit afficher changed=0.
  • ansible-doc <module> est autorisé pendant l'examen, et ansible-doc -l | grep <mot> retrouve un FQCN oublié.

Voir l'aide-mémoire complet pour la liste exhaustive.

  • Quiz interactif : 653 questions, 10 banques alignées sur les objectifs RHCE 2026.
  • Mock examen (lab rhce/mock-ex294) : 19 tâches en 4h chrono, à passer 2 fois.
  • 70 % minimum sur chaque banque du quiz au niveau avancé avant de réserver.
  • Mock 2 à 18/19 en moins de 4h = signal prêt pour l'examen réel.
  • ansible-doc est autorisé pendant l'examen, pratiquer sa navigation rapide.
  • Performance-based : la vitesse compte autant que la justesse.
  • Doc pendant l'examen : quand un exercice bloque sur un paramètre oublié, la bonne réaction est de le retrouver en trente secondes.
  • Préparer l'EX374 : la certification qui prend la suite pour qui vise le développement de contenu Ansible.
  • Versionner ses playbooks avec Git : l'examen attend aussi le geste Git, rarement travaillé pendant les révisions.

Ce site vous est utile ?

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

Je maintiens +700 guides gratuits, sans pub ni tracking. Un soutien, même symbolique, m'aide à couvrir l'hébergement et à garder ces ressources gratuites. Merci pour votre appui.

Le formulaire ne s'affiche pas ? Ouvrir Ko-fi dans un onglet.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn