software hashicorp commands boxes deployment vagrant

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