Важной частью системы является специальный конфигурационный файл, написанный на Ruby. Он называется Vagrantfile и описывает виртуальные машины, необходимые в проекте. Предполагается, что в команде для разработки используется один и тот же Vagrantfile, который распространяется через систему контроля версий между ее членами. Важно заметить, что Vagrant читает конфигурацию последовательно из четырех мест, и каждый последующий этап может изменять параметры предыдущего. Итак, точный порядок загрузки такой:
1. Сначала загружается Vagrantfile, содержащийся в руби-геме.
2. Следом загружается Vagrantfile издиректории базовой сборки (если она было собрана с параметром - - vagrantfile).
3. Потом загружается Vagrantfile из домашнего каталога пользователя (-/.vagrant.d/), позволяя пользователю добавить для него какие-либо параметры.
4. И последним загружается Vagrantfile из директории проекта. В большинстве случаев именно в нем находятся все основные настройки проекта, и именно этот файл стоит добавить в систему контроля версий.
Полный список доступных настроек для вагрантфайла содержится в документации (docs.vagrantup.com/v1/docs/vagrantfile. html). Только что созданная виртуальная среда имеет минимальный конфиг вида:
Vagrant: :Config. run do |config|
config.vm.box = "precise64" end
И пока несколько бестолкова, но ничего, дальше мы добавим ей функционала.
Provisioning
Запуск пустой виртуальной машины (пусть даже и особым образом сконфигурированной) вряд ли может быть сильно полезен, поэтому в вагранте есть так называемые наполнители (provisioners) - различные способы настроить виртуальную машину не снаружи, а изнутри. По сути, это возможность писать различные дополнительные сценарии, которые выполняются после создания виртуальной машины. Поскольку вагрант написан рубистами, то в качестве конфигураторов машины выбраны привычные им средства: Chef Solo, Chef Server, Puppet Standalone, Puppet Server и обыкновенный Shell. Средства Chef и Puppet довольно известны и распространены и часто применяются для деплоя самых разных проектов, так что мы не будем заострять на них внимание и рассмотрим самый простой вариант - shell-скрипт. Создадим в текущей директории файл с именем instalLredis.sh и содержанием:
sudo apt - get - q - у install redis - server
А в Vagrant - файл добавим команды для наполнения:
Vagrant::Config.run do |config| config.vm.box = "precise64"
config.vm.provision :shell, :path => "install_redis.sh" end
Теперь переконфигурируем нашу машину командой:
$ vagrant reload
В результате на нашей виртуалке появится свежеустановленный редис.