Cara idiomatis untuk memanggil chef-solo?

8

Apa cara idiomatis untuk memanggil chef-solo? Sebagian besar situs melakukan ini:

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

Tapi itu panjang. Ada beberapa cara yang lebih pendek untuk melakukan ini yang dapat saya pikirkan:

  1. Tugas menyapu ( rake chef-solo).
  2. Script shell kecil ( run-chef-solo).
  3. Sebuah alias (dapat mengganti nama, seperti chef-solo).

Apa cara idiomatis untuk melakukan ini? Bagaimana cara pengguna chef lain memanggil chef?

kerkeslager
sumber

Jawaban:

8

Secara default, chef-solobaca konfigurasinya dari /etc/chef/solo.rb. Parameter baris perintah sesuai dengan nilai konfigurasi yang dapat diatur dalam file ini. Ini dilakukan menggunakan pustaka 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

'Opsi' adalah nilai file konfigurasi.

File konfigurasi aktual, /etc/chef/solo.rbakan terlihat seperti:

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"

Perhatikan juga bahwa file JSON dapat berupa URL jarak jauh juga.

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

Anda dapat menggunakan Ohai sebagai perpustakaan di dalam file konfigurasi juga, untuk mendeteksi platform atau atribut lainnya untuk menentukan file JSON apa yang akan digunakan.

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"

Dan kemudian Anda akan memiliki "platform" file JSON tertentu, misalnya. Atau Anda bisa menggunakan o[:hostname], o[:domain]atau o[:fqdn]menggunakan file JSON berdasarkan nama host, domain atau fqdn. Tetapi begitu Anda mulai memiliki perancah server untuk mendukung konfigurasi dinamis semacam ini, Anda mungkin akan melihat menjalankan Server Chef :-).

jtimberman
sumber
1

@jtimberman telah menulis jawaban yang bagus. Inilah cara pribadi saya untuk memanggil chef-solo. Ini membuat dasar-dasarnya bekerja dan Anda mungkin perlu menambahkan lebih banyak atribut ke /etc/chef/node.jsondan menjelajahi beberapa opsi yang dijelaskan dalam jawaban lain.

# 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

Salin buku masak Anda ke /var/chef-solo/cookbooksatau tar.gz di server web dan gunakan recipe_urlparameter. Berjalan chef-solodi node adalah semua yang diperlukan untuk memintanya.

Jika mungkin saya mencoba dan menyimpan semuanya solo.rbkarena saya cukup suka menjalankan chef-solo tanpa harus mengingat argumen tambahan.

Tim Potter
sumber