Chef

如何使用目前的食譜模板目錄在與廚師的循環中遞歸地複制所有模板

  • October 8, 2018

我試圖弄清楚如何建構模板(或文件,因為它的工作方式相同)文件夾的路徑,然後我可以讀取它並在循環中使用模板資源,因此每個模板文件都可以觸發更改通知.

我不能使用 remote_directory,因為我只想在模板更改時通知服務。

我也想避免手動模板規範,因為這些目錄中可能有很多文件。另外,它允許我們只更改模板文件夾中的配置,而無需觸及配方。

主要問題是那些子目錄,如預設、主機、主機版本和邏輯廚師通過以確定正確的模板文件夾。我在想也許我可以從我的自定義食譜中呼叫其中一個 Chef 類中的方法來到達我的邏輯(循環)的起點。

我認為應該是這樣的:

entry_point = CHEF::...getEntryPointDir

entry_point.glob..
.each do

   template fname do
   ...
   end

end

我將不勝感激任何幫助!

**警告:**此解決方案使用私有介面,可能會在沒有警告的情況下更改或刪除。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

我已經分享了一個範例配方,以在上下文中展示這一點。

在實踐中,這需要更複雜 - 例如,您可能只需要食譜中的文件/模板的子集,或者需要以某種方式轉換路徑。考慮編寫一個庫函式來列出您感興趣的文件,並從您的配方中呼叫它。

引用自:https://serverfault.com/questions/522671