Add role dependency to another role without it being executed automatically

Hi all,

I have a role that has a dependency on another role, however by default, Ansible will execute the dependency first. In my case, I do not want this to happen. I don’t want the role executed automatically at all. The role that is requiring this dependency will call it on its own within it’s own tasks. Right now, I am checking if a variable is defined, and if it is, then the tasks within the dependent role will run, but you still see the task line item in the playbook output. I would like to avoid it attempting to execute it altogether.

https://gist.github.com/lconnell/dfb1dc5383517b3bdd9c4832ae9027e2

It doesn't sound like you want a dependency at all.

Why not just stick the slack tasks in the relevant roles?
You're losing a lot of clarity trying to use a role to save a bit
of typing, and from the look of that gist you aren't even saving
much typing :slight_smile:

I agree, I’m going to move them into the roles, especially since the slack role doesn’t really accomplish much.

With that being said, say the dependent role was a bunch of API calls to accomplish some task. In this case, I could call include role and call for a particular task within that role.

If I added it as a dependency to my calling role, I would end up in the same position. Am I just using Ansible and roles, the wrong way here?

How can you add a role as a dependency without it being called by default? Seems like that isn’t possible. Any alternative approaches?

Thanks for your response :slight_smile:

Just add it in the playbook. Ansible reads all roles on the playbook level and includes their variables, the same as a role dependency in meta/main.yml. That way you can run the specific roles using tags without executing the dependencies as well.

Right, that’s what I was originally doing and works just fine. My thought process whas to add it as a dependency so it would get installed via the galaxy command automatically. Without the role added as a dependency, it will need to be a manual process.

Thanks!