TL;DR
- Ansibleで複数の変数の存在チェック、文字列の場合は空のチェックをしたい場合は
ansible.builtin.fail: msg: Varialbe '{{ item }}' is not defined or empty. when: > item is not defined or item is none or ( item is string and item | length == 0 ) loop: - '{{ var1 }}' - '{{ var2 }}' #nolog: true # Hide credencials, but suppress message.
経緯
Ansibleで引数が定義されていて、空でないかどうかチェックしたい。1個ずつやるのもだるいのでloopでまとめて。 以下でできるかと思ったのだが…
ansible.builtin.fail:
msg: Varialbe '{{ item }}' is not defined or empty.
when: >
item is not defined or
item is none or
item | length == 0
loop:
- '{{ var1 }}'
- '{{ var2 }}'
これだと、変数に数字が設定されていると型がstringにはならず、length
の実行でlen()
メソッドがないと言われてこけてしまう。このため、以下のように型がstringかチェックしたうえでlength
チェックさせる。また、内容がパスワードなどを含む場合はno_log: true
とするとよい。ただしその場合エラー時のメッセージも簡略化されてどの変数でこけたのか、別途調査が必要となる。
ansible.builtin.fail:
msg: Varialbe '{{ item }}' is not defined or empty.
when: >
item is not defined or
item is none or
(
item is string and
item | length == 0
)
loop:
- '{{ var1 }}'
- '{{ var2 }}'
#nolog: true # Hide credencials, but suppress message.