Chef: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
 
(не показано 45 промежуточных версий этого же участника)
Строка 1: Строка 1:
  +
[[Категория:Chef]]
  +
[[Категория:Linux]]
  +
[[Категория:Autodeploy]]
  +
[[Категория:Ruby]]
 
=Chef=
 
=Chef=
Компиляция из разных источников. (см. ссылки)
+
Компиляция из разных источников. (см. ссылки)<BR>
  +
  +
По-моему довольно сложный в освоении продукт потому я решил вести заметки здесь.
  +
Особого понимания пока нет, как и знаний руби (а судя по всему это ключевое), потому тут возможны неточности, догадки и т.п. Все описаное ниже пробую под разные системы, но в основном под убунту.
  +
<BR>
  +
Вообще-то у Chef есть несколько путей, клиент-серверный и соло.<BR>
  +
Соло - для случаев когда рецепт заливается руками, и просто исполняется локально.
 
==Установка==
 
==Установка==
  +
В /etc/apt/sources.list (добавить свой репозиторий)
  +
<PRE>
  +
deb http://apt.opscode.com/ oneiric-0.10 main universe
  +
</PRE>
   
  +
<PRE>
  +
sudo aptitude update
  +
sudo aptitude show chef
  +
</PRE>
  +
  +
Если установка производится на сервер, то:
  +
<PRE>
  +
sudo aptitude install rubygems ohai chef chef-server chef-server-webui
  +
</PRE>
  +
В этом случае будут установлены все зависимости, созданы все необходимые файлы настроек и запуска при загрузке ОС. Запускается CouchDB и Stompserver (порт 61613). Стартует chef-server в настройках по умолчанию (порт 4000 и 4001), веб-интерфейс (4040), а также демоны chef-solr и клиент.
   
  +
Установка на клиенте:
deb http://apt.opscode.com/ oneiric-0.10 main universe
 
  +
<PRE>sudo aptitude install rubygems ohai chef</PRE>
  +
В документации особо подчеркнуто, что следует использовать именно aptitude который по умолчанию устанавливает мягкие зависимости.
  +
Но версия как видите, запаздывает и мы не получим возможности доступные в актуальном релизе. Поэтому для подготовленного администратора наиболее правильной будет самостоятельная сборка и bootstrap. Минимальное требование к установке Chef — Ruby и Rubygems. В Ubuntu их можно установить из репозитария:
  +
<PRE>
  +
sudo aptitude install ruby ruby1.8-dev libopenssl-ruby1.8 rdoc ri irb build-essential wget ssl-cert libxml-ruby libxml2-dev libxslt-dev
  +
</PRE>
  +
Отмечу что я не пробовал делать самостоятельную сборку пока что
   
  +
  +
===первый запуск - соло===
  +
Как уже говорил выше, первым делом пробуем локального клиента. Тут тоже есть свои сложности ...
  +
====Конфигурационные файлы====
  +
нужно создать 2 файла конфигурации и скачать рецепты (из гита). Я брал крон для теста, что бы ничего не сломать локально.
  +
<BR>
  +
Файлы конфигурации в моем случае такие: (имена могут быть любые)
  +
solo.rb
  +
<PRE>
  +
cookbook_path "/etc/chef/recipes/cookbooks"
  +
log_level :all
  +
file_store_path "/etc/chef/recipes/"
  +
file_cache_path "/etc/chef/recipes/"
  +
