Ansible无法执行PHP动态清单文件的问题求助
问题分析
你的PHP脚本输出的内容不符合纯JSON要求——末尾会额外多一个1,这是Ansible解析失败的直接原因。
原因是require_once在成功加载文件时会返回布尔值true,执行echo require_once "test.json"时,PHP会先输出test.json的内容,再输出true对应的字符串1,最终输出的是完整JSON + 末尾的1,破坏了JSON格式。
另外,用require_once加载纯JSON文件本身就不合适——PHP会尝试将其解析为PHP代码,大概率会触发语法错误,只是错误输出可能被混在了JSON内容里未被注意。
修复方案
修改PHP脚本,改用file_get_contents读取并输出纯JSON内容:
#!/usr/bin/env php <?php // 直接读取JSON文件内容并输出 echo file_get_contents("test.json");
验证步骤
- 执行
./test.php,对比输出内容与test.json,确保完全一致,无任何多余字符 - 重新运行Ansible命令:
ansible-inventory -i './test.php' --list,确认清单能正常解析
额外排查建议
- 若后续需要动态生成JSON清单,确保脚本仅输出纯JSON内容,禁止添加任何调试信息、注释或多余的换行/空格
- 用
./test.php | jq验证JSON合法性,jq会直接提示格式错误 - 确认脚本执行权限(当前
-rwxrwx---权限满足要求,只要Ansible运行用户属于it-dept组)
内容的提问来源于stack exchange,提问作者William Bargent-Ball
相关产品推荐
相关产品推荐

