Chef infra 如何输入厨师的输出';执行资源';变为变量

Chef infra 如何输入厨师的输出';执行资源';变为变量,chef-infra,Chef Infra,我想将shell命令的输出放入一个变量中,以便以后在厨师食谱中使用 在bash中,我可以执行类似于output=`tail-1file.txt`的操作,然后我可以echo$output “执行资源”能做到这一点,以便我以后在菜谱中使用结果吗?虽然格雷厄姆的解决方案一开始似乎有效,但我发现了Chef::Mixin:ShellOut ruby_block "check_curl_command_output" do block do #tricky way to load thi

我想将shell命令的输出放入一个变量中,以便以后在厨师食谱中使用

在bash中,我可以执行类似于
output=`tail-1file.txt`
的操作,然后我可以
echo$output


“执行资源”能做到这一点,以便我以后在菜谱中使用结果吗?

虽然格雷厄姆的解决方案一开始似乎有效,但我发现了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_out.stdout == "302"
        ...
      else
        ...
      end
    end
    action :create
end
如果您需要以特定用户身份运行命令(cf.),则Mixin:ShellOut特别有用:

为我工作

passenger_root = shell_out("passenger-config --root").stdout

这是一个比公认答案更优雅的问题解决方案,并提供了更好的功能。谢谢你的发帖,弗朗索瓦!是否有人为这种类型的代码编写chefspec的人?不再需要手动将shell\u out helper加载到资源/提供者中,在这种情况下也不需要使用ruby\u块进行间接寻址。下面简单的一行代码是一个更好的解决方案。不再需要
require'chef/mixin/shell\u out'
行。这也应该是公认的答案。不再需要使用ruby_块或注入shell_out方法。(我刚刚更新了答案,删除了require行)
passenger_root = shell_out("passenger-config --root").stdout