Loops 跳过Ansible中的整个循环

Loops 跳过Ansible中的整个循环,loops,ansible,conditional-statements,jinja2,Loops,Ansible,Conditional Statements,Jinja2,如果我想跳过Ansible中的整个循环,该怎么办 根据指引, 当与与_项组合时当语句为每个项目单独处理时 因此,在这样运行剧本时 --- - hosts: all vars: skip_the_loop: true tasks: - command: echo "{{ item }}" with_items: [1, 2, 3] when: not skip_the_loop 我明白了 但是我不想每次都检查一个条件 然后我想到了使用内联条件的想法

如果我想跳过Ansible中的整个循环,该怎么办

根据指引,

当与与_项组合时<代码>当语句为每个项目单独处理时

因此,在这样运行剧本时

---
- hosts: all
  vars:
    skip_the_loop: true
  tasks:
    - command: echo "{{ item }}"
      with_items: [1, 2, 3]
      when: not skip_the_loop
我明白了

但是我不想每次都检查一个条件

然后我想到了使用内联条件的想法

- 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

您应该能够让Ansible使用Ansible 2只评估一次条件

这仍然会为每个项目和每个主机显示skipped,但如前所述,如果要抑制输出,可以添加:

display_skipped_hosts=True

对于您的。

这可以通过使用
包括
以及以下条件轻松完成:

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]

我不认为你能得到比你的第二个更好的结果。如果您确实需要打印一些内容,您可以在之后添加调试语句out@SztupY,我已经这样做了,但它仍然不是期望的结果,不幸的是,您不希望为每个循环运行条件的原因是什么?这仅仅是因为丑陋的输出,还是因为条件检查占用了大量的时间/资源?主要是因为丑陋的输出;此外,这个条件不仅与循环中的项没有任何共同之处,而且可能也相当复杂,这似乎是我所要求的,但它仍然不会抑制输出。因为输出是关于跳过每个任务,而不是跳过块。有没有办法覆盖输出?这真的有效吗?当
被传递到块中包含的任务时,我会认为
。但如果这样做有效,那就太好了@NickRoz您不能在任务级别抑制输出。尽管您可以在ansible config:@undandan中全局禁用跳过任务的输出,但不知道它是如何工作的,块下的每个命令都将在终端中标记为跳过。虽然循环不是最好的例子,但如果有多个命令要执行,它似乎是一个有益的选择。我更倾向于在复杂的情况下处理条件求值,因为我不确定我是否看到了抑制输出的好处。我将编辑我的答案,包括Ansible配置更改,以抑制跳过的输出,如果这是您真正想要的
hosts: all
  vars:
    skip_the_loop: true
  tasks:
    - include: loop
      when: not skip_the_loop
- command: echo "{{ item }}"
  with_items: [1, 2, 3]