Я хочу знать, возможно ли развернуть 6 различных задач параллельно (3 | 3) для 2 разных хостов в ansible 2.2.0, потому что у меня возникают проблемы, запускающие их параллельно с одной пьесы, они просто работают секвенциально.running parallel different taks Ansible 2.2.0
1
A
ответ
0
Вы можете сделать это с помощью async
задач. Что-то вроде этого:
- hosts: host1,host2
tasks:
- command: /task1a.sh
async: 1000
poll: 0
register: task1a
when: inventory_hostname == 'host1'
- command: /task1b.sh
async: 1000
poll: 0
register: task1b
when: inventory_hostname == 'host2'
# ... repeat for tasks 2 and 3
- command: /check_done.sh
register: check_done
until: check_done | success
retries: 30
Это запустит task1a.sh и task1b.sh в асинхронном рабочих мест на host1 и host2 соответственно, а затем ждать check_done.sh вернуться к нулю.
0
Вы можете увидеть strategy: free
в сочетании с when: inventory_hostname == 'hostXX'
, например:
- hosts: all
strategy: free
tasks:
- block:
- name: task1
...
- name: task2
...
- name: task3
...
when: inventory_hostname == 'host1'
- block:
- name: task4
...
- name: task5
...
- name: task6
...
when: inventory_hostname == 'host2'
strategy: free
означает, что все задачи будут выполняться на всех узлах параллельно так же быстро, как они могут, не дожидаясь каждой задачи, чтобы закончить на каждом хост. Какая задача будет выполняться на том, какой хост принимается в соответствии с пунктом when
.
Я block
здесь, так что вам нужно только написать один when
для каждого блока, но вы не должны использовать его, вы можете написать when
по каждой задаче.
Благодарим вас за ответ, но моя проблема - 6 различных задач, выполняющихся на 2 хостах (3 на хосте 1 и еще 3 на хосте 2), а не 3 разных задания, выполняющихся на 2 хостах. – famg
Я обновил ответ –