我有一个艰巨的任务,大约20%的时间失败了。如果重试几次,几乎总是成功。我想使用until
循环执行,直到任务成功完成,并将每次尝试的输出存储到本地计算机上的单独日志文件中。有什么好方法可以实现这一目标吗?
例如,我的任务当前如下所示:
- name: Provision
register: prov_ret
until: prov_ret is succeeded
retries: 2
command: provision_cmd
我可以看到在上一次重试成功后如何存储日志输出,但是我想在每次重试中存储它。要从上次尝试运行命令的位置进行存储,请使用:
- name: Write Log
local_action: copy content={{ prov_ret | to_nice_json }} dest="/tmp/ansible_logs/provision.log"
答案 0 :(得分:1)
从2.9版开始是不可能的。 until
循环不会像 results
那样保留 loop
。任务终止后,任务中的所有变量都将消失,除了 register
一个。
要查看循环中发生了什么,请在远程主机的命令内部写入日志。例如,命令provision_cmd
将日志写入/scratch/provision_cmd.log
。在 block
中运行它,并在 rescue
部分中显示日志。
- block:
- name: Provision
command: provision_cmd
register: prov_ret
until: prov_ret is succeeded
retries: 2
rescue:
- name: Display registered variable
debug:
var: prov_ret
- name: Read the log
slurp:
src: /scratch/provision_cmd.log
register: provision_cmd_log
- name: Display log
debug:
msg: "{{ msg.split('\n') }}"
vars:
msg: "{{ provision_cmd_log.content|b64decode }}"