chef-soloを呼び出す慣用的な方法は?


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. 小さなシェルスクリプト(run-chef-solo)。
  3. エイリアス(などの名前を上書きできますchef-solo)。

これを行う慣用的な方法は何ですか?他のシェフユーザーはどのようにしてchefを呼び出しますか?

回答:


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サーバーの実行を見てみるとよいでしょう:-)。


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を実行できるのが好きなので、すべてを維持します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.