vagrant-triggers 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +2 -0
- data/.travis.yml +11 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile +5 -1
- data/README.md +7 -3
- data/lib/vagrant-triggers/action/trigger.rb +22 -14
- data/lib/vagrant-triggers/plugin.rb +3 -9
- data/lib/vagrant-triggers/version.rb +2 -2
- data/spec/spec_helper.rb +5 -1
- data/spec/vagrant-triggers/action/trigger_spec.rb +67 -3
- data/spec/vagrant-triggers/config_spec.rb +13 -1
- data/spec/vagrant-triggers/vagrant_spec.rb +6 -0
- data/vagrant-triggers.gemspec +2 -1
- metadata +14 -25
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 66df1e94338bdbd5b8ea22fa123abc641dbc9e05
|
4
|
+
data.tar.gz: 1310d39fe9e67faaac2a2784b6ed841939a7092e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 3cd9b20a5e2fdb1f15c702502f008fb89afbb91d3685874c4270bde7000bce13cb44506203085c5e651af3d9900dd655c01743e13bed877c6134b7773c39e7cf
|
7
|
+
data.tar.gz: 600308d8966f0b35fba1c2a17698382ecce0c80054f02103374124144f94345a4e560a301ce47ef97f3bdc85fd90bd99351470dd4c38f7580b3e3fb46b02dab5
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
## 0.2.2 (unreleased)
|
2
|
+
|
3
|
+
NEW FEATURES:
|
4
|
+
|
5
|
+
- Add ```:info``` as an alternative to ```:execute```.
|
6
|
+
|
7
|
+
BUG FIXES:
|
8
|
+
|
9
|
+
- Remove Vagrant specific environment variables when executing commands [(#5)](https://github.com/emyl/vagrant-triggers/issues/2)
|
10
|
+
|
1
11
|
## 0.2.1 (November 19, 2013)
|
2
12
|
|
3
13
|
BUG FIXES:
|
data/Gemfile
CHANGED
@@ -3,5 +3,9 @@ source 'https://rubygems.org'
|
|
3
3
|
gemspec
|
4
4
|
|
5
5
|
group :development do
|
6
|
-
gem "vagrant", :
|
6
|
+
gem "vagrant", :github => "mitchellh/vagrant", :ref => ENV.fetch("VAGRANT_VERSION", "v1.4.3")
|
7
|
+
end
|
8
|
+
|
9
|
+
group :test do
|
10
|
+
gem "simplecov", :require => false
|
7
11
|
end
|
data/README.md
CHANGED
@@ -1,13 +1,15 @@
|
|
1
1
|
# vagrant-triggers
|
2
2
|
|
3
|
+
[](https://travis-ci.org/emyl/vagrant-triggers)
|
4
|
+
|
3
5
|
Allow the definition of arbitrary scripts that will run on the host before and/or after Vagrant commands.
|
4
6
|
|
5
7
|
## Installation
|
6
8
|
|
7
|
-
Ensure you have downloaded and installed Vagrant from the
|
9
|
+
Ensure you have downloaded and installed Vagrant 1.2+ from the
|
8
10
|
[Vagrant downloads page](http://downloads.vagrantup.com/).
|
9
11
|
|
10
|
-
Installation is performed in the prescribed manner for Vagrant
|
12
|
+
Installation is performed in the prescribed manner for Vagrant plugins:
|
11
13
|
|
12
14
|
$ vagrant plugin install vagrant-triggers
|
13
15
|
|
@@ -30,6 +32,8 @@ The first argument is the command in which the trigger will be tied. It could be
|
|
30
32
|
### Options
|
31
33
|
|
32
34
|
* ```:execute => "script"```: the script to execute
|
35
|
+
* ```:info => "string"```: an informational message to be displayed, instead of executing a command. This is only displayed if :execute is not set.
|
36
|
+
|
33
37
|
* ```:append_to_path => ["dir", "dir"]```: additional places where looking for the script. See [this wiki page](https://github.com/emyl/vagrant-triggers/wiki/The-:append_to_path-option) for details.
|
34
38
|
* ```:force => true```: continue even if the script fails (exits with non-zero code)
|
35
39
|
* ```:stdout => true```: display script output
|
@@ -53,7 +57,7 @@ Vagrant.configure("2") do |config|
|
|
53
57
|
}.each do |command, trigger|
|
54
58
|
config.trigger.before command, :execute => "vboxmanage #{trigger}", :stdout => true
|
55
59
|
end
|
56
|
-
|
60
|
+
|
57
61
|
end
|
58
62
|
```
|
59
63
|
|
@@ -15,30 +15,36 @@ module VagrantPlugins
|
|
15
15
|
|
16
16
|
def call(env)
|
17
17
|
fire_triggers
|
18
|
-
|
18
|
+
|
19
19
|
# Carry on
|
20
20
|
@app.call(env)
|
21
21
|
end
|
22
22
|
|
23
|
+
private
|
24
|
+
|
25
|
+
def build_environment
|
26
|
+
@logger.debug("Original environment: #{ENV.inspect}")
|
27
|
+
|
28
|
+
# Remove GEM_ environment variables
|
29
|
+
["GEM_HOME", "GEM_PATH", "GEMRC"].each { |gem_var| ENV.delete(gem_var) }
|
30
|
+
|
31
|
+
# Create the new PATH removing Vagrant bin directory
|
32
|
+
# and appending directories specified through the
|
33
|
+
# :append_to_path option
|
34
|
+
new_path = ENV["VAGRANT_INSTALLER_ENV"] ? ENV["PATH"].gsub(/#{ENV["VAGRANT_INSTALLER_EMBEDDED_DIR"]}.*?#{File::PATH_SEPARATOR}/, "") : ENV["PATH"]
|
35
|
+
new_path += Array(@options[:append_to_path]).map { |dir| "#{File::PATH_SEPARATOR}#{dir}" }.join
|
36
|
+
ENV["PATH"] = new_path
|
37
|
+
@logger.debug("PATH modifed: #{ENV["PATH"]}")
|
38
|
+
end
|
39
|
+
|
23
40
|
def execute(raw_command)
|
24
41
|
@env[:ui].info 'Executing command "' + raw_command + '"...'
|
25
42
|
command = Shellwords.shellsplit(raw_command)
|
26
43
|
env_backup = ENV.to_hash
|
27
44
|
begin
|
45
|
+
build_environment
|
28
46
|
result = Vagrant::Util::Subprocess.execute(command[0], *command[1..-1])
|
29
47
|
rescue Vagrant::Errors::CommandUnavailable, Vagrant::Errors::CommandUnavailableWindows
|
30
|
-
@logger.debug("Command not found in the path.")
|
31
|
-
@logger.debug("Current PATH: #{ENV["PATH"]}")
|
32
|
-
new_path = Array(@options[:append_to_path]).join(File::PATH_SEPARATOR)
|
33
|
-
@logger.debug("Temporary replacing the system PATH with #{new_path}.")
|
34
|
-
unless new_path.empty?
|
35
|
-
new_env = env_backup.dup
|
36
|
-
new_env.delete("PATH")
|
37
|
-
new_env["PATH"] = new_path
|
38
|
-
ENV.replace(new_env)
|
39
|
-
@options[:append_to_path] = nil
|
40
|
-
retry
|
41
|
-
end
|
42
48
|
raise Errors::CommandUnavailable, :command => command[0]
|
43
49
|
ensure
|
44
50
|
ENV.replace(env_backup)
|
@@ -65,6 +71,8 @@ module VagrantPlugins
|
|
65
71
|
@options = trigger[:options]
|
66
72
|
if @options[:execute]
|
67
73
|
execute(@options[:execute])
|
74
|
+
elsif @options[:info]
|
75
|
+
@env[:ui].info @options[:info]
|
68
76
|
else
|
69
77
|
@logger.debug("Trigger command not found.")
|
70
78
|
end
|
@@ -74,4 +82,4 @@ module VagrantPlugins
|
|
74
82
|
end
|
75
83
|
end
|
76
84
|
end
|
77
|
-
end
|
85
|
+
end
|
@@ -1,12 +1,6 @@
|
|
1
|
-
begin
|
2
|
-
require "vagrant"
|
3
|
-
rescue LoadError
|
4
|
-
raise "The Vagrant Triggers plugin must be run within Vagrant."
|
5
|
-
end
|
6
|
-
|
7
1
|
# This is a sanity check to make sure no one is attempting to install
|
8
2
|
# this into an early Vagrant version.
|
9
|
-
if Vagrant::VERSION < "1.
|
3
|
+
if Vagrant::VERSION < "1.2.0"
|
10
4
|
raise "The Vagrant Triggers plugin is only compatible with Vagrant 1.1+"
|
11
5
|
end
|
12
6
|
|
@@ -28,7 +22,7 @@ module VagrantPlugins
|
|
28
22
|
hook.append(Action.action_trigger(:after))
|
29
23
|
end
|
30
24
|
end
|
31
|
-
|
25
|
+
|
32
26
|
config(:trigger) do
|
33
27
|
require_relative "config"
|
34
28
|
Config
|
@@ -42,4 +36,4 @@ module VagrantPlugins
|
|
42
36
|
end
|
43
37
|
end
|
44
38
|
end
|
45
|
-
end
|
39
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
+
require "fileutils"
|
1
2
|
require "spec_helper"
|
2
|
-
require "vagrant/util/platform"
|
3
|
-
require "vagrant/util/subprocess"
|
4
3
|
|
5
4
|
describe VagrantPlugins::Triggers::Action::Trigger do
|
6
5
|
let(:app) { lambda { |env| } }
|
@@ -80,6 +79,13 @@ describe VagrantPlugins::Triggers::Action::Trigger do
|
|
80
79
|
result.stub(:exit_code => 1)
|
81
80
|
expect { described_class.new(app, env, condition).call(env) }.not_to raise_error()
|
82
81
|
end
|
82
|
+
|
83
|
+
it "should display output if :stdout option was specified" do
|
84
|
+
@triggers[0][:options][:stdout] = true
|
85
|
+
result.stub(:stdout => "Some output")
|
86
|
+
ui.should_receive(:info).with("Command output:\n\nSome output\n")
|
87
|
+
described_class.new(app, env, condition).call(env)
|
88
|
+
end
|
83
89
|
end
|
84
90
|
|
85
91
|
context "with a command not in the PATH" do
|
@@ -115,4 +121,62 @@ describe VagrantPlugins::Triggers::Action::Trigger do
|
|
115
121
|
expect { described_class.new(app, env, condition).call(env) }.not_to raise_error()
|
116
122
|
end
|
117
123
|
end
|
118
|
-
|
124
|
+
|
125
|
+
context "within the Vagrant environment" do
|
126
|
+
before do
|
127
|
+
@original_path = ENV["PATH"]
|
128
|
+
ENV["EMBEDDED_DIR"] = Vagrant::Util::Platform.windows? ? ENV["USERPROFILE"] : ENV["HOME"]
|
129
|
+
ENV["GEM_HOME"] = "#{ENV["EMBEDDED_DIR"]}/gems"
|
130
|
+
ENV["GEM_PATH"] = ENV["GEM_HOME"]
|
131
|
+
ENV["GEMRC"] = "#{ENV["EMBEDDED_DIR"]}/etc/gemrc"
|
132
|
+
ENV["PATH"] = "#{ENV["EMBEDDED_DIR"]}/bin:#{ENV["PATH"]}"
|
133
|
+
end
|
134
|
+
|
135
|
+
context "with a command which is present into the Vagrant embedded dir" do
|
136
|
+
before do
|
137
|
+
Dir.mkdir("#{ENV["EMBEDDED_DIR"]}/bin")
|
138
|
+
File.open("#{ENV["EMBEDDED_DIR"]}/bin/foo", "w+", 0700) { |file| }
|
139
|
+
end
|
140
|
+
|
141
|
+
it "should raise a CommandUnavailable error" do
|
142
|
+
expect { described_class.new(app, env, condition).call(env) }.to raise_error(VagrantPlugins::Triggers::Errors::CommandUnavailable)
|
143
|
+
end
|
144
|
+
|
145
|
+
after do
|
146
|
+
FileUtils.rm_rf("#{ENV["EMBEDDED_DIR"]}/bin")
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
it "should not pass GEM_HOME to the executed command" do
|
151
|
+
Vagrant::Util::Subprocess.should_receive(:execute) do |command|
|
152
|
+
expect(ENV).not_to have_key("GEM_HOME")
|
153
|
+
result
|
154
|
+
end
|
155
|
+
described_class.new(app, env, condition).call(env)
|
156
|
+
end
|
157
|
+
|
158
|
+
it "should not pass GEM_PATH to the executed command" do
|
159
|
+
Vagrant::Util::Subprocess.should_receive(:execute) do |command|
|
160
|
+
expect(ENV).not_to have_key("GEM_PATH")
|
161
|
+
result
|
162
|
+
end
|
163
|
+
described_class.new(app, env, condition).call(env)
|
164
|
+
end
|
165
|
+
|
166
|
+
it "should not pass GEMRC to the executed command" do
|
167
|
+
Vagrant::Util::Subprocess.should_receive(:execute) do |command|
|
168
|
+
expect(ENV).not_to have_key("GEMRC")
|
169
|
+
result
|
170
|
+
end
|
171
|
+
described_class.new(app, env, condition).call(env)
|
172
|
+
end
|
173
|
+
|
174
|
+
after do
|
175
|
+
ENV["EMBEDDED_DIR"] = nil
|
176
|
+
ENV["GEM_HOME"] = nil
|
177
|
+
ENV["GEM_PATH"] = nil
|
178
|
+
ENV["GEMRC"] = nil
|
179
|
+
ENV["PATH"] = @original_path
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
@@ -14,6 +14,18 @@ describe VagrantPlugins::Triggers::Config do
|
|
14
14
|
its("triggers") { should eq [] }
|
15
15
|
end
|
16
16
|
|
17
|
+
describe "add triggers" do
|
18
|
+
it "should add before triggers" do
|
19
|
+
config.before :up, :exec => "echo ls"
|
20
|
+
expect(config.triggers.first).to eq({ :action => :up, :condition => :before, :options => { :exec => "echo ls" } })
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should add after triggers" do
|
24
|
+
config.after :up, :exec => "echo ls"
|
25
|
+
expect(config.triggers.first).to eq({ :action => :up, :condition => :after, :options => { :exec => "echo ls" } })
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
17
29
|
describe "accept multiple entries" do
|
18
30
|
it "should record multiple entries" do
|
19
31
|
config.before :up, :exec => "echo ls"
|
@@ -38,4 +50,4 @@ describe VagrantPlugins::Triggers::Config do
|
|
38
50
|
expect(config.validate(machine)["triggers"]).to have(1).item
|
39
51
|
end
|
40
52
|
end
|
41
|
-
end
|
53
|
+
end
|
data/vagrant-triggers.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
8
8
|
spec.email = "emiticci@gmail.com"
|
9
9
|
spec.summary = "Triggers for Vagrant commands."
|
10
10
|
spec.description = "This plugin allow the definition of arbitrary scripts that will run on the host before and/or after Vagrant commands."
|
11
|
-
|
11
|
+
|
12
12
|
# The following block of code determines the files that should be included
|
13
13
|
# in the gem. It does this by reading all the files in the directory where
|
14
14
|
# this gemspec is, and parsing out the ignored files from the gitignore.
|
@@ -17,6 +17,7 @@ Gem::Specification.new do |spec|
|
|
17
17
|
root_path = File.dirname(__FILE__)
|
18
18
|
all_files = Dir.chdir(root_path) { Dir.glob("**/{*,.*}") }
|
19
19
|
all_files.reject! { |file| [".", ".."].include?(File.basename(file)) }
|
20
|
+
all_files.reject! { |file| file.start_with?("coverage/") }
|
20
21
|
gitignore_path = File.join(root_path, ".gitignore")
|
21
22
|
gitignore = File.readlines(gitignore_path)
|
22
23
|
gitignore.map! { |line| line.chomp.strip }
|
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: vagrant-triggers
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
5
|
-
prerelease:
|
4
|
+
version: 0.2.2
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Emiliano Ticci
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2014-03-01 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: bundler
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :development
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,33 +27,29 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rake
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :development
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: rspec
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :development
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
description: This plugin allow the definition of arbitrary scripts that will run on
|
@@ -82,39 +75,35 @@ files:
|
|
82
75
|
- spec/spec_helper.rb
|
83
76
|
- spec/vagrant-triggers/action/trigger_spec.rb
|
84
77
|
- spec/vagrant-triggers/config_spec.rb
|
78
|
+
- spec/vagrant-triggers/vagrant_spec.rb
|
85
79
|
- vagrant-triggers.gemspec
|
86
80
|
- .gitignore
|
81
|
+
- .travis.yml
|
87
82
|
homepage:
|
88
83
|
licenses: []
|
84
|
+
metadata: {}
|
89
85
|
post_install_message:
|
90
86
|
rdoc_options: []
|
91
87
|
require_paths:
|
92
88
|
- lib
|
93
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
94
|
-
none: false
|
95
90
|
requirements:
|
96
|
-
- -
|
91
|
+
- - '>='
|
97
92
|
- !ruby/object:Gem::Version
|
98
93
|
version: '0'
|
99
|
-
segments:
|
100
|
-
- 0
|
101
|
-
hash: -2957871706623383121
|
102
94
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
103
|
-
none: false
|
104
95
|
requirements:
|
105
|
-
- -
|
96
|
+
- - '>='
|
106
97
|
- !ruby/object:Gem::Version
|
107
98
|
version: '0'
|
108
|
-
segments:
|
109
|
-
- 0
|
110
|
-
hash: -2957871706623383121
|
111
99
|
requirements: []
|
112
100
|
rubyforge_project:
|
113
|
-
rubygems_version:
|
101
|
+
rubygems_version: 2.0.14
|
114
102
|
signing_key:
|
115
|
-
specification_version:
|
103
|
+
specification_version: 4
|
116
104
|
summary: Triggers for Vagrant commands.
|
117
105
|
test_files:
|
118
106
|
- spec/spec_helper.rb
|
119
107
|
- spec/vagrant-triggers/action/trigger_spec.rb
|
120
108
|
- spec/vagrant-triggers/config_spec.rb
|
109
|
+
- spec/vagrant-triggers/vagrant_spec.rb
|