Role Dependency Calculator
Map total role count and load order depth from direct role dependencies and their transitive meta/main.yml dependencies.
Inputs
Roles listed directly in the playbook's `roles:` block.
Average number of dependencies each role declares in its meta/main.yml.
How many levels deep the dependency chains go (role → dep → dep-of-dep → ...).
Total Unique Roles to Load
31roles
Transitive Dependencies (deduped)
25roles
Raw Transitive Dependencies
36roles
Dependency Chain Depth
3levels
Step by step
Raw transitive deps across depth
Σ (direct × avgDeps^level), levels 1..2
= 36 deps
After removing shared/duplicate deps
36 × (1 − 30%)
= 25 deps
Total unique roles: direct + deduped transitive
6 + 25
= 31 roles
How it works
Ansible resolves role dependencies declared in each role's meta/main.yml before running the role itself, and by default loads each unique role only once per play even if multiple roles depend on it. This calculator expands direct roles across your dependency depth to estimate raw transitive dependency count, then applies a shared/duplicate fraction to approximate how many roles Ansible actually loads once deduplication is applied.
Formula
total_roles = direct_roles + raw_transitive × (1 - shared_fraction / 100)
- direct_roles
- Roles listed in the playbook
- raw_transitive
- Sum of deps expanded across all depth levels
- shared_fraction
- Percent of transitive deps that are deduplicated
Frequently Asked Questions
Does Ansible run a shared dependency's tasks more than once?
No — by default, `allow_duplicates: false` in role meta means a role is only executed once per play even if several other roles list it as a dependency, which is why deduplication matters for an accurate total.
What determines load order?
Ansible performs a depth-first resolution: a role's dependencies run before the role itself, in the order declared. Circular dependencies will cause an error, so dependency graphs should be acyclic.
Why does dependency depth matter for maintainability?
Deep dependency chains (roles depending on roles depending on roles) make it hard to reason about execution order and increase the blast radius of a change to a low-level shared role — many teams cap depth at 2-3 levels.
How do I find my actual dependency count?
Use `ansible-galaxy role list` combined with inspecting each role's meta/main.yml, or run `ansible-playbook --list-tasks` which expands and prints the full resolved task list including role dependencies.