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

问题描述 投票:0回答:2

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

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

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

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

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

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

  1. 刀食谱网站下载詹金斯
  2. knife 食谱网站安装 jenkins

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

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

chef-infra metadata devops cookbook
2个回答
4
投票

强有力的文字好吧,所以这需要一些历史课来解释。早期,每个人都通过使用网络表单并上传 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
而不是
.json
,而
stove
则相反。我们现在已经修复了整个生态系统中的问题,以了解 如果metadata.rb 和metadata.json 都存在,则更喜欢 JSON。计划是修复上传者以全部上传这两个文件,但目前我们仍坚持差异。

也就是说,您实际上不需要任何元数据。rb,您可以仅使用 JSON 上传到 Chef 服务器,Berkshelf 和策略系统都会为您自动执行此操作。


0
投票
    所有食谱都必须有
  1. metadata.rb
    它们很容易创建。但是,基于此错误报告metadata.json
     也应该有效。另外,正如您通过
    查看厨师来源可以看到的那样;两者都应该有效。
  2. 不;这是因为该文件将包含名称、版本和依赖项等信息。这是必需的,可以是
  3. .json
    .rb
当您遇到没有

metadata.json

metadata.rb
 的食谱时,您可以选择:

    向维护人员报告缺少关键组件;并希望他们能修复它。
  • 自行添加
  • metadata.rb
  • 查找具有类似功能的食谱。
您在尝试上传这本食谱时是否遇到错误?应该可以工作了。

© www.soinside.com 2019 - 2024. All rights reserved.