Ansible指定inventory执行playbook提示解析失败问题求助
问题原因
两个独立问题导致你看到报错:
- 执行
ansible-inventory --list时未携带-i参数指定自定义清单文件,命令默认读取/etc/ansible/hosts路径下的默认清单,该文件为空才会触发那几条解析警告,这部分警告和你运行playbook的报错无直接关联。 - 你编写的
inventory/dockers.yml清单文件YAML结构、缩进存在错误,Ansible无法正常解析该文件,才会触发No inventory was parsed, only implicit localhost is available报错。
修复方案
修正清单文件格式
原清单的错误点:
- 自定义组
yumek未放在all.children层级下,Ansible无法识别组结构 ansible_user、remote_user变量缩进错误,悬空在all层级下,未归入vars字段yumek组下的vars字段为空无意义
修正后的可用清单内容如下:
all: hosts: machine02: ansible_host: 192.168.1.16 children: yumek: hosts: machine02: vars: ansible_user: test remote_user: root
注意YAML文件缩进必须统一使用空格,不要用Tab键,同一层级字段严格对齐。
验证清单可用性
执行清单验证命令时必须携带-i参数指定你自己的清单文件,不要用默认路径:
ansible-inventory -i inventory/dockers.yml --list
如果输出能正常看到machine02的主机地址、所属分组、配置的连接变量,且无解析失败警告,说明清单配置正确。
执行playbook
验证通过后直接运行你原来的playbook命令即可:
ansible-playbook -i inventory/dockers.yml yum-update.yml
补充说明
- 只要执行ansible相关命令时携带
-i参数指定自定义清单路径,Ansible就不会加载/etc/ansible/hosts下的默认配置,你之前看到的默认路径解析警告只是因为执行验证命令时漏加了参数。 - 编写YAML格式的Ansible清单时,主机定义放在对应层级的
hosts下,子组放在对应层级的children下,变量放在对应层级的vars下,三类字段不能混淆错位。
内容的提问来源于stack exchange,提问作者Kakki
相关产品推荐
相关产品推荐

