Ответ 1
Вы можете попробовать этот плагин Vagrant, который я написал:
https://github.com/emyl/vagrant-triggers
После установки вы можете добавить в свой Vagrantfile что-то вроде:
config.trigger.before :up, :execute => "..."
Я пытаюсь автоматизировать мои коробки разработки с бродягой. Мне нужно разделить настройку бродяг с другими разработчиками, поэтому мы должны быть уверены, что некоторые граничные условия заполнены до начала обычного процесса vagrant up
.
Есть ли какой-либо крючок (как в git, pre-commit или другие pre- * скрипты) в бродяге? Сценарии предоставления слишком поздно.
Моя текущая настройка выглядит следующим образом:
Vagrantfile
vagrant-templates/
vagrant-templates/apache.conf
vagrant-templates/...
sub-project1/
sub-project2/
Мне нужно быть уверенным, что подпроект {1..n} существует, а если нет, должно появиться сообщение об ошибке.
Я бы предпочел bash -подобное решение, но я открыт для других решений.
Вы можете попробовать этот плагин Vagrant, который я написал:
https://github.com/emyl/vagrant-triggers
После установки вы можете добавить в свой Vagrantfile что-то вроде:
config.trigger.before :up, :execute => "..."
Один из вариантов заключается в том, чтобы поместить логику в Vagrantfile. Затем он запускается во всех командах vagrant
в проекте. Например, что-то вроде этого:
def ensure_sub_project(name)
if !File.exists?(File.expand_path("../#{name}", __FILE__))
# you could raise or do other ruby magic, or shell out (for a bash script)
system('clone-the-project.sh', name)
end
end
ensure_sub_project('some-project')
ensure_sub_project('other-project')
Vagrant.configure('2') do |config|
# ...
end
Возможно написать собственный плагин для бродяг и использовать action_hook на machine_action_up, что-то вроде:
require 'vagrant-YOURPLUGINNAME/YOURACTIONCLASS'
module VagrantPlugins
module YOURPLUGINNAME
class Plugin < Vagrant.plugin('2')
name 'YOURPLUGINNAME'
description <<-DESC
Some description of your plugin
DESC
config(:YOURPLUGINNAME) do
require_relative 'config'
Config
end
action_hook(:YOURPLUGINNAME, :machine_action_up) do |hook|
hook.prepend(YOURACTIONCLASS.METHOD)
end
end
end
end
Еще один плагин для проверки - vagrant-host-shell, который запускается только при установке поля. Просто добавьте его перед другими оппонентами в Vagrantfile:
config.vm.provision :host_shell do |shell|
shell.inline = './clone-projects.sh'
shell.abort_on_nonzero = true
end
.. добавив к ответу tmatilai, вы можете добавить что-то вроде этого:
case ARGV[0]
when "provision", "up"
system "./prepare.sh"
else
# do nothing
end
в ваш Vagrantfile, чтобы он выполнялся только для определенных команд.