Je voudrais mettre la sortie d'une commande Shell dans une variable pour une utilisation ultérieure dans une recette Chef.
En bash, je pourrais faire quelque chose comme output=`tail -1 file.txt`
puis je pourrais echo $output
Une "ressource d'exécution" peut-elle faire cela afin que je puisse utiliser le résultat plus tard dans la recette?
alors que la solution de Graham semblait fonctionner au début, j'ai découvert 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
Chef :: Mixin: ShellOut est particulièrement utile si vous devez exécuter la commande en tant qu'utilisateur spécifique (cf. 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
Travaille pour moi
require 'chef/mixin/Shell_out'
passenger_root = Shell_out("passenger-config --root").stdout