i have a playbook which contains 10 tasks. I want to run those tasks only if a when clause if filled.
My first approach was to put on every task the when. E.g.:
- name: My command command: sudo install… when: a == b
The above example worked fine but was not ideal. The second approach was to use roles. Inside a playbook i declared a role. This role contained a task list
which was executed only when the ‘when’ was true. That worked as well but i needed 3 files for something really simple.
My question is if i can have just one single playbook, including all 10 tasks and control all those tasks with one just when clause,
avoid to have always the same when: a == b for every task.
Using a role is the way to go here. Yes, you’ll need to physically crate the role and use 3 files, but conditionally running the role with a “when” statement is the only way, I think, that you can avoid writing “when: a == b” 10 times.
Why do you need 3 files for your role? You said it was simple, so I think you’d only have one file in the role/tasks folder.
Alternatively, the group_by module is a great way to create a dynamic group of hosts where something is true, and then apply tasks only to that group of hosts.