Есть ли какой-нибудь крючок, как "pre vagrant up"?

Я пытаюсь автоматизировать мои коробки разработки с бродягой. Мне нужно разделить настройку бродяг с другими разработчиками, поэтому мы должны быть уверены, что некоторые граничные условия заполнены до начала обычного процесса vagrant up.

Есть ли какой-либо крючок (как в git, pre-commit или другие pre- * скрипты) в бродяге? Сценарии предоставления слишком поздно.

Моя текущая настройка выглядит следующим образом:

Vagrantfile
vagrant-templates/
vagrant-templates/apache.conf
vagrant-templates/...
sub-project1/
sub-project2/

Мне нужно быть уверенным, что подпроект {1..n} существует, а если нет, должно появиться сообщение об ошибке.

Я бы предпочел bash -подобное решение, но я открыт для других решений.

Ответы

Ответ 1

Вы можете попробовать этот плагин Vagrant, который я написал:

https://github.com/emyl/vagrant-triggers

После установки вы можете добавить в свой Vagrantfile что-то вроде:

config.trigger.before :up, :execute => "..."

Ответ 2

Один из вариантов заключается в том, чтобы поместить логику в 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

Ответ 3

Возможно написать собственный плагин для бродяг и использовать 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

Ответ 4

Еще один плагин для проверки - vagrant-host-shell, который запускается только при установке поля. Просто добавьте его перед другими оппонентами в Vagrantfile:

config.vm.provision :host_shell do |shell|
  shell.inline = './clone-projects.sh'
  shell.abort_on_nonzero = true
end

Ответ 5

.. добавив к ответу tmatilai, вы можете добавить что-то вроде этого:

case ARGV[0]
when "provision", "up"
  system "./prepare.sh"
else
  # do nothing
end

в ваш Vagrantfile, чтобы он выполнялся только для определенных команд.