Ansible 正在读取
/etc/ansible/hosts
文件并给出我不明白的错误。
ARNING]: * Failed to parse /etc/ansible/hosts with yaml plugin: Syntax
Error while loading YAML. did not find expected <document start> The error
appears to be in '/etc/ansible/hosts': line 2, column 1, but may be elsewhere
in the file depending on the exact syntax problem.
为什么 ansible 尝试使用 yaml 插件解析这个 INI 样式文件?
什么是
<document start>
? 我在任何文档中都找不到这个
该文件看起来像这样(不是实际的)
[first_group]
host-1 ansible_host=1.1.1.1
host-2 ansible_host=2.2.2.2
编辑:
更多信息:
ansible@ansible:~$ ansible-config dump | grep INVENTORY
DEFAULT_INVENTORY_PLUGIN_PATH(default) = [u'/home/ansible/.ansible/plugins/inventory', u'/usr/share/ansible/plugins/inventory']
INVENTORY_ANY_UNPARSED_IS_FAILED(default) = False
INVENTORY_CACHE_ENABLED(default) = False
INVENTORY_CACHE_PLUGIN(default) = None
INVENTORY_CACHE_PLUGIN_CONNECTION(default) = None
INVENTORY_CACHE_PLUGIN_PREFIX(default) = ansible_facts
INVENTORY_CACHE_TIMEOUT(default) = 3600
INVENTORY_ENABLED(default) = ['host_list', 'script', 'auto', 'yaml', 'ini', 'toml']
INVENTORY_EXPORT(default) = False
INVENTORY_IGNORE_EXTS(default) = {{(BLACKLIST_EXTS + ( '.orig', '.ini', '.cfg', '.retry'))}}
INVENTORY_IGNORE_PATTERNS(default) = []
INVENTORY_UNPARSED_IS_FAILED(default) = False
当您的子标题与其父标题不一致时,可能会发生这种情况。例如:
[webservers]
1.2.3.4
1.2.3.5
[webserver:vars]
ansible_python_interpreter=/usr/bin/python3
仔细看,
webservers
!=webserver
。添加 s
,你就可以开始了。
我用谷歌搜索了同样的错误,这把我带到了这里。
当我重新安装 ansible 并将 /etc/ansbile/ansible.cfg 默认恢复为原始状态时,我的错误已得到纠正。 库存文件实际上很好。 该问题似乎与我修改的库存插件有关。
当清单文件中存在某些语法问题时,就会发生这种情况。
[local]
localhost
[dest]
{{ dest_server }} ansible_user= {{dest_user}} ansible_password= {{dest_passwd }}
我的是因为
_
和ansible_user=
之间有空间
{{dest_user}}
这似乎是一个通用的“解析您的库存时出错”类型的错误。
对我来说,当主机组被库存目录中不同 ini 文件中定义的另一个组引用时,就会发生这种情况,即
我的库存/a:
[parent-host-group:children]
child-host-group
我的库存/b:
[child-host-group]
some.hosts
ansible-playbook -i myinventory ...
解决方法是将子组的空组条目添加到引用文件中:
[child-host-group]
# See myinventory/b - just defined here to make parent-host-group work
[parent-host-group:children]
child-host-group
我放了
[servers]
作为第一行解决同样的问题
如果这是您实际的
hosts
内容,它应该可以工作,但也许您使用另一个主机文件。您可以使用此命令指定自定义主机或清单文件:
ansible-playbook -i /path/to/your/custom/file
请将您的实际主机文件(去除敏感数据)放入问题中以供审核。