多Ansible清单含同名组时,能否无需修改清单统一目标主机?
在Ansible中合并同名清单组的所有主机(无需修改清单)
完全可以实现,不需要修改任何清单文件,只需要调整Ansible的清单合并策略即可,具体操作如下:
核心原理
Ansible默认的清单合并策略是replace——也就是后加载的清单里的同名组会覆盖前面的。只要把合并策略改成merge,同名组里的所有主机就会被自动合并到一起,不会互相覆盖。
具体实现方法
方法1:命令行临时指定策略
直接在运行playbook时加上--inventory-merge=merge参数,同时用多个-i加载两个清单:
ansible-playbook -i inventory1.yml -i inventory2.yml --inventory-merge=merge your_playbook.yml
方法2:通过配置文件永久设置
如果需要长期使用合并策略,可以修改ansible.cfg文件(没有的话在项目根目录创建一个),添加以下配置:
[inventory] inventory_merge_strategy = merge
之后运行playbook时直接加载多个清单即可:
ansible-playbook -i inventory1.yml -i inventory2.yml your_playbook.yml
针对特定同名组执行任务
如果只想针对那个同名组的所有主机执行任务,直接在playbook的hosts字段指定组名就行,比如:
- name: 执行任务到合并后的目标组 hosts: target_group_name tasks: - name: 示例调试任务 debug: msg: "当前主机: {{ inventory_hostname }}"
这样就能把两个清单里同名组的所有主机都纳入目标范围,完全不需要修改原有清单。
内容的提问来源于stack exchange,提问作者Boamba Ovidiu
相关产品推荐
相关产品推荐

