限制 ansible playbook 任务并发

gui*_*lem 8 concurrency download ansible

我正在同时使用 ansible 更新多个主机,但是我有一个限制...

我必须从一个公共存储库下载工件,同时下载不超过 3 个!

我目前的解决方案是将整个剧本限制为最多三个并发任务

strategy: linear
serial: 3
Run Code Online (Sandbox Code Playgroud)

是否可以仅针对特定任务步骤而不是整个剧本来限制并发?

Kon*_*rov 2

没有直接的办法。只有诸如run_once循环delegate_to或将任务与循环相乘以及每个主机仅执行一项的解决方法。

有关详细信息,请参阅问题#12170,该问题已关闭,状态为“无法修复”。

delegate_to环形:

- mytask: ..
  delegate_to: "{{item}}"
  run_once: true
  # many diff ways to make the loop
  with_inventory_hostnames: all
Run Code Online (Sandbox Code Playgroud)

倍增任务:

- name: target task
  debug: msg="Performing task on {{ inventory_hostname }}, item is {{ item }}"
  with_items: "{{ play_hosts }}"
  when: "hostvars[item].inventory_hostname == inventory_hostname"
Run Code Online (Sandbox Code Playgroud)