如果我想在Ansible中跳过整个循环,我该怎么办?
根据指南,
将
when
与with_items
合并(请参阅循环)时,会为每个项目单独处理...when
语句。
因此在运行这样的剧本时
---
- hosts: all
vars:
skip_the_loop: true
tasks:
- command: echo "{{ item }}"
with_items: [1, 2, 3]
when: not skip_the_loop
我得到了
skipping: [localhost] => (item=1)
skipping: [localhost] => (item=2)
skipping: [localhost] => (item=3)
而我不希望每次都检查一个条件。
然后我提出了使用内联条件的想法
- hosts: all
vars:
skip_the_loop: true
tasks:
- command: echo "{{ item }}"
with_items: "{{ [1, 2, 3] if not skip_the_loop else [] }}"
它似乎解决了我的问题,但后来我没有得到任何输出。我只想说一句话:
skipping: Loop has been skipped
答案 0 :(得分:2)
你应该能够使用Ansible 2 blocks让Ansible评估一次这个条件。
---
- hosts: all
vars:
skip_the_loop: true
tasks:
- block:
- command: echo "{{ item }}"
with_items: [1, 2, 3]
when: not skip_the_loop
对于每个项目和每个主机,仍会显示跳过但是,正如udondan指出的那样,如果要抑制输出,可以添加:
display_skipped_hosts=True
答案 1 :(得分:0)
使用include
以及条件
hosts: all
vars:
skip_the_loop: true
tasks:
- include: loop
when: not skip_the_loop
tasks/
中的某处有一个名为loop.yml
的文件:
- command: echo "{{ item }}"
with_items: [1, 2, 3]