2017-04-04 6 views
3

値を省略する代わりにIOError例外が発生してコードの一部が破損していることがわかりました。安全なルックアップに失敗した場合のデフォルト値へのフォールバック方法

#!/usr/bin/env ansible-playbook -i localhost, 
--- 
- hosts: localhost 
    tasks: 
    - debug: msg="{{ lookup('ini', 'foo section=DEFAULT file=missing-file.conf') | default(omit) }}" 

例外を発生させずに値をロードするにはどうすればよいですか?

ルックアップモジュールはデフォルト値のパラメータをサポートしていますが、これはファイルを開くことができるときにのみ機能するため、私には役に立たないことに注意してください。

ファイルを開くことができなくても機能するデフォルト値が必要です。

答えて

3

私が知る限り、Jinja2は残念なことにどのtry/catchメカニズムもサポートしていません。ファイルが存在するか、空のリストそれ以外の場合は、この例first_found検索リターンファイル名で

--- 
- hosts: localhost 
    gather_facts: no 
    tasks: 
    - debug: msg="{{ lookup('first_found', dict(files=['test-ini.conf'], skip=true)) | ternary(lookup('ini', 'foo section=DEFAULT file=test-ini.conf'), omit) }}" 

は、だから、どちらかのパッチini​​ファイルの検索プラグイン/ファイルAnsibleチームへの問題、またはこの醜い回避策を使用します。ファイルが存在する場合、 ternaryフィルタは iniルックアップを呼び出し、そうでない場合は omitプレースホルダが返されます。

+0

アグリーは控えめな表現になるでしょう。 ;)明るいところでは、それは働いているようだ。それでも、コードを読んだり、他の人にレビューしたりするのが非常に難しいので、私はそれを避けるでしょう。ありがとう! – sorin

関連する問題