On Sun, 9 Aug 2020 04:33:58 -0700 (PDT)
Igor Gnatenko <
i.gnaten...@gmail.com> wrote:
> Basically I am looking for something like `parallel -jX` linux command. At
> any time it runs up to X threads with a command.
That's what strategy "host_pinned" does. See
https://docs.ansible.com/ansible/latest/plugins/strategy/host_pinned.html#host-pinned-executes-tasks-on-each-host-without-interruption
> I noticed that serial: 2 with any strategy will wait for play to run on
> these 2 hosts and only after that it will move to the next ones.
Only "linear" works this way, I think.
> I'd like Ansible to run on 2 hosts at any time, so once it finishes with 1
> of 2 in batch, it would already run playbook for the 3rd host.
> Is such thing does not exist or I just can't find how to do it?
See this example. Is this what you're looking for?
https://stackoverflow.com/questions/59877712/execute-ansible-playbook-for-next-host-after-finishing-one-host-not-all-forked-h
$ 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"
Results
Because of -f 3 Ansible started 3 hosts (1,9,6). Host 1 finished
first and opened it's slot to a new host that was waiting to start.
Host 2 started. The same way host 3 started right after host 6
finished. Host 2, which started after host 9, finished before host 9.
--
Vladimir Botka