首页/系统与基础设施/自动化运维速查/配置文件的配置项影响面
Ansible 核心70 条

配置文件的配置项影响面

ansible.cfg 按 ANSIBLE_CONFIG、当前目录、家目录、系统级的顺序查找,只读取第一个命中的文件而不做合并,因此执行目录会改变生效配置;命令行与环境变量优先级更高。用 ansible-config dump --only-changed 确认实际上生效的设置。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​​‌​​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌​​​‌‌​‌‌‌​‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

配置文件从哪来

ansible.cfg 决定并发度、连接参数、事实采集、提权默认值等全局行为。它按固定顺序查找:ANSIBLE_CONFIG 环境变量指向的文件、当前工作目录下的 ansible.cfg、家目录下的 ~/.ansible.cfg、最后是系统级 /etc/ansible/ansible.cfg。关键点是只取第一个找到的文件,不做多层合并,因此“在哪运行”会直接改变生效配置。

基本信息

查找顺序ANSIBLE_CONFIG → 当前目录 → 家目录 → 系统级(取首个命中)
合并行为不合并:只读取一个文件,其余文件的设置全部不生效
覆盖关系命令行参数优先于环境变量,环境变量优先于配置文件
查看现状ansible-config dump 输出当前生效值,--only-changed 只列与默认值不同的项
查看可用项ansible-config list 列出全部配置项及其来源说明
常见分段defaults、ssh_connection、privilege_escalation、inventory、persistent_connection

典型使用场景

  • 项目自带配置:仓库根目录放 ansible.cfg,团队统一并发度与连接参数
  • 临时排障:用 ANSIBLE_CONFIG 指向另一份配置,与项目配置对照验证
  • CI 与人工执行行为一致:把关键项固化在仓库内的配置文件里而不是个人家目录
  • 排查“我这台机器为什么不一样”:dump 出当前生效来源,确认读的是哪份文件
  • 更换默认清单路径:在配置里指定 inventory 指向,避免每次敲 -i
  • 审计影响面:评审一份新配置时逐段确认它改变了哪些默认行为

查看与临时切换

查看与临时切换
# 看当前生效值与来源
ansible-config dump --only-changed

# 列出全部可用配置项与说明
ansible-config list | head -40

# 查看当前读取的配置文件内容
ansible-config view

# 临时换一份配置执行,验证行为差异
ANSIBLE_CONFIG=/tmp/alt-ansible.cfg ansible-playbook -i inventory site.yml

# 用环境变量临时覆盖单项(优先级高于配置文件)
ANSIBLE_FORKS=20 ansible-playbook -i inventory site.yml

常见项与影响面

配置项影响误配后果
forks并发推进的主机数过高压垮控制节点或目标机
inventory默认清单路径指向旧清单时操作到无关主机
remote_user默认连接用户用户不对则全部认证失败
host_key_checking是否校验目标机主机密钥关闭后中间人风险上升,便利但需权衡
gathering默认事实采集策略关闭后依赖事实的任务报未定义变量
become 相关默认是否提权与方式全局开启后文件属主可能不符合预期
把关键配置固化在仓库里(项目根目录的 ansible.cfg)比放在个人家目录更可靠:个人配置只影响自己,别人执行同一 playbook 时行为不同,问题很难复现。团队场景应以仓库内配置为准,个人家目录只放与本地环境相关的项。
因为查找顺序里有“当前工作目录”,从不同目录执行同一个 playbook 可能读到完全不同的配置:在项目目录里跑是 50 并发,换到上一级目录跑就变回默认 5,甚至清单路径都变了。自动化脚本里应当固定工作目录或用 ANSIBLE_CONFIG 显式指定。

排查方法

遇到“同一份 playbook 在不同机器或不同人手上结果不同”,先跑 ansible-config dump --only-changed 对比两边的输出,差异项就是原因所在;再确认 ansible-config view 显示的是哪份文件。多数诡异问题最终都能落到“读的不是同一份配置”或“环境变量在起作用”这两类上。

易错点

  • 以为多层配置文件会合并生效,把家目录配置与项目配置凑在一起用,实际只有第一个文件生效
  • 在项目目录外执行 playbook,读到系统级或家目录配置,行为与预期不同且难以复现
  • 临时用环境变量覆盖过某项设置后忘记清理,后续执行一直处于非默认状态
  • 把 host_key_checking 长期关闭,牺牲主机身份校验换取便利
  • 全局打开提权或把 inventory 指向共享清单,导致默认操作对象超出预期范围

数据来源与参考

  • Ansible 官方文档 Configuration file 与优先级说明
  • ansible-config 命令行参考
  • Ansible 官方文档 Controlling how Ansible behaves: precedence rules

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/ansible-config-file-impact.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​​‌​‌‌​‌‌‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​​‌​​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌‌​​‌‌​‌​​‌​‌‌​‌‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌​​‌​‌‌​‌‌​‌​‌‌‌​​​​​‌‌​​​​‌​‌‌​​​‌‌​‌‌‌​‌​​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​