with_itemsでundefinedを回避するdefaultフィルター
渡辺です。 今日はAnsibleの小ネタをひとつ。
Ansibleではwith_items
を利用すると、いわゆるループ処理を行うことができます。
変数としてリストを定義し、with_items
を使い、複数の設定を行うことができるため、たくさんのユーザを作成したいようなケースで重宝します。
users: - su-metal - yui-metal - moa-metal
with_items: users
ところが、with_items
に対応する変数が無い場合、次のようなエラーが発生します。
fatal: [localhost]: FAILED! => {"failed": true, "msg": "'users' is undefined"}
変数usersが未定義(undefined
)であることが原因です。
この時、次のように空のリストを定義すれば解決します。
users: []
しかし、Roleで提供する場合など、明示的に空のリストを定義させず、いい感じに処理して欲しいところです。
Jinja2のdefaultフィルターで解決!
未定義の場合にデフォルト値を設定したい場合、Jinja2のdefaultフィルターを利用しましょう。
with_items: "{{ users | default([]) }}"
これで、変数が未定義(undefined
)の場合、自動的に空のリストとして扱います。
以上。