人们如何管理 Chef 中剩余或闲置的资源?

How do people manage leftover or stranded resources in Chef?

有没有一种通过修改食谱来管理搁浅资源的干净方法?例如,假设我有一个食谱资源,它从这样的模板写入一个文件:

template 'C:\dir\somefile.txt' do
    source 'somefile.erb'
end

然后我更新食谱以将该文件写入不同的地方,如下所示:

template 'C:\some_different_dir\new_file_location.txt' do
    source 'sample.erb'
end

原始配方中的文件不会自动清理,是吗?所以在那个时候 C:\dir\somefile.txt 只是搁浅在那里没有被使用。

我关心的原因是因为我们的应用程序需要大量资源,而且我不希望随着时间的推移,食谱更新占用大量磁盘驱动器 space。我也不喜欢放置在服务器周围的搁浅文件,因为我不希望我们的某个应用程序意外地拾取某些东西并执行。我正在开发的应用程序到处都有许多不同的服务 运行,而且我们与合作伙伴和其他组织就遗留文件和源代码签订了合同。

此外,当我们的应用程序使用 Vagrant 或 Terraform 之类的东西进行更新时,我们也无法轻易转向启动新服务器的方向。一旦我们的服务器启动,它们就会存在很长时间。其中一些甚至不是虚拟机。

感谢您的帮助。

您必须添加新资源才能清理旧文件:

file 'C:\dir\somefile.txt' do
  action :delete
end

一旦您确定每台服务器都已清理该文件,您就可以将其从配方中删除,或者直接保留。您还可以查看 zap 食谱,它尝试进行自动清理,但这确实很难以稳定的方式进行,因此它附带了一些 "gotchas",主要与嵌套执行上下文和自定义相关资源。