Why Study with PlanetCert?
The Latest Questions
Practice questions and exam topics aligned with the current exam objectives.
Detailed Explanations
Go beyond the answer. Master the material with comprehensive learning and professional explanations for every concept.

AI-Powered Insights
Personalized preparation guidance that adapts to your performance and identifies weak spots automatically.
Exam Information
Official specifications published by Red Hat
Exam Format
Registration
Validity
EX294 Exam Topics and Domains
EX294 is organized into 10 weighted domains. Expect to work with ansible-navigator, ansible-galaxy, ansible.posix, community.general, and more.
RHCSA Foundation Skills
Understand and use essential tools
- Understand and use essential tools
- Operate running systems
- Configure local storage
- Create and configure file systems
- Deploy, configure, and maintain systems
- Manage users and groups
- Manage security
- Be able to analyze simple shell scripts
- Basic Linux command-line operations
- Shell script analysis
- File system navigation
- Forgetting that RHCSA skills are prerequisite and tested through automation tasks
- Not knowing underlying Linux concepts when debugging Ansible failures
Operate running systems
- Boot, reboot, and shut down a system normally
- Identify CPU/memory intensive processes and adjust process priority
- System process management
- Service state verification
Not ensuring service persistence across reboots
Configure local storage and file systems
- List, create, delete, and manage physical volumes, volume groups, and logical volumes
- Create and configure file systems
- LVM management
- File system creation
- Mount point configuration
- Incorrect fstab entries causing boot failures
- Not verifying filesystem types
Manage security
- Configure firewall settings using firewall-cmd/firewalld
- Configure key-based authentication for SSH
- Set enforcing and permissive modes for SELinux
- SELinux context management
- Firewall rule configuration
- SSH key management
- Not restoring SELinux contexts after file operations
- Forgetting to make firewall rules permanent
Visual Studio Code (VS Code) and Git Integration
Clone a GIT repository
Clone a GIT repository from within VS Code
- Git clone via VS Code
- Repository navigation
- Not configuring Git credentials properly
- Cloning to the wrong directory
Create playbooks and push them to a GIT repository
Create playbooks and push them to a GIT repository from within VS Code
- Playbook creation in VS Code
- Git commit and push
- Forgetting to stage files before committing
- Not configuring git user.name and user.email
Configure ansible-navigator from VS Code
Configure ansible-navigator from within VS Code
- ansible-navigator.yml editing
- VS Code integrated terminal usage
- Incorrect YAML syntax in configuration files
- Wrong execution environment image paths
Run playbooks using an Ansible development container
Run playbooks using an Ansible development container from within VS Code
- Running containerized Ansible playbooks
- Execution environment management
- Not pulling the correct execution environment image
- Container permission issues
- EE image running as wrong user
Understand Core Components of Ansible
Inventories
Understand how Ansible inventories define hosts and groups
- Static inventory file creation
- Group hierarchy design
- Incorrect INI or YAML syntax
- Misunderstanding variable precedence from inventory sources
Modules
Understand how Ansible modules provide task functionality
- Module selection and usage
- Module documentation lookup
- Using shell/command modules when a dedicated module exists
- Not checking module parameters in documentation
Variables
Understand how variables work in Ansible and their precedence
- Variable definition and usage
- Variable precedence management
- Misunderstanding variable precedence order
- Overwriting variables unintentionally
Facts
Understand how Ansible facts provide system information
- Fact gathering and usage
- Custom fact deployment
- Referencing facts with incorrect variable names
- Not gathering facts when needed
Loops
Understand and use loops in Ansible playbooks
- Loop implementation
- Complex iteration patterns
- Confusing loop and with_items syntax
- Not using item variable correctly in loop body
Conditional tasks
Use conditionals to control play execution
- Conditional task implementation
- Complex conditional logic
- Using Jinja2 delimiters inside when clauses
- Incorrect boolean comparisons
Plays and Playbooks
Understand the structure and execution of plays and playbooks
- Playbook authoring
- Multi-play design
- Incorrect YAML indentation
- Confusing play-level and task-level directives
Handling task failure
Configure error handling in Ansible playbooks
- Error handling implementation
- Block/rescue/always patterns
- Overusing ignore_errors instead of proper error handling
- Not understanding block/rescue/always execution flow
Configuration files
Understand Ansible configuration file structure and precedence
ansible.cfg creation and modification
- Not knowing the configuration file search order
- Placing ansible.cfg in wrong location
Roles
Understand Ansible role structure, creation, and usage
- Role creation
- Role directory structure management
- Confusing defaults and vars directories
- Not defining role dependencies correctly
Use provided documentation to look up specific information about Ansible modules and commands
Use provided documentation to look up specific information about Ansible modules and commands
- Documentation lookup
- Module parameter discovery
- Not practicing with ansible-doc before the exam
- Not knowing how to find examples in documentation
Install and Configure Ansible
Install required packages
Install required packages for Ansible automation
- Package installation
- Repository configuration
- Installing community Ansible instead of AAP packages
- Missing Python dependencies
Create and modify ansible.cfg
Create and modify ansible.cfg configuration files
- ansible.cfg creation
- Configuration tuning
- Incorrect section names in ansible.cfg
- Not setting become_method or become_user correctly
Modify ansible-navigator.yml
Modify ansible-navigator.yml configuration settings
- ansible-navigator.yml editing
- Execution environment configuration
- Incorrect YAML indentation in navigator config
- Wrong execution environment image name or pull policy
Create a static host inventory file
- Create a static host inventory file
- Create and use static inventories to define groups of hosts
- Inventory file authoring
- Group hierarchy design
- Syntax errors in INI vs YAML inventory formats
- Not defining children groups correctly
Configure Ansible Managed Nodes
Create and distribute SSH keys to managed nodes
Create and distribute SSH keys to managed nodes
- SSH key generation
- Key distribution to multiple nodes
- Incorrect file permissions on .ssh directory or authorized_keys
- Not testing SSH connectivity before running playbooks
Configure privilege escalation on managed nodes
Configure privilege escalation on managed nodes
- Sudo configuration
- Privilege escalation setup
- Not configuring NOPASSWD for the Ansible user
- Incorrect sudoers syntax causing lockout
Deploy files to managed nodes
Deploy files to managed nodes
- File deployment
- Permission management
- Not setting correct file permissions
- Forgetting to set ownership
Run Playbooks with ansible-navigator
Know how to run playbooks with ansible-navigator
Know how to run playbooks with ansible-navigator
- Playbook execution
- Output interpretation
- Not specifying the correct mode (stdout vs interactive)
- Forgetting to specify execution environment
Use ansible-navigator to find new modules in available Ansible Content Collections and use them
Use ansible-navigator to find new modules in available Ansible Content Collections and use them
- Collection browsing
- Module documentation access
- Not using FQCN when calling collection modules
- Not knowing how to browse collections in ansible-navigator
Use ansible-navigator to create inventories and configure the Ansible environment
Use ansible-navigator to create inventories and configure the Ansible environment
- Inventory inspection
- Environment verification
Not verifying inventory contents before running playbooks
Create Ansible Plays and Playbooks
Know how to work with commonly used Ansible modules
Know how to work with commonly used Ansible modules
Module selection and implementation
- Using command/shell when a specific module exists
- Not leveraging module idempotency
Use variables to retrieve the results of running a command
Use variables to retrieve the results of running a command
- Variable registration
- Output parsing
- Not accessing the correct attribute of registered variable (e.g., .stdout vs .stdout_lines)
- Forgetting to register output before referencing it
Use conditionals to control play execution
Use conditionals to control play execution
- Conditional implementation
- Multi-platform playbooks
- Using Jinja2 {{ }} inside when clauses
- Incorrect operator usage in conditions
Configure error handling
Configure error handling in playbooks
Error handling pattern implementation
- Excessive use of ignore_errors
- Not understanding block/rescue execution order
Create playbooks to configure systems to a specified state
Create playbooks to configure systems to a specified state
- End-to-end playbook authoring
- System state verification
- Not testing playbooks for idempotency
- Missing handlers for service restarts
- Not ensuring persistence across reboots
Use Roles and Ansible Content Collections
Create and work with roles
Create and work with roles
- Role creation with ansible-galaxy init
- Role directory management
- Incorrect directory structure
- Mixing up defaults and vars precedence
Install roles and use them in playbooks
Install roles and use them in playbooks
- Role installation
- Playbook role integration
- Not specifying correct role source in requirements.yml
- Role path configuration issues
Install Content Collections and use them in playbooks
Install Content Collections and use them in playbooks
- Collection installation
- FQCN usage
- Not using FQCN when referencing collection modules
- Collection path misconfiguration
Obtain a set of related roles, supplementary modules, and other content from content collections
Obtain a set of related roles, supplementary modules, and other content from content collections, and use them in a playbook
- Collection content discovery
- RHEL System Roles usage
- Not knowing which collections are available in the execution environment
- Not checking collection compatibility with execution environment version
Automate Standard RHCSA Tasks Using Ansible Modules
Software packages and repositories
Automate software package and repository management
- Package automation
- Repository configuration
- Not specifying state parameter correctly
- Missing GPG key configuration for repositories
Services
Automate service management
- Service state management
- Boot persistence configuration
- Not enabling services (only starting them)
- Forgetting daemon_reload when adding new unit files
Firewall rules
Automate firewall rule management
Firewall rule automation
- Not setting permanent: true for persistent rules
- Forgetting immediate: true to apply rules without reload
File systems
Automate file system creation and mounting
- File system automation
- Mount management
- Not creating the mount point directory before mounting
- Incorrect fstab entries causing boot failures
Storage devices
Automate storage device management
- LVM automation
- Partition management
- Not specifying correct size units for lvol
- Forgetting to create physical volumes before volume groups
File content
Automate file content management
- File content manipulation
- Permission management
- Incorrect regex patterns in lineinfile
- Not handling SELinux contexts for deployed files
Archiving
Automate archiving operations
Archive creation and extraction
- Not setting remote_src correctly
- Incorrect archive format specification
Task scheduling
Automate task scheduling
Cron job management
- Not providing a name for cron entries (making them non-idempotent)
- Incorrect cron time specification
Security
Automate security configuration
- SELinux automation
- Security hardening
- Forgetting to run restorecon after setting contexts
- Not making SELinux boolean changes persistent
Users and groups
Automate user and group management
- User lifecycle management
- Group management
- SSH key deployment
- Not hashing passwords before setting them
- Incorrect group membership specification
Manage Content
Create and use templates to create customized configuration files
Create and use templates to create customized configuration files
- Jinja2 template authoring
- Template deployment
- Incorrect Jinja2 syntax
- Not understanding template variable scope
- Missing newline at end of template
Use Ansible Vault in playbooks to protect sensitive data
Use Ansible Vault in playbooks to protect sensitive data
- Vault encryption and decryption
- Vault-integrated playbook execution
- Forgetting to specify vault password when running playbooks
- Encrypting entire files when only specific variables need protection
- Losing vault password
How do I earn this certification?
Passing EX294 earns the Red Hat Certified Engineer (RHCE) certification. It sits in the Red Hat Enterprise Linux / Ansible Automation track.
- EX374 - Red Hat Certified Specialist in Developing Automation with Ansible Automation Platform exam
- EX467 - Red Hat Certified Specialist in Managing Automation with Ansible Automation Platform exam
- RHCA - Red Hat Certified Architect (Infrastructure)
- EX188 - Red Hat Certified Specialist in Containers examComplementary containerization skills for Ansible execution environment workflows
- EX280 - Red Hat Certified OpenShift Administrator examKubernetes/OpenShift administration skills that pair with Ansible automation
- EX403 - Red Hat Certified Specialist in Deployment and Systems Management examEnterprise deployment and systems management at scale
Practice with Precision
The PlanetCert Simulator mirrors the real exam environment with authentic questions and timed pressure.
How to study for this exam?
The most effective way to prepare for EX294 is by using the PlanetCert Simulator to practice questions and review detailed explanations.
What's changed on this exam?
- ACTIVE
- Last content update: 2025-12-22
- ansible-navigator Primary execution tool for EX294V9K. Replaces ansible-playbook as the expected tool for running playbooks on the exam.
- Execution Environments Container-based execution environments are the standard runtime for ansible-navigator. Candidates must understand EE configuration and usage.
- RHEL System Roles The rhel_system_roles collection is available during the exam and may be tested. Candidates should know how to use roles from this collection.
- Visual Studio Code VS Code integration is a new objective in the RHEL 9 version. Candidates must know how to use VS Code for Git operations and playbook management.
Who should take this exam?
This exam is typically taken by Experienced Red Hat Enterprise Linux system administrators seeking validation of their skills and IT professionals who require certification per organizational mandates (e.g., DoD 8570 directive).
- Red Hat System Administration I (RH124)
- Red Hat System Administration II (RH134)
- or RHCSA Rapid Track Course (RH199)
- Red Hat Enterprise Linux Automation with Ansible (RH294/AU294)
- Comparable work experience as a system administrator on Red Hat Enterprise Linux
Related practice tests
- EX378Red Hat Certified Cloud-native Developer exam
- EX280Red Hat Certified OpenShift Administrator
- EX288Red Hat Certified OpenShift Application Developer
- EX240Red Hat Certified Specialist in API Management exam
- EX210Red Hat Certified Specialist in Cloud Infrastructure exam