2017-02-27 5 views
0

ループに、when-statementが適用されていることを条件としてループを結合したいと考えています。 when文は各ループ反復に適用されますが、これは完全ループに1つを適用する可能性を排除します。誰もこれを行う方法を知っていますか?不可能:ループを完了するときに適用します

私はこれまでにこの問題に遭遇しましたが、この特定のケースでは、存在する可能性のある変数や存在しない可能性のある変数に関するものです。私がしたいことは、次のようなものです:

デフォルトフィルタは、yが定義されていないインスタンスを処理します。私の場合、xは定義されていない可能性があるので、私はただ実行するだけでこのループが必要です。明らかに、これは本当の不可解な声明ではありません。私は代わりに何を使用すべきですか? host_varsで例えば付

- name: kludge1 
    set_fact: 
    fake_y : "{{ [] }}" 

- name: kludge2 
    set_fact: 
    fake_y : "{{ x.y|default([]) }}" 
    when: x is defined 

- name: Loop 
    debug: 
    msg: "{{ item }}" 
    with_items: '{{ fake_y }}' 

現在、私のような恐ろしい何か使用

x: 
    y: 
    - "foo" 
    - "bar" 

をしかし、私はそれが進むべき道ではないと確信しています。

答えて

1

同様の回答hereがあります。あなたは、行のいくつかのデフォルト値を使用することができます

- name: Loop 
    debug: 
    msg: "{{ item }}" 
    with_items: (x | default({})).y | default([]) 

をと(少なくとも現在のAnsible 2.2で)全体としてのタスクをループに結合されたwhenステートメントに方法はありません。

関連する問題