如何用Chef 12编写安装自制公式的配方?

时间:2015-04-04 12:36:08

标签: chef homebrew chef-recipe

根据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。我在这里缺少什么?

1 个答案:

答案 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提供程序,该提供程序可以正常工作。