2017-09-06 6 views
0
Ansibleで

、私は環境変数のリストから、最初に定義された値を取得しようとしています:、BUILD_USER_EMAILGERRIT_CHANGE_OWNER_EMAILGERRIT_EVENT_ACCOUNT_EMAILGERRIT_PATCHSET_UPLOADER_EMAIL不可能なJinja2ルックアップループをリストにする方法は?

変数がある場合は1を取得するためのコードが

- email: "{{ lookup('env', 'BUILD_USER_EMAIL')}}" 

のように見えます定義されていないので、これは空の文字列に解決されます。

ここで問題は、これをフォールバックのループとして実装する方法です。最初に定義された値を見つけようとします。

答えて

2

回答はOP’s own researchに基づいて改善されました。あなたは、変数のどちらも設定された場合、それは失敗したくない場合は

tasks: 
    - debug: 
     msg: "{{ envcandidates | reject('equalto', '') | first }}" 
    vars: 
     envcandidates: “{{ lookup('env', 'BUILD_USER_EMAIL', 'GERRIT_CHANGE_OWNER_EMAIL', 'GERRIT_EVENT_ACCOUNT_EMAIL', 'GERRIT_EVENT_ACCOUNT_EMAIL', wantlist=True) }}” 

あなたは| defaultフィルタを追加したい場合があります、または単にenvcandidatesリストの最後にデフォルト値を追加します。

+0

いいね!私は単純な '|選択| select docが "テストが指定されていない場合、各オブジェクトはブール値として評価されます"と表示されます。空の文字列はFalseとして評価され、選択されません。それほど明白ではありません。 – zigarn

1

私は解決策としてこれを見ることができます:

- email: "{{ lookup('env', 'BUILD_USER_EMAIL') | 
      default(lookup('env', 'GERRIT_CHANGE_OWNER_EMAIL'), True) | 
      default(lookup('env', 'GERRIT_EVENT_ACCOUNT_EMAIL'), True) | 
      default(lookup('env', 'GERRIT_PATCHSET_UPLOADER_EMAIL'), True) | 
      default('UNDEFINED', True) }}" 

Trueなしとして空の文字列を評価するために、Jinja2のを強制するためにここにいます。

関連する問題