我正在尝试找到一种方法来将模板资源动态地应用于食谱模板文件夹内的文件夹中的所有文件。类似于:
Dir.foreach("../templates/default/shared/") do | file | # This is the wrong line...
template "/home/admin/shared/#{file}" do
source "shared/#{file}"
…
end
end
我该怎么做?我试图避免将此目录中的所有文件单独列出为变量...谢谢。
答案1
您的代码将在节点上下文中执行,因此您的 Ruby 代码 ( Dir.foreach
) 将需要检查节点的本地缓存。在我的 Chef 安装中,我的 chef-client 配置模板需要本地缓存路径,因此我有此属性:node[:chef][:cache_path]
。
所以:
Dir.foreach("#{node[:chef][:cache_path]}/cookbooks/the_cookbook/templates/default/shared/")
编辑:在现代 Chef 配置中,模板只有在需要时才会存在于服务器上。您需要将其添加到您的客户端.rb:
no_lazy_load true