</PRE>
  +
{{Note|Замечу что в статье http://www.opinionatedprogrammer.com/2011/06/chef-solo-tutorial-managing-a-single-server-with-chef/ предлогается другой конфиг }}
  +
<PRE>
  +
root = File.absolute_path(File.dirname(__FILE__))
  +
file_cache_path root
  +
cookbook_path root + '/cookbooks'
  +
</PRE>
  +
solo.json
  +
Цитата: <B><I>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.</I></B>
  +
У меня рецепт, естественно, другой, cron
  +
<PRE>
  +
{
  +
"run_list": [ "recipe[cron::default]" ]
  +
}
  +
</PRE>
  +
  +
====Запуск====
  +
<PRE>
  +
chef-solo -l debug -c /etc/chef/solo.rb -j /etc/chef/solo.json
  +
</PRE>
  +
  +
Отмечу, что я хотел установить какой-то пакет потому немного изменил рецепт и добавил установку yum (он не был установлен т.к. убунта)
  +
<BR> простейший рецепт выглядит вот так: (/etc/chef/recipes/cookbooks/cron/recipes/default.rb)
  +
<PRE>
  +
package "cron" do
  +
action :upgrade
  +
end
  +
  +
package "yum" do
  +
action :upgrade
  +
end
  +
</PRE>
  +
  +
Полный лог (довольно большой) я вынес на отдельную страницу: http://wiki.sirmax.noname.com.ua/index.php/Chef_Solo_Debug_Log
  +
<BR>Без дебага:
  +
<PRE>
  +
chef-solo -c /etc/chef/solo.rb -j /etc/chef/solo.json
  +
[Wed, 31 Oct 2012 13:53:31 +0200] INFO: *** Chef 10.16.2 ***
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Setting the run_list to ["recipe[cron::default]"] from JSON
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Run List is [recipe[cron::default]]
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Run List expands to [cron::default]
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Starting Chef Run for mmaxur-pc
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Running start handlers
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Start handlers complete.
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Processing package[cron] action upgrade (cron::default line 20)
  +
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Processing package[yum] action upgrade (cron::default line 24)
  +
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: package[yum] upgraded from uninstalled to 3.2.25-1ubuntu2
  +
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: Chef Run complete in 9.234625 seconds
  +
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: Running report handlers
  +
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: Report handlers complete
  +
</PRE>
  +
После чего наблюдаю установленный yum
  +
  +
===Устанавливаем chef-server===
  +
Потрясающяя идея поставить сервер используя работающий chef-solo. Я поражен! http://wiki.opscode.com/display/chef/Installing+Chef+Server+using+Chef+Solo
  +
====Конфиг====
  +
Более или менее полное описание параметров: http://wiki.opscode.com/display/chef/Chef+Configuration+Settings
  +
<BR>
  +
Мой конфиг такой:
  +
<PRE>
  +
log_level :fatal
  +
log_location STDOUT
  +
chef_server_url "http://localhost:4000"
  +
file_cache_path "/var/cache/chef"
  +
sandbox_path "/var/cache/chef/sandboxes"
  +
checksum_path "/var/lib/chef/cookbook_index"
  +
node_path "/var/lib/chef/node"
  +
cookbook_tarball_path "/var/lib/chef/cookbook-tarballs"
  +
  +
validation_client_name "chef-validator"
  +
  +
web_ui_admin_user_name "admin"
  +
web_ui_admin_default_password "admin"
  +
  +
supportdir = "/var/lib/chef"
  +
solr_jetty_path File.join(supportdir, "solr", "jetty")
  +
solr_data_path File.join(supportdir, "solr", "data")
  +
solr_home_path File.join(supportdir, "solr", "home")
  +
solr_heap_size "256M"
  +
  +
solr_url "http://localhost:8983"
  +
  +
umask 0022
  +
  +
signing_ca_cert "/etc/chef/certificates/cert.pem"
  +
signing_ca_key "/etc/chef/certificates/key.pem"
  +
signing_ca_user "chef"
  +
signing_ca_group "chef"
  +
  +
  +
  +
amqp_host '0.0.0.0'
  +
amqp_port '5672'
  +
amqp_user 'chef'
  +
amqp_pass 'testing'
  +
amqp_vhost '/chef'
  +
amqp_consumer_id "default"
  +
</PRE>
  +
Обратить внимание на последнюю секцию: обязательно установить пароль на RabbitMQ, как то так: (http://tickets.opscode.com/browse/CHEF-3170)
  +
<PRE>
  +
rabbitmqctl add_vhost /chef
  +
rabbitmqctl add_user chef chef
  +
rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
  +
rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
  +
rabbitmqctl change_password chef testing
  +
</PRE>
  +
  +
Мне еще пришлось поправить
  +
<PRE>DAEMON=/usr/local/bin/chef-*</PRE>
  +
в /etc/init.d/chef-*
  +
  +
===Проблемы после установки (2)===
  +
<BR>Эта секция относится к установке из пакетов. После того как я установил chef с помошью chef-solo все изменилось. Проблемы есть но другие.
  +
У меня после установки ничего не работало, начинаю исследовать.<Br>
  +
Logs:/var/log/chef <BR>
  +
<PRE>
  +
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.
  +
</PRE>
  +
вопрос - как это установить используя chef-solr-installer
  +
<PRE>
  +
# 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
  +
</PRE>
  +
  +
===1===
  +
Создадим локальные копии Git репозитариев Chef и Cookbooks, в последующем мы будем использовать некоторые файлы:
  +
<PRE>
  +
git clone http://github.com/opscode/chef.git
  +
git clone http://github.com/opscode/cookbooks.git
  +
</PRE>
   
 
==Рецепты==
 
==Рецепты==
Строка 47: Строка 253:
 
:description => "Number of connections per worker",
 
:description => "Number of connections per worker",
 
:default => "1024"
 
:default => "1024"
  +
</PRE>
  +
  +
==Пример рецепта для клиента==
  +
===Коротко о рецетах и кукбуках===
  +
Создать рецепт:
  +
<PRE>
  +
knife cookbook create ntp
  +
</PRE>
  +
создается рецепт в /var/chef/cookbooks
  +
У меня был готовый рецепт для ntp который я просто подложил туда.
  +
После того как рецепт готов - загрузить его на сервер.
  +
<PRE>
  +
knife cookbook upload ntp
  +
</PRE>
  +
* http://blog.afistfulofservers.net/post/2011/03/16/a-brief-chef-tutorial-from-concentrate/ - тут есть кое-что, более-менее понятно написано.
  +
* http://allanfeid.com/content/cooking-chef
  +
  +
===Сторона сервера===
  +
Для того что бы клиент мог примоединится нужно его прописать (уточнить!) на сервере и дать ему validation.pem
  +
итого:
  +
Создать ноду:
  +
<PRE>
  +
EDITOR=mcedit knife node create lab1 -u chef-webui
  +
</PRE>
  +
Поредактировать:
  +
<PRE>
  +
EDITOR=mcedit knife node edit lab1 -u chef-webui
  +
</PRE>
  +
У меня - такой конфиг (поставить ntp):
  +
<PRE>
  +
{
  +
"run_list": [
  +
"recipe[ntp]"
  +
],
  +
"normal": {
  +
"tags": [
  +
  +
]
  +
},
  +
"name": "lab1",
  +
"chef_environment": "_default"
  +
}
  +
</PRE>
  +
тут немного ... http://wiki.opscode.com/display/chef/Managing+Nodes+With+Knife
  +
  +
===Сторона клиента===
  +
На клиента, првым делом нужно поставить собственно клиента (chef-client). Я пошел по наиболее простому пути
  +
<PRE>
  +
gem install chef
  +
</PRE>
  +
Точный список пакетов которые УЖЕ должны стоять мне не известен, решение для ленивых - поставить ВСЕ что связано с ruby gem. Мне это помогло.
  +
мой /etc/chef/client.rb
  +
<PRE>
  +
log_level :info
  +
log_location STDOUT
  +
chef_server_url "http://172.18.196.7:4000"
  +
validation_client_name "chef-validator"
  +
node_name "lab1"
  +
</PRE>
  +
Запускаю клиента ... на первый взгляд работает
  +
<PRE>
  +
chef-client
  +
[2012-11-01T16:05:23+02:00] INFO: *** Chef 10.16.2 ***
  +
[2012-11-01T16:05:25+02:00] INFO: Run List is [recipe[ntp]]
  +
[2012-11-01T16:05:25+02:00] INFO: Run List expands to [ntp]
  +
[2012-11-01T16:05:25+02:00] INFO: HTTP Request Returned 404 Not Found: No routes match the request: /reports/nodes/lab1/runs
  +
[2012-11-01T16:05:25+02:00] INFO: Starting Chef Run for lab1
  +
[2012-11-01T16:05:25+02:00] INFO: Running start handlers
  +
[2012-11-01T16:05:25+02:00] INFO: Start handlers complete.
  +
[2012-11-01T16:05:25+02:00] INFO: Loading cookbooks [ntp]
  +
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/recipes/default.rb in the cache.
  +
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/attributes/default.rb in the cache.
  +
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/README.md in the cache.
  +
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/CHANGELOG.md in the cache.
  +
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/CONTRIBUTING in the cache.
  +
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/metadata.rb in the cache.
  +
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/LICENSE in the cache.
  +
[2012-11-01T16:05:25+02:00] INFO: Processing package[ntp] action install (ntp::default line 28)
  +
[2012-11-01T16:05:35+02:00] INFO: Processing directory[/var/lib/ntp] action create (ntp::default line 35)
  +
[2012-11-01T16:05:35+02:00] INFO: Processing directory[/var/log/ntpstats] action create (ntp::default line 35)
  +
[2012-11-01T16:05:35+02:00] INFO: Processing service[ntpd] action start (ntp::default line 43)
  +
[2012-11-01T16:05:35+02:00] INFO: Processing template[/etc/ntp.conf] action create (ntp::default line 47)
  +
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] backed up to /var/chef/backup/etc/ntp.conf.chef-20121101160535
  +
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] updated content
  +
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] owner changed to 0
  +
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] group changed to 0
  +
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] mode changed to 644
  +
