我想知道是否可以在ansible 2.2.0中为2个不同的主机并行部署6个不同的任务(3 | 3),因为我遇到问题与一个剧本并行运行它们,它们只是运行顺序。
答案 0 :(得分: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
这将分别在host1和host2上将task1a.sh和task1b.sh作为异步作业启动,然后等待check_done.sh返回零。
答案 1 :(得分:0)
您可以与when: inventory_hostname == 'hostXX'
结合使用strategy: free
,例如:
- 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
任务。