In a single Ansible playbook, you may wish to apply some roles to all hosts, while limiting other roles to only certain groups.
While it is certainly possible to apply a role to all hosts and then use a ‘when’ to filter down to the desired group like below:
- hosts: all gather_facts: yes roles: - prerequisites-for-all - { role: echo, when: "'myrole' in group_names" }
This results in a lot of extra output where the “skipping” of each non-matching host task is shown. Instead, it is much cleaner to use multiple ‘hosts’ section in a single playbook.
# applied to all hosts - hosts: all gather_facts: yes roles: - prerequsites-for-all # only applied to 'myrole' group - hosts: myrole roles: - role: echo
You can find my playbook in git at playbook-for-role-group.yaml
REFERENCES
ansible, targeting hosts and groups