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

如何在多个主机组的首个或单台服务器上运行Ansible Playbook

如何在每个主机组的首个/单台主机上运行Ansible Playbook

针对你给出的inventory结构,以下是几种实用的实现方式:

方法1:命令行直接指定目标

通过--limit参数筛选每个组的第一个主机,多个组用逗号分隔即可:

ansible-playbook your_playbook.yml --limit 'tomcat[0],apache[0],sql[0]'

如果要自动匹配all组下所有子组的首台主机,可使用通配符简化命令:

ansible-playbook your_playbook.yml --limit 'all:children[0]'

方法2:在Playbook中定义目标主机

直接在play的hosts字段里指定每个组的首台主机:

- name: 在每个组的首台主机执行任务
  hosts: tomcat[0],apache[0],sql[0]
  tasks:
    - name: 示例任务
      debug:
        msg: "正在{{ inventory_hostname }}上执行操作"

如果需要自动适配all下的所有子组,可借助groups变量动态生成目标列表:

- name: 自动匹配所有子组的首台主机
  hosts: "{{ groups.keys() | map('regex_replace', '^(.*)$', '\\1[0]') | list }}"
  tasks:
    - debug:
        msg: "当前执行主机:{{ inventory_hostname }}"

方法3:通过任务条件控制执行范围

如果需要在同一个play中仅让每个组的首台主机执行特定任务,可使用when条件判断:

- name: 针对全量主机,但仅组内首台执行指定任务
  hosts: all
  tasks:
    - name: 仅组内首台主机执行此任务
      debug:
        msg: "我是{{ group_names[0] }}组的首台主机"
      when: inventory_hostname == groups[group_names[0]][0]

内容的提问来源于stack exchange,提问作者Harsha S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 17:40:29