Chef infra 没有metadata.rb文件的Chef Supermarket cookbooks

Chef infra 没有metadata.rb文件的Chef Supermarket cookbooks,chef-infra,metadata,devops,cookbook,Chef Infra,Metadata,Devops,Cookbook,从Chef's Supermarket安装/下载烹饪书时,有些烹饪书包含metadata.json文件,但不包含metadata.rb文件 没有metadata.rb文件,用户无法将食谱上载到chef服务器。我的问题有两个: 如果下载/安装的烹饪书中不包含metadata.rb文件,是否有方法为项目生成适当的metadata.rb文件 如果没有metadata.rb,是否有办法将食谱上载到chef服务器 以下是在我的工作站上运行的ChefDK版本: 厨师长开发工具包版本:1.3.43 厨师长客户

从Chef's Supermarket安装/下载烹饪书时,有些烹饪书包含metadata.json文件,但不包含metadata.rb文件

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

  • 如果下载/安装的烹饪书中不包含metadata.rb文件,是否有方法为项目生成适当的metadata.rb文件
  • 如果没有metadata.rb,是否有办法将食谱上载到chef服务器
  • 以下是在我的工作站上运行的ChefDK版本:

  • 厨师长开发工具包版本:1.3.43
  • 厨师长客户端版本:12.19.36
  • 交付版本:master(DD319AA632CF550C92A2172B9D1226478FEA997)
  • 伯克斯版本:5.6.4
  • 厨房版本:1.16.0
  • 这是我用来从超市拿到菜谱的命令和菜谱:

  • 刀食谱网站下载詹金斯
  • 刀食谱网站安装詹金斯
  • 网址:

    谢谢你的帮助。我在Chef的文档中找不到太多关于如何使用未包含metadata.rb文件的烹饪书的内容。从我所读到的内容来看,每个cookbook目录中都应该有一个metadata.rb文件

  • 所有烹饪书都必须有一个
    元数据.rb
    。但是,
    metadata.json
    也应该有效。而且,正如你所看到的;两者都应该有效
  • 没有;这是因为文件将包含名称、版本和依赖项等信息。它是必需的,可以是
    .json
    .rb
  • 当您遇到没有
    metadata.json
    metadata.rb
    的烹饪书时,您可以选择:

    • 向维修人员报告其缺少关键部件;希望他们能解决
    • 自己添加
      元数据.rb
    • 找到一本使用类似功能的食谱

    尝试上载此食谱时是否出现错误?它应该会起作用。

    好的,所以这需要一点历史课来解释。在早期,每个人都通过使用web表单和上传tarball,手动将食谱上传到超市(当时是社区网站)。这太糟糕了,所以我们添加了一个API和一个CLI命令
    knife cookbook site share
    。该命令的工作原理基本上类似于刀烹饪书上传,因为它是为“chef repo”monorepo风格设计的,所有烹饪书都位于一个名为“cookbooks/”的文件夹中。随着Berkshelf的影响力越来越大,越来越多的人开始将每一本食谱放入自己的回购协议中,并与它们单独合作。这使得使用
    刀烹饪书网站共享
    更难使用,因此编写了一个新工具:
    火炉
    。火炉试图纠正
    刀烹饪书网站共享
    中的一系列问题,其中之一就是动态元数据的持续问题。一些奇特的烹饪书使用诸如thor scmversion之类的工具来管理烹饪书元数据,这意味着metadata.rb的行看起来基本上类似于
    version IO.read('version')
    。还有其他例子,但简短的版本是,如果metadata.rb包含动态代码,您不希望在发布后重新运行该动态代码,因为它可能无法在您的机器上运行(例如,它使用的某些文件或工具仅存在于cookbook作者的机器上)。当时,迫使Chef世界中的所有东西都不运行metadata.rb的唯一方法是不将其包含在上传中,而是只包含已编译的metadata.json

    我们到了
    knife cookbook site share
    通常只上载
    .rb
    而不上载
    .json
    ,而
    Foster
    则相反。我们现在已经在整个生态系统中解决了一些问题,以便知道如果metadata.rb和metadata.json都存在,那么我们更喜欢json。我们的计划是修复所有上传者上传这两个文件,但现在我们被困在差异


    也就是说,您实际上不需要metadata.rb。对于任何事情,您都可以只使用JSON上传到Chef服务器,Berkself和策略系统将为您自动执行此操作。

    我的过程如下:1。在cookbooks目录中运行命令:“刀子食谱网站下载jenkins”。2.手动提取包jenkins-5.0.1.tar.gz 3。在cookbooks目录中运行命令:“刀子cookbook upload jenkins”。这次没有返回关于丢失的metadata.rb文件的错误(尽管它不存在),但是返回了以下错误:错误:Cookbook jenkins依赖于当前未上载的Cookbook错误:正在上载,在服务器上找不到。错误:缺少的烹饪书是:……不幸的是,这是不正确的,原因是::historicall jazzhands::Reguments。非常棒的信息!根据您的评论:“也就是说,您实际上不应该需要metadata.rb。对于任何事情,您都可以只使用JSON上传到Chef服务器,并且Berkshelf和策略系统将为您自动执行此操作。”我尝试使用Berkshelf,但是,当我尝试初始化cookbook目录中的Berkshellf时,它不起作用,因为不存在metadata.rb。手动创建Berksfile而不是初始化BerksShelf是否是解决此问题的正确方法?实际上,您不会直接接触烹饪书,如果您刚刚开始使用社区食谱,您可能会使用
    source'https://supermarket.chef.io/“\n cookbook‘whatever’
    然后
    berks install&&berks upload
    从超市抓取
    whatever
    ,并将其上载到厨师服务器。随着您对Chef越来越熟悉,这可以通过向应用程序或包装器cookbooks添加依赖项来处理,然后berks会自动将其拉入。