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脚本执行完毕?
你应该熟悉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)
操作:没有设置为避免两次运行此资源(每个阶段一次).
| 归档时间: |
|
| 查看次数: |
4222 次 |
| 最近记录: |