如何按主机组分别应用百分比控制Ansible Playbook批量执行?
按组单独应用百分比批量执行的解决方案
要实现对每个主机组单独应用30%的批量执行比例,最直接且易维护的方式是将每个主机组拆分为独立的Play,每个Play针对对应组设置serial: "30%",这样Ansible会对每个组单独计算批量执行的主机数量,完全匹配你的需求。
示例Playbook
基础版本(重复任务代码)
- name: 对group_1应用30%批量执行 hosts: group_1 serial: "30%" tasks: - name: 执行你的任务 debug: msg: "当前执行主机: {{ inventory_hostname }}" - name: 对group_2应用30%批量执行 hosts: group_2 serial: "30%" tasks: - name: 执行你的任务 debug: msg: "当前执行主机: {{ inventory_hostname }}" - name: 对group_3应用30%批量执行 hosts: group_3 serial: "30%" tasks: - name: 执行你的任务 debug: msg: "当前执行主机: {{ inventory_hostname }}"
优化版本(复用公共任务)
如果多个组的执行任务完全一致,可以把公共任务抽离到单独文件中,避免重复代码:
- 创建
common_tasks.yml存放公共任务:
- name: 公共任务1 debug: msg: "公共任务运行在 {{ inventory_hostname }}" - name: 公共任务2 # 这里添加你的实际任务逻辑
- 主Playbook引入公共任务:
- name: 对group_1应用30%批量执行 hosts: group_1 serial: "30%" tasks: - import_tasks: common_tasks.yml - name: 对group_2应用30%批量执行 hosts: group_2 serial: "30%" tasks: - import_tasks: common_tasks.yml - name: 对group_3应用30%批量执行 hosts: group_3 serial: "30%" tasks: - import_tasks: common_tasks.yml
执行效果
拆分Play后,每个组会单独计算30%的比例:
- group_1(5台):每批执行1台(5×30%=1.5,Ansible向下取整为1)
- group_2(18台):每批执行5台(18×30%=5.4,向下取整为5)
- group_3(4台):每批执行1台(4×30%=1.2,向下取整为1)
补充说明
如果你的主机组数量较多,手动编写Play效率低,可以结合ansible.builtin.add_host和动态组实现自动化遍历,但该方式复杂度较高。对于少量组的场景,拆分Play是最直观、易维护的方案。
内容的提问来源于stack exchange,提问作者Mk_head
相关产品推荐
相关产品推荐

