我想在将我的 Chef食谱上传到 Chef 服务器之前在本地测试它们。
我已经在我的计算机上设置了Vagrant,并将其上的几个目录同步到Vagrant来宾VM。
- 包含 Chef 说明书的项目将同步到Vagrant来宾虚拟机中的
/vagrant
目录。 - 我要部署的项目将同步到来宾 VM 中的
/home/vagrant/src/current
目录。
要在本地模式下运行chef-client
,我正在执行以下操作。
- 启动流浪盒子,
ssh
进去。 - 在来宾 VM 中运行以下命令。
$ cd /vagrant $ sudo chef-client -o 'recipe[cookbook-name::deploy]' -z
配方失败并显示以下错误。
Errno::EINVAL: Invalid argument @ rb_readlink - /home/vagrant/src/current
只有当我尝试在本地模式下在我的流浪盒子上运行它时,这个食谱才会失败。它在结构略有不同的服务器上不会失败。在服务器中,我们遵循 https://docs.chef.io/resource_deploy.html 中列出的结构,其中current
目录是指向releases
目录中某个版本的链接。
我想更好地了解此错误并获得有关如何使配方在本地模式下工作的建议。
测试 Chef 食谱的方法是使用 Test Kitchen,它支持 Vagrant 作为驱动程序插件,但比 Vagrant 本身更仔细地为您处理文件同步。