没有 metadata.rb 文件的 Chef Supermarket 食谱

Chef Supermarket cookbooks with no metadata.rb file

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

没有 metadata.rb 文件,用户无法将食谱上传到厨师服务器。我的问题有两个:

  1. 如果下载/安装的说明书不包含,是否有办法为项目生成合适的 metadata.rb 文件?
  2. 在没有菜谱的情况下有没有办法上传到厨师服务器metadata.rb?

这是我工作站上的 ChefDK 运行 版本:

  1. Chef 开发套件版本:1.3.43
  2. 主厨客户端版本:12.19.36
  3. 交付版本:master (dd319aa632c2f550c92a2172b9d1226478fea997)
  4. 伯克斯版本:5.6.4
  5. 厨房版本:1.16.0

这是我用来从超市获取食谱的命令和食谱:

  1. knife cookbook 网站下载 jenkins
  2. knife cookbook 站点安装 jenkins

URL: https://supermarket.chef.io/cookbooks/jenkins#readme

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

  1. 所有食谱必须有 metadata.rbthey're easy enough to create. However, based on this bug report; metadata.json should also work. Also, as you can see by looking at the chef source;要么应该工作。
  2. 没有;这是因为该文件将包含名称、版本和依赖项等信息。它是必需的,可以是 .json.rb.

当您 运行 进入没有 metadata.jsonmetadata.rb 的食谱时,您可以选择:

  • 向维护者报告它缺少一个关键组件;并希望他们修复它。
  • 自己添加 metadata.rb
  • 查找具有类似功能的食谱。

您是否在尝试上传此食谱时遇到错误?它应该工作。

好的,所以这需要一些历史课来解释。在早期,每个人都通过使用 Web 表单和上传压缩包手动将食谱上传到超市(嗯,当时是社区站点)。这很糟糕,所以我们添加了一个 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 和策略系统都会为您自动执行此操作.