2013-04-30 74 views
21

我想将shell命令的输出放入一个变量中,供以后在厨师食谱中使用。如何将厨师'执行资源'的输出放入变量中

在bash我可以做类似output=`tail -1 file.txt`,然后我可以echo $output

能的“执行资源”做到这一点,这样我可以在配方使用后的结果?

回答

20

而格雷厄姆的解决方案一开始就有些工作,我发现了厨师::密新: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 

厨师::密新:ShellOut是非常有用的,如果你需要一个特定的用户身份运行命令(参考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

这是比接受的答案更优雅的解决方案,并提供更好的功能。感谢发布,弗朗索瓦! – cixelsyd 2014-07-03 21:07:24

+0

有没有人为这种类型的代码写chefspec? – 2015-12-28 23:18:46