如何打破 Ansible 循环并退出当前程序?

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

我正在使用循环从artifactory下载jar,我想首先检查文件是否存在,如果文件不存在,则记录错误并退出。 config.ini内容是

a.jar,b.jar,c.jar

Ansible 剧本如下:

- name: Download jars from artifactory
  vars:
      dependencys: "{{ lookup('ansible.builtin.file', 'config.ini') }}"
  get_url:
    url: "{{ maven_url }}/{{ item }}"
    dest: "{{ destPath }}"
    mode: 0755
  loop: "{{ dependencys.split(',') }}"
  no_log: no

如何实施?

ansible
1个回答
0
投票

目前这是不可能的,但用不了多久你就能实现这一目标。

您可以在 Ansible 的问题跟踪器中准备好此功能请求:

在某些情况下,任务应该循环直到条件满足 相遇,就像 for 循环中的

break
一样。这可以通过以下方式实现 一个
when
的声明,但它过于复杂并且不明显 目标是,并且当需要时可以变得过于复杂
when
语句提供不同的功能来确定 循环项是否应该运行。

来源:Ansible 的交易者问题#83442

在链接的拉取请求中,我们可以在发行说明中阅读:

loop_control
- 添加一个
break_when
选项以根据 Jinja2 表达式提前打破任务循环

来源:Ansible 的 git 存储库中的拉取请求#62151

计划与 Ansible core 2.18 版本一起发布,然后将具有如下语法:

- name: Count until 3, then break
  ansible.builtin.debug:
    var: item
  loop:
    - 1
    - 2
    - 3
    - 4
    - 5
  loop_control:
    break_when: item > 3
© www.soinside.com 2019 - 2024. All rights reserved.