Q: "Можно ли сказать ansible начать следующую игру для одного хоста после его завершения?"
A : Да. Возможно. Плагин стратегии host_pinned - это то, что вы ищете. Цитата:
Ansible не будет ждать, пока другие хосты завершат sh текущую задачу, прежде чем поставить в очередь следующую задачу для хоста, которая завершилась. Как только хост завершает игру, он открывает слот для нового хоста, который ждал начала.
Пример
Позволяет создать инвентарь
$ cat hosts
all:
hosts:
test_01:
wait_timeout: 1
test_02:
wait_timeout: 2
test_03:
wait_timeout: 3
test_06:
wait_timeout: 4
test_09:
wait_timeout: 5
Книга воспроизведения ниже
$ cat pinned-01.yml
- name: Play A
hosts: all
gather_facts: false
strategy: host_pinned
tasks:
- debug:
msg: "A:{{ inventory_hostname }}
{{ lookup('pipe', 'date +%H-%M-%S') }}
started"
- wait_for:
timeout: "{{ wait_timeout }}"
- debug:
msg: "A:{{ inventory_hostname }}
{{ lookup('pipe', 'date +%H-%M-%S') }}
finished"
дает
$ ansible-playbook pinned-01.yml -f 3 | grep msg\":
"msg": "A:test_06 15-33-05 started"
"msg": "A:test_09 15-33-05 started"
"msg": "A:test_01 15-33-05 started"
"msg": "A:test_01 15-33-08 finished"
"msg": "A:test_02 15-33-08 started"
"msg": "A:test_06 15-33-11 finished"
"msg": "A:test_03 15-33-11 started"
"msg": "A:test_02 15-33-11 finished"
"msg": "A:test_09 15-33-12 finished"
"msg": "A:test_03 15-33-15 finished"
Результаты
Из-за -f 3
Ansible стартовали 3 хозяина (1,9,6). Хост 1 финишировал первым и opened it's slot to a new host that was waiting to start
. Хост 2 запущен. Точно так же хост 3 начал сразу после того, как хост 6 закончился. Хост 2, запущенный после хоста 9, завершил работу до хоста 9.