问题描述
在使用HashiCorp的Packer中运行’ansible-local’ provisioner与Docker构建器时遇到了错误。
用户的模板(template.json)如下所示:
{
"builders": [
{
"type": "docker",
"image": "ubuntu",
"commit": "true"
}
],
"provisioners": [
{
"type": "shell",
"inline": ["sudo apt-get update"]
},
{
"type": "shell",
"script": "setup_ansible.sh"
},
{
"type": "ansible-local",
"playbook_file": "./kubeadm.yml"
}
]
}
遇到的错误如下所示:
docker: Executing Ansible: cd /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3 && ANSIBLE_FORCE_COLOR=1 PYTHONUNBUFFERED=1 ansible-playbook /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3/kubeadm.yml --extra-vars "packer_build_name=docker packer_builder_type=docker packer_http_addr=" -c local -i /tmp/packer-provisioner-ansible-local/5a8f3bad-8413-16c3-b255-6a06a9076ef3/packer-provisioner-ansible-local135505282docker: ERROR! the playbook: packer_builder_type=docker could not be found
解决方案
方案1
根据GitHub上的问题页面,在HashiCorp的Packer版本1.2.0中存在一些错误。你可以考虑将版本降级或升级至1.2.1版本,评论中确认已部署的修复是有效的。
如果你决定升级或降级Packer版本,请确保在进行任何更改之前备份你的项目和配置文件。
方案2
如果你不想改变Packer版本,你还可以尝试以下方法来解决问题:
1. 检查Ansible Playbook路径: 确保在provisioners
部分中的ansible-local
provisioner中指定的playbook_file
路径是正确的。相对路径应该相对于Packer模板文件所在的目录。
2. 检查playbook文件: 确保kubeadm.yml
文件存在于指定的路径中,并且没有拼写错误。
3. 检查依赖项: 如果setup_ansible.sh
脚本在Ansible playbook运行之前需要执行,请确保脚本正确运行并设置了必要的依赖项。
4. 尝试绝对路径: 如果相对路径存在问题,尝试使用绝对路径来指定Ansible Playbook的位置。
无论你选择哪种解决方案,都建议在进行任何更改之前先做好适当的备份,并根据需要进行测试,以确保问题得到解决。
请注意,以上方案可能会因为版本差异或其他因素而有所不同。在实施之前,请务必阅读相关文档并做好必要的准备。
如果你需要更详细的帮助,可以查阅HashiCorp的官方文档或社区论坛,以获取更多关于Packer和Ansible的技术支持和建议。
希望这些解决方案能够帮助你解决问题。如果你在实施过程中遇到任何困难或问题,欢迎随时提问。祝你成功!