Как установить зависимости для обработчика шеф-повара?

Я пытаюсь установить обработчик шеф-повара через файл chef_handler lwrp. Этот обработчик (chef-handler-email) поставляется в виде драгоценного камня. Я пытаюсь установить драгоценный камень, а затем включить обработчик из одного рецепта, который выглядит так:

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 еще не установлен, я получаю эту ошибку:

[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 выполнит и установит гем для обработчика. Очевидно, я могу сделать это в двухэтапном ручном процессе, где у меня есть отдельный рецепт для установки драгоценного камня, а затем перейти к другому рецепту, который настраивает обработчик, но я надеюсь избежать многоэтапных ручных процессов. Можно ли это сделать по одному рецепту?


person Mark Roddy    schedule 10.12.2012    source источник


Ответы (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 )

Попробуйте запросить свой драгоценный камень перед созданием ресурса chef_handler, или, возможно, источник должен быть другим...

person Draco Ater    schedule 10.12.2012

Вызов #run_action приводит к тому, что ресурс chef_handler запускается немедленно на этапе "компиляции", а ресурс chef_gem запускается на этапе "выполнения", как обычно.

Таким образом, гем также должен быть установлен на этапе компиляции. И кажется, что также требуется оператор require (как предлагается в другом ответе), чтобы Chef загрузил драгоценный камень.

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)
person tmatilai    schedule 09.07.2013
comment
Это неправда. Ресурс chef_gem всегда выполняется на этапе компиляции. - person sethvargo; 01.01.2014