如何基于标签控制Ansible playbook的serial分批执行行为
Ansible 按标签动态切换serial分批规则实现方案
Ansible的serial是play层级的全局配置,同一个play内无法根据传入的运行标签动态切换分批策略,直接拆分两个独立play分别匹配对应执行场景即可,不需要修改原有角色的内部配置。
修改后的Playbook配置
# 无标签/指定task1时触发:全量主机一次性执行 - hosts: all serial: "100%" tags: - always - task1 roles: - role: playbook2 tags: task1 # 指定task2时触发:按配置规则分批执行 - hosts: all serial: - 1 - "25%" - "100%" tags: - never - task2 roles: - role: playbook2 tags: task2
配置逻辑说明
- 第一个play绑定内置标签
always,不传入任何运行标签时默认触发,serial设置为100%即一次性在所有目标主机执行,仅运行角色内标记task1的任务 - 显式传入
task1标签运行时,仅会触发第一个全量执行的play,不会启动分批逻辑 - 第二个play绑定内置标签
never,无标签、仅传task1标签时完全不会执行;只有显式传入task2标签运行时才会触发,严格按照预设的「1台→25%主机→剩余所有主机」的串行批次规则执行task2任务 - 原有
playbook2角色内的任务标签配置不需要做任何修改
执行效果验证
- 全量无分批执行task1:执行
ansible-playbook 你的playbook文件名.yml或ansible-playbook 你的playbook文件名.yml -t task1,所有目标主机同步执行task1- 分批执行task2:执行
ansible-playbook 你的playbook文件名.yml -t task2,按预设串行规则分批跑task2
内容的提问来源于stack exchange,提问作者TheChickenMan14
相关产品推荐
相关产品推荐

