Ідіоматичний спосіб викликати шеф-кухаря-соло?


8

Який ідіоматичний спосіб викликати шеф-кухаря? Більшість сайтів роблять це:

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).

Який ідіоматичний спосіб це зробити? Як інші користувачі кухаря звертаються до шефа?

Відповіді:


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]використовувати JSON - файли на основі імені хоста, домена або FQDN. Але як тільки ви почнете мати риштування серверів для підтримки такого роду динамічної конфігурації, ви можете подивитися на запуск 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/cookbooksабо в tar.gz на веб-сервері та скористайтеся recipe_urlпараметром. Запуск chef-soloна вузлі - це все, що потрібно для його виклику.

Якщо можливо, я намагаюся все тримати так, solo.rbяк мені дуже подобається мати можливість керувати соло-шеф-кухарем, не пам'ятаючи зайвих аргументів.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.