all two tasks are executed both times.
I do not want task “Test 1” to be executed.
I can achieve this by running ansible-playbook with the option --skip-tags=anothertag, but this not what I want.
Do you know how I can get that to work or where my scripts are erroneous?
it seems like all tasks of the role are executed, and the tags are not respected.
If I put the role in the playbook without denoting a tag, the tags are respected if specified in the ansible-playbook command, e.g. using --tags “update”
Thanks for pointing that out. I understood the concept now (specifying a tag to a role means flagging all role’s tasks with the tag).
The reason why I wanted to do it differently is because of the following scenario:
Assume you have tasks in two different roles. First, you want to execute a subset of tasks in the roles (e.g. Checks before an update), then you want to execute another subset (e.g. The actual update).
If roles belong to different entities of the infrastructure, and all tasks of one role are located in its main.yml task file, I wanted to execute tasks this way: first all tasks tagged with checkupdate, then all tasks with update. The first update task should only be executed if all checkupdate tasks suceeded.
While I can concatenate playbooks (one for checkupdate, one for update), I haven’t found a way to execute the tasks from a single playbook.
However (if you dont correct me on this), I came to the conclusion, that my role setup was wrong from the start. Or putting it in another way, I wanted an execution order of tasks in the way RoleA: T1a, RoleA: T2a, RoleB: T1b, RoleA: T3a, …
I guess I should refactor my roles so that the checkupdate tasks are be tagged as update instead and executed first, and it should not matter if role A is completely executed before role B…?
Not sure what you are getting at with all the T1a stuff.
Generally speaking your playbooks should be written if extra steps are done, nothing changes, and things don’t matter.
For instance, a step that ensures a service is running, if it has nothing to do, does nothing.
The same should be true of steps that use shell and command modules, they should be guarded with conditionals or the creates= or remotes= parameters to allow for repeated runs of extra steps at any time.