[2012-11-01T16:05:35+02:00] INFO: Processing service[ntp] action enable (ntp::default line 55)
  +
[2012-11-01T16:05:36+02:00] INFO: Processing service[ntp] action start (ntp::default line 55)
  +
[2012-11-01T16:05:36+02:00] INFO: template[/etc/ntp.conf] sending restart action to service[ntp] (delayed)
  +
[2012-11-01T16:05:36+02:00] INFO: Processing service[ntp] action restart (ntp::default line 55)
  +
[2012-11-01T16:05:38+02:00] INFO: service[ntp] restarted
  +
[2012-11-01T16:05:38+02:00] INFO: Chef Run complete in 13.721208 seconds
  +
[2012-11-01T16:05:38+02:00] INFO: Running report handlers
  +
[2012-11-01T16:05:38+02:00] INFO: Report handlers complete
 
</PRE>
 
</PRE>
   
 
==Ссылки==
 
==Ссылки==
* http://www.tux.in.ua/articles/2678
+
* http://www.tux.in.ua/articles/2678 (есть ошибки, неточности, немного устарело, зато не русском)
  +
* http://www.opinionatedprogrammer.com/2011/06/chef-solo-tutorial-managing-a-single-server-with-chef/
  +
* http://jonathanotto.com/blog/chef-tutorial-in-minutes.html
  +
