当某些条件匹配时如何在 Ansible 中中断循环?

问题描述 投票:0回答:1

我需要一种方法来停止 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
1个回答
0
投票

问:“我需要一种方法来停止 Ansible 中的循环,就像 C++ 或 Bash 中

break
语句中的
for
一样。

这是不可用的。你无法打破循环,只能实现跳过。

这是因为

  • 有关使用 Ansible 编程的知识

    Ansible 不是一种语言: 如果 Ansible 不是一种编程语言,那么它是什么? Ansible 是一个用 Python 编写的工具,它使用声明性标记语言 YAML 来描述设备和配置的所需状态。 ...您声明要在目标设备上配置的方面,例如文件或目录是否存在、软件包是否已安装、服务是否正在运行等等。

  • Ansible 之禅

    以声明方式思考:Ansible 的设计是理想状态引擎。如果你试图在你的戏剧和角色中“编写代码”,那么你就注定会失败。我们基于 YAML 的剧本从来就不是用来编程的。

如果你喜欢或需要实现这样的行为,你可能需要自己写一些东西。请参阅示例 您应该开发模块吗?开发模块

类似问答

© www.soinside.com 2019 - 2024. All rights reserved.