我需要一种方法来停止 Ansible 中的循环,例如 C++ 或 bash 中 for 语句中的“break”... 例如 -- ,我需要将循环扫描到 0 之前的最后一个值 --
默认/main.yml --
---
os_vars:
- 8
- 10
- 15
- 6
- 0
- 7
- 25
任务/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)
我知道我可以设置其他 bool 变量来控制循环,但没有为以下项目分配 a ,但我还需要节省时间来提高此剧本的性能 - 因为有时这个循环体可能是一个巨大的数组,而我们不这样做当某些条件满足时,不需要检查以下项目...
请分享您的意见。预先感谢。
问:“我需要一种方法来停止 Ansible 中的循环,就像 C++ 或 Bash 中
break
语句中的 for
一样。”
这是不可用的。你无法打破循环,只能实现跳过。
这是因为
Ansible 不是一种语言: 如果 Ansible 不是一种编程语言,那么它是什么? Ansible 是一个用 Python 编写的工具,它使用声明性标记语言 YAML 来描述设备和配置的所需状态。 ...您声明要在目标设备上配置的方面,例如文件或目录是否存在、软件包是否已安装、服务是否正在运行等等。
以声明方式思考:Ansible 的设计是理想状态引擎。如果你试图在你的戏剧和角色中“编写代码”,那么你就注定会失败。我们基于 YAML 的剧本从来就不是用来编程的。
如果你喜欢或需要实现这样的行为,你可能需要自己写一些东西。请参阅示例 您应该开发模块吗? 和 开发模块。
类似问答
loop
时停止true
,并且线程如循环任务直到成功、如何在 Ansible 中动态结束循环、...
break_when
添加到
loop_control
”