如何在多个主机组的首个或单台服务器上运行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
相关产品推荐
相关产品推荐

