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

Ansible角色默认变量优先级高于组变量?求原因解析

问题原因与解决方法

你的问题核心是项目根目录的group_vars/all.yml未被Ansible正确加载,导致角色默认变量中的users成为唯一有效定义。

具体原因

当你通过-i inventories/production.yml指定inventory文件时,Ansible默认优先在该inventory文件所在的目录(inventories/)下查找group_vars和host_vars目录。你把group_vars/all.yml放在了项目根目录,而inventories/目录下没有对应的group_vars子目录,因此Ansible并未加载这个变量文件。此时只有roles/base/defaults/main.yml里的users变量生效,所以遍历的是user2、user3、user4。

当你删除角色默认变量中的users后,Ansible才会加载项目根目录的group_vars/all.yml(取决于你的ansible.cfg配置),因此会使用user1、user2的列表。

解决方法

  • 规范目录结构(推荐):将项目根目录的group_vars/目录移动到inventories/目录下,形成inventories/group_vars/all.yml。这样当指定-i inventories/production.yml时,Ansible会正确加载该变量文件,其优先级高于角色默认变量,会覆盖roles/base/defaults/main.yml中的users定义。
  • 调整配置(可选):修改ansible.cfg中的相关配置,确保项目根目录的group_vars被纳入变量加载路径,但这种方式不符合Ansible的常规目录规范,不推荐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:28:12