Ansible:运行异步任务(如果失败):运行清理任务,然后将第一个任务重试x次

时间:2020-09-24 09:18:21

标签: ansible

我想创建一个与此类似的程序流:

- name: Clone git repository
  block:
  - git:
      repo: "{{ project_gitlab_repository }}"
      dest: "{{ project_build_path }}"
    async: 120
    poll: 5
  rescue:
  - file:
      path: "{{ project_build_path }}"
      state: absent
  - ansible.builtin.command: /bin/false 
  retries: 3
  1. 尝试执行异步任务
  2. 如果失败,请运行清理任务。 (在这种情况下,请删除目标文件夹)
  3. 返回第1步(x次)

上面的代码不起作用,看来您可以重试块。 是否可以在Ansible中实现这样的目标?

1 个答案:

答案 0 :(得分:0)

我通过将以下代码放入文件“ clone_git_repository.yaml”来解决了这个问题(hacky)

- block:
  - name: Clone git repository
    git:
      repo: "{{ project_gitlab_repository }}"
      dest: "{{ project_build_path }}"
    async: 120
    poll: 5
  rescue:
  - set_fact:
      retry_count: "{{ 0 if retry_count is undefined else retry_count | int + 1 }}"
  - fail:
      msg: maximum retries reached
    when: retry_count | int == 5
  - command: "rm -rf {{ project_build_path }}"
  - include_tasks: clone_git_repository.yml

不太优雅,但是显然可以这样,直到您可以为某个块指定重试。