2013-04-30 11 views
21

Vorrei mettere l'output di un comando shell in una variabile per l'utilizzo futuro in una ricetta Chef.Come mettere l'output di una risorsa execute di Chef in una variabile

In bash avrei potuto fare qualcosa di simile output=`tail -1 file.txt` e quindi ho potuto echo $output

Può un 'esecuzione delle risorse' fare questo in modo che io possa utilizzare il risultato più avanti nella ricetta?

risposta

20

mentre la soluzione di Graham sembrava funzionare in un primo momento, ho scoperto Chef :: Mixin: ShellOut

ruby_block "check_curl_command_output" do 
    block do 
     #tricky way to load this Chef::Mixin::ShellOut utilities 
     Chef::Resource::RubyBlock.send(:include, Chef::Mixin::ShellOut)  
     curl_command = 'curl --write-out %{http_code} --silent --output /dev/null '+node['url'] 
     curl_command_out = shell_out(curl_command) 
     if curl_command.stdout == "302" 
     ... 
     else 
     ... 
     end 
    end 
    action :create 
end 

Chef :: Mixin: ShellOut è particolarmente utile se è necessario eseguire il comando come un utente specifico (cfr http://www.slideshare.net/opscode/chef-conf-windowsdougireton):

ruby_block "run_command_as" do 
    block do 
    Chef::Resource::RubyBlock.send(:include,Chef::Mixin::ShellOut) 
    add_group = shell_out("your command", 
     { 
      :user => "my_user", 
      :password => "my_password", 
      :domain => "mycorp.com" 
     } 
     ) 
    end 
end 
+0

si tratta di una soluzione più elegante al problema che la risposta accettata, e fornisce una migliore funzionalità. Grazie per aver pubblicato, Francois! – cixelsyd

+0

C'è qualcuno che ha scritto chefspec per questo tipo di codice? –

Problemi correlati