* http://generalthings.com/2012/05/08/simple-steps-install-chef-ubuntu-12-04-10-04/
  +
<BR>
  +
* http://blog.afistfulofservers.net/post/2011/03/16/a-brief-chef-tutorial-from-concentrate/
  +
* http://allanfeid.com/content/cooking-chef
  +
<BR>
  +
* http://gerhardlazu.com/2010/08/using-chef-to-manage-amazon-ec2-instances-part2/

Текущая версия на 11:00, 9 ноября 2012

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

cookbook_path      "/etc/chef/recipes/cookbooks"
log_level         :all
file_store_path  "/etc/chef/recipes/"
file_cache_path  "/etc/chef/recipes/"
Note: Замечу что в статье http://www.opinionatedprogrammer.com/2011/06/chef-solo-tutorial-managing-a-single-server-with-chef/ предлогается другой конфиг
root = File.absolute_path(File.dirname(__FILE__))
file_cache_path root
cookbook_path root + '/cookbooks'

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]" ]
}

Запуск

chef-solo -l debug -c /etc/chef/solo.rb -j /etc/chef/solo.json

Отмечу, что я хотел установить какой-то пакет потому немного изменил рецепт и добавил установку yum (он не был установлен т.к. убунта)
простейший рецепт выглядит вот так: (/etc/chef/recipes/cookbooks/cron/recipes/default.rb)

