2018-03-29 16:08:25 +00:00
|
|
|
---
|
|
|
|
layout: "docs"
|
|
|
|
page_title: "Vagrant Triggers Usage"
|
|
|
|
sidebar_current: "triggers-usage"
|
|
|
|
description: |-
|
2018-04-04 23:20:27 +00:00
|
|
|
Various Vagrant Triggers examples
|
2018-03-29 16:08:25 +00:00
|
|
|
---
|
|
|
|
|
2018-04-04 23:20:27 +00:00
|
|
|
# Basic Usage
|
2018-03-29 16:08:25 +00:00
|
|
|
|
2018-04-04 23:20:27 +00:00
|
|
|
Below are some very simple examples of how to use Vagrant Triggers.
|
|
|
|
|
|
|
|
## Examples
|
|
|
|
|
2018-04-05 21:19:35 +00:00
|
|
|
The following is a basic example of two global triggers. One that runs _before_
|
|
|
|
the `:up` command and one that runs _after_ the `:up` command:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
Vagrant.configure("2") do |config|
|
|
|
|
config.trigger.before :up do |trigger|
|
|
|
|
trigger.name = "Hello world"
|
|
|
|
trigger.info = "I am running before vagrant up!!"
|
|
|
|
end
|
|
|
|
|
2018-05-04 14:31:27 +00:00
|
|
|
config.trigger.after :up do |trigger|
|
2018-04-05 21:19:35 +00:00
|
|
|
trigger.name = "Hello world"
|
|
|
|
trigger.info = "I am running after vagrant up!!"
|
|
|
|
end
|
|
|
|
|
|
|
|
config.vm.define "ubuntu" do |ubuntu|
|
|
|
|
ubuntu.vm.box = "ubuntu"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
These will run before and after each defined guest in the Vagrantfile.
|
|
|
|
|
2018-04-04 23:20:27 +00:00
|
|
|
Running a remote script to save a database on your host before __destroy__ing a
|
|
|
|
guest:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
Vagrant.configure("2") do |config|
|
|
|
|
config.vm.define "ubuntu" do |ubuntu|
|
|
|
|
ubuntu.vm.box = "ubuntu"
|
|
|
|
|
|
|
|
ubuntu.trigger.before :destroy do |trigger|
|
|
|
|
trigger.warn = "Dumping database to /vagrant/outfile"
|
|
|
|
trigger.run_remote = {inline: "pg_dump dbname > /vagrant/outfile"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
Now that the trigger is defined, running the __destroy__ command will fire off
|
|
|
|
the defined trigger before Vagrant destroys the machine.
|
|
|
|
|
|
|
|
```shell
|
|
|
|
$ vagrant destroy ubuntu
|
|
|
|
```
|
|
|
|
|
|
|
|
An example of defining three triggers that start and stop tinyproxy on your host
|
|
|
|
machine using homebrew:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
#/bin/bash
|
|
|
|
# start-tinyproxy.sh
|
|
|
|
brew services start tinyproxy
|
|
|
|
```
|
|
|
|
|
|
|
|
```shell
|
|
|
|
#/bin/bash
|
|
|
|
# stop-tinyproxy.sh
|
|
|
|
brew services stop tinyproxy
|
|
|
|
```
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
Vagrant.configure("2") do |config|
|
|
|
|
config.vm.define "ubuntu" do |ubuntu|
|
|
|
|
ubuntu.vm.box = "ubuntu"
|
|
|
|
|
|
|
|
ubuntu.trigger.before :up do |trigger|
|
|
|
|
trigger.info = "Starting tinyproxy..."
|
|
|
|
trigger.run = {path: "start-tinyproxy.sh"}
|
|
|
|
end
|
|
|
|
|
|
|
|
ubuntu.trigger.after :destroy, :halt do |trigger|
|
|
|
|
trigger.info = "Stopping tinyproxy..."
|
|
|
|
trigger.run = {path: "stop-tinyproxy.sh"}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
Running `vagrant up` would fire the before trigger to start tinyproxy, where as
|
|
|
|
running either `vagrant destroy` or `vagrant halt` would stop tinyproxy.
|
2018-10-04 23:24:28 +00:00
|
|
|
|
|
|
|
### Ruby Option
|
|
|
|
|
|
|
|
Triggers can also be defined to run Ruby, rather than bash or powershell. An
|
|
|
|
example of this might be using a Ruby option to get more information from the `VBoxManage`
|
|
|
|
tool. In this case, we are printing the `ostype` defined for thte guest after
|
|
|
|
it has been brought up.
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
Vagrant.configure("2") do |config|
|
|
|
|
config.vm.define "ubuntu" do |ubuntu|
|
|
|
|
ubuntu.vm.box = "ubuntu"
|
|
|
|
|
|
|
|
ubuntu.trigger.after :up do |trigger|
|
|
|
|
trigger.info = "More information with ruby magic"
|
|
|
|
trigger.ruby do |env,machine|
|
|
|
|
puts `VBoxManage showvminfo #{machine.id} --machinereadable | grep ostype`
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
If you are defining your triggers using the hash syntax, you must use the `Proc`
|
|
|
|
type for defining a ruby trigger.
|
|
|
|
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
Vagrant.configure("2") do |config|
|
|
|
|
config.vm.define "ubuntu" do |ubuntu|
|
|
|
|
ubuntu.vm.box = "ubuntu"
|
|
|
|
|
|
|
|
ubuntu.trigger.after :up,
|
|
|
|
info: "More information with ruby magic",
|
|
|
|
ruby: proc{|env,machine| puts `VBoxManage showvminfo #{machine.id} --machinereadable | grep ostype`}
|
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
2019-01-23 21:23:39 +00:00
|
|
|
|
|
|
|
### Typed Triggers
|
|
|
|
|
2019-02-07 00:29:40 +00:00
|
|
|
Below are some basic examples of using `:type` triggers. They cover commands, hooks,
|
|
|
|
and actions.
|
2019-01-23 21:23:39 +00:00
|
|
|
|
2019-02-07 00:29:40 +00:00
|
|
|
It is important to note that while `command` triggers will be a fairly common use case,
|
|
|
|
both `action` and `hook` triggers are more complicated and are a more advanced use case.
|
|
|
|
|
|
|
|
#### Commands
|
|
|
|
|
|
|
|
The most common use case for typed triggers are with `command`. These kinds of
|
|
|
|
triggers allow you to run something before or after a subcommand in Vagrant.
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
config.trigger.after :status, type: :command do |t|
|
|
|
|
t.info = "Showing status of all VMs!"
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
Because they are specifically for subcommands, they do not work with any guest
|
|
|
|
operations like `run_remote` or if you define the trigger as a guest trigger.
|
|
|
|
|
|
|
|
#### Hooks
|
|
|
|
|
|
|
|
Below is an example of a Vagrant trigger that runs before and after each defined
|
|
|
|
provisioner:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
config.trigger.before :provisioner_run, type: :hook do |t|
|
|
|
|
t.info = "Before the provision!"
|
|
|
|
end
|
|
|
|
|
|
|
|
config.vm.provision "file", source: "scripts/script.sh", destination: "/test/script.sh"
|
|
|
|
|
|
|
|
config.vm.provision "shell", inline: <<-SHELL
|
|
|
|
echo "Provision the guest!"
|
|
|
|
SHELL
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
Notice how this trigger runs before _each_ provisioner defined for the guest:
|
|
|
|
|
|
|
|
```shell
|
|
|
|
==> guest: Running provisioner: Sandbox (file)...
|
2019-03-21 16:57:03 +00:00
|
|
|
==> vagrant: Running hook triggers before provisioner_run ...
|
|
|
|
==> vagrant: Running trigger...
|
|
|
|
==> vagrant: Before the provision!
|
2019-02-07 00:29:40 +00:00
|
|
|
guest: /home/hashicorp/vagrant-sandbox/scripts/script.sh => /home/vagrant/test/script.sh
|
|
|
|
==> guest: Running provisioner: shell...
|
2019-03-21 16:57:03 +00:00
|
|
|
==> vagrant: Running hook triggers before provisioner_run ...
|
|
|
|
==> vagrant: Running trigger...
|
|
|
|
==> vagrant: Before the provision!
|
2019-02-07 00:29:40 +00:00
|
|
|
guest: Running: inline script
|
|
|
|
guest: Provision the guest!
|
|
|
|
```
|
|
|
|
#### Actions
|
|
|
|
|
|
|
|
With action typed triggers, you can fire off triggers before or after certain
|
|
|
|
Action classes. A simple example of this might be warning the user when Vagrant
|
|
|
|
invokes the `GracefulHalt` action.
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
config.trigger.before :"Vagrant::Action::Builtin::GracefulHalt", type: :action do |t|
|
|
|
|
t.warn = "Vagrant is halting your guest..."
|
|
|
|
end
|
|
|
|
```
|