7

私は次のようなシェフのレシピを持っています:

Chef::Log.info('step1')
# do stuff

Chef::Log.info('step2')
bash "do_wget" do
  code <<-EOF
  wget somefile
  EOF
end

Chef::Log.info('step3')
# do stuff

wgetにはしばらく時間がかかりますが、ログは次のようになります。

step1    
step2    
step3
bash script runs #indicates that the bash script from step 2 is running

bashスクリプトの実行が完了するまで、ステップ3からのロギングを防ぐ方法はありますか?

4

2 に答える 2

8

シェフランの解剖学に精通している必要があります。コンパイルと実行の2つの段階があります。

コンパイル段階では、レシピ内のリソースに対してアクションは実行されません。評価された各リソースが取得され、リソースコレクションに配置されます。ただし、リソース外のプレーンなRubyコードは評価されます。

実行段階では、実際にリソースコレクションを評価します。しかし、この時点で、すべてのログメッセージはすでに印刷されています。

実行段階でrubyコード(Chefロギングを含む)を実行する必要がある場合は、そのRubyブロック用の特別なリソースがあります

ruby_block "Add logging step3" do
  block do
    Chef::Log.info('step3')
  end
  action :create
end

別の方法は、コンパイル段階で実際にリソースを実行することです。

bash "do_wget" do
  code "wget somefile"
  action :nothing
end.run_action :run

アクション:このリソースを2回(すべてのステージで1回)実行しないように設定されているものはありません。

于 2012-09-26T08:52:29.397 に答える
3

代わりにログリソースを使用できます。これは、必要に応じて実行段階で実行されることを理解しています。

log "step2" do
    :info
end

または単に

log "step 3"

http://docs.opscode.com/resource_log.html

于 2013-09-10T03:19:09.163 に答える