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

时间:2015-01-08 05:37:58

标签: chef chef-solo

我正在尝试学习厨师,并按照此处{chef {3}}

的厨师独奏文档进行操作

在以下环境中运行chef-solo时:

name "dev"
description "Development Environment"
cookbook "vim-tutorial"

我得到以下stacktrace:

  

ArgumentError:参数数量错误(1表示2)   /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:107:in cookbook' /Users/barleyj/.chef/chef-solo/environments/dev.rb:3:in from_file'   在/ {/ 1 /}   /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:261:in instance_eval' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/from_file.rb:30:in loading'   /opt/chefdk/embedded/apps/chef/lib/chef/node.rb:380:in load_from_file' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:241:in展开!'   /opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:135:in apply_expansion_attributes' /opt/chefdk/embedded/apps/chef/lib/chef/node.rb:369:in build_node'   /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:259:in expand_run_list' /opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:122:in do_run'   /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:213:in build_node' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:420:in fork'   /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in block in run' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in run_chef_client'   /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:226:in run' /opt/chefdk/embedded/apps/chef/lib/chef/application.rb:236:in循环'   /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:in block in run_application' /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:in运行'   / opt / chefdk / embedded / apps / chef / bin / chef-solo:25:run_application' /opt/chefdk/embedded/apps/chef/lib/chef/application.rb:55:in加载'   / usr / bin / chef-solo:33:在`'

当我查看environment.rb中的源代码时,这是有道理的。 cookbook方法只接受2个参数。

如果我将版本添加到环境文件中:

<top (required)>'
  /usr/bin/chef-solo:33:in
  

Chef :: Exceptions :: IllegalVersionConstraint:大厨独奏中不允许使用环境食谱版本限制   /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:306:in name "dev" description "Development Environment" cookbook "vim-tutorial", "= 0.1.0" 在食谱中阻止&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:224:in validate_cookbook_version' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:112:in阻止_pv_callbacks&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:223:in call' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:224:in _ pv_callbacks&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:70:in each' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:223:in每个&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:67:in block (2 levels) in validate' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:67:in每个&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:57:in block in validate' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/params_validate.rb:57:in cookbook&#39;   /Users/barleyj/.chef/chef-solo/environments/dev.rb:3:in validate' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:108:in instance_eval&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/mixin/from_file.rb:30:in from_file' /opt/chefdk/embedded/apps/chef/lib/chef/mixin/from_file.rb:30:in load_from_file&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:241:in from_file' /opt/chefdk/embedded/apps/chef/lib/chef/environment.rb:261:in apply_expansion_attributes&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/node.rb:369:in load' /opt/chefdk/embedded/apps/chef/lib/chef/node.rb:380:in expand_run_list&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:122:in expand!' /opt/chefdk/embedded/apps/chef/lib/chef/policy_builder/expand_node_object.rb:135:in build_node&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:420:in build_node' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:259:in阻止运行&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in do_run' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:213:in运行&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/application.rb:236:in fork' /opt/chefdk/embedded/apps/chef/lib/chef/client.rb:207:in块在run_application&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:in run_chef_client' /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:226:in run_application&#39;   /opt/chefdk/embedded/apps/chef/lib/chef/application.rb:55:in loop' /opt/chefdk/embedded/apps/chef/lib/chef/application/solo.rb:218:in&#39;   / usr / bin / chef-solo:33:run' /opt/chefdk/embedded/apps/chef/bin/chef-solo:25:in&#39;

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

3 个答案:

答案 0 :(得分:2)

Chef客户端版本11+,具有名为Chef client local mode(-z)的选项 这是在没有Chef服务器的情况下运行cookbook的最佳方式。

Chef-client的Chef文档声明如下,

$ 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.

文档还说明了Chef Local Mode,

  

本地模式不需要配置文件,而是看起来   对于名为/cookbooks的目录,将chef_repo_path设置为   就在那之上。 (本地模式将遵循a中的设置   配置文件,如果需要。)如果找不到client.rb文件   并且没有指定配置文件,本地模式将搜索a   knife.rb档案。

     

本地模式将存储临时文件和缓存文件   默认情况下为<chef_repo_path>/.cache目录。这允许正常   用户在本地模式下运行chef-client而不需要root   访问。

请按照以下说明进行操作

  • 创建一个名为&#34; cookbooks&#34;的目录。
  • 将所有烹饪书及其依赖的食谱放在目录中
  • 运行以下命令(上面一级到目录),以本地模式调用Chef客户端。

chef-client -z -o&#39; provide_your_overridden_​​runlist&#39;

进一步参考here

答案 1 :(得分:0)

完全取消cookbook位。该功能不能与chef-solo一起使用,因为它不会执行任何形式的版本解析。我想也许你假设食谱版本限制作为某种运行列表,但事实并非如此。只有角色(和节点)可以有一个运行列表。你可以做的是一个角色可以拥有一个特定环境的不同运行列表,覆盖正常环境。

答案 2 :(得分:0)

您可以使用chef-solo。我将运行列表放在 node.json(使用 -j 标志)文件中,该文件与环境、cookbooks 和 data_bags 目录位于同一位置。您可以使用 tarball(如他们的文档中所述),但我发现在节点上压缩、scp 和解压缩同样容易。

我使用单独的说明书来管理 Berksfile 中的所有说明书、内部和 3rd 方,然后使用 berks vendor 将它们全部打包到同一个文件夹中(不是我的内部说明书文件夹,因为它抓取了内部食谱相同)。这是发送到节点的目录。

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

# cookbookA/metadata.rb
depends 'cookbookB', '~> 0.1.0'

# cookbookB/metadata.rb
depends 'cookbookC', '~> 0.1.0'