Чтобы изучить концепции шеф-повара, мы можем начать с использования chef-solo с Vagrant. Смотрите мой предыдущий пост о Vagrant, чтобы установить vagrant и узнать больше об этом.
Далее, давайте установим chef-solo на нашу машину. Мы установим chef-solo с помощью ruby gem, убедитесь, что у вас установлен ruby.
1
2
3
|
root@intro:~ # cd ~ root@intro:~ # sudo gem install chef Thank you for installing Chef! |
Итак, теперь мы установили chef-solo и vagrant на нашу машину. В этом упражнении мы попытаемся установить apache2 на виртуальную машину Ubuntu (виртуальный ящик), используя chef-solo и vagrant. Для начала нам нужно сначала понять несколько концепций; который потребуется для запуска шеф-повара в Vagrant.
run-lists : первое, что нам нужно знать, это run-lists. Список запуска подобен списку воспроизведения для узла. Он сообщает узлу, какие рецепты необходимы для запуска и в каком порядке. Это всегда зависит от узла, на котором он работает. Важно отметить, что клиент-шеф всегда настраивает узел в точном порядке, указанном в его списке запуска, и никогда не запускает один и тот же рецепт дважды.
Итак, если мы хотим установить apache2 на узел:
- Сначала нужно поместить этот рецепт в кулинарную книгу и настроить путь к кулинарным книгам.
- Затем упомяните об этом в списке выполнения.
Давайте посмотрим, как это сделать:
- Настроить рецепты и кулинарные книги:
Рецепты в кулинарной книге ведутся с помощью ножа. Нож является инструментом командной строки для шеф-повара.
Где положить свои рецепты?
Рецепты находятся в папке поваренных книг. По умолчанию, если папка cookbooks находится на том же уровне, что и Vagrantfile, нам не нужно явно указывать путь cookbooks. Но хорошей практикой является поддержание шеф-репо и размещение в нем папки поваренных книг. Так что нам нужно будет создать репозиторий chef на нашем сайте. Хранилище Chef — это место, где мы будем хранить все наши кулинарные книги и рецепты. Для создания chef-repo мы можем использовать уже созданную структуру каталогов, предоставленную chef.
1234root@intro:~
# wget http://github.com/opscode/chef-repo/tarball/master
root@intro:~
# tar -zxf master
root@intro:~
# mv opscode-chef-repo* chef-repo
root@intro:~
# rm master
Это создаст папку chef-repo со всеми необходимыми объектами внутри нее. Позже мы подробно обсудим, какие папки / файлы находятся внутри chef-repo и как их использовать. Теперь нам просто нужно сосредоточиться на папке поваренных книг.
Внутри Vagrantfile нам нужно определить этот путь как:
1234config.vm.provision :chef_solo
do
|chef|
chef.cookbooks_path =
"~/Projects/chef-repo/cookbooks"
....
end
После настройки папки cookbooks и указания ее пути, давайте поместим в нее несколько рецептов. Давайте положим рецепт HTTP-сервера Apache, используя нож. Для этого нам нужно выполнить эту команду:
1knife cookbook site download apache2
Эта команда загрузит сжатую папку с рецептами, распакует эту папку в папку cookbooks (мы можем скачать tar.gz где угодно, но его нужно извлечь в папку cookbooks).
1Anirudhs-MacBook-Pro:cookbooks xebia$
tar
-xvzf apache2-1.7.0.
tar
.gz
Следующим шагом будет добавить это в список выполнения.
- Добавление рецепта в список запуска:
Чтобы добавить рецепт в список выполнения, нам просто нужно добавить его, используя chef.add_recipe «xxx»
Давайте посмотрим на пример: [это в Vagrantfile]
12345Vagrant.configure(
"2"
)
do
|config|
config.vm.provision
"chef_solo"
do
|chef|
chef.add_recipe
"apache"
end
end
Итак, подведем итог, мы сделали следующие изменения:
- настроил шеф-репо
- предоставил поваренным книгам путь к шеф-повару
- скачал рецепт используя нож
- добавил рецепт в кулинарные книги
- добавил этот рецепт в run-list
Наконец, или Vagrantfile выглядит так:
123456789Vagrant.configure(
"2"
)
do
|config|
config.vm.box =
"precise32"
config.vm.network :forwarded_port, guest: 80, host: 8888
config.vm.provision :chef_solo
do
|chef|
chef.add_recipe
"apache2"
chef.json = { :apache => { :default_site_enabled =>
true
} }
end
end
Обратите внимание на строку «config.vm.network: forwarded_port, guest: 80, host: 8888», которая добавляется для пересылки входящих запросов на порт 80 (по умолчанию HTTP) на порт 8888 (где http-сервер apache прослушивает).
Следующий шаг — сделать vagrant и нажать на браузер localhost: 8888, чтобы увидеть страницу с известными работами.