One way of selecting wether to apply a role or not in Ansible is to set variables like “webserver: True” or “mysql: True” on the hosts and then in playbook do
- { role: webserver, when: webserver is defined and webserver }
Another is to have the host member of groups and have plays like:
- hosts: webserver roles: webserver
I find the latter more flexible and to my liking. Sometimes you have both and need to bring them together. This can be done with the ansible action group_by
- hosts: all connection: local gather_facts: false tasks: - group_by: key: "{% if webserver is defined and webserver %}webserver{% endif %}" name: group_by(webserver) - group_by: key: "{% if mysql is defined and mysql %}mysql{% endif %}" name: group_by(mysql)