web-dev-qa-db-fra.com

Comment puis-je mettre la sortie d'une «ressource d'exécution» de Chef dans une variable

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?

23
Jake

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
21
Francois

Travaille pour moi

require 'chef/mixin/Shell_out'
passenger_root = Shell_out("passenger-config --root").stdout
2
Aivils Štoss