Role included multiple times only seems to run once

52 views
Skip to first unread message

Matthew Rathbone

unread,
Jul 26, 2017, 4:47:02 PM7/26/17
to Ansible Project
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).


Adrian Likins

unread,
Jul 26, 2017, 5:20:33 PM7/26/17
to ansible...@googlegroups.com
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 allow_duplicates: yes to the meta/main.yml file. For example, a role named ‘car’ could add a role named ‘wheel’ to its dependencies as follows:"

Does 'allow_duplictes: yes' work?"

--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+unsubscribe@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/91d394a4-8a40-413e-802e-978117a30929%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Matthew Rathbone

unread,
Jul 26, 2017, 5:40:15 PM7/26/17
to ansible...@googlegroups.com
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

--
You received this message because you are subscribed to a topic in the Google Groups "Ansible Project" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/ansible-project/W2WNjA0altE/unsubscribe.
To unsubscribe from this group and all its topics, send an email to ansible-project+unsubscribe@googlegroups.com.

To post to this group, send email to ansible-project@googlegroups.com.

For more options, visit https://groups.google.com/d/optout.



--
Matthew Rathbone
VP of Engineering
 
(214) 308-2245
2556 Elm St, Dallas, TX 75226
kickbox.io
Reply all
Reply to author
Forward
0 new messages