[英]How do I install dependencies for a chef handler?
我正在尝试通过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)
如果已经安装了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
似乎chef_handler资源在chef_gem执行并为处理程序安装gem之前尝试加载处理程序。 我显然可以在一个两步手动过程中执行此操作,其中我有一个单独的配方来安装gem,然后翻转到配置处理程序的另一个配方,但我希望避免多步手动过程。 可以通过单一食谱完成吗?
我有一个类似的厨师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 )
在创建chef_handler资源之前尝试使用您的gem,或者可能源不同......
#run_action
调用导致chef_handler
资源在“编译”阶段立即运行,而chef_gem
资源在“执行”阶段正常运行。
因此,需要在编译阶段安装gem。 并且似乎还需要一个require
语句(如另一个答案所示),以便Chef加载gem。
chef_gem 'chef-handler-mail' do
action :nothing
end.run_action(:install)
require 'chef/handler/mail'
chef_handler 'MailHandler' do
source 'chef/handler/mail'
# ... other attributes
action :nothing
end.run_action(:enable)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.