我需要一种方法来停止 Ansible 中的循环,就像C++ 或 Bash 中的break
语句一样for
。例如,我需要将循环扫描前的最后一个值设置为 0。
这default/main.yml
---
os_vars:
- 8
- 10
- 15
- 6
- 0
- 7
- 25
这tasks/main.yml
- name: Debug variables
ansible.builtin.set_fact:
a: "{{ item }}"
loop: "{{ os_vars }}"
when: item > 0
输出
TASK [test_role : Debug variables] *********************************************
ok: [localhost] => (item=8)
ok: [localhost] => (item=10)
ok: [localhost] => (item=15)
ok: [localhost] => (item=6)
skipping: [localhost] => (item=0)
ok: [localhost] => (item=7)
ok: [localhost] => (item=25)
我知道我可以设置其他布尔变量来控制循环没有分配以下项目,但我也需要节省时间来提高这个剧本的性能,因为有时这个循环体可能是一个巨大的数组并且我们不需要在某些条件匹配时检查以下项目...
请分享您的评论。提前致谢。
问:“我知道我可以设置其他布尔变量来控制循环,但没有分配以下项目”
正确的,因为有
类似问答
with_lines
在 Ansible 中打破循环?等等...
问:“我需要一种方法来停止 Ansible 中的循环,就像C++ 或 Bash 中的语句
break
一样for
。 ”这样不行,你无法跳出循环,只能实现跳过。
这是因为
使用 Ansible 进行编程需要了解的事情
Ansible 之禅
问:“我还需要节省时间来提高这个剧本的性能,因为有时这个循环体可能是一个巨大的数组,并且当某些条件匹配时我们不需要检查以下项目。 ”
如果你喜欢或者需要实现这样的行为,你可能需要自己写一些东西。参见示例你应该开发一个模块吗?和开发模块。
另一种方法是对数据结构进行一些预处理,
os_vars
然后列出提供循环。这样就根本不需要 break 或 if then else 构造了。
进一步阅读
loop
Ansible:当条件true
第一次满足时停止,并且线程像循环执行任务直到成功,如何在 Ansible 中动态结束循环,...break_when
到loop_control
”loop_control
until
功能”根据给出的评论以及我对用例的理解,一种不带
BREAK
、when:
或任何IF
、、THEN
构造的可能解决方案ELSE
。最小示例剧本
将导致输出
基于