2012-12-10 7 views
5

Sto cercando di installare un gestore di chef tramite lo chef_handler lwrp. Questo gestore (chef-gestore-email) viene fornito in una gemma. Sto cercando di installare la gemma quindi accendere il gestore all'interno di una singola ricetta che assomiglia:Come installo le dipendenze per un gestore di chef?

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) 

Questo funziona bene se la gemma è già installato. Tuttavia, se la gemma non è già installato ricevo questo errore:

[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 

Sembra come se la risorsa chef_handler sta tentando di caricare il gestore prima chef_gem ha eseguito ed installato la gemma per il gestore. Posso ovviamente farlo in un processo manuale in due fasi in cui ho una ricetta separata per l'installazione della gemma, quindi gira su un'altra ricetta che configura il gestore, ma spero di evitare processi manuali a più fasi. Può essere fatto tramite una singola ricetta?

risposta

2

Ho una ricetta simile per lo chef Minitest-cuoco-gestore:

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) 

Prova che richiede il vostro gioiello prima di creare risorse chef_handler, o può essere fonte dovrebbe essere diverso ...

+0

Questa è la risposta corretta. – sethvargo

-1

Il #run_action chiamata fa sì che la risorsa chef_handler venga eseguita immediatamente nella fase di "compilazione" mentre la risorsa chef_gem viene eseguita normalmente durante la fase "Esegui".

Quindi anche la gemma deve essere installata in fase di compilazione. E sembra che sia necessaria anche una dichiarazione require (come suggerito in un'altra risposta) per Chef per caricare la gemma.

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) 
+0

Questo non è vero. La risorsa 'chef_gem' viene sempre eseguita nella fase di compilazione. – sethvargo

Problemi correlati