如何编写食谱以使用 Chef 12 安装自制程序?

How to write a recipe to install homebrew formulas with Chef 12?

根据 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。我在这里错过了什么?

根据您的 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 提供程序。看起来这只是食谱中的一个错误。

但是,食谱的自述文件说,Chef12+ 没有必要:

This cookbook includes a package resource provider to use homebrew. Under Chef 12+, this is not necessary, and the code doesn't actually get used on Chef 12+. This was preserved to maintain backwards compatiblity with older versions of Chef

如您所想。您不必(最好不应该)向本食谱添加依赖项。 从 metadata.rb 中删除 depends 'homebrew' 行使 Chef 使用内置的 Homebrew 提供程序,它可以工作。