厨师记录的wget

Jef*_*rey 7 bash logging recipe chef-infra

我有一个看起来像这样的厨师食谱:

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
Run Code Online (Sandbox Code Playgroud)

wget需要一段时间,但是日志记录最终看起来像

step1    
step2    
step3
bash script runs #indicates that the bash script from step 2 is running
Run Code Online (Sandbox Code Playgroud)

有没有办法阻止从步骤3开始记录,直到bash脚本执行完毕?

Dra*_*ter 8

你应该熟悉Chef Run的解剖学.它有两个阶段:编译和执行.

在编译阶段不对配方中的资源采取任何操作 - 每个评估的资源都被采用并放入资源集合中.但是,会评估资源之外的纯Ruby代码.

在执行阶段,它实际上评估资源集合.但到目前为止,所有日志消息都已打印出来.

如果需要在执行阶段运行ruby代码(包括Chef日志记录),那么Ruby Block就有一个特殊的资源

ruby_block "Add logging step3" do
  block do
    Chef::Log.info('step3')
  end
  action :create
end
Run Code Online (Sandbox Code Playgroud)

另一种方式是,在编译阶段实际执行资源:

bash "do_wget" do
  code "wget somefile"
  action :nothing
end.run_action :run
Run Code Online (Sandbox Code Playgroud)

操作:没有设置为避免两次运行此资源(每个阶段一次).

  • 那么对于每个日志我需要做6行代码? (2认同)