Ansible 的配置文件优先级机制是固定的,环境变量默认高于 ansible.cfg,无法通过修改配置文件本身来反转这一顺序。所谓“让配置文件优先”,实际操作是清理冲突的环境变量。
核心结论:环境变量优先级固定高于配置文件,需清理环境或统一配置源
- 适合集中管理配置的场景
- 先检查当前生效的环境变量
- 验收配置加载顺序是否符合预期
诊断当前配置来源
如果你希望确认当前生效的配置来源,或直接清除环境变量干扰,可以使用以下命令:
# 查看当前生效的所有配置及其来源
ansible-config view
# 查看特定配置项的来源
ansible-config dump | grep <配置项名称>清除环境变量干扰
要让 ansible.cfg 生效,核心思路是确保没有环境变量与之冲突。
临时清除:
unset ANSIBLE_RETRY_FILES_ENABLED永久清除:
检查你的 shell 配置文件(如 ~/.bashrc、~/.zshrc)或 CI/CD 流水线设置,找到以 ANSIBLE_ 开头的变量。如果不需要临时覆盖,请删除或注释掉这些导出命令。
# 使用 sed 删除 ~/.bashrc 中以 export ANSIBLE_ 开头的行
sed -i '/^export ANSIBLE_/d' ~/.bashrc
# 或使用 vim 手动编辑
vim ~/.bashrc
# 找到 ANSIBLE_ 相关行后删除,保存退出确认配置文件路径
运行 ansible `--version`,第一行通常会显示当前使用的配置文件路径。确保你编辑的是这个路径下的文件,而不是其他位置。
验证是否生效
修改完成后,再次运行 ansible-config view,找到你关注的配置项。如果 source 字段变为 ini 或指向具体的 cfg 文件路径,说明 ansible.cfg 已生效。如果仍然显示 env,说明环境中仍有残留变量未清除。
注意事项
- 多用户环境:不同用户的环境变量可能不同,确保执行 Ansible 的用户环境干净。
- CI/CD 流水线:很多自动化平台会自动注入 ANSIBLE_ 开头的环境变量,需在流水线配置中显式移除。
- 配置文件位置:Ansible 会按顺序查找多个位置的 cfg 文件(当前目录、家目录、/etc/ansible),确保你修改的是优先级最高的那个。
参考来源
- Ansible Official Documentation, "Configuration settings", https://docs.ansible.com/ansible/latest/reference_appendices/config.html