Question about organizing roles and playbooks

Hello,
How to best model the following scenario:

I have a set of hosts in one playbook.

[qa-machines]
HostA
HostB
HostC

I have a subset of these hosts that should receive additional roles.

[jenkins-slaves]
HostC

I have a Vagrantfile that I would like to use to set up one host of each category.

Including first playbook from the second one does not work, because I cannot parameterize the hosts when including a playbook.

What I would like to achieve is, when the “setup-qa-machine” playbook is changed, it does not require to change in the “setup-jenkins-slave” playbook, which would be the case if I repeated the common roles.

it feels a bit like I was not seeing the obvious right now, so any help is appreciated. Thanks!

We implemented this by having host files specific to an environment, so for example, a QA host file, a Prod host file, a Dev host file, etc. Then the groupings within the host file would be based off what they were used for, for example:

[wildfly_servers]
HostA
HostB

[activemq_servers]
HostB

[db_servers]
HostA

[akka_servers]
HostB

[php_servers]
HostA

[php_innovations_servers]
HostA

Then when calling the playbook, we just pull in the appropriate host file for the environment we want to have updated. Is this what you were talking about?

If I understand your question correctly, then why not just have two playbooks? We have an infrastructure.yml playbook which provisions a server for us. We also have another playbook which makes alterations to that server dependent on its role. For example, in our case when we provision a Jenkins server, I run the infrastructure.yml playbook which targets all servers (qa-machines in your case) in its host specification (remember that you can use ansible’s limit attribute to narrow the scope of the playbook from the command line) and then I run jenkins.yml afterwards which targets just the jenkins server (jenkins-slaves in your example).

Not exactly, however I realize that by “double-assigning” hosts in my inventory I have kind of solved my problem already. The issue is that my “second” hosts file / inventory is currently generated by Vagrant, so I need to create the appropriate groups there, also.
Like i suspected the problem lies more with my use of Vagrant, rather than Ansible.

Thanks for your comment!

This is exactly what I am doing, except I need this to happen also when using Vagrant by assigning groups properly when I have the inventory generated by it (see above comment).
I am still deliberating if I should maintain the second inventory directly, or have it generated…
Thanks for your help, much appreciated!