ansible - 当串行参数多于一个时,Ansible 如何处理任务?
问题描述
当serial
参数为 1 时,Ansible 获取一个主机,然后执行 playbook 中给定的任务,然后再移动到下一个主机。
但是当serial
参数多于一个时会发生什么?
例如,如果我有 10 台主机,并且我的串行参数为 3,那么这 3 个任务将如何执行这些任务? 这些任务会一个接一个地执行吗?还是会像默认执行策略一样执行,每个主机将执行第一个任务,然后再执行下一个任务。
我还没有找到任何与此相关的文档。
解决方案
假设您保持标准策略,playbook 的每次播放都将在您在关键字中指定的多个节点上执行serial
,但是一个任务一个任务,所以即使您有一个节点比其他节点运行任务更快,它不会运行下一个任务,直到其他人完成相同的任务。然后将从库存中取出另外 3 个节点。如果你有另一场比赛,同样的场景将被完成。
所以基本上用你的 10 个节点库存就可以了
- 取3个节点
- 执行任务
- 取3个节点
- 执行任务
- 取3个节点
- 执行任务
- 取剩余节点
- 执行任务
该行为在https://docs.ansible.com/ansible/2.5/user_guide/playbooks_strategies.html中进行了解释
serial 指令可以将此行为“批处理”到主机的子集,然后在下一个“批处理”开始之前运行到播放完成。
我建议你有这样的测试剧本可以理解playbook
,plays
并且serial
。
- hosts: all
gather_facts: false
serial: 3
tasks:
- ping:
- ping:
- hosts: all
gather_facts: false
serial: 5 # test with 5 nodes now
tasks:
- ping:
- ping:
如果你想模拟行为的差异,你可以使用选项运行你的剧本-C
推荐阅读
- node.js - mongodb查找不在特定日期的记录
- ios - iOS - 无法在第一页隐藏导航栏
- swift - 如何从 GameViewController 向 SKView 添加 SKSpritenode?
- java - 在 2 个数组列表中搜索一个对象
- javascript - 修改地图/承诺中的数组(Javascript)
- exoplayer - Androidx 和 exoplayer
- php - Laravel:$request->hasFile() 不起作用调用字符串上的成员函数 getClientOriginalExtension()
- arrays - 找不到“object”类型的不同支持对象“[object Object]”。NgFor 仅支持绑定到 Iterables,例如 Arrays。角
- mysql - MySQL:多表 - 一对多关系,获取子列之一不为空的列
- android - 如何通过 ArcGIS Runtime for Android 使用 GeoWebCache 中发布的地图