我使用带有嵌套循环的委托_来在一组主机之间分配文件。
但是在某些情况下会存在性能问题,因为必须在一个主机上完成任务才能在下一个主机上执行任务,依此类推。
为了减少完成任务所需的时间,有没有一种方法可以并行执行带有循环的委托?
- name: Create backup
archive:
path: xxxxx
dest: xxxxx
format: gz
delegate_to: "{{hosts[ ( ((item[0] -1) + (item[1] | int)) - 1) % (hosts|length|int) ] }}"
run_once: yes
with_nested:
- "{{loop_1}}"
- "{{loop_2}}"
我已经尝试过异步模块,但是我意识到这不适用于我的用例。
答案 0 :(得分:0)
我会使用 add_host
任务将您的主机添加到内存组并在剧本中创建新的剧本。
示例:
- hosts: all
tasks:
- name: Add hosts to in-memory group
add_host:
name: '{{hosts[ ( ((item.0 -1) + (item.1 | int)) - 1) % (hosts|length|int)
] }}'
group: _backup_hosts
loop: '{{ loop1 | product(loop2) | list }}'
- hosts: _backup_hosts
tasks:
- name: Create backup
archive:
path: xxxxx
dest: xxxxx
format: gz
run_once: true