我试图弄清楚如何构建模板(或文件,因为它的工作方式相同)文件夹的路径,然后我可以读取它并在循环中使用模板资源,因此每个模板文件都可以触发更改通知.
我不能使用 remote_directory 因为我只想在模板更改时通知服务。
我也想避免手动模板规范,因为这些目录中可能有很多文件。另外,它允许我们只更改模板文件夹中的配置,而无需更改配方。
主要问题是那些子目录,如 default、host、host-version 和逻辑厨师通过确定正确的模板文件夹。我在想,我可以从我的自定义食谱中调用一个 Chef 类中的一个方法,以到达我的逻辑(循环)的起点。
我认为应该是这样的:
entry_point = CHEF::...getEntryPointDir
entry_point.glob..
.each do
template fname do
...
end
end
Run Code Online (Sandbox Code Playgroud)
我将不胜感激任何帮助!
警告:此解决方案使用私有接口,该接口可能会在没有警告的情况下更改或删除。Chef 当前 (13.x) 不提供解决此问题的受支持方法 - 考虑使用替代方法来解决您的需求。
既然您已经收到警告,下面是您在食谱中的做法:
# Get the Chef::CookbookVersion for the current cookbook
cb = run_context.cookbook_collection[cookbook_name]
# Loop over the array of files.
# 'templates' will also work.
cb.manifest['files'].each do |cookbookfile|
Chef::Log("found: " + cookbookfile['name'])
end
Run Code Online (Sandbox Code Playgroud)
我分享了一个示例食谱来在上下文中展示这一点。
在实践中,这需要更复杂 - 例如,您可能只需要说明书中文件/模板的子集,或者需要以某种方式转换路径。考虑编写一个库函数来列出您感兴趣的文件,并从您的配方中调用它。
归档时间: |
|
查看次数: |
6735 次 |
最近记录: |