Chef infra 没有metadata.rb文件的Chef Supermarket cookbooks
从Chef's Supermarket安装/下载烹饪书时,有些烹饪书包含metadata.json文件,但不包含metadata.rb文件 没有metadata.rb文件,用户无法将食谱上载到chef服务器。我的问题有两个: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 厨师长客户
元数据.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会自动将其拉入。