厨师超市食谱没有metadata.rb文件

时间:2017-05-24 17:06:36

标签: chef metadata devops cookbook

从Chef's Supermarket安装/下载cookbook时,一些cookbook确实包含metadata.json文件,但不包含metadata.rb文件。

如果没有metadata.rb文件,则用户无法将cookbook上传到Chef服务器。我的问题有两个:

  1. 如果下载/安装的食谱不包含该菜单,有没有办法为项目生成正确的metadata.rb文件?
  2. 如果没有metadata.rb,有没有办法将菜谱上传到厨师服务器?
  3. 这是我工作站上运行的ChefDK版本:

    1. Chef Development Kit版本:1.3.43
    2. chef-client version:12.19.36
    3. 交付版本:master(dd319aa632c2f550c92a2172b9d1226478fea997)
    4. berks version:5.6.4
    5. 厨房版:1.16.0
    6. 这是我用来从超市购买食谱的命令和食谱:

      1. 刀菜谱网站下载jenkins
      2. 刀烹饪网站安装jenkins
      3. 网址:https://supermarket.chef.io/cookbooks/jenkins#readme

        感谢您的帮助。我没有在Chef的文档中找到很多关于使用没有包含metadata.rb文件的cookbook的文章。根据我的阅读,每本食谱都应该有一个metadata.rb文件,位于每个食谱目录中。

2 个答案:

答案 0 :(得分:3)

好的,所以这需要一些历史课来解释。在早期,每个人都通过使用网络表单和上传tarball手动将烹饪书上传到超市(当时的社区网站)。这很糟糕,所以我们添加了一个API和一个CLI命令knife cookbook site share。这个命令基本上像knife cookbook upload一样工作,因为它是为“chef-repo”monorepo风格设计的,所有烹饪书都存在于一个名为“cookbooks /”的文件夹中。随着Berkshelf的吸引力越来越大,越来越多的人开始将每本食谱放入自己的回购中并与他们隔离。这使得使用knife cookbook site share更难以使用,因此编写了一个新工具:stove。 Stove试图纠正knife cookbook site share中的一堆问题,其中一个是动态元数据的持续问题。一些花哨的食谱使用像thor-scmversion这样的工具来管理食谱元数据,这意味着metadata.rb的行看起来基本上像version IO.read('VERSION')。还有其他一些例子,但简短的版本是如果metadata.rb包含动态代码,你不想在发布后重新运行那些动态的东西,因为它可能不适用于你的机器(就像它使用一些文件一样)或仅存在于菜谱作者机器上的工具)。当时,强制Chef世界中所有内容都不运行metadata.rb的唯一方法是不将它包含在上传中,而只包括编译的metadata.json。

所以我们在这里。 knife cookbook site share通常仅上传.rb而非.jsonstove则相反。我们现在已经修复了整个生态系统中的内容,知道如果metadata.rb和metadata.json都存在,则更喜欢JSON。计划是修复上传者上传两个文件,但现在我们仍然坚持差异。

也就是说,实际上你不需要metadata.rb,你可以上传到只有JSON的Chef服务器,而且Berkshelf和策略系统都会为你自动化。

答案 1 :(得分: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
  3. 当您遇到没有metadata.jsonmetadata.rb的食谱时,您有以下选项:

    • 向维护者报告其缺少关键组件;希望他们能解决它。
    • 自己添加metadata.rb
    • 查找使用类似功能的食谱。

    您是否因尝试上传此食谱而收到错误消息?它应该工作。