【问题标题】:Skip the whole loop in Ansible跳过 Ansible 中的整个循环
【发布时间】:2016-10-24 04:14:10
【问题描述】:

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

根据指南,

在将whenwith_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

【问题讨论】:

  • 我不认为你能得到比第二个更好的结果。如果你真的需要打印一些东西,你可以在之后添加一个调试语句
  • @SztupY,我已经做到了,但不幸的是它仍然不是想要的结果
  • 有什么理由不希望每个循环都运行条件?仅仅是因为丑陋的输出,还是因为条件检查需要大量的时间/资源?
  • 主要是因为输出丑陋;此外,这种情况不仅与循环中的项目没有任何共同之处,而且还可能相当复杂

标签: loops ansible conditional-statements jinja2


【解决方案1】:

您应该能够让 Ansible 使用 Ansible 2 的 blocks 对条件进行一次评估。

---
- 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

致您的ansible.cfg file

【讨论】:

  • 这似乎是我要求的,但它仍然没有抑制输出。因为输出是关于跳过每个任务,而不是关于跳过块。有没有办法覆盖输出?
  • 这真的有效吗?我原以为when 只是被传递给块的包含任务。但是,如果这有效,那就太好了!
  • @NickRoz 您不能抑制任务级别的输出。尽管您可以在 ansible 配置中全局禁用跳过任务的输出:docs.ansible.com/ansible/…
  • @undondan,不知道它是如何工作的,块下的每个命令都会在终端中标记为已跳过。虽然循环不是最好的例子,但如果你有多个命令要执行它似乎是一个有益的选择
  • 如果条件评估很复杂,我会更多地解决它,因为我不确定我是否看到抑制输出的好处。我将编辑我的答案以包括 Ansible 配置更改以抑制跳过的输出,如果这是你真正想要的
【解决方案2】:

这可以通过使用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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多