2018-03-29 16:08:25 +00:00
|
|
|
---
|
|
|
|
layout: "docs"
|
|
|
|
page_title: "Vagrant Triggers"
|
|
|
|
sidebar_current: "triggers"
|
|
|
|
description: |-
|
2018-04-04 22:00:26 +00:00
|
|
|
Introduction to Vagrant Triggers
|
2018-03-29 16:08:25 +00:00
|
|
|
---
|
|
|
|
|
|
|
|
# Vagrant Triggers
|
|
|
|
|
2018-04-04 22:00:26 +00:00
|
|
|
As of version 2.1.0, Vagrant is capable of executing machine triggers _before_ or
|
|
|
|
_after_ Vagrant commands.
|
|
|
|
|
|
|
|
Each trigger is expected to be given a command key for when it should be fired
|
2018-04-23 16:14:31 +00:00
|
|
|
during the Vagrant command lifecycle. These could be defined as a single key or
|
2018-04-04 22:00:26 +00:00
|
|
|
an array which acts like a _whitelist_ for the defined trigger.
|
|
|
|
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
# single command trigger
|
|
|
|
config.trigger.after :up do |trigger|
|
|
|
|
...
|
|
|
|
end
|
|
|
|
|
|
|
|
# multiple commands for this trigger
|
|
|
|
config.trigger.before [:up, :destroy, :halt, :package] do |trigger|
|
|
|
|
...
|
|
|
|
end
|
|
|
|
|
|
|
|
# or defined as a splat list
|
|
|
|
config.trigger.before :up, :destroy, :halt, :package do |trigger|
|
|
|
|
...
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
2018-04-06 18:34:23 +00:00
|
|
|
Alternatively, the key `:all` could be given which would run the trigger before
|
|
|
|
or after every Vagrant command. If there is a command you don't want the trigger
|
|
|
|
to run on, you can ignore that command with the `ignore` option.
|
2018-04-04 22:00:26 +00:00
|
|
|
|
|
|
|
```ruby
|
|
|
|
# single command trigger
|
|
|
|
config.trigger.before :all do |trigger|
|
|
|
|
trigger.info = "Running a before trigger!"
|
2018-04-06 18:34:23 +00:00
|
|
|
trigger.ignore = [:destroy, :halt]
|
2018-04-04 22:00:26 +00:00
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
__Note:__ _If a trigger is defined on a command that does not exist, a warning
|
|
|
|
will be displayed._
|
|
|
|
|
|
|
|
Triggers can be defined as a block or hash in a Vagrantfile. The example below
|
|
|
|
will result in the same trigger:
|
|
|
|
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
config.trigger.after :up do |trigger|
|
|
|
|
trigger.name = "Finished Message"
|
|
|
|
trigger.info = "Machine is up!"
|
|
|
|
end
|
|
|
|
|
|
|
|
config.trigger.after :up,
|
|
|
|
name: "Finished Message",
|
|
|
|
info: "Machine is up!"
|
|
|
|
```
|
|
|
|
|
|
|
|
Triggers can also be defined within the scope of guests in a Vagrantfile. These
|
|
|
|
triggers will only run on the configured guest. An example of a guest only trigger:
|
|
|
|
|
|
|
|
```ruby
|
|
|
|
config.vm.define "ubuntu" do |ubuntu|
|
|
|
|
ubuntu.vm.box = "ubuntu"
|
|
|
|
ubuntu.trigger.before :destroy do |trigger|
|
2018-04-04 23:20:27 +00:00
|
|
|
trigger.warn = "Dumping database to /vagrant/outfile"
|
2018-05-04 14:44:31 +00:00
|
|
|
trigger.run_remote = {inline: "pg_dump dbname > /vagrant/outfile"}
|
2018-04-04 22:00:26 +00:00
|
|
|
end
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
2018-04-23 16:14:31 +00:00
|
|
|
Global and machine-scoped triggers will execute in the order that they are
|
2018-04-04 22:00:26 +00:00
|
|
|
defined within a Vagrantfile. Take for example an abstracted Vagrantfile:
|
|
|
|
|
|
|
|
```
|
|
|
|
Vagrantfile
|
|
|
|
global trigger 1
|
|
|
|
global trigger 2
|
|
|
|
machine defined
|
|
|
|
machine trigger 3
|
|
|
|
global trigger 4
|
|
|
|
end
|
|
|
|
```
|
|
|
|
|
|
|
|
In this generic case, the triggers would fire in the order: 1 -> 2 -> 3 -> 4
|
|
|
|
|
|
|
|
For more information about what options are available for triggers, see the
|
|
|
|
[configuration section](/docs/triggers/configuration.html).
|