CertGrid
Linux Study Guide

Red Hat Certified Ansible (EX294-style) Study Guide

The Red Hat Certified Ansible exam (EX294-style) validates your ability to automate Linux system administration at scale using Ansible: writing playbooks and roles, managing inventories, templating configuration with Jinja2, handling variables and secrets, and ensuring tasks run idempotently. It is a hands-on, performance-based exam aimed at sysadmins, DevOps engineers, and automation practitioners who manage fleets of systems. Expect to build and run real playbooks against managed nodes rather than answer purely theoretical questions.

Domain 1: Ansible Fundamentals

Key concepts you must know · 154 practice questions

Domain 2: Inventory

Key concepts you must know · 161 practice questions

Domain 3: Playbooks and Tasks

Key concepts you must know · 208 practice questions

Domain 4: Variables and Templates

Key concepts you must know · 159 practice questions

Domain 5: Roles and Reuse

Key concepts you must know · 120 practice questions

Red Hat Certified Ansible (EX294-style) exam tips

Study guide FAQ

What does it mean that Ansible is idempotent, and why does the exam care?

Idempotency means running a playbook repeatedly produces the same end state: tasks make changes only when needed and report 'ok' otherwise. Exam tasks are graded on the resulting system state, so non-idempotent constructs like raw command/shell without creates: or changed_when: can cause repeated changes or failures. Always design tasks so a second run reports no changes.

When should I use import_role versus include_role (and import_tasks versus include_tasks)?

Use the import_* (static) forms when you want everything parsed up front so tags and handlers are visible and there are no runtime loops over the inclusion. Use the include_* (dynamic) forms when you need to apply when: conditionals or loops to the inclusion itself or decide at runtime which content to run. Static is processed at parse time; dynamic is evaluated when the play reaches that point.

How do I manage secrets like passwords and API keys in playbooks?

Use Ansible Vault. Encrypt whole files with ansible-vault encrypt secrets.yml (edit later with ansible-vault edit), or encrypt only sensitive values inline with ansible-vault encrypt_string so the rest of the vars file stays readable. Provide the password at run time with --ask-vault-pass or --vault-password-file; never store secrets in plaintext in the repository.

Why did my task fail with an undefined variable when referencing a fact like ansible_default_ipv4?

Facts are only available if they were gathered. If a play sets gather_facts: false, or you limited collection with gather_subset and the needed fact was excluded, that fact variable is undefined and the task fails. Enable gather_facts, add an explicit setup task or include the right gather_subset, or enable fact caching so the values are available.