如何从 chef 运行 中排除某个资源更新?

How do I exclude a certain resource update from a chef run?

从命令行忽略特定资源的最简单方法是什么?

我正在使用chef-solo

我们产品的一些用户希望由厨师保留某个文件或模板不变-运行 用于测试目的,我希望有一种灵活的方式来实现此功能。

您可以使用 action 作为模板,

action :create_if_missing

这样,只有在文件不存在时才会创建模板。

如果要指定更复杂的语句,请使用only_if

only_if { node[:some_value] }

你可以制作像

这样的属性
default['template']['exclude_FILENAME'] = true

然后在 Chef 代码中使用它。这样你就可以在 attributes 目录中拥有文件 excludes.rb 并根据需要更改这些选项。

简单示例:

template 'Some template you want to decide if it should be excluded' do
    path       '/tmp/somefile' 
    source     'template.erb'
    only_if     { node['template']['exclude_FILENAME'] }
end

这不是从命令行忽略,但你可以给他们 excludes.rb 文件来编辑...或者编写简单的 shell 脚本询问用户是否要排除资源和存储信息在这个文件中。

希望对您有所帮助。

您可以实现的一种方法是使用 overlay/union 文件系统(例如 OverlayFS、AUFS)。覆盖文件系统将来自多个文件夹的视图合并为一个。您将 运行 像往常一样在基本文件夹上进行 chef,然后添加一个覆盖层,将您想要的文件保留为静态文件。然后您可以在此基础上进行测试。如果您想覆盖这些文件,请在此之上添加另一层可写覆盖层,以便它捕获写入。重置,销毁可写层;修改基本图像,取消应用图层,重新运行 chef 修改基本图像,然后重新应用叠加层。

这绝不是使用厨师专用的任何东西。