Skip to content
Calcrivo

Role Dependency Calculator

Map total role count and load order depth from direct role dependencies and their transitive meta/main.yml dependencies.

Inputs

roles

Roles listed directly in the playbook's `roles:` block.

deps/role

Average number of dependencies each role declares in its meta/main.yml.

levels

How many levels deep the dependency chains go (role → dep → dep-of-dep → ...).

%

Percent of transitive dependencies that are shared/deduplicated across multiple roles (Ansible loads each role once by default).

Total Unique Roles to Load

31roles

Transitive Dependencies (deduped)

25roles

Raw Transitive Dependencies

36roles

Dependency Chain Depth

3levels

Step by step

  1. Raw transitive deps across depth

    Σ (direct × avgDeps^level), levels 1..2

    = 36 deps

  2. After removing shared/duplicate deps

    36 × (1 − 30%)

    = 25 deps

  3. 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.

You might also need