今まで

今まで、Ansibleのタスクの記述順序は、以下のような順序で書いていた。

  1. name
  2. action
    • +引数
  3. register
  4. when
  5. loop
  6. その他

とにかく、最初に名前で次にアクションだった。

- name: a task
  debug:
    msg:
     - "foo: {{ item.foo }}"
     - "bar: {{ item.bar }}"
  when: item.enabled
  loop: "{{ list }}"
  tags: [never, debug]

↑↑のようなタスクくらいなら全く問題ないが、少し複雑なものを書き始めて1タスクが長くなると、忘れた頃に whenloop が出てくる。 特に、block で複数タスクをまとめたりすると、本当に忘れた頃に when が出てくる。 慌てて最初から読み直すことになり手間だ。

また、blockでは、blockに掛かる when なのか、block中のタスクのwhenなのか分からなくなることが出てきた。

これから

ということで、記述順序を変えてみることにした。 loopwhenをactionより先に書くのだ。

  1. name
    • ここは変わらない。まずはタスク名
  2. loop
    • 次にループ系。
    • ループに使用する変数itemが後続で出てくる可能性を示すために先に書く
  3. when
    • when はそもそものタスクを実行するかどうかに関わってくる。よって、actionより先に記述
    • また、loopのitem変数を使うこともあるので、loopの後に記述する
  4. action
    • +引数
  5. register
  6. その他
- 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: ...

loopwhen以外のキーワードはどうするか様子見中。