A host appears in more than one group, and both groups have the same tasks in them; any way to run tasks once?

Hi,

If anyone wants Stack Exchange brownie points, I have asked this question on Server fault here:

http://serverfault.com/questions/666457/ansible-a-host-appears-in-more-than-one-group-and-both-groups-have-the-same-ta

I have a playbook that looks something like this:

---
- hosts: group1
  roles:
    - role1
    - role2

- hosts: group2
  roles:
    - role2
    - role3

Now say I have a hosts file that has an entry like this:

[group1]
host1.example.com

[group2]
host1.example.com

Ansible will run the tasks in role2 TWICE for host1.example.com because it appears in 2 groups, and each have role2 assigned to them.

How can I make Ansible realise it has the same role included twice, and thus it should only run it once?

Thanks

the problem is that you are telling ansible to run the role x2 on that
host, imagine you do this:

- hosts: group1
  roles:
    - role1
    - role2

- hosts: group1
  roles:
    - role2
    - role3

ansible would run the role2 on all hosts in group1 twice, it is just
doing what you ask.

if role2 is idempotent this should not really matter much

there are several ways to get around the issue if you really want, this is one:

This is by design.
The only way to go would be to apply role2 only in one playbook to one specific group, and not use role2 in any other playbook on a group that might have common members, like here.

Thanks everyone, I went with making my roles more granular and making sure each host appeared in only one play.

Thanks