2016-05-12 8 views
5

追加のステップを生成せずに、条件付きでAnecess with_itemsループ演算子の一部をスキップすることはできますか?ただ、例えば不可能なwith_itemsループ内の特定の項目をスキップ

:私はtest_varが定義されている場合にのみ、ファイル2を作成するこのタスクで

- name: test task 
    command: touch "{{ item.item }}" 
    with_items: 
     - { item: "1" } 
     - { item: "2", when: "test_var is defined" } 
     - { item: "3" } 

答えて

8

他の答えは近いですが、すべての項目をスキップします= 2。私はそれはあなたが望むものだとは思いません。ここで私はどうなるのかです:

- hosts: localhost 
    tasks: 
    - debug: msg="touch {{item.id}}" 
    with_items: 
    - { id: 1 } 
    - { id: 2 , create: "{{ test_var is defined }}" } 
    - { id: 3 } 
    when: item.create | default(True) | bool 
1

タスクの条件は、各アイテムについて評価されます。したがって、この場合には、あなただけ行うことができます!

... 
with_items: 
- 1 
- 2 
- 3 
when: item != 2 and test_var is defined 
+1

::2回の簡単な作業で、これを達成(項目== 2とtest_varが定義されている)、またはアイテム= 2 'の代わりに、!またはそれは他の項目のために決して実行されません –

+0

良い点 - これは私が急いでこれをバストするために得るものです。 ;) – nitzmahone

+0

'と'を 'または'に切り替えるだけでいいですか? –

0

は何が欲しいのは、そのファイル1とファイル3は常に作成されますが、ファイル2がtest_varが定義されている場合にのみ作成されます。あなたはansibleのときの条件を使用している場合、それは完全なタスクではなく、このような個々の項目に取り組んでいます:このタスクは、3つのすべての行項目1,2および3

しかしあなたができるための条件をチェックします

- name: test task 
    command: touch "{{ item.item }}" 
    with_items: 
     - { item: "1" } 
     - { item: "2" } 
     - { item: "3" } 
    when: test_var is defined 

あなたは `際たい場合があります

- name: test task 
    command: touch "{{ item }}" 
    with_items: 
     - 1 
     - 3 

- name: test task 
    command: touch "{{ item }}" 
    with_items: 
     - 2 
    when: test_var is defined 
+0

「あなたの状態が完全な仕事であり、個々の項目ではないときには不可能」という文は間違っています。条件は各項目ごとに個別に評価されます。 –

+0

あなたは私が間違っている、私は自分自身が言っていることと同じことを言った。私の答えを参照してください私はまたこの "このタスクは、3つのすべての広告申込情報1,2,3の条件をチェックする"と述べた。上記のステートメントでは、条件が1つのアイテムだけではなく、すべてのタスクで意味するすべての場合にこのことを意味していました。 –

関連する問題