Официальное объяснение от шеф-повара
Официально 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 Эвана Конкла в блоге Эвана Конкла .