Ansible动态库存脚本能否返回默认格式的文本型库存文件?
问题原因
Ansible的动态库存脚本必须返回JSON格式,这是官方规定的动态库存规范。你输出的那种[mailserver]样式的文本是静态库存的INI格式,Ansible的动态库存插件会把脚本输出当成JSON/YAML来解析,自然会触发格式错误——INI结构根本不是有效的YAML字典。
解决方案
最简便的方法是借助ansible-inventory工具,把你生成的INI格式内容转换成符合要求的JSON输出,不用自己写复杂的JSON生成逻辑。
举个示例脚本:
#!/bin/bash # 生成你需要的INI格式库存内容 INI_STOCK=$(cat <<EOF [mailserver] mail01.example.com smtp_port=25 mail02.example.com smtp_port=587 [webserver] web01.example.com ansible_ssh_port=2222 EOF ) # 用ansible-inventory转成JSON输出 echo "$INI_STOCK" | ansible-inventory --inventory - --list
然后给脚本加可执行权限:
chmod +x dynamic_inventory.sh
执行playbook时指定这个脚本作为库存:
ansible-playbook -i dynamic_inventory.sh your_playbook.yml
这样就能完美解决问题——既保留了你熟悉的INI格式编写逻辑,又满足了动态库存的JSON输出要求。
另外,如果你不想依赖ansible-inventory,也可以自己在脚本里手动构造JSON输出,但这种方式需要处理组、主机变量的嵌套结构,远不如上面的方法高效。
内容的提问来源于stack exchange,提问作者Kristi Jorgji
相关产品推荐
相关产品推荐

