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

时间:2015-07-31 13:59:26

标签: chef chef-solo

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

我正在使用chef-solo

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

2 个答案:

答案 0 :(得分:1)

您可以使用操作作为模板,

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脚本,询问用户是否要排除资源并将信息存储在这个文件中。

我希望这会有所帮助。

答案 1 :(得分:1)

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

这绝不会使用任何厨师特定的。