2012-03-12 57 views
14

我正在使用廚師獨奏來測試我的食譜本地,但我希望能夠只運行我正在測試的食譜。目前,似乎廚師獨奏會在solo.rb中指定的食譜目錄中運行所有食譜。我在json屬性文件中指定了運行列表,並在solo.rb中指定了json文件的位置,但這似乎沒有幫助。它至少分析所有其他食譜的屬性,因爲我有一個不適合我的本地配置,並且它無法執行整個運行。指定廚師獨自運行哪些食譜

迄今爲止發現的最佳解決方案是將我需要測試的食譜移到不同的目錄並指定在solo.rb中。有沒有更好的方法來做到這一點?

回答

27

更新:廚師獨奏不再是廚師客戶的「獨立」工具。從documentation

chef-solo is a command that executes chef-client in a way that does not require the Chef server in order to converge cookbooks. chef-solo uses chef-client’s Chef local mode, and does not support the following functionality present in chef-client/server configurations

這種變化是在Chef version 12.11實現,滿足community RFC。這是在2016年6月8日發佈的。以下描述的舊行爲(儘管從4年前開始)可以通過參數獲得chef-solo

對於大多數電流和高達約廚師獨奏最新信息,請閱讀the official documentation

我原來的答覆是下面:

廚師(獨奏或客戶)不「跑」的所有菜譜。

負載所有菜譜的Ruby文件在以下目錄中,順序如下:。

  • 庫/ * RB
  • 提供商/ * RB
  • 資源/ * RB
  • 屬性/ *。RB
  • 定義/ *。RB

然後,它加載節點的擴展運行列表中的所有配方。與chef-solo,這來自與-j提供的JSON文件,或可以在屬性文件中完成 - 但後者已被棄用,不建議。

也加載了通過include_recipe展開的運行列表中包含的任何配方。廚師通過將它們評估爲Ruby代碼來加載食譜。當它遇到它認爲是資源或定義的ruby代碼時,它會將資源添加到資源集合,這是一個數字排序的所有資源的索引散列。定義是特殊的,因爲廚師將它們包含的資源,而不是定義本身添加到資源收集中。通過include_recipe包含食譜的資源插入到位,然後廚師繼續在包括食譜。

一旦Chef已經處理了所有資源的所有資源,它將按照添加到集合中的順序對每個資源進行指定的操作。

我強烈建議閱讀有關此過程的文檔。它適用於Chef Solo;僅跳過從服務器下載食譜的部分。

爲了確保只有你想測試進行測試的食譜,包括他們通過JSON文件的節點的運行列表。它看起來像這樣:

{ "run_list": ["recipe[mything]", "recipe[anotherthing]"] } 

運行列表只是一個數組,項目可以recipe[cookbookname]role[somerole]。您可以閱讀更多關於如何在Chef Solo文檔中使用角色Solo的角色。

如果你有當廚師正在加載食譜組件(每個食譜紅寶石文件),那麼「你就錯了」(TM)系統的變化而進行,並應重構這些東西在配方中調用的資源中完成。

+0

所有環節被打破 – freedev 2016-11-15 09:30:01

5

不幸的是,我認爲沒有。廚師以兩步模式運行:首先,它分析並建立食譜模型(「編譯」階段),然後它只運行您在運行列表中指定的食譜。我相信這樣做是爲了確保它在編譯階段捕獲食譜之間的依賴關係。編譯階段必須一致,否則會出錯。

要真正瞭解這一點,請查看ruby block資源。任何在您的食譜中浮動的紅寶石將在編譯時間評估;任何你想運行的紅寶石評估時間必須放在一個紅寶石塊資源。一旦你瞭解了這一點,兩步評估的性質就會變得明顯。

我認爲你唯一的選擇是一次帶入一本食譜,就像你一樣,或者修復你的屬性。

13

另外值得一提的是,在測試時,你可以很容易地覆蓋運行列表

chef-solo --override-runlist "role["somerole"],recipe[mycookbook::recipe]" 
+0

如果你的食譜中定義'/ etc.chef-solo.rb'你可以用這種方式來簡寫它'$ sudo chef-solo -o nginx :: start' – JREAM 2015-02-17 00:22:47

+0

這個命令給了我fo錯誤:沒有這樣的食譜。食譜名稱可以,食譜名稱也可以。 – Lechucico 2017-10-05 08:39:48