Ansible Constructed插件动态库存问题:目录无法自动加载配置
问题解析与解决方法
问题现象
使用Ansible Constructed插件生成动态组bases时,仅指定包含传统库存文件和Constructed配置文件的目录(ansible-playbook -i inventory task/test.yml)无法生效,proxmox-01未被加入bases组;但同时显式指定两个文件(ansible-playbook -i inventory/inventory.yml -i inventory/constructed.yml task/test.yml)时,bases组正常生成。已在ansible.cfg中启用ini和constructed插件。
相关配置
- 传统库存文件(
inventory/inventory.yml):
[star_wars] [star_wars:children] customer proxmox [customer:children] luke_skywalker [luke_skywalker] proxmox-01 [proxmox]
- Constructed插件配置文件(
inventory/constructed.yml):
--- plugin: constructed strict: true groups: bases: "'proxmox' in group_names"
原因分析
Ansible加载目录作为库存时,默认只会自动识别特定规则的文件,Constructed作为动态库存插件,其配置文件需要被明确标记为动态库存源,仅放在目录中无法被自动加载,除非满足特定识别条件。
解决方法
方法1:用目录内的inventory.cfg统一管理库存源
在inventory目录下创建inventory.cfg文件,内容如下:
[inventory] sources = ./inventory.yml ./constructed.yml
之后执行命令只需指定目录:
ansible-playbook -i inventory task/test.yml
方法2:修改Constructed配置文件命名
将constructed.yml重命名为constructed.inventory.yml,Ansible会自动识别该文件为动态库存插件配置,之后直接指定目录即可生效:
ansible-playbook -i inventory task/test.yml
方法3:在ansible.cfg中指定默认库存源
如果需要全局生效,在ansible.cfg的[defaults]段添加:
inventory = ./inventory/inventory.yml,./inventory/constructed.yml
之后执行命令无需指定-i参数:
ansible-playbook task/test.yml
验证方法
执行以下命令查看库存组信息,确认proxmox-01是否在bases组中:
ansible-inventory -i inventory --list | grep -A5 "bases"
内容的提问来源于stack exchange,提问作者steven ML
相关产品推荐
相关产品推荐

