allow_duplicates 与 Role 幂等性
控制 Role 的重复执行
allow_duplicates 与 Role 幂等性 是 CoddyKit 上的免费 DevOps Bootcamp 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 DevOps Bootcamp 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 DevOps Bootcamp 课程共包含 4 节课。
角色默认只运行一次
如果两个角色都依赖 common 角色,Ansible 会智能处理:在一次剧本执行期间,common 只运行一次,而不是两次。
为什么要去重
这种去重可以避免共享的初始化角色重复执行昂贵的工作,例如为每个应用角色重复运行基础加固角色。
同一角色,同一参数
只有在请求角色时使用相同参数,才会跳过重复执行。完全相同的调用会被视为已经完成。
参数不同,再运行一次
使用不同变量调用同一个角色时,Ansible 会再次运行它。带有两套配置的虚拟主机角色会按您的需求应用两次。
roles:
- role: vhost
vars: { name: site_a }
- role: vhost
vars: { name: site_b }认识 allow_duplicates
meta/main.yml 中的 allow_duplicates 设置控制这一行为。将它设置为 true 后,角色可以在一次剧本执行中重复运行。
# meta/main.yml
allow_duplicates: true何时允许重复执行
对于设计为多次应用的角色,请开启此设置,例如创建多个用户或虚拟主机,并且每次调用都确实执行新的工作。
默认值为 false
默认情况下,allow_duplicates 为 false,因此参数相同的角色只运行一次。对于一次性初始化角色,请保持关闭。
去重不等于幂等性
跳过重复调用只是运行时的便利功能。真正的幂等性是指每个任务无论运行多少次,都会收敛到同一状态。
构建幂等任务
在角色内部,优先使用基于状态的模块,而不是原始 command。真正幂等的角色可以安全地应用两次而不会造成损害。
include_role 总会重新运行
请注意:include_role 不会以完全相同的方式遵循去重逻辑。动态包含的角色每次执行到它时都会运行。
可组合且安全
结合去重、allow_duplicates 和幂等任务,构建能够整洁组合且可以安全重复运行的角色层次结构。
快速检查
请回忆一下,哪个设置可以让角色在一次 play 中运行多次。
回顾
Ansible 会去重相同的角色调用;将 allow_duplicates 设置为 true 即可重复调用,同时让任务保持幂等,以便安全地重复运行。♻️
用 AI 导师学习 DevOps Bootcamp — 免费
在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。
- 课程
- 142
- 课程
- 568
常见问题解答
「allow_duplicates 与 Role 幂等性」课时是免费的吗?
是的 — 「allow_duplicates 与 Role 幂等性」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 DevOps Bootcamp 课程的其余内容,请升级到 CoddyKit PRO。 DevOps Bootcamp 课程共包含 4 节课。
「allow_duplicates 与 Role 幂等性」这节课中我会学到什么?
控制 Role 的重复执行 你通过在浏览器中直接运行的动手代码来练习 DevOps Bootcamp,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 DevOps Bootcamp 需要有经验吗?
无需任何先前经验。CoddyKit 上的 DevOps Bootcamp 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「allow_duplicates 与 Role 幂等性」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 DevOps Bootcamp 课中编写并运行代码吗?
能。每节 DevOps Bootcamp 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- meta/main.yml 中的 Role 依赖
- defaults 与 vars:覆盖顺序
- 运行时的 include_role 与 import_role
- allow_duplicates 与 Role 幂等性