2016-07-25 10 views
2

フィルターチェインを使用して条件節をデバッグしていて、定義されていない変数(omit)をチェックしている間に、結果はフィルターが文字列にどのように含まれているか。可能性:Jinja2フィルターチェーンを使用するときに "place holderを省略"

私の意図は、Anuchタスクのwhen節をvalueという条件で作成することでした。 Ansible documentationの連鎖の「注」につきましては、omitを追加しようとしましたが、次の結果が得られました。

マイ脚本:

--- 
- hosts: target 
    tasks: 
    - debug: msg="{{ value_not_defined|default('0') | int or omit }}" 
    - debug: msg="debug {{ value_not_defined|default('0') | int or omit }}" 

結果の関連部分:

TASK [debug] ******************************************************************* 
ok: [192.168.1.2] => { 
    "msg": "Hello world!" 
} 

msg: Hello world! 

TASK [debug] ******************************************************************* 
ok: [192.168.1.2] => { 
    "msg": "debug __omit_place_holder__31268e787e722b495d512986994bcd66ce943a69" 
} 

msg: debug __omit_place_holder__63eea0d96dd6ed867b95405e11d87dddf61f448d 

次の結果はどこから来るのか?

  • Hello world!
  • __omit_place_holder__63eea0d96dd6ed867b95405e11d87dddf61f448d

なぜdebugさんmsgに他の文字列に応じて値が変化しますか?

答えて

3

omitは、モジュールにパラメータを指定したくない場合に使用する特別な変数です。
arg="{{omit}}"をモジュールに渡すと、argをまったく渡さないのと同じです。
カスタムパラメータが定義されていない場合、モジュールのデフォルト値に依存する場合に便利です。
documentationに例があります。あなたの例では

次のように{{ value_not_defined|default('0') | int or omit }}が評価されます

  • None | default('0') | int or omitNoneは説明の目的のためにここで私が使用している)
  • '0' | int or omit
  • 0 or omit
  • omit

最後のステップは、理由のpythonでboolean operationsは次のとおりです。

次の値がfalseとして解釈されます。この中で、虚偽、なしすべてのタイプのゼロ、数値、および空の文字列とコンテナ

気にあなたのタスクは、このように解釈されます。それは何です(msgパラメータなしで最初debugを呼び出すことで結果の

- debug: msg="{{ omit }}" 
- debug: msg="debug {{ omit }}" 

をfor)、第2のdebugmsg="debug __omit_place_holder..."となります(omitdebugと連結されているため、通常の文字列になります)。

msgパラメータなしでdebugモジュールが呼び出された場合、Hello world!が出力されます。

関連する問題