Idiomatyczny sposób na przywołanie szefa kuchni solo?

8

Jaki jest idiomatyczny sposób przywołania szefa kuchni solo? Większość stron to robi:

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

Ale to długo. Jest kilka krótszych sposobów, aby to zrobić:

  1. Zadanie prowizji ( rake chef-solo).
  2. Mały skrypt powłoki ( run-chef-solo).
  3. Alias ​​(może zastąpić nazwę, na przykład chef-solo).

Jak idiomatyczny sposób to zrobić? W jaki sposób inni użytkownicy szefa kuchni powołują się na szefa kuchni?

kerkeslager
źródło

Odpowiedzi:

8

Domyślnie chef-soloodczytuje swoją konfigurację z /etc/chef/solo.rb. Parametry wiersza polecenia odpowiadają wartościom konfiguracji, które można ustawić w tym pliku. Odbywa się to za pomocą biblioteki 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

„Opcja” to wartość pliku konfiguracyjnego.

Rzeczywisty plik konfiguracyjny /etc/chef/solo.rbwyglądałby następująco:

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"

Pamiętaj również, że plik JSON może być również zdalnym adresem URL.

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

Możesz również użyć Ohai jako biblioteki w pliku konfiguracyjnym, aby wykryć platformę lub inne atrybuty, aby określić, którego pliku JSON użyć.

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"

A na przykład będziesz miał pliki JSON specyficzne dla platformy. Albo można użyć o[:hostname], o[:domain]lub o[:fqdn]korzystać z plików JSON na podstawie nazwy hosta, domeny lub FQDN. Ale kiedy zaczniesz mieć rusztowanie serwerów do obsługi tego rodzaju dynamicznej konfiguracji, możesz spojrzeć na uruchomienie Chef Server :-).

jtimberman
źródło
1

@jtimberman napisał już świetną odpowiedź. Oto mój osobisty sposób przywoływania szefa kuchni-solo. To uruchamia podstawy i prawdopodobnie będziesz musiał dodać więcej atrybutów /etc/chef/node.jsoni zbadać niektóre opcje opisane w drugiej odpowiedzi.

# 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

Skopiuj swoje książki kucharskie do /var/chef-solo/cookbookslub tar.gz je na serwerze internetowym i użyj recipe_urlparametru. Uruchomienie chef-solow węźle jest wszystkim, co jest wymagane do jego wywołania.

Jeśli to możliwe, staram się zachować wszystko, solo.rbponieważ lubię być w stanie prowadzić kucharza-solo bez konieczności pamiętania dodatkowych argumentów.

Tim Potter
źródło