てくなべ (tekunabe)

ansible / network / automation / StackStorm

【Ansible】when はタスクの最後に指定しなくても良い

(このツイートのブログ版です)

■ はじめに

Ansible の Playbook では、特定の条件を満たすときのみそのタスクを実行するという指定に when が利用できます。

上記のサンプルでもタスクの最後に when を指定していて、Web上などの他のサンプルでも最後に指定しているものが多い印象があります。 ですが、実際は YAML 的にはマッピング(ディクショナリ)なので、順番にどこでも大丈夫です。以下にパターンを記載します。

■ タスクの最後に when を指定する例

よくあるパターンです。大丈夫です。

---
- hosts: junos
  gather_facts: no

  tasks:
    - junos_command:
        commands:
          - show version
      when: true == true    # ここに書くサンプルが多い

■ タスクの最初に when を指定する例

---
- hosts: junos
  gather_facts: no

  tasks:
    - when: true == true    # ここでもOK
      junos_command:
        commands:
          - show version

コードの if分のイメージに近いでしょうか。

if true == true:
  do_something()

■ タスクの途中に when を指定する例

途中でも大丈夫です。

- hosts: junos
  gather_facts: no

  tasks:
    - name: commandtest
      when: true == true    # ここでもOK
      junos_command:
        commands:
          - show version

■ 注意点

この記事は「こう書いても動く」ということを示すのみであり、特にどれが推奨という意図はありません。 プロジェクト指定の書き方や、慣例に合わせるなどの事情に従っていただければと思います。