是否可以从jinja2检查任务是否重试?

时间:2019-06-19 13:29:45

标签: ansible

我正在尝试在Ansible中实现重试模式逻辑,但不确定是否可行。

大多数我想做类似的事情

- shell:
    cmd: some-command {{ if retries '--debug' }}
  register: result
  until: result is succeeded
  retries: 3

主要是,该命令应该在没有--debug的情况下第一次运行,如果失败,则应使用--debug参数再运行2次。

我知道我可以使用块/救援方法来实现调试部分,但这会增加更多的复杂性(实际情况在该示例中并不那么简单)。

那么,有没有jinja2的方法可以检查我在哪个循环中?我确信结果在任务结束之前没有定义,所以我无法查看它。

1 个答案:

答案 0 :(得分:0)

回答问题

  

是否有jinja2检查我在哪个循环中的方法?

不。它不是。此外, cmd 是在模块启动时进行评估的,以后无法更改。

似乎Loopindex_var可能有所帮助,因为下面的任务

- shell:
    cmd: "some-command {{ (item > 0)|ternary('--debug', '') }}"
  register: result
  loop: "{{ range(0, 3)|list }}"

将按要求运行 some-command 。问题在于不可能打破循环,因为until: result is succeeded将独立应用于每个迭代,而不是整个循环。