2017-05-24 58 views
0

從廚師的超市安裝/下載食譜時,一些食譜包含metadata.json文件,但不包括metadata.rb文件。沒有metadata.rb文件的廚師超市食譜

沒有metadata.rb文件,用戶無法將cookbook上傳到廚師服務器。我的問題有兩個:

  1. 如果下載/安裝的食譜不包含一個,是否有方法可以爲項目生成適當的metadata.rb文件?
  2. 如果在沒有metadata.rb的情況下,有將廚師手冊上傳到廚師服務器的方法嗎?

    1. 廚師開發工具包版本:1.3.43
    2. 廚師客戶端版本:36年12月19日
    3. 交付版本:主(dd319aa632c2f550c92a2172b9d1226478fea997

    這裏是我的工作站上運行ChefDK版本)

  3. berks版本:5.6.4
  4. 廚房版本:1.16.0

這裏的命令和食譜我使用擺脫超市菜譜:

  1. 刀菜譜網站下載詹金斯
  2. 刀菜譜網站上安裝詹金斯

網址:https://supermarket.chef.io/cookbooks/jenkins#readme

感謝您的任何幫助。在廚師的文檔中找不到包含metadata.rb文件的食譜,我一直無法找到很多。根據我讀過的內容,每本食譜都應該在每個食譜目錄中都有一個metadata.rb文件。

回答

1

好的,所以這需要一點歷史課來解釋。在早期,每個人都通過手動方式將烹飪書上傳到超市(當時是社區網站),通過使用網絡表格和上傳壓縮包。這很吸引,所以我們添加了一個API和一個CLI命令knife cookbook site share。這個命令的工作原理基本如knife cookbook upload,因爲它是爲「廚師回購」monorepo風格設計的,所有烹飪書都存放在一個名爲「cookbooks /」的文件夾中。隨着Berkshelf的吸引力越來越強,越來越多的人開始將每本烹飪書放在自己的回購站裏,並與他們隔離開來。這使得knife cookbook site share難以使用,因此寫了一個新工具:stove。爐子試圖糾正knife cookbook site share中的一堆問題,其中之一是動態元數據的持續問題。一些奇特的食譜使用諸如thor-scmversion之類的工具來管理食譜元數據,這意味着metadata.rb有一條基本上看起來像version IO.read('VERSION')的行。還有其他的例子,但簡短的版本是,如果metadata.rb包含動態代碼,你不想在發佈之後重新運行那些動態的東西,因爲它可能不適用於你的機器(就像它使用某些文件或只存在於Cookbook作者機器上的工具)。當時,強制Chef世界中的所有內容不運行metadata.rb的唯一方法是不將其包含在上載中,而只包含編譯後的metadata.json。

所以我們在這裏。 knife cookbook site share通常只上傳.rb而不是.json,而stove則相反。我們現在已經在整個生態系統中修復了一些問題,以瞭解如果metadata.rb和metadata.json都存在,那麼首選JSON。計劃是修復上傳者上傳所有文件,但現在我們堅持不同。

也就是說,實際上不需要metadata.rb,只需要JSON就可以上傳到Chef Server,而且Berkshelf和策略系統都會自動爲您做這件事。

+0

非常棒的信息!根據你的評論:「也就是說,你實際上不需要metadata.rb,只需要JSON即可上傳到Chef Server,Berkshelf和策略系統都會自動爲你做這件事。」我試圖使用Berkshelf,但是當我嘗試初始化cookbook目錄中的berkshelf時,它不起作用,因爲沒有metadata.rb存在。解決這個問題的正確方法是手動創建Berksfile而不是初始化Berkshelf? – J0991

+0

你實際上不會直接觸摸食譜,如果你剛開始使用社區食譜,你可能會用'source'https://supermarket.chef.io/'\ n cookbook'來製作一個頂級的Berksfile '然後'berks安裝&& berks上傳'從超級市場上抓取'whatever'並將其上傳到您的Chef服務器。隨着你對Chef的熟悉程度越來越高,這可以通過嚮應用程序添加依賴或者包裝食譜來處理,然後berks自動進入。 – coderanger

0
  1. 所有食譜必須有metadata.rb; they're easy enough to create。但是,based on this bug report; metadata.json也應該工作。另外,你可以通過looking at the chef source看到;要麼工作。
  2. 否;這是因爲該文件將包含諸如名稱,版本和依賴項之類的信息。這是必需的,可以是.json.rb

還有,當你碰到不食譜或metadata.jsonmetadata.rb,你必須選擇:

  • 到其缺少的重要組成部分維護者報告;並希望他們修復它。
  • 自己添加metadata.rb
  • 查找正在使用類似功能的食譜。

您是否嘗試上傳此食譜時發生錯誤?它應該工作。

+0

我的過程如下: 1.運行命令:'cook cookbook site download jenkins'while in cookbooks directory。 2.手工解壓包jenkins-5.0.1.tar.gz 3.在Cookbooks目錄中運行命令:'knife cookbook上傳jenkins'。 這次沒有錯誤返回有關丟失的metadata.rb文件(儘管它不存在),但是會返回以下錯誤: 錯誤:食譜jenkins取決於當前不是的食譜 錯誤:正在上傳並且無法在服務器上找到。 錯誤:缺少的食譜是:... – J0991

+0

這是不幸的,因爲:: historicall jazzhands ::原因。 – coderanger