今まで
今まで、Ansibleのタスクの記述順序は、以下のような順序で書いていた。
- name
- action
- +引数
 
- register
- when
- loop
- その他
とにかく、最初に名前で次にアクションだった。
- name: a task
  debug:
    msg:
     - "foo: {{ item.foo }}"
     - "bar: {{ item.bar }}"
  when: item.enabled
  loop: "{{ list }}"
  tags: [never, debug]
↑↑のようなタスクくらいなら全く問題ないが、少し複雑なものを書き始めて1タスクが長くなると、忘れた頃に when や loop が出てくる。
特に、block で複数タスクをまとめたりすると、本当に忘れた頃に when が出てくる。
慌てて最初から読み直すことになり手間だ。
また、blockでは、blockに掛かる when なのか、block中のタスクのwhenなのか分からなくなることが出てきた。
これから
ということで、記述順序を変えてみることにした。
loopとwhenをactionより先に書くのだ。
- name
- ここは変わらない。まずはタスク名
 
- loop
- 次にループ系。
- ループに使用する変数itemが後続で出てくる可能性を示すために先に書く
 
- when
- whenはそもそものタスクを実行するかどうかに関わってくる。よって、actionより先に記述
- また、loopのitem変数を使うこともあるので、loopの後に記述する
 
- action
- +引数
 
- register
- その他
- name: a task
  loop: "{{ list }}"
  when: item.enabled
  debug:
    msg:
     - "foo: {{ item.foo }}"
     - "bar: {{ item.bar }}"
  tags: [never, debug]
- name: block tasks
  when: ...
  block:
    - name: Copy files to remote server
      loop: ...
      when: ...
      copy:
        src: ...
        dest: ...
  always:
    - name: ...
      action: ...
loopやwhen以外のキーワードはどうするか様子見中。