调用厨师独奏的惯用方式?


8

调用chef-solo的惯用方式是什么?大多数网站都这样做:

chef-solo -c ~/solo.rb -j ~/node.json -r http://www.example.com/chef-solo.tar.gz

但这很长。我可以想到一些更短的方法:

  1. 瑞克任务(rake chef-solo)。
  2. 一个小的shell脚本(run-chef-solo)。
  3. 别名(可以覆盖名称,例如chef-solo)。

惯用的方法是什么?其他厨师用户如何调用厨师?

Answers:


8

默认情况下,chef-solo从中读取其配置/etc/chef/solo.rb。命令行参数与可以在此文件中设置的配置值相对应。这是使用mixlib-config库完成的。

  option :config_file, 
    :short => "-c CONFIG",
    :long  => "--config CONFIG",
    :default => "/etc/chef/solo.rb",
    :description => "The configuration file to use"

  option :json_attribs,
    :short => "-j JSON_ATTRIBS",
    :long => "--json-attributes JSON_ATTRIBS",
    :description => "Load attributes from a JSON file or URL",
    :proc => nil

  option :recipe_url,
      :short => "-r RECIPE_URL",
      :long => "--recipe-url RECIPE_URL",
      :description => "Pull down a remote gzipped tarball of recipes and untar it to the cookbook ca
che.",
      :proc => nil

“选项”是配置文件的值。

实际的配置文件/etc/chef/solo.rb如下所示:

file_cache_path "/tmp/chef-solo"
cookbook_path   "/tmp/chef-solo/cookbooks"
role_path       "/tmp/chef-solo/roles"
json_attribs    "/tmp/chef-solo/node.json"
recipe_url      "http://www.example.com/chef-solo.tar.gz"

还请注意,JSON文件也可以是远程URL。

json_attribs    "http://www.example.com/node.json"

您也可以将Ohai用作配置文件中的库,以检测平台或其他属性以指定要使用的JSON文件。

require 'rubygems'
require 'ohai'
o = Ohai::System.new
o.all_plugins
file_cache_path "/tmp/chef-solo"
cookbook_path   "/tmp/chef-solo/cookbooks"
role_path       "/tmp/chef-solo/roles"
json_attribs    "/tmp/chef-solo/#{o[:platform]}.json"
recipe_url      "http://www.example.com/chef-solo.tar.gz"

然后,例如,您将具有“平台”特定的JSON文件。或者,您可以使用o[:hostname]o[:domain]或者o[:fqdn]使用基于主机名,域或fqdn的JSON文件。但是,一旦开始使用支持这种动态配置的服务器支架,您可能会考虑运行Chef Server :-)。


1

@jtimberman已经写了一个很好的答案。这是我个人调用厨师独奏的方式。这使基础工作正常,您可能需要向其添加更多属性/etc/chef/node.json并探索其他答案中描述的一些选项。

# cat > /etc/chef/solo.rb << EOF
cookbook_path    "/var/chef-solo/cookbooks"
json_attribs     "/etc/chef/node.json"
EOF

# cat > /etc/chef/node.json << EOF
{
  "run_list": ["recipe[foo]", "recipe[bar]"]
}
EOF

将您的食谱复制到/var/chef-solo/cookbooksWeb服务器上,或将其复制到tar.gz上,然后使用recipe_url参数。chef-solo只需在节点上运行即可调用它。

如果可能的话,我会尽量保留所有内容,solo.rb因为我非常喜欢能够运行Chef-solo,而不必记住任何其他参数。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.