根据Chef 12的文档,OS X的默认包提供程序是自制程序。 (假设它安装在目标系统上,它是) https://docs.chef.io/resource_package.html
这是一个简单的食谱:
package 'Install git' do
package_name 'git'
homebrew_user 'vagrant'
action :install
end
......以及我得到的内容:
NoMethodError
-------------
undefined method `homebrew_user' for Chef::Resource::MacportsPackage
看起来它正在尝试使用MacPorts。所以我试试:
homebrew_package 'Install git' do
package_name 'git'
homebrew_user 'vagrant'
action :install
end
......我得到了
Error executing action `install` on resource 'homebrew_package[Install git]'
TypeError
---------
no implicit conversion of Fixnum into String
如果我这样做,请从目标节点开始:
$ /opt/chef/bin/chef-client -v
Chef: 12.2.1
...所以我知道它使用的是v12。我在这里缺少什么?
答案 0 :(得分:2)
根据您的TypeError的堆栈跟踪:
/tmp/kitchen/cache/cookbooks/homebrew/libraries/homebrew_package.rb:102:in `getpwnam'
/tmp/kitchen/cache/cookbooks/homebrew/libraries/homebrew_package.rb:102:in `get_response_from_command'
/tmp/kitchen/cache/cookbooks/homebrew/libraries/homebrew_package.rb:70:in `brew'
/tmp/kitchen/cache/cookbooks/homebrew/libraries/homebrew_package.rb:50:in `install_package'
/opt/chef/embedded/apps/chef/lib/chef/provider/package.rb:87:in `block in action_install'
如果您的metadata.rb中有依赖项
depends 'homebrew'
厨师将下载食谱。这本食谱实际上覆盖了Chef12附带的Homebrew提供程序。看起来它只是食谱中的一个错误。
然而,食谱的README说,Chef12 +没有必要:
这本食谱包括一个使用自制软件的软件包资源提供程序。 在Chef 12+下,这不是必需的,代码实际上并没有 习惯12+主厨。保留这一点以保持倒退 与旧版Chef的兼容性
所以当你想出来的时候。您不必(并且最好不应该)为此cookbook添加依赖项。
从metadata.rb中删除depends 'homebrew'
行会使Chef使用内置的Homebrew提供程序,该提供程序可以正常工作。