使用“ until”时将任务输出写入文件

时间:2020-02-26 20:43:24

标签: ansible

我有一个艰巨的任务,大约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"

1 个答案:

答案 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 }}"
相关问题