我正在尝试在 Ansible 中实现详细重试模式逻辑,但我不确定这是否可能。
大多数情况下,我想做类似的事情
- shell:
cmd: some-command {{ if retries '--debug' }}
register: result
until: result is succeeded
retries: 3
主要是命令第一次应该在没有 --debug 的情况下运行,如果失败,应该使用 --debug 参数再运行 2 次。
我知道我可以使用块/救援方法来实现调试部分,但这会增加更多的复杂性(在该示例中,现实生活中的场景并不那么简单(。
那么,有没有一种 jinja2 方法来检查我是哪个循环?我确信在任务结束之前没有定义结果,所以我无法查看它。
回答问题
有没有 jinja2 方法来检查我是哪个循环?
不。不是。此外,cmd 在启动模块时进行评估,以后无法更改。
似乎循环与index_var可能会有所帮助,因为下面的任务
- shell:
cmd: "some-command {{ (item > 0)|ternary('--debug', '') }}"
register: result
loop: "{{ range(0, 3)|list }}"
将按照要求运行某个命令。问题是不可能打破循环,因为until: result is succeeded
将独立地应用于每个迭代,而不是整个循环。