だから私は次のようなAnsibleプレイブックを持っています
---
- hosts: mygroup
tasks:
- debug:
msg: "{{ foo | default(inventory_hostname) }}"
私のインベントリファイルは次のようになります
[mygroup]
127.0.0.1
foo
はどこにも定義されていないため、デバッグは期待どおり127.0.0.1
を出力します。
しかし、私のインベントリファイルが次のようになっているとします。
[mygroup]
127.0.0.1 foo=null
プレイブックを実行すると、文字列null
が出力されます。私はfoo=None
でも試しましたが、空の文字列が出力されます。インベントリまたは追加変数を使用して変数をnullに設定するにはどうすればよいですか?
これは、プレイブックで既に定義されている変数の設定を解除する場合に役立ちます。
Ansibleバージョン2.1.1.0を使用しています。
Python(したがってAnsible)は、未定義の変数とnone値の変数を区別します。
一度定義された変数を「未定義」にする方法はありません。
その結果、値をnone
に設定した場合でも、指定した条件は変数を未定義と見なしません。
これは""
を出力ログで取得します。これは、debug
モジュールが値なしを表示する方法であり、空の文字列ではないためです。
ソリューション1
foo
変数の実際の値を確認するには、条件とともに三項演算子を使用します。
- debug:
msg: "{{ ((foo is defined) and (foo != None)) | ternary(foo, inventory_hostname) }}"
ソリューション2
「ラッパー」辞書を使用します。
「ラッパー」辞書内の変数のデフォルト値を定義します。
foodict:
foo: bar
演劇では、変数をfoodict.foo
として参照します。
---
- hosts: mygroup
tasks:
- debug:
msg: "{{ foodict.foo | default(inventory_hostname) }}"
「ラッパー」ディクショナリを無効にして、インベントリファイルの値を上書きします。
[mygroup]
127.0.0.1 foodict=None