vagrant-triggers
Allow the definition of arbitrary scripts that will run on the host before and/or after Vagrant commands.
Installation
Ensure you have downloaded and installed Vagrant 1.2+ from the Vagrant downloads page.
Installation is performed in the prescribed manner for Vagrant plugins:
$ vagrant plugin install vagrant-triggers
Usage
Basic usage
Vagrant.configure("2") do |config|
# Your existing Vagrant configuration
...
config.trigger.before :command, :option => "value" do
run "script"
...
end
config.trigger.after :command, :option => "value" do
run "script"
...
end
end
The first argument is the command in which the trigger will be tied. It could be an array (e.g. [:up, :resume]
) in case of multiple commands.
Options
:append_to_path => ["dir", "dir"]
: additional places where looking for scripts. See this wiki page for details.:force => true
: continue even one of the scripts fails (exits with non-zero code):stdout => true
: display script output
Trigger block DSL
The given block will be evaluated by an instance of the VagrantPlugins::Triggers::DSL class. This class defines a very simple DSL for running scripts on the host machine. Basically only one method (run
) is directly defined, all the other calls will be forwarded to Vagrant's ui instance. This allows the definition of custom messages along with scripts.
For additional details you can take a look to the VagrantPlugins::Triggers::DSL definition.
Skipping execution
Triggers won't run if VAGRANT_NO_TRIGGERS
environment variable is set.
A more detailed example
In the following example a VirtualBox VM (not managed by Vagrant) will be tied to the machine defined in Vagrantfile
, to make so that it follows its lifecycle:
Vagrant.configure("2") do |config|
{
[:up, :resume] => "startvm 22aed8b3-d246-40d5-8ad4-176c17552c43 --type headless",
:suspend => "controlvm 22aed8b3-d246-40d5-8ad4-176c17552c43 savestate",
:halt => "controlvm 22aed8b3-d246-40d5-8ad4-176c17552c43 acpipowerbutton",
}.each do |command, trigger|
config.trigger.before command, :stdout => true do
info "Executing #{command} action on the VirtualBox tied VM..."
run "vboxmanage #{trigger}"
end
end
end
For additional examples, see the trigger recipes wiki page.
Contributing
To contribute, clone the repository, and use Bundler to install dependencies:
$ bundle
To run the plugin's tests:
$ bundle exec rake
You can now fork this repository, make your changes and send a pull request.