我正在努力学习厨师,并跟踪厨师的文档-solo在这里找到的solo.html
在使用以下环境运行厨师独奏时:
name "dev"
description "Development Environment"
cookbook "vim-tutorial"我得到以下堆栈跟踪:
/opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:107:in
cookbook' /Users/barleyj/.chef/chef-solo/environments/dev.rb:3:infrom_file‘/opt/chefdk/embedded/apps/chef/lib/chef/mixin/from_file.rb:30:ininstance_eval' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/from_file.rb:30:infrom_file’/opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:261:inload_from_file' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:241:inload/opt/chefdk/embedded/app/厨师/lib/厨师/扩展!‘/opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:135:inexpand_run_list' /opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:122:inbuild_node’/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:259:inbuild_node' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:420:indo_run‘/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:213:inblock in run' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in叉’/opt/chefdk/embedded/app/厨师/lib/厨师/client.rb:207:inrun' /opt/chefdk/embedded/apps/chef/lib/chef/application.rb:236:inrun_chef_client‘block in run_application' /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:in循环’/opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:inrun_application' /opt/chefdk/embedded/apps/chef/lib/chef/application.rb:55:inrun‘/opt/chefdk/embedded/apps/chef/bin/chef-solo:25:in<top (required)>' /usr/bin/chef-solo:33:inload’/usr/bin/厨师-单人:33:in‘
当我查看environment.rb中的源代码时,这是有意义的。cookbook方法只接受2个参数。
如果我向环境文件添加了一个版本:
name "dev"
description "Development Environment"
cookbook "vim-tutorial", "= 0.1.0"厨师::例外:IllegalVersionConstraint:厨师不允许环境烹饪书版本限制-食谱中的/opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:306:in
validate_cookbook_version' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:112:in块“_pv_callbacks‘/opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:223:ineach' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:223:in_pv_callbacks中的/opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:224:incall' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:224:in块”/opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:70:inblock (2 levels) in validate' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:67:ineach‘/opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:67:inblock in validate' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:57:ineach’/opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:57:invalidate' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:108:incookbook‘/Users/barleyj/.chef/chef-solo/environments/dev.rb:3:inD23from_file' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:261:inload_from_file‘/opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:241:inload' /opt/chefdk/embedded/apps/chef/lib/chef/node.rb:380:inapply_expansion_attributes’/opt/chefdk/embedded/apps/chef/lib/chef/node.rb:369:inexpand!' /opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:135:inexpand_run_list/opt/chefdk/embedded/app/厨师/lib/chef/policy_builder/expand_node_object.rb:122:inbuild_node' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:259:inbuild_node‘/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:420:indo_run' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:213:in块在run’/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:infork' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:inrun‘/opt/chefdk/embedded/apps/chef/lib/chef/application.rb:236:inrun_chef_client' /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:226:in块in run_application’/opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:inloop' /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:inrun_application‘/opt/chefdk/embedded/apps/chef/lib/chef/application.rb:55:inrun' /opt/chefdk/embedded/apps/chef/bin/chef-solo:25:in’/usr/bin/厨师-独奏:33:inload' /usr/bin/chef-solo:33:in‘
当我查看源代码时,这也是有意义的,因为它不允许版本约束。那么,如何在没有厨师服务器的情况下安装菜谱或食谱呢?
发布于 2015-05-21 06:05:27
厨师客户端版本11+有一个名为主厨客户端本地模式-z的选项
这是在没有厨师服务器的情况下运行烹饪书的最佳方式。
厨师-客户的文件说明如下,
$ chef-client OPTION VALUE OPTION VALUE ...
-z, --local-mode
Run the chef-client in local mode. This allows all commands that work against the Chef server to also work against the local chef-repo.文档还说明了主厨的本地模式,
本地模式不需要配置文件,相反,它将查找一个名为
/cookbooks的目录,并将chef_repo_path设置为刚好高于此目录。(如果需要,本地模式将尊重配置文件中的设置。)如果未找到client.rb文件,且未指定配置文件,则本地模式将搜索knife.rb文件。 默认情况下,本地模式将在<chef_repo_path>/.cache目录下存储临时文件和缓存文件。这允许普通用户在不需要根访问的情况下以本地模式运行主厨客户端。
所以请按照下面的说明,
cookbooks的目录chef-client -z -o 'provide_your_overridden_runlist'
进一步参考这里
发布于 2015-01-08 05:44:32
只需完全关闭cookbook比特即可。该特性不能与chef-solo一起使用,因为它不进行任何形式的版本解决。我认为您可能是在假设cookbook版本限制充当某种运行列表,但事实并非如此。只有角色(和节点)才能有一个运行列表。您可以做的是,角色可以有一个针对特定环境的不同的运行列表,覆盖正常的环境。
发布于 2021-05-14 14:27:32
你可以用厨师独舞来做这个。我将运行列表与环境、食谱和data_bags目录放在同一个位置的-j (与此一起使用-j标志)文件中。您可以使用tarball (如它们的文档中所描述的),但我发现在节点上进行压缩、scp和解压缩也一样容易。
我使用单独的菜谱来管理所有内部和第三方的食谱,然后使用berks vendor将它们打包到同一个文件夹中(而不是我的内部食谱文件夹,因为它以相同的方式抓取内部食谱)。这是发送到节点的目录。
厨师-solo从节点中删除了所有在初始运行时没有作为依赖项列出的菜谱,所以您只需要在适当的元数据文件中列出所有依赖项。它进行递归搜索,因此如果cookbookA使用cookbookB,cookbookB使用cookbookC,那么以下内容就足够了:
# cookbookA/metadata.rb
depends 'cookbookB', '~> 0.1.0'
# cookbookB/metadata.rb
depends 'cookbookC', '~> 0.1.0'https://stackoverflow.com/questions/27833590
复制相似问题