Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify dependecies to Ansible Galaxy roles from other roles?

I've specified dependency for my role by declaring it inside meta/main.yml.

---
dependencies:
  - role: angstwad.docker_ubuntu
    src: https://github.com/angstwad/docker.ubuntu
    scm: git
    version: v2.3.0

However when I try to execute Ansible playbook I'm seeing error message:

ERROR! the role 'angstwad.docker_ubuntu' was not found in /home/.../ansible/roles:/etc/ansible/roles:/home/.../ansible/roles:/home/.../ansible

The error appears to have been in '/home/.../roles/docker-node/meta/main.yml': line 5, column 5, but may be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  - role: angstwad.docker_ubuntu
    ^ here

From the error message I conclude that external role angstwad.docker_ubuntu hasn't be imported, even if it has been explicitly mentioned in docker-node/meta/main.yml.


Can I specify external dependencies from Ansible Galaxy even if my role itself has not been uploaded to Ansible Galaxy?

Or do I need to explicitly import them using ansible-galaxy?


From Ansible documentation:

Roles can also be dependent on other roles, and when you install a role that has dependencies, those dependenices will automatically be installed.

You specify role dependencies in the meta/main.yml file by providing a list of roles. If the source of a role is Galaxy, you can simply specify the role in the format username.role_name. The more complex format used in requirements.yml is also supported, allowing you to provide src, scm, version and name.

By following suggestions from another SO question (How to automatically install Ansible Galaxy roles?) it sounds like downloading external dependencies needs to be done explicitly either manually or with workaround.

like image 910
luka5z Avatar asked Oct 24 '25 05:10

luka5z


1 Answers

If the role that has this dependency is itself being installed via ansible-galaxy, then revise meta/main.yml to look like this:

---
dependencies:
  - src: https://github.com/angstwad/docker.ubuntu.git
    scm: git
    version: v2.3.0

Thus, when installing the primary role the docker.ubuntu role will automatically be installed in ~/.ansible/roles/docker.ubuntu and it will run when the playbook is executed.

If the role that has this dependency will NOT be installed via ansible-galaxy, that is, if the dependency is the only thing being installed via the ansible-galaxy command, then docker.ubuntu will have to be installed separately, e.g.

ansible-galaxy install git+https://github.com/angstwad/docker.ubuntu.git

or

ansible-galaxy install git+https://github.com/angstwad/docker.ubuntu.git -p /path_to/my_playbook/roles

This will place the role in your search path (again, ~/.ansible/roles/docker.ubuntu if not specified via -p). In this scenario, revise meta/main.yml to this:

---
dependencies:
  - role: docker.ubuntu

Note that when pulling your role from github, it lands as docker.ubuntu vs docker_ubuntu. See https://galaxy.ansible.com/docs/using/installing.html#dependencies for more. Hope this helps.

like image 109
V01dDweller Avatar answered Oct 27 '25 01:10

V01dDweller