Ansible playbookが意図通り動かないことがあったため、原因を確認したことの備忘
元の処理(OK)
以下のような処理があった。
- name: 処理1
foo:
tags: allways
- name: 処理2
bar:
tags: allways
- name: 処理3
loop: [tasks1, tasks2, tasks3]
include_tasks:
file: "{{ item }}.yml"
apply:
tags: "{{ item }}"
tags: always
tags: alwaysが全タスクに付いていたので纏めようとした。
tagsをblockで集約(→NG)
- tags: always
block:
- name: 処理1
foo:
- name: 処理2
bar:
- name: 処理3
loop: [tasks1, tasks2, tasks3]
include_tasks:
file: "{{ item }}.yml"
apply:
tags: "{{ item }}"
しかし、--tags tasks2などにより実行処理を制御しようとしても、tasks1, tasks2, tasks3 全ての処理が実行されてしまう挙動となった。
原因
blockでのtagsなどの属性指定は、include_tasksなどではapplyをつけていなくとも呼び出し先にも継承されてしまう為。
Note
All tasks in a block, including the ones included through include_role, inherit directives applied at the block level.