2013-09-23 91 views
3

是否可以配置跨配方訪問的屬性?如果是,如何?我爲每個配方配置了屬性,但是我想消除重複的重複。跨配方訪問屬性

回答

4

Chef工作的方式是,在融合開始時,Chef迭代所有具有將在節點上運行的食譜的食譜(直接在運行列表上或通過include_recipe引用)。對於每一本食譜,廚師然後將在中讀取存儲在attributes文件夾中的屬性文件的所有,並將該屬性添加到node散列。

這裏要注意的重要一點是,這些屬性與您正在執行的食譜無關,所有食譜都會看到加載屬性的相同視圖。

您的描述有些含糊,但從我可以收集的信息中可以看出,您有一本食譜和幾個食譜,並且您正在創建相應的屬性文件。在每個屬性文件中,您將重新定義相同的屬性(例如default['myapp']['foo'] = "blah")。

由於我在開始時描述的過程,這不是必需的。在收斂時間,Chef將讀取所有屬性文件,而不管您正在運行的是什麼配方。這意味着要加載的第二個(或第三個或第四個等)屬性文件將簡單地覆蓋由先前加載的屬性文件設置的node['myapp']['foo']屬性。

在這種情況下,通用模式是有一個default.rb屬性文件,它定義了所有配方將使用的所有常用屬性。如果需要,您可以將配方/組件特定的屬性移動到它們自己的屬性文件中。

在這種情況下要注意的一件事是廚師按字母順序加載屬性文件。如果您的食譜特定屬性文件(例如client.rb)引用default.rb中定義的屬性之一,那麼您將需要使用include_attribute指令以便讓廚師在您的client.rb之前加載default.rb,否則default.rb的所有屬性仍然會無。

+0

烹飪書之間共享屬性如何? – sixty4bit