Ansible.cfg配置Inventory通配路径无效,命令行-i正常,求排查
问题原因与解决方案
问题根源
命令行使用-i /Users/myuser/inventory/*.ini时,Shell会先解析通配符*,将其展开为目录下所有.ini文件的具体路径,传给Ansible的是多个独立的inventory文件路径,因此能正常加载。
而在ansible.cfg中配置inventory=/Users/myuser/inventory/*.ini时,Ansible会直接把这个带通配符的字符串当作单个文件路径去读取,系统中不存在名为*.ini的文件,自然会出现解析失败的警告,无法加载任何inventory内容。
两种可行解决方案
方案1:直接指定inventory目录(推荐)
Ansible支持直接将目录作为inventory源,会自动加载目录下所有符合已启用插件格式的文件(你的配置中已经启用了ini插件)。修改ansible.cfg的defaults段:
[defaults] inventory=/Users/myuser/inventory/
这样Ansible会自动扫描该目录下所有.ini文件,无需手动维护文件列表。
方案2:手动列出所有inventory文件(适合固定文件列表的场景)
如果需要精确指定加载哪些文件,可以用逗号分隔多个文件路径:
[defaults] inventory=/Users/myuser/inventory/file1.ini,/Users/myuser/inventory/file2.ini
注意新增或删除inventory文件时,需要同步更新这个配置。
验证
修改配置后执行ansible-inventory all --graph,应该能看到和命令行-i参数执行时一致的主机组结构。
内容的提问来源于stack exchange,提问作者Ricky Levi
相关产品推荐
相关产品推荐

