I am trying to create single playbook for every service we have. So here we need to deploy multiple roles on different service instance.
What I want is that, I want to just define variable in different group vars files and depending upon that variable, playbook should run the roles like:
if we have service A which has variable like:
roles:
common
roleA
and service B has:
roles:
common
roleB
now single playbook should run use these variables and depending upon value it should sun respective roles on respective service instances like:
playbook.yml
…
roles:
{ role : “{{ item }}” }
with_items:
roles
But it is not working as I want, it give me error:
“ERROR: with_items is not a legal parameter at this level in an Ansible Playbook”
Any Ideas how can I achieve the same using conditions in playbook??
I think with this I am still setting every configuration related to one service in single var file so this way I am maintaining state of the service at one place and every common thing for all the services will be written in single playbook.
I’ve been trying to find a way to do this as well, with no luck so far.
Ideally, I’d be able to use a loop (either with_items, or with_dict) to run multiple and differing roles on a per-host basis. But, alas, this is not a feature and from what I can find from older posts, will not be a feature. Passing in a list variable to “roles:” is a good idea, but it doesn’t seem like Ansible can use variables (even extra-vars from the ansible-playbook command) to determine which roles are to be used.
I realize that this may not be considered “best practice”, but looping through roles and/or include statements would be a MUCH welcome feature.
If I understand it, there is a need to run a playbook and it would apply
a different set of roles to different set of roles, right?
My suggestion is to define many plays per playbook. You'd not be
defining a "roles" variable to be imported and, sure, there is more
typing involved but it's clean and works:
Having multiple plays in a playbook is obviously the easiest solution. Especially when there’s only a handful of combinations/groups. However, what happens when you have 20 or 30 different combinations? And what happens when the combinations of roles for a group frequently change? It becomes very cumbersome to maintain the playbook and edit it on a per-run basis.
Dynamic inventory allows for this sort of flexibility with assigning variables to groups and/or hosts that define which roles are applicable. It’s difficult to account for these playbooks on the playbook side without looping through roles. I’d like to do something like this: