(このツイートのブログ版です)
どこで聞いたか覚えてないのですが、Ansible の Playbook のタスクで 「when による条件をつけるとき、タスクの最後に指定するのが違和感がある。プログラムの if 分だと頭につけるが。」という意見があって、when はどこでもOKということを思い出しました。when に限らず順番関係ないですよね。 pic.twitter.com/kH33DMy4ON
— よこち (@akira6592) August 11, 2018
■ はじめに
Ansible の Playbook では、特定の条件を満たすときのみそのタスクを実行するという指定に when
が利用できます。
- 公式ドキュメント Conditionals > The When Statement
上記のサンプルでもタスクの最後に 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
■ 注意点
この記事は「こう書いても動く」ということを示すのみであり、特にどれが推奨という意図はありません。 プロジェクト指定の書き方や、慣例に合わせるなどの事情に従っていただければと思います。