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  

くらいでやっていたのですが、変数は定義されているが値が未設定、という場合にvar1NoneTypeという型になり、lengthが使えないため、最終的に

when: >
  var1 is defined and
  var1 is not none and
  var1 | length > 0  

という書き方に落ち着きました。