Chef

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску

Chef

Компиляция из разных источников. (см. ссылки)

По-моему довольно сложный в освоении продукт потому я решил вести заметки здесь. Особого понимания пока нет, как и знаний руби (а судя по всему это ключевое), потому тут возможны неточности, догадки и т.п. Все описаное ниже пробую под разные системы, но в основном под убунту.
Вообще-то у Chef есть несколько путей, клиент-серверный и соло.
Соло - для случаев когда рецепт заливается руками, и просто исполняется локально.

Установка

В /etc/apt/sources.list (добавить свой репозиторий)

deb http://apt.opscode.com/ oneiric-0.10 main universe
sudo aptitude update
sudo aptitude show chef

Если установка производится на сервер, то:

sudo aptitude install rubygems ohai chef chef-server chef-server-webui

В этом случае будут установлены все зависимости, созданы все необходимые файлы настроек и запуска при загрузке ОС. Запускается CouchDB и Stompserver (порт 61613). Стартует chef-server в настройках по умолчанию (порт 4000 и 4001), веб-интерфейс (4040), а также демоны chef-solr и клиент.

Установка на клиенте:

sudo aptitude install rubygems ohai chef

В документации особо подчеркнуто, что следует использовать именно aptitude который по умолчанию устанавливает мягкие зависимости. Но версия как видите, запаздывает и мы не получим возможности доступные в актуальном релизе. Поэтому для подготовленного администратора наиболее правильной будет самостоятельная сборка и bootstrap. Минимальное требование к установке Chef — Ruby и Rubygems. В Ubuntu их можно установить из репозитария:

sudo aptitude install ruby ruby1.8-dev libopenssl-ruby1.8 rdoc ri irb build-essential wget ssl-cert libxml-ruby libxml2-dev libxslt-dev

Отмечу что я не пробовал делать самостоятельную сборку пока что


первый запуск - соло

нужно создать 2 файла конфигурации и скачать рецепты (из гита). Я брал крон для теста, что бы ничего не сломать локально.
Файлы конфигурации в моем случае такие: (имена могут быть любые)


solo.json Цитата: solo.json holds a pointer to the recipe(s) we want to run (that’s only one recipe for now). My cookbook is called “op” (for Opinionated Programmer) – you should name yours after your server or your site. У меня рецепт, естественно, другой, cron

{
    "run_list": [ "recipe[cron::default]" ]
}

Проблемы после установки

У меня после установки ничего не работало, начинаю исследовать.
Logs:/var/log/chef

solr.log
[Wed, 31 Oct 2012 12:04:46 +0200] FATAL: Chef Solr is not installed or solr_home_path, solr_data_path, and solr_jetty_path are misconfigured.
[Wed, 31 Oct 2012 12:04:46 +0200] FATAL: Your current configuration is:
[Wed, 31 Oct 2012 12:04:46 +0200] FATAL: solr_home_path:  /var/chef/solr
[Wed, 31 Oct 2012 12:04:46 +0200] FATAL: solr_data_path:  /var/chef/solr/data
[Wed, 31 Oct 2012 12:04:46 +0200] FATAL: solr_jetty_path: /var/chef/solr-jetty
[Wed, 31 Oct 2012 12:04:46 +0200] FATAL: You can install Chef Solr using the chef-solr-installer script.

вопрос - как это установить используя chef-solr-installer

# chef-solr-installer

Creating Solr Home Directory
  mkdir -p /var/chef/solr
  entering /var/chef/solr
  tar zxvf /usr/lib/ruby/solr/solr-home.tar.gz
/usr/lib/ruby/vendor_ruby/mixlib/shellout.rb:242:in `invalid!': Expected process to exit with [0], but received '2' (Mixlib::ShellOut::ShellCommandFailed)
---- Begin output of tar zxvf /usr/lib/ruby/solr/solr-home.tar.gz ----
STDOUT: 
STDERR: /usr/lib/ruby/vendor_ruby/mixlib/shellout/unix.rb:213: warning: Insecure world writable dir /var/chef in PATH, mode 040777
tar (child): /usr/lib/ruby/solr/solr-home.tar.gz: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
---- End output of tar zxvf /usr/lib/ruby/solr/solr-home.tar.gz ----
Ran tar zxvf /usr/lib/ruby/solr/solr-home.tar.gz returned 2
	from /usr/lib/ruby/vendor_ruby/mixlib/shellout.rb:228:in `error!'
	from /usr/lib/ruby/vendor_ruby/chef/mixin/shell_out.rb:36:in `shell_out!'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:351:in `sh'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:311:in `create_solr_home'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:343:in `chdir'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:343:in `chdir'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:310:in `create_solr_home'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:371:in `indent'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:377:in `group'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:308:in `create_solr_home'
	from /usr/lib/ruby/vendor_ruby/chef/solr/solr_installer.rb:269:in `run'
	from /usr/bin/chef-solr-installer:25

1

Создадим локальные копии Git репозитариев Chef и Cookbooks, в последующем мы будем использовать некоторые файлы:

git clone http://github.com/opscode/chef.git
git clone http://github.com/opscode/cookbooks.git

Рецепты

$ sudo apt-get install git-core
$ git clone git://github.com/opscode/cookbooks.git
Для создании новой Cookboks используется команда “rake new_cookbook”, с указанием ее названия.
$ rake new_cookbook COOKBOOK=nginx

Пример рецепта

В результате будет создана вся необходимая структура. Внутри каталога Cookbooks содержится несколько файлов и подкаталогов имеющих определенное назначение. Все тонкости Cookbooks разбирать не будем, именно этот вопрос в документации освещено более менее хорошо. Основной файл называется metadata.rb содержит описание, данные мантайнера, лицензию, список поддерживаемых ОС, зависимости, конфликты и атрибуты. Например:

# список поддерживаемых ОС
%w{ ubuntu debian }.each do |os|
  supports os
end
 
# зависимости
 
%w{ build-essential runit }.each do |cb|
  depends cb
end

Даже если вы ни разу не писали в Ruby, смысл должен быть понятен. Параметр %w описывает строковый массив, а свойство .each перебирает элементы этого массива, do-end для каждого элемента выполняет выбранное действие. То есть в первом примере мы «получаем»:

support ubuntu
support debian

Поддерживаются все возможные элементы языка Ruby (группы, массивы, сравнения и так далее), например, очень просто можно задать версию дистрибутива — ‘ubuntu’, «>= 8.04″. Далее обычно идут описания атрибутов, которые необходимо сконфигурировать:

attribute "nginx/dir",
  :display_name => "Nginx Directory",
  :description => "Location of nginx configuration files",
  :default => "/etc/nginx"
 
attribute "nginx/worker_connections",
  :display_name => "Nginx Worker Connections",
  :description => "Number of connections per worker",
  :default => "1024"

Ссылки