加快ansible执行
在目标机器量非常大的时候,我们通过可以将gather_facts设置为no或false加快任务的执行速度,也可以通过修改运行策略实现该目的。
默认情况下,ansible会有所有主机执行task,该task在所有主机成功或失败后才会进行下一个task,因此,最快的执行结果取决于task中最慢的那台主机,这个策略叫做linear。另外一个策略叫做free,它不会等task在所有主机执行的结果,如果一台已完成一项task,会在该task上执行下一项任务。
**linear测试**
```
# cat qq
web01 sleep_s=1
web02 sleep_s=2
web03 sleep_s=3
# cat stra.yml
---
- hosts: all
connection: local
tasks:
- name: web01
shell: sleep "{{sleep_s}}"
- name: web02
shell: sleep "{{sleep_s}}"
- name: web03
shell: sleep "{{sleep_s}}"
# ansible-playbook stra.yml -i qq
PLAY [all] ******************************************************************************
TASK [Gathering Facts] ******************************************************************
ok: [web03]
ok: [web02]
ok: [web01]
TASK [web01] ****************************************************************************
changed: [web01]
changed: [web02]
changed: [web03]
TASK [web02] ****************************************************************************
changed: [web01]
changed: [web02]
changed: [web03]
TASK [web03] ****************************************************************************
changed: [web01]
changed: [web02]
changed: [web03]
PLAY RECAP ******************************************************************************
web01 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web03 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
```
**free测试**
```
# cat stra.yml
---
- hosts: all
connection: local
strategy: free <<<修改策略为free
tasks:
- name: web01
shell: sleep "{{sleep_s}}"
- name: web02
shell: sleep "{{sleep_s}}"
- name: web03
shell: sleep "{{sleep_s}}"
# ansible-playbook stra.yml -i qq
PLAY [all] ******************************************************************************
TASK [Gathering Facts] ******************************************************************
ok: [web02]
ok: [web03]
ok: [web01]
TASK [web01] ****************************************************************************
changed: [web01]
changed: [web02]
TASK [web02] ****************************************************************************
changed: [web01]
TASK [web01] ****************************************************************************
changed: [web03]
TASK [web03] ****************************************************************************
changed: [web01]
TASK [web02] ****************************************************************************
changed: [web02]
changed: [web03]
TASK [web03] ****************************************************************************
changed: [web02]
changed: [web03]
PLAY RECAP ******************************************************************************
web01 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web02 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web03 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
```
> 引用自:奔跑吧,ansible