默认情况下,Ansible 会按顺序依次运行任务,即执行第一个任务,完成后再执行下一个任务。在某些情况下,任务可能需要更长时间。以 yum update 为例,这需要比其他任务更长的时间。因此Playbook 将花费更长的时间来完成所有任务。
使用 Ansible 异步模块,可以将需要更长时间的任务放在后台,并继续执行其他任务。通过使用异步模式,在长时间运行的任务完成之前执行其他任务,就可以并行运行任务,并在稍后检查这些后台运行的任务。
示例:
tasks:
- name: ansible async poll
command: yum update
async: 60
poll: 10
`async` 表示任务完成的总时间或任务的最长运行时间。
`poll` 表示 Ansible 轮询检查命令是否已完成的频率。默认值为 10 秒。
Ansible还有在任何时候获取任务状态的选项:使用 `ansible async_status` 可以随时获取异步任务的状态。
- name: install docker
yum:
name: docker-io
state: installed
async: 500
poll: 0
register: my_task
- name: get the task status using ansible async_status
async_status:
jid: "{{ my_task.ansible_job_id }}"
register: result
until: result.finished
retries: 30
`retries` 表示在失败之前尝试多少次。