【发布时间】:2016-10-24 04:14:10
【问题描述】:
如果我想在 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
【问题讨论】:
-
我不认为你能得到比第二个更好的结果。如果你真的需要打印一些东西,你可以在之后添加一个调试语句
-
@SztupY,我已经做到了,但不幸的是它仍然不是想要的结果
-
有什么理由不希望每个循环都运行条件?仅仅是因为丑陋的输出,还是因为条件检查需要大量的时间/资源?
-
主要是因为输出丑陋;此外,这种情况不仅与循环中的项目没有任何共同之处,而且还可能相当复杂
标签: loops ansible conditional-statements jinja2