vagrant
Очень странно, что я до сих пор не написал о Vagrant — инструменте создания и распространения виртуальных окружений.
Vagrant нужен для одной простой цели — тестировать выкатку и изменение конфигурции. Причем он позволяет делать это очень просто, особенно для Chef и Puppet. Vagrant — это надстройка над платформой виртуализации VirtualBox, которая позволяет легко и быстро создавать виртуальные машины по шаблону.
Работать с ним очень легко. Вы берете какой-нибудь готовый образ ОС (например, отсюда) или создаете свой, который и будет вашим шаблоном. А потом проверяете, как на этот образ накатываются ваши Chef-рецепты, причем можете делать это каждый раз с чистого листа. Конечно, образ должен быть точно такой же, который вы используете в бою, на staging-сервере, на CI-сервере и, вообще, везде. Это позволит вам выловить максимальное количество проблем до того, как они попадут на production. Более того, это гораздо удобнее, чем писать chef-рецепты «вслепую». Все, что происходит тяжело, надо делать часто, чтобы научиться делать это хорошо. Выкатка с изменением конфигурации обычно происходит тяжело. Поэтому стоит тренироваться менять конфигурацию и выкатываться, при этом желательно делать это в «песочнице», а не на сервере, который обслуживает ваших пользователей (и приносит деньги).
Итак, приступим.
gem install vagrant
mkdir vagrant
cd vagrant
vagrant init distr http://path-to-distr
Теперь у вас в папке появится файл Vagrantfile
. Если заглянуть в него, то в комментариях там есть неплохие заготовки того, как
настраивать vagrant. После редактирования у меня остался следующий файл.
Vagrant::Config.run do |config|
config.vm.box = "work"
config.vm.provision :chef_solo do |chef|
chef.cookbooks_path = "cookbooks"
chef.add_recipe "sysctl"
end
end
После этого прилинкуйте папку с вашими рецептами в текущую папку. В моих рецептах есть один с названием sysctl, именно его я буду тестировать.
ln -sf path/to/cookbooks cookbooks
Запускаем vagrant.
vagrant up
[default] VM already created. Booting if it's not already running...
[default] Clearing any previously set forwarded ports...
...
[default] [Fri, 13 Jan 2012 18:57:07 +0000] INFO: *** Chef 0.10.8 ***
: stdout
[default] [Fri, 13 Jan 2012 18:57:11 +0000] INFO: Setting the run_list to ["recipe[sysctl]"] from JSON
...
[default] [Fri, 13 Jan 2012 18:57:13 +0000] INFO: Chef Run complete in 1.973217 seconds
: stdout
[default] [Fri, 13 Jan 2012 18:57:13 +0000] INFO: Running report handlers
: stdout
[default] [Fri, 13 Jan 2012 18:57:13 +0000] INFO: Report handlers complete
: stdout
После этого вы можете зайти на машину командой vagrant ssh
и посмотреть, что произошло, и устраивает ли вас это.
Более того, vagrant позволяет проверять выкатку конфигурации с использованием chef-server, а также выкатку на несколько машин сразу. Это может понадобиться, например, если у вас есть сервисы, связанные между собою по сети, и вам хочется проверить их совместую работу в условиях, максимально приближенных к боевым.
Vagrant — это отличный инструмент, позволяющий ленивому инженеру, не любящему приключения, достаточно быстро сделать виртуальное окружение максимально приближенное к боевому. И потом на нем тестировать изменения конфигурации и выкатку.
Даже на моем слабеньком Air'11 виртуальные машины в VirtualBox работают достаточно быстро, чтобы пользоваться Vagrant локально.