web-dev-qa-db-ja.com

Chefの「リソースの実行」の出力を変数に入れるにはどうすればよいですか

シェルコマンドの出力を変数に入れて、後でChefレシピで使用したいと思います。

Bashではoutput=`tail -1 file.txt`そして私はecho $output

「リソースの実行」でこれを実行して、後でレシピで結果を使用できますか?

23
Jake

グラハムの解決策は最初は機能しているように見えましたが、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は、特定のユーザーとしてコマンドを実行する必要がある場合に特に役立ちます(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

私のために働く

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