Идиоматичный способ вызвать шеф-повара?

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

Какой идиоматический способ сделать это? Как другие пользователи шеф-повара вызывают шеф-повара?

kerkeslager
источник

Ответы:

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

jtimberman
источник
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/cookbookstar.gz или запустите их на веб-сервере и используйте recipe_urlпараметр. Запуск chef-soloна узле - это все, что требуется для его вызова.

Если возможно, я стараюсь держать все solo.rbкак есть, так как мне очень нравится возможность запускать chef-solo без запоминания каких-либо дополнительных аргументов.

Тим Поттер
источник