package "cron" do
  action :upgrade
end

package "yum" do
  action :upgrade
end

Полный лог (довольно большой) я вынес на отдельную страницу: http://wiki.sirmax.noname.com.ua/index.php/Chef_Solo_Debug_Log
Без дебага:

chef-solo  -c /etc/chef/solo.rb -j /etc/chef/solo.json
[Wed, 31 Oct 2012 13:53:31 +0200] INFO: *** Chef 10.16.2 ***
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Setting the run_list to ["recipe[cron::default]"] from JSON
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Run List is [recipe[cron::default]]
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Run List expands to [cron::default]
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Starting Chef Run for mmaxur-pc
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Running start handlers
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Start handlers complete.
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Processing package[cron] action upgrade (cron::default line 20)
[Wed, 31 Oct 2012 13:53:32 +0200] INFO: Processing package[yum] action upgrade (cron::default line 24)
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: package[yum] upgraded from uninstalled to 3.2.25-1ubuntu2
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: Chef Run complete in 9.234625 seconds
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: Running report handlers
[Wed, 31 Oct 2012 13:53:41 +0200] INFO: Report handlers complete

После чего наблюдаю установленный yum

Устанавливаем chef-server

Потрясающяя идея поставить сервер используя работающий chef-solo. Я поражен! http://wiki.opscode.com/display/chef/Installing+Chef+Server+using+Chef+Solo

Конфиг

Более или менее полное описание параметров: http://wiki.opscode.com/display/chef/Chef+Configuration+Settings
Мой конфиг такой:

log_level          :fatal
log_location       STDOUT
chef_server_url    "http://localhost:4000"
file_cache_path    "/var/cache/chef"
sandbox_path       "/var/cache/chef/sandboxes"
checksum_path      "/var/lib/chef/cookbook_index"
node_path          "/var/lib/chef/node"
cookbook_tarball_path  "/var/lib/chef/cookbook-tarballs"

validation_client_name "chef-validator"

web_ui_admin_user_name  "admin"
web_ui_admin_default_password "admin"

supportdir = "/var/lib/chef"
solr_jetty_path File.join(supportdir, "solr", "jetty")
solr_data_path  File.join(supportdir, "solr", "data")
solr_home_path  File.join(supportdir, "solr", "home")
solr_heap_size  "256M"

solr_url        "http://localhost:8983"

umask 0022

signing_ca_cert    "/etc/chef/certificates/cert.pem"
signing_ca_key     "/etc/chef/certificates/key.pem"
signing_ca_user    "chef"
signing_ca_group   "chef"



amqp_host '0.0.0.0'
amqp_port '5672'
amqp_user 'chef'
amqp_pass 'testing'
amqp_vhost '/chef'
amqp_consumer_id "default"

