调用 chef-solo 的惯用方式是什么?大多数网站都这样做:
chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz
但这很长。我能想到一些更短的方法来做到这一点:
- 一个 rake 任务 (
rake chef-solo
)。 - 一个小的 shell 脚本 (
run-chef-solo
)。 - 别名(可以覆盖名称,如
chef-solo
)。
这样做的惯用方法是什么?其他厨师用户如何调用厨师?
默认情况下,
chef-solo
从/etc/chef/solo.rb
. 命令行参数对应于可以在此文件中设置的配置值。这是使用 mixlib-config 库完成的。'option' 是配置文件的值。
实际的配置文件,
/etc/chef/solo.rb
如下所示:另请注意,JSON 文件也可以是远程 URL。
您也可以将 Ohai 用作配置文件中的库,以检测平台或其他属性以指定要使用的 JSON 文件。
然后,例如,您将拥有特定于“平台”的 JSON 文件。或者您可以使用
o[:hostname]
,o[:domain]
或o[:fqdn]
使用基于主机名、域或 fqdn 的 JSON 文件。但是,一旦您开始使用服务器支架来支持这种动态配置,您可能会考虑运行 Chef Server :-)。@jtimberman 已经写了一个很好的答案。这是我个人调用 chef-solo 的方式。这使基础工作正常,您可能需要添加更多属性
/etc/chef/node.json
并探索其他答案中描述的一些选项。将您的食谱复制到
/var/chef-solo/cookbooks
或 tar.gz 到网络服务器上并使用该recipe_url
参数。在节点上运行chef-solo
就是调用它所需的全部内容。如果可能的话,我会尽量保留所有内容,
solo.rb
因为我非常喜欢能够运行 chef-solo 而无需记住任何额外的参数。请注意,现在不推荐使用 chef-solo,取而代之的是 chef-client -z local-mode:
https://github.com/chef/chef-rfc/blob/master/rfc031-replace-solo-with-local-mode.md