首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >厨师:如何在没有厨师服务器的情况下安装菜谱?

厨师:如何在没有厨师服务器的情况下安装菜谱?
EN

Stack Overflow用户
提问于 2015-01-08 05:37:58
回答 3查看 3.1K关注 0票数 3

我正在努力学习厨师,并跟踪厨师的文档-solo在这里找到的solo.html

在使用以下环境运行厨师独奏时:

代码语言:javascript
复制
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:in instance_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:in load_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:in expand_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:in build_node' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:420:indo_run‘/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:213:in block in run' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in叉’/opt/chefdk/embedded/app/厨师/lib/厨师/client.rb:207:in run' /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:in run_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个参数。

如果我向环境文件添加了一个版本:

代码语言:javascript
复制
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:in each' /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:in call' /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:in block (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:in block 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:in validate' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:108:incookbook‘/Users/barleyj/.chef/chef-solo/environments/dev.rb:3:in D23from_file' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:261:inload_from_file‘/opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:241:in load' /opt/chefdk/embedded/apps/chef/lib/chef/node.rb:380:inapply_expansion_attributes’/opt/chefdk/embedded/apps/chef/lib/chef/node.rb:369:in expand!' /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:in build_node' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:259:inbuild_node‘/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:420:in do_run' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:213:in块在run’/opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in fork' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:inrun‘/opt/chefdk/embedded/apps/chef/lib/chef/application.rb:236:in run_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:in loop' /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:inrun_application‘/opt/chefdk/embedded/apps/chef/lib/chef/application.rb:55:in run' /opt/chefdk/embedded/apps/chef/bin/chef-solo:25:in’/usr/bin/厨师-独奏:33:in load' /usr/bin/chef-solo:33:in

当我查看源代码时,这也是有意义的,因为它不允许版本约束。那么,如何在没有厨师服务器的情况下安装菜谱或食谱呢?

EN

回答 3

Stack Overflow用户

发布于 2015-05-21 06:05:27

厨师客户端版本11+有一个名为主厨客户端本地模式-z的选项

这是在没有厨师服务器的情况下运行烹饪书的最佳方式。

厨师-客户的文件说明如下,

代码语言:javascript
复制
$ 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客户端。

chef-client -z -o 'provide_your_overridden_runlist'

进一步参考这里

票数 3
EN

Stack Overflow用户

发布于 2015-01-08 05:44:32

只需完全关闭cookbook比特即可。该特性不能与chef-solo一起使用,因为它不进行任何形式的版本解决。我认为您可能是在假设cookbook版本限制充当某种运行列表,但事实并非如此。只有角色(和节点)才能有一个运行列表。您可以做的是,角色可以有一个针对特定环境的不同的运行列表,覆盖正常的环境。

票数 0
EN

Stack Overflow用户

发布于 2021-05-14 14:27:32

你可以用厨师独舞来做这个。我将运行列表与环境、食谱和data_bags目录放在同一个位置的-j (与此一起使用-j标志)文件中。您可以使用tarball (如它们的文档中所描述的),但我发现在节点上进行压缩、scp和解压缩也一样容易。

我使用单独的菜谱来管理所有内部和第三方的食谱,然后使用berks vendor将它们打包到同一个文件夹中(而不是我的内部食谱文件夹,因为它以相同的方式抓取内部食谱)。这是发送到节点的目录。

厨师-solo从节点中删除了所有在初始运行时没有作为依赖项列出的菜谱,所以您只需要在适当的元数据文件中列出所有依赖项。它进行递归搜索,因此如果cookbookA使用cookbookB,cookbookB使用cookbookC,那么以下内容就足够了:

代码语言:javascript
复制
# cookbookA/metadata.rb
depends 'cookbookB', '~> 0.1.0'

# cookbookB/metadata.rb
depends 'cookbookC', '~> 0.1.0'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27833590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档