Обратить внимание на последнюю секцию: обязательно установить пароль на RabbitMQ, как то так: (http://tickets.opscode.com/browse/CHEF-3170)

rabbitmqctl add_vhost /chef
rabbitmqctl add_user chef chef
rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
rabbitmqctl set_permissions -p /chef chef ".*" ".*" ".*"
rabbitmqctl change_password chef testing

Мне еще пришлось поправить

DAEMON=/usr/local/bin/chef-*

в /etc/init.d/chef-*

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


Эта секция относится к установке из пакетов. После того как я установил chef с помошью chef-solo все изменилось. Проблемы есть но другие. У меня после установки ничего не работало, начинаю исследовать.
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"

Пример рецепта для клиента

Коротко о рецетах и кукбуках

Создать рецепт:

knife cookbook create ntp

создается рецепт в /var/chef/cookbooks У меня был готовый рецепт для ntp который я просто подложил туда. После того как рецепт готов - загрузить его на сервер.

knife cookbook upload ntp

Сторона сервера

Для того что бы клиент мог примоединится нужно его прописать (уточнить!) на сервере и дать ему validation.pem итого: Создать ноду:

EDITOR=mcedit knife node create lab1 -u chef-webui

Поредактировать:

EDITOR=mcedit knife  node edit  lab1  -u chef-webui

У меня - такой конфиг (поставить ntp):

{
  "run_list": [
    "recipe[ntp]"
  ],
  "normal": {
    "tags": [

    ]
  },
  "name": "lab1",
  "chef_environment": "_default"
}

тут немного ... http://wiki.opscode.com/display/chef/Managing+Nodes+With+Knife

Сторона клиента

На клиента, првым делом нужно поставить собственно клиента (chef-client). Я пошел по наиболее простому пути

gem install chef

Точный список пакетов которые УЖЕ должны стоять мне не известен, решение для ленивых - поставить ВСЕ что связано с ruby gem. Мне это помогло. мой /etc/chef/client.rb

log_level        :info
log_location     STDOUT
chef_server_url  "http://172.18.196.7:4000"
validation_client_name "chef-validator"
node_name "lab1"

Запускаю клиента ... на первый взгляд работает

chef-client 
[2012-11-01T16:05:23+02:00] INFO: *** Chef 10.16.2 ***
[2012-11-01T16:05:25+02:00] INFO: Run List is [recipe[ntp]]
[2012-11-01T16:05:25+02:00] INFO: Run List expands to [ntp]
[2012-11-01T16:05:25+02:00] INFO: HTTP Request Returned 404 Not Found: No routes match the request: /reports/nodes/lab1/runs
[2012-11-01T16:05:25+02:00] INFO: Starting Chef Run for lab1
[2012-11-01T16:05:25+02:00] INFO: Running start handlers
[2012-11-01T16:05:25+02:00] INFO: Start handlers complete.
[2012-11-01T16:05:25+02:00] INFO: Loading cookbooks [ntp]
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/recipes/default.rb in the cache.
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/attributes/default.rb in the cache.
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/README.md in the cache.
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/CHANGELOG.md in the cache.
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/CONTRIBUTING in the cache.
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/metadata.rb in the cache.
[2012-11-01T16:05:25+02:00] INFO: Storing updated cookbooks/ntp/LICENSE in the cache.
[2012-11-01T16:05:25+02:00] INFO: Processing package[ntp] action install (ntp::default line 28)
[2012-11-01T16:05:35+02:00] INFO: Processing directory[/var/lib/ntp] action create (ntp::default line 35)
[2012-11-01T16:05:35+02:00] INFO: Processing directory[/var/log/ntpstats] action create (ntp::default line 35)
[2012-11-01T16:05:35+02:00] INFO: Processing service[ntpd] action start (ntp::default line 43)
[2012-11-01T16:05:35+02:00] INFO: Processing template[/etc/ntp.conf] action create (ntp::default line 47)
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] backed up to /var/chef/backup/etc/ntp.conf.chef-20121101160535
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] updated content
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] owner changed to 0
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] group changed to 0
[2012-11-01T16:05:35+02:00] INFO: template[/etc/ntp.conf] mode changed to 644
[2012-11-01T16:05:35+02:00] INFO: Processing service[ntp] action enable (ntp::default line 55)
[2012-11-01T16:05:36+02:00] INFO: Processing service[ntp] action start (ntp::default line 55)
[2012-11-01T16:05:36+02:00] INFO: template[/etc/ntp.conf] sending restart action to service[ntp] (delayed)
[2012-11-01T16:05:36+02:00] INFO: Processing service[ntp] action restart (ntp::default line 55)
[2012-11-01T16:05:38+02:00] INFO: service[ntp] restarted
[2012-11-01T16:05:38+02:00] INFO: Chef Run complete in 13.721208 seconds
[2012-11-01T16:05:38+02:00] INFO: Running report handlers
[2012-11-01T16:05:38+02:00] INFO: Report handlers complete

Ссылки