如何为厨师处理程序安装依赖项?

Mar*_*ddy 5 ruby chef-infra chef-recipe

我正在尝试通过chef_handler lwrp安装一个厨师处理程序.这个处理程序(chef-handler-email)捆绑在一个gem中.我正在尝试安装gem然后在单个配方中打开处理程序,如下所示:

chef_gem "chef-handler-mail"

chef_handler "MailHandler" do
  source 'chef/handler/mail'
  arguments :to_address => "root"
  action :nothing
  supports :exception => true, :report => false
end.run_action(:enable)
Run Code Online (Sandbox Code Playgroud)

如果已经安装了gem,这可以正常工作.但是,如果尚未安装Gem,则会收到此错误:

[2012-12-09T20:47:56-05:00] FATAL: LoadError: chef_handler[MailHandler] (chef_handler::email line 13) had an error: LoadError: no such file to load -- chef/handler/mail.rb
Run Code Online (Sandbox Code Playgroud)

似乎chef_handler资源在chef_gem执行并为处理程序安装gem之前尝试加载处理程序.我显然可以在一个两步手动过程中执行此操作,其中我有一个单独的配方来安装gem,然后翻转到配置处理程序的另一个配方,但我希望避免多步手动过程.可以通过单一食谱完成吗?

Dra*_*ter 2

我有一个类似的厨师 minitest-chef-handler 食谱:

chef_gem 'minitest'
chef_gem 'minitest-chef-handler'

require 'rubygems'
require 'minitest-chef-handler'

[... some unrelated code ...]

chef_handler "MiniTest::Chef::Handler" do
    source "minitest-chef-handler"
    arguments :verbose => true
    action :nothing
end.run_action( :enable )
Run Code Online (Sandbox Code Playgroud)

尝试在创建 Chef_handler 资源之前要求您的 gem,或者源可能应该不同......