deployment - hashicorp - ¿Hay algún gancho como "pre vagrant up"?
vagrant software (5)
.. agregando a la respuesta de tmatilai, puedes agregar algo como esto:
case ARGV[0]
when "provision", "up"
system "./prepare.sh"
else
# do nothing
end
en su Vagrantfile para que solo se ejecute en comandos específicos.
Estoy tratando de automatizar mis cajas de desarrollo con vagrant. Necesito compartir la configuración de vagrant con otros desarrolladores, por lo que debemos asegurarnos de que se cumplan algunas condiciones límite antes de que se inicie el proceso normal de vagrant up
.
¿Hay algún gancho (como en git, pre-commit u otros pre-scripts) en vagrant? Los guiones de provisión son demasiado tarde.
Mi configuración actual se ve así:
Vagrantfile
vagrant-templates/
vagrant-templates/apache.conf
vagrant-templates/...
sub-project1/
sub-project2/
Necesito estar seguro de que el subproyecto {1..n} existe y, de no ser así, debería aparecer un mensaje de error.
Preferiría una solución similar a la de un bash, pero estoy abierto a otras soluciones.
Es posible escribir su propio complemento para vagrant y usar action_hook en el machine_action_up, algo como:
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
Otro complemento que se puede extraer es vagrant-host-shell que solo se ejecuta cuando se aprovisiona la caja. Solo agréguelo antes que otros provisoners en Vagrantfile:
config.vm.provision :host_shell do |shell|
shell.inline = ''./clone-projects.sh''
shell.abort_on_nonzero = true
end
Puedes darle una oportunidad a este complemento de Vagrant que he escrito:
https://github.com/emyl/vagrant-triggers
Una vez instalado, puedes poner en tu Vagrantfile algo como:
config.trigger.before :up, :execute => "..."
Una opción es poner la lógica directamente en Vagrantfile. Luego se ejecuta en todos los comandos vagrant
en el proyecto. Por ejemplo algo como esto:
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