Vagrant: наполнение виртуальной машины при помощи shell-скрипта


Создавать виртуалку при помощи Vagrant легко и весело, но пустая виртуалка врядли будет кому-то полезна и интересна. Раз уж мы автоматизировали создание виртуальной машины, то почему бы не автоматизировать установку необходимого программного обеспечения? В терминологии Vagrant такой процесс называется наполнением (provisioning).

В следующих статьях мы поговорим, как это делается при помощи популярного средства управления конфигурацией Chef, а сегодня я рассмотрю самый простой способ: использование shell-скрипта. Часто этот способ игнорируется, хотя для простых решений написать скрипт на 10 строчек может оказаться гораздо быстрее, чем разбираться с cookbook’ами Chef и их зависимостями.

Eсли вы читали мою первую заметку, то у вас уже должен быть минимальный Vagrantfile вида:

# -*- mode: ruby -*-
 
VAGRANTFILE_API_VERSION = "2"
 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise32"
  config.vm.box_url = "http://files.vagrantup.com/precise32.box"
end

Допустим вам необходимо установить mysql. Для этого после конфигурации машины нужно написать:

config.vm.provision :shell, :inline => sudo apt-get -q -y install mysql-server

Здесь я указал, что в качестве «наполнителя» хочу использовать командную строку, а затем передаю команду. Это очень удобно когда вам нужно выполнить 1-2 команды, но скорее всего у вас будет более длинная последовательность, которую вы захотите вынести в отдельный файл. В этом случае команда будет выглядеть следующим образом:

config.vm.provision :shell, :path => my_awesome_script.sh

Если вы еще не создавали виртуалку, то достаточно запустить vagrant up, и после создания виртуалки автоматически накатится ваш скрипт. Если же виртуалка уже создана и работает, то достаточно запустить vagrant provision чтобы накатить скрипт с конфигурацией.