清理 up/delete 临时文件,即使在 chef 运行 失败后也是如此
clean up/delete temp files even after failed chef run
我想要的是即使在 chef-运行 失败时也能够清理我创建的临时文件。所以像这样:
begin
file file_path do
action :create
end
#do something
ensure
file file_path do
action :delete
end
end
但是我似乎无法让它工作。当我的 #do something
代码中断时,它会留下创建的文件。
似乎 ensure
是在 chef 运行 的编译阶段求值的。所以如果我把 File.delete(file_path)
放在 ensure 块中,它会尝试在文件创建之前删除它(当资源处于 Converge 阶段时,即在 begin
中创建文件,被执行
我知道您也可以创建自己的异常处理程序,但这似乎超出了我的需要。
正如在 Slack 上提到的,Chef 的两遍模型不允许这种代码。更重要的是,临时文件的概念与配方代码的工作方式不兼容。只是不要费心删除文件。
如果这是任何随机文件,我不会那么担心清理,但因为它是我临时创建的 pfx,所以我不希望它在主厨 运行 退出后到处乱放。因此,根据 slack,这是我根据@coderanger 的推荐最终使用的解决方案。
Tempfile.create(["cert",".pfx"]) do |f|
f.write(cert_string)
f.close
notifying_block do
batch "Import cert using certutil" do
#so stuff
end
end
end
由于 Tempfile 的自动功能,文件在退出时被清理
https://ruby-doc.org/stdlib-2.1.0/libdoc/tempfile/rdoc/Tempfile.html
我想要的是即使在 chef-运行 失败时也能够清理我创建的临时文件。所以像这样:
begin
file file_path do
action :create
end
#do something
ensure
file file_path do
action :delete
end
end
但是我似乎无法让它工作。当我的 #do something
代码中断时,它会留下创建的文件。
似乎 ensure
是在 chef 运行 的编译阶段求值的。所以如果我把 File.delete(file_path)
放在 ensure 块中,它会尝试在文件创建之前删除它(当资源处于 Converge 阶段时,即在 begin
中创建文件,被执行
我知道您也可以创建自己的异常处理程序,但这似乎超出了我的需要。
正如在 Slack 上提到的,Chef 的两遍模型不允许这种代码。更重要的是,临时文件的概念与配方代码的工作方式不兼容。只是不要费心删除文件。
如果这是任何随机文件,我不会那么担心清理,但因为它是我临时创建的 pfx,所以我不希望它在主厨 运行 退出后到处乱放。因此,根据 slack,这是我根据@coderanger 的推荐最终使用的解决方案。
Tempfile.create(["cert",".pfx"]) do |f|
f.write(cert_string)
f.close
notifying_block do
batch "Import cert using certutil" do
#so stuff
end
end
end
由于 Tempfile 的自动功能,文件在退出时被清理 https://ruby-doc.org/stdlib-2.1.0/libdoc/tempfile/rdoc/Tempfile.html