What is the difference between a static and a dynamic inventory?
Understand the difference between static and dynamic inventories in Ansible, when to use each, inventory plugins, examples and common interview questions.
Expected Interview Answer
A static inventory is a hand-maintained file (INI or YAML) that lists hosts and groups explicitly, while a dynamic inventory is generated on the fly by a script or plugin that queries an external source such as a cloud provider, so the host list always reflects live infrastructure.
Static inventories are simple and version-controllable but must be edited manually every time a machine is added or removed, which is impractical for autoscaling or ephemeral environments. Dynamic inventories run an inventory plugin (for example aws_ec2, azure_rm, or gcp_compute) or an executable script that returns JSON describing hosts, groups, and variables at runtime, so Ansible always targets the current fleet without manual edits.
- Static is simple, explicit and easy to version-control
- Dynamic stays in sync with autoscaling and ephemeral cloud hosts
- Dynamic groups hosts automatically by tags, region or type
- Avoids manual editing errors in large fleets
- Both can be combined via an inventory directory
AI Mentor Explanation
A static inventory is like a printed team sheet pinned to the dressing-room wall before the match: it lists exactly eleven named players and never changes during play. A dynamic inventory is like a live team feed that auto-updates as substitutes and concussion replacements come on, always showing whoever is currently on the field rather than a fixed list you typed out by hand.
Step-by-Step Explanation
Step 1
Define hosts explicitly (static)
Write an INI or YAML file listing hosts under named groups, e.g. [webservers] in a hosts file.
Step 2
Assign variables
Attach group_vars and host_vars so each host or group carries its own connection and role variables.
Step 3
Pick a dynamic source
Choose an inventory plugin (aws_ec2, azure_rm, gcp_compute) or an executable script that returns JSON.
Step 4
Configure the plugin
Create an inventory file ending in aws_ec2.yml (or similar), set filters, regions and keyed_groups for auto-grouping.
Step 5
Run against the live source
Ansible calls the plugin at runtime, fetches current hosts, and targets whatever infrastructure exists right now.
Step 6
Combine when needed
Point ansible at an inventory directory holding both a static file and a dynamic plugin so results merge.
What Interviewer Expects
- Clear definition of both inventory types
- When to prefer dynamic (cloud, autoscaling, ephemeral hosts)
- Knowledge of inventory plugins vs legacy scripts
- Understanding of keyed_groups and auto-grouping by tags
- Awareness that both can be combined in an inventory directory
Common Mistakes
- Thinking dynamic inventory is just a script and ignoring modern plugins
- Editing static files by hand in an autoscaling environment
- Forgetting to enable the inventory plugin in ansible.cfg
- Confusing inventory with playbooks or vault
- Not grouping cloud hosts by tag, losing targeting flexibility
Best Answer (HR Friendly)
“A static inventory is a fixed list of servers you write out by hand, while a dynamic inventory is generated automatically by asking your cloud provider which machines exist right now. Dynamic inventories keep Ansible accurate when servers are constantly created and destroyed, so you never have to update the list manually.”
Code Example
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com ansible_user=admin
[production:children]
webservers
dbservers# inventory.aws_ec2.yml
plugin: amazon.aws.aws_ec2
regions:
- us-east-1
filters:
tag:Environment: production
keyed_groups:
- key: tags.Role
prefix: roleFollow-up Questions
- How does the aws_ec2 inventory plugin group hosts by tags?
- What is the difference between an inventory plugin and a legacy inventory script?
- How do you combine static and dynamic inventories together?
- How do group_vars and host_vars work with dynamic inventories?
- How do you cache dynamic inventory results to speed up runs?
MCQ Practice
1. Which inventory type automatically reflects newly launched cloud instances without manual edits?
A dynamic inventory queries the cloud provider at runtime, so newly launched hosts appear automatically.
2. In a modern dynamic inventory, hosts are typically auto-grouped using?
Inventory plugins use keyed_groups to build groups automatically from host attributes like cloud tags.
3. Which is a valid reason to keep a static inventory?
Static inventories are simple, explicit and easy to commit to version control for stable, fixed host sets.
Flash Cards
What is a static inventory? — A manually maintained INI or YAML file listing hosts and groups explicitly.
What is a dynamic inventory? — A host list generated at runtime by a plugin or script querying a live source like a cloud API.
Name a common dynamic inventory plugin. — amazon.aws.aws_ec2, azure.azcollection.azure_rm, or google.cloud.gcp_compute.
How are dynamic hosts auto-grouped? — Via keyed_groups that build groups from host attributes such as cloud tags or regions.
Can you use both together? — Yes — point Ansible at an inventory directory containing both a static file and a dynamic plugin.