我有一些我需要配置相同的ubuntu机器,所以我在一个以只读方式挂载的共享目录中使用chef-solo对厨师烹饪书来实现这一点。从厨师版本10开始,我一直使用厨师独奏超过一年。今天,在使用打包机重建虚拟机之后(我使用虚拟机测试我的食谱,然后在“真实”机器上使用它们,并定期重建它们所以这些都是“新鲜的”)我的食谱开始因错误而失败:
ERROR: Cookbook loaded at path(s) [/chef/cookbooks/ack-grep] has invalid metadata: The `name' attribute is required in cookbook metadata
我在多台机器上多次使用这些烹饪书,在VM中反复测试,但我注意到新重建的VM安装了厨师12.0.0。运行厨师11的老VM仍然很好用。这适用于我的每一本食谱。
我开始使用谷歌调查和研究这个问题,我在该主题上找到的所有内容都说将“name”条目放在metadata.rb文件中。但我的metadata.rb文件已包含“名称”条目。例如,这是我的元数据文件(编辑后不会在google-able论坛中发布我的个人信息):
---- Begin metadata.rb ---------
name 'ack-grep'
maintainer 'me'
maintainer_email 'me@example.com'
license 'All Rights Reserved'
description 'Installs/Configures ack-grep'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version '0.1.0'
------ End metadata.rb -------
本食谱中的单一食谱非常简单:
------开始default.rb -------
# # Cookbook Name:: ack-grep # Recipe:: default package 'ack-grep' do action :install end
------结束default.rb -------
我研究过的一篇文章说创建metadata.json文件会有所帮助,所以我运行了命令:
刀库菜单元数据ack-grep
此命令创建了一个metadata.json文件,该文件包含一个类似的“name”字段,其中包含与metadata.rb文件相同的信息以及许多其他信息,均为json格式。但是再次运行相同的chef-solo命令会导致完全相同的错误消息。
我猜测,因为它抱怨元数据中缺少字段,meta.rb和metadata.json文件中都存在,我错过了其他内容并且错误消息是错误的。任何人都有比这更好的信息,或知道发生了什么?甚至可能如何解决/修复它?
答案 0 :(得分:0)
快速解决方法是使用--bootstrap-version选项指定旧版本的Chef。
“knife solo(prepare / bootstrap)user @ host -P password --bootstrap-version 11.16.4-1”