You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按主机组分别应用百分比控制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 }}"

优化版本(复用公共任务)

如果多个组的执行任务完全一致,可以把公共任务抽离到单独文件中,避免重复代码:

  1. 创建common_tasks.yml存放公共任务:
- name: 公共任务1
  debug:
    msg: "公共任务运行在 {{ inventory_hostname }}"

- name: 公共任务2
  # 这里添加你的实际任务逻辑
  1. 主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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:10:39