92 lines
2.9 KiB
Markdown
92 lines
2.9 KiB
Markdown
# ansible-parallel
|
|
|
|
TL;DR:
|
|
|
|
```bash
|
|
pip install ansible-parallel
|
|
ansible-parallel *.yml
|
|
```
|
|
|
|
Executes multiple ansible playbooks in parallel.
|
|
|
|
For my usage, running sequentially (using a `site.yml` containing
|
|
multiple `import_playbook`) takes 30mn, running in parallel takes
|
|
10mn.
|
|
|
|
|
|
## Usage
|
|
|
|
`ansible-parallel` runs like `ansible-playbook` but accepts multiple
|
|
playbooks. All remaining options are passed to `ansible-playbook` so
|
|
feel free to run `ansible-parallel --check *.yml` for example.
|
|
|
|
|
|
## Example
|
|
|
|
It's easy to start:
|
|
|
|
```bash
|
|
$ ansible-parallel *.yml
|
|
```
|
|
|
|
When it runs, it display a live update of what's going on, one line per playbook:
|
|
|
|
```
|
|
web.yml: TASK [common : Configure Debian repositories] *****************************
|
|
gitlab.yml: TASK [common : Configure IP failover] *************************************
|
|
staging.yml: TASK [common : Configure Debian repositories] *****************************
|
|
dev.yml: Done.
|
|
```
|
|
|
|
And when it's done, it prints a full report like:
|
|
|
|
```
|
|
# Playbook playbook-webs.yml, ran in 123s
|
|
|
|
web1.meltygroup.com : ok=51 changed=0 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0
|
|
web2.meltygroup.com : ok=51 changed=0 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0
|
|
web3.meltygroup.com : ok=51 changed=0 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0
|
|
|
|
|
|
# Playbook playbook-staging.yml, ran in 138s
|
|
|
|
staging1.meltygroup.com : ok=64 changed=6 unreachable=0 failed=0 skipped=18 rescued=0 ignored=0
|
|
|
|
|
|
# Playbook playbook-gitlab.yml, ran in 179s
|
|
|
|
gitlab-runner1.meltygroup.com : ok=47 changed=0 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
|
|
gitlab-runner2.meltygroup.com : ok=47 changed=0 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
|
|
gitlab-runner3.meltygroup.com : ok=47 changed=0 unreachable=0 failed=0 skipped=13 rescued=0 ignored=0
|
|
gitlab.meltygroup.com : ok=51 changed=0 unreachable=0 failed=0 skipped=12 rescued=0 ignored=0
|
|
|
|
|
|
# Playbook playbook-devs.yml, ran in 213s
|
|
|
|
dev1.meltygroup.com : ok=121 changed=0 unreachable=0 failed=0 skipped=22 rescued=0 ignored=0
|
|
dev2.meltygroup.com : ok=121 changed=0 unreachable=0 failed=0 skipped=22 rescued=0 ignored=0
|
|
```
|
|
|
|
|
|
## Known alternatives
|
|
|
|
### ansible-pull
|
|
|
|
ansible-parallel is only good if you want to keep the push behavior of
|
|
Ansible, but if you're here you may have a lot of playbooks, and
|
|
switching to
|
|
[ansible-pull](https://docs.ansible.com/ansible/latest/cli/ansible-pull.html)
|
|
with a proper reporting system like
|
|
[ARA](https://github.com/ansible-community/ara)
|
|
|
|
|
|
### xargs
|
|
|
|
A quick and dirty way of doing it in 3 lines of bash:
|
|
|
|
```
|
|
ls -1 *.yml | xargs -n1 -P16 sh -c 'ansible-playbook "$$0" > "$$0.log"' ||:
|
|
grep -B1 "^\(changed\|fatal\|failed\):" *.log
|
|
echo *.yml.log | xargs -n1 sed -n -e '/^PLAY RECAP/,$$p'
|
|
```
|