【发布时间】:2013-04-24 23:00:29
【问题描述】:
我想将 shell 命令的输出放入一个变量中,以便以后在 Chef 食谱中使用。
在 bash 中,我可以执行 output=`tail -1 file.txt` 之类的操作,然后可以执行 echo $output
“执行资源”能否执行此操作,以便我稍后在配方中使用结果?
【问题讨论】:
标签: chef-infra
我想将 shell 命令的输出放入一个变量中,以便以后在 Chef 食谱中使用。
在 bash 中,我可以执行 output=`tail -1 file.txt` 之类的操作,然后可以执行 echo $output
“执行资源”能否执行此操作,以便我稍后在配方中使用结果?
【问题讨论】:
标签: chef-infra
虽然格雷厄姆的解决方案一开始似乎有效,但我发现了 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
如果您需要以特定用户身份运行命令(参见http://www.slideshare.net/opscode/chef-conf-windowsdougireton),Chef::Mixin:ShellOut 特别有用:
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
【讨论】:
为我工作
passenger_root = shell_out("passenger-config --root").stdout
【讨论】:
require 'chef/mixin/shell_out' 行不再需要。这也应该是公认的答案。不再需要使用 ruby_block 或注入 shell_out 方法。 (我刚刚更新了答案以删除要求行)