Ansible:在一项任务中并行执行委托_循环

时间:2019-03-18 14:00:18

标签: ansible

我使用带有嵌套循环的委托_来在一组主机之间分配文件。

但是在某些情况下会存在性能问题,因为必须在一个主机上完成任务才能在下一个主机上执行任务,依此类推。

为了减少完成任务所需的时间,有没有一种方法可以并行执行带有循环的委托?

- 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}}"    

我已经尝试过异步模块,但是我意识到这不适用于我的用例。

1 个答案:

答案 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