追加のステップを生成せずに、条件付きで、Ansible with_items
ループ演算子の一部の項目をスキップすることは可能ですか?
ちょうど例:
- name: test task
command: touch "{{ item.item }}"
with_items:
- { item: "1" }
- { item: "2", when: "test_var is defined" }
- { item: "3" }
このタスクでは、test_var
が定義されている場合にのみファイル2を作成します。
他の答えは近いですが、すべてのアイテムをスキップします!=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
when:
タスクを条件として、各アイテムに対して評価されます。したがって、この場合、あなたはただ行うことができます:
...
with_items:
- 1
- 2
- 3
when: item != 2 and test_var is defined
ファイル1とファイル3は常に作成されますが、ファイル2はtest_var
が定義されています。 ansibleのwhen条件を使用すると、次のような個々のアイテムではなく、タスク全体で機能します。
- name: test task
command: touch "{{ item.item }}"
with_items:
- { item: "1" }
- { item: "2" }
- { item: "3" }
when: test_var is defined
このタスクでは、3つすべてのラインアイテム1、2、3の状態をチェックします。
ただし、これは2つの簡単なタスクで実現できます。
- name: test task
command: touch "{{ item }}"
with_items:
- 1
- 3
- name: test task
command: touch "{{ item }}"
with_items:
- 2
when: test_var is defined