TL;DR
- Ansibleでvariableの存在チェックをしたい場合は
when: > var1 is defined and var1 is not none and var1 | length > 0
経緯
Ansibleのwhenで変数が定義されていて値が存在していたら実行したいケースがありました。
まず注意しなければいけないのは、この評価はPythonではなく、Jinja2で実行されるということ。このため
when: >
var1.length > 0
という表現は使えず
when: >
var1 | length > 0
とする必要があります。同様に
when: >
var1 is not None
という表現は使えず(Jinja2エンジンではis
はテストを指定するキーワードで、None
というテストは存在しない。none
なら存在する)
when: >
var 1 is not none
と指定する必要がある。
最初は、
when: >
var1 is defined and
var1 | length > 0
くらいでやっていたのですが、変数は定義されているが値が未設定、という場合にvar1
はNoneType
という型になり、lengthが使えないため、最終的に
when: >
var1 is defined and
var1 is not none and
var1 | length > 0
という書き方に落ち着きました。