2013-06-27 45 views
11

我想分享廚師回購食譜中的一小部分方法。我知道在食譜級別上,我可以將代碼放入庫目錄的模塊中(請參閱related question)。我正在尋找的是類似的東西,但可以在我的廚師倉庫的所有食譜中找到。如何在廚師食譜中共享代碼?

我能想到的幾個解決方案:

  • 創建創業板,安裝寶石作爲廚師運行的一部分。這似乎是矯枉過正。
  • 將文件放在某個文件夾中,然後將該文件夾添加到配方文件中的$LOAD_PATH。我有一種感覺,不會與實際部署,因爲廚師服務器不知道任何關於回購。
  • 將該文件放在某個文件夾中,並將其鏈接到每個食譜的庫目錄中。

最後一個選項似乎是最可行的。有沒有更好的/更習慣的方式去做我想做的事?

+0

當你說「方法」是指純粹的Ruby代碼,還是代碼使用Chef的DSL可以放在食譜中? 如果它是純粹的Ruby,那麼寶石可能是最好的出路,除非你只有幾行代碼,否則我幾乎不會認爲它是過度殺毒。 如果是Chef代碼,請用LWRP創建一個圖書館食譜,並將其包含在頂級應用程序食譜中。 第二種方法可能適用於純Ruby庫,但我沒有嘗試過。 – cassianoleal

+1

它主要是純粹的Ruby代碼。也許有十幾種實用方法。我對Chef的依賴管理並不是非常熟悉,但我想知道是否可以創建一個Cookbook,它只有庫文件夾中的共享代碼。 – dantswain

+0

我剛剛嘗試過它,它似乎不起作用,至少不是馬上。 我仍然認爲寶石之道可能是最好的。 :) – cassianoleal

回答

17

您可以使用另一本食譜中定義的函數庫函數,但是您必須向廚師教授您的食譜depend提供的食譜。

因此,舉例來說,如果在菜譜A,你有一個libraries/default.rb,它提供了一些功能f,你可以從菜譜B分別接入它,只要B的metadata.rb文件包括行:

depends "A" 

見有關metadatalibraries的廚師文檔可獲取更多詳情。

+0

聽起來很有希望!明天我會試一試。 – dantswain

+0

還沒有放棄!只是沒有時間去嘗試。 – dantswain

+1

終於有機會實施了。工作很棒! – dantswain

0

有3種不同的選擇,允許對在任一廚師資源的形式共享代碼(1 LWRP,2. HWRP)或方法(3 「」)。我建議你先考慮LWRP。我發現this answer很好地解釋了上述技術之間的差異。