在完成一台主机而不是所有分叉主机后,为下一台主机执行ansible playbook

在完成一台主机而不是所有分叉主机后,为下一台主机执行ansible playbook,ansible,fork,Ansible,Fork,通过fork变量,我可以告诉ansible应该并行执行多少个主机。当之前的所有主机完成时,执行下一个主机。如果主机上的执行时间不同,我必须等待最后一个主机完成 有没有可能告诉ansible在一个主机完成后开始下一个播放,而不是全部运行 换言之,我有数百个客户,一部剧的播放时间为5分钟,有些主机需要30分钟。我们测试了fork的数量,发现50是一个很好的值。有时下一个50人不得不等一个主持人25分钟 问:“是否可以告诉Ansible在一个主持人结束后为一个主持人开始下一场演出?” A:是的。这是可

通过fork变量,我可以告诉ansible应该并行执行多少个主机。当之前的所有主机完成时,执行下一个主机。如果主机上的执行时间不同,我必须等待最后一个主机完成

有没有可能告诉ansible在一个主机完成后开始下一个播放,而不是全部运行

换言之,我有数百个客户,一部剧的播放时间为5分钟,有些主机需要30分钟。我们测试了fork的数量,发现50是一个很好的值。有时下一个50人不得不等一个主持人25分钟

问:“是否可以告诉Ansible在一个主持人结束后为一个主持人开始下一场演出?

A:是的。这是可能的。战略插件就是你要找的。引述:

Ansible不会等待其他主机完成当前任务,然后将下一个任务排队等待已完成的主机。一旦一台主机完成播放,它就会向一台等待开始的新主机打开插槽

示例

让我们创建一个清单

shell>cat主机
全部:
主持人:
测试_01:
等待超时:1
测试02:
等待超时:2
测试03:
等待超时:3
测试_06:
等待超时:4
测试09:
等待超时:5
下面是剧本

shell>cat-pinted-01.yml
-姓名:玩游戏
主持人:全部
收集事实:错误
策略:主机锁定
任务:
-调试:
msg:“A:{inventory_hostname}”
{{查找('pipe','date+%H-%M-%S')}
开始”
-等待:
超时:“{wait_timeout}}”
-调试:
msg:“A:{inventory_hostname}”
{{查找('pipe','date+%H-%M-%S')}
完成”
给予

shell>ansible playbook-01.yml-f 3 | grep msg\”:
“msg”:“A:测试_06 15-33-05已开始”
“msg”:“A:测试_09 15-33-05已开始”
“msg”:“A:测试_01 15-33-05已开始”
“msg”:“A:测试_01 15-33-08已完成”
“msg”:“A:测试_02 15-33-08已开始”
“msg”:“A:测试_06 15-33-11已完成”
“msg”:“A:测试_03 15-33-11已开始”
“msg”:“A:测试_02 15-33-11已完成”
“msg”:“A:测试_09 15-33-12已完成”
“msg”:“A:测试_03 15-33-15已完成”
结果


由于
-f3
Ansible启动了3台主机(1,9,6).Host 1首先完成,并将其插槽打开给等待启动的新主机。Host 2启动。与Host 6完成后Host 3启动的方式相同。Host 2在Host 9之后启动,在Host 9之前完成。

可能设置将执行您想要的操作。这将仅解耦连续启动的播放。播放将作为fas执行尽他们所能,但在所有正在运行的播放完成之前,不会开始新的播放。文档描述了我所需要的内容,但它没有按预期工作。主机锁定策略像免费一样工作。Ansible等待所有播放完成,然后开始下一批播放。对我有效。我已经用完整的示例更新了答案。如果如果您遇到问题,请用详细信息更新问题。是的,它也适用于我。我发现了问题:在剧本中,我在ansible.cfg中使用了关键字serial而不是fork,这将使策略恢复自由。使用host_pinted大大减少了时间。对。
serial
fork
是不同的结构。