Role included multiple times only seems to run once

Hey guys,

So I have a project setup in the following way:

  • requiring an external redis-server role
  • my own role called redis-cluster-shard that uses redis-server as a dependency
  • a playbook that applies this role twice to the same node. Like this:

`

  • role: “rds-cache-shard”
    rds_port: 7000
  • role: “rds-cache-shard”
    rds_port: 7001

`

The way a redis install is created is through the dependency in meta/main.ytml, which looks like this:
`

dependencies:

  • role: redis-server
    redis_service_name: “rds_shard_{{rds_port}}”
    redis_logfile: “/var/log/rds_shard_{{rds_port}}.log”
    redis_clustermode_enabled: “yes”
    redis_port: “{{rds_port|int}}”
    redis_save:
  • 3600 1

`

The problem I’m having is that only one redis shard is created. IE the dependency only runs once, on the first rds-cache-shard include.

Am I doing something wrong? I’d expect the dependency tasks to run each and every time a role is included, especially as I’m scoping it with variables (rds_port).

http://docs.ansible.com/ansible/latest/playbooks_roles.html#role-dependencies

“Roles dependencies are always executed before the role that includes them, and are recursive. By default, roles can also only be added as a dependency once - if another role also lists it as a dependency it will not be run again. This behavior can be overridden by adding to the file. For example, a role named ‘car’ could add a role named ‘wheel’ to its dependencies as follows:”

Does ‘allow_duplictes: yes’ work?"

Hey Adrian – thanks for your response!

I did about an hour of reading and playing around with dependencies and I figured it out:

I needed to add allow_duplicates: yes to the role I was depending on, not my role. So I forked the redis-server role, added the statement, and it works!

Thanks for helping to point me in the right direction.

Matthew