Статьи

Введение в шеф-повара

Chef — невероятный инструмент, но, несмотря на его начало в 2008/2009 году, ему все еще не хватает эффективного быстрого старта или даже официального «привет-мира» — так что для того, чтобы действительно начать работу, требуется слишком много времени, когда вы отчаянно ищете учебники / примеры / использование случаев. Существующие быстрые запуски или учебные пособия занимают слишком много времени и не могут объяснить сферу или то, что делает Chef. Это действительно прискорбно, потому что мир мог бы стать лучше, если бы больше людей использовали Chef (или даже Puppet), и нам не приходилось догадываться, как настроить сервер для различных приложений.

Официальное объяснение от шеф-повара

Официально Chef является «инструментом управления конфигурацией», где вы пишете «рецепты». Он написан на Ruby, и вам понадобится как минимум версия 1.8.6. Вот официальное руководство по быстрому старту от Chef, но я думаю, что оно не дает краткого описания возможностей Chef или даже того, как его использовать, отсюда и этот документ.

Упрощенное объяснение от шеф-повара

Проще говоря, Chef — это Ruby DSL (предметно-ориентированный язык) для настройки машин GNU / Linux (или BSD) (Windows не очень хорошо поддерживается), он имеет 2 варианта: «Chef Server» и «Chef Solo», в этом документе I Я говорю о Chef SOLO, потому что с ним легче начать — и он хорошо работает в качестве дополнения к приложениям Rails.

Простейшее объяснение шеф-повара и действующий пример

Проще говоря, Chef — это скрипт ruby, который использует «рецепты» (рецепт — это файл Ruby, использующий DSL Chef) для установки программного обеспечения и запуска скриптов на серверах GNU / Linux . Вы можете снова и снова безопасно запускать Chef, потому что большинство рецептов не знают, например, переустановить то, что уже существует (иногда вам приходится кодировать эту функцию, не устанавливая то, что уже существует, но большинство DSL уже делают это).

Думайте о шеф-поваре, как имеющем 4 компонента:
установить бинарный / исполняемый файл (chef-solo), устанавливаемый через Ruby Gems

1
2
sudo /usr/bin/gem install chef ohai --no-rdoc --no-ri
/var/lib/gems/1.8/bin/chef-solo

создайте один или несколько файлов ruby, которые они называют «рецептами» в структуре, подобной этой

1
~/my_cookbooks/RECIPE_NAME/recipes/default.rb

Пример установки Vim
если нам нужен рецепт для установки vim, вот один быстрый и простой способ сделать это:

1
2
~/my_cookbooks/vim/recipes/default.rb
package('vim')

Просто продублируйте структуру каталогов, которую я перечислил выше, и в файле default.rb вам понадобится только 1 строка. этот метод «пакета» знает, какое программное обеспечение для управления пакетами использовать, в зависимости от того, какая ОС работает, и затем использует его.

Пример создания базы данных MySQL

Есть много методов, доступных для рецептов. Взять, к примеру, «bash». Передайте метод «bash» блоку, и внутри блока вы можете использовать такие методы, как «код» (который выполняет строку команд bash) и «пользователь», который указывает, какой пользователь ОС будет запускать команды.

1
~/my_cookbooks/create_mysql_db/recipes/default.rb

bash «действительно отличный способ создать базу данных mysql от шеф-повара с использованием метода bash»

# нет, если БД уже существует

01
02
03
04
05
06
07
08
09
10
11
not_if('/usr/bin/mysql -uroot -pmiller_highlife_lol_jk -e'show databases' | grep #{node[:create_mysql_db][:db_name]}', :user => 'evan')
 
  # run as the evan user
  user 'evan'
 
  # a heredoc of the code to execute, note the node hash is created from the JSON file
  code <<-HEY_BRO_EOM
  mysql -uroot -ppmiller_highlife_lol_jk -e 'create database #{node[:create_mysql_db][:db_name]}'
  HEY_BRO_EOM
 
end

JSON-файл с массивом рецептов, на который вы укажете бинарный файл

01
02
03
04
05
06
07
08
09
10
11
~/my_cookbooks/roles/ottobib.json
{
  'name': 'ottobib',
  'run_list': [
    'create_mysql_db',
    'vim',
  ],
</strong>  'create_mysql_db': {
    'db_name': 'ottobib_production'
  }
}

Наконец, файл ruby ​​с большим количеством опций конфигурации

1
2
3
4
5
6
~/my_cookbooks/chefsoloconfig.rb
file_cache_path  '/tmp/chef-solo'
cookbook_path    '/home/evan/my_cookbooks'
log_level        :info
log_location     STDOUT
ssl_verify_mode  :verify_none

ТЕПЕРЬ вы можете запускать его снова и снова, и ваша система получит Vim и базу данных ottobib_production. Если вы хотите получить CRAZY: добавьте рецепт, который проверяет последнюю копию исходного кода вашего приложения, а затем настройте задание cron для выполнения вашего сценария chef каждую минуту!

Вот как должен выглядеть ваш каталог / home / evan / my_cookbooks:

1
2
3
4
5
6
7
8
9
|-chefsoloconfig.rb
|-roles
  -ottobib.json
|-vim
  |-recipes
    -default.rb
|-create_mysql_db
  |-recipes
    -default.rb

АКТУАЛЬНАЯ КОМАНДА ЗАПУСТИТЬ ШЕФА!

1
sudo /var/lib/gems/1.8/bin/chef-solo -c /home/evan/my_cookbooks/chefsoloconfig.rb -j /home/evan/my_cookbooks/roles/ottobib.json -ldebug

Ссылка: Введение в Chef от нашего партнера JCG Эвана Конкла в блоге Эвана Конкла .