vagrant-adam 0.1.0a
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 +20 -0
- data/.rubocop.yml +17 -0
- data/.ruby-version +1 -0
- data/.travis.yml +6 -0
- data/.yardopts +7 -0
- data/CONTRIBUTING.md +56 -0
- data/Gemfile +23 -0
- data/Guardfile +5 -0
- data/LICENSE.md +21 -0
- data/README.md +74 -0
- data/Rakefile +50 -0
- data/cucumber.yml +1 -0
- data/features/step_definitions/steps.rb +52 -0
- data/features/support/env.rb +21 -0
- data/features/vagrant-adam/basic_local_file.feature +19 -0
- data/features/vagrant-adam/environment_variable_file.feature +13 -0
- data/features/vagrant-adam/validations.feature +24 -0
- data/lib/vagrant-adam.rb +15 -0
- data/lib/vagrant-adam/action/pre_provision_script.rb +130 -0
- data/lib/vagrant-adam/config.rb +54 -0
- data/lib/vagrant-adam/plugin.rb +47 -0
- data/lib/vagrant-adam/version.rb +6 -0
- data/locales/en.yml +12 -0
- data/spec/support/scripts/hello_world.sh +2 -0
- data/spec/unit/spec_helper.rb +40 -0
- data/spec/unit/vagrant-puppet-install/action/pre_provision_script_spec.rb +47 -0
- data/spec/unit/vagrant-puppet-install/config_spec.rb +74 -0
- data/spec/unit/vagrant-puppet-install/plugin_spec.rb +82 -0
- data/vagrant-adam.gemspec +28 -0
- metadata +187 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e9668161eab94e1522897fa5bc244a51fd49284c
|
4
|
+
data.tar.gz: 5409867d7104bc25a0d4ce37960982216e0950a6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bdd3895180b212a3b17db283526937696a61db9f7038c492d001532a95571fd6af5cd92b7aff3dc74ba8a263473d9ec085224935f971b159ab967243b38c49eb
|
7
|
+
data.tar.gz: afd7a239978e6ae4b25006986cf827c68cc14252667682ef6348e87cf2dd0375718d8a5b15d302bb5b7762c9e9bf0f58f6ed87cb9046346b2932f709b14698cd
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
AllCops:
|
2
|
+
Excludes:
|
3
|
+
- vendor/**
|
4
|
+
- bin/**
|
5
|
+
- tmp/**
|
6
|
+
Encoding:
|
7
|
+
Enabled: false
|
8
|
+
ClassLength:
|
9
|
+
Enabled: false
|
10
|
+
MethodLength:
|
11
|
+
Enabled: false
|
12
|
+
LineLength:
|
13
|
+
Enabled: false
|
14
|
+
Lambda:
|
15
|
+
Enabled: false
|
16
|
+
IfUnlessModifier:
|
17
|
+
Enabled: false
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.1.0
|
data/.travis.yml
ADDED
data/.yardopts
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
## Developing
|
4
|
+
|
5
|
+
If you'd like to submit a patch:
|
6
|
+
|
7
|
+
1. Fork the project.
|
8
|
+
2. Make your feature addition or bug fix.
|
9
|
+
3. Add [tests](#testing) for it. This is important so that it isn't broken in a
|
10
|
+
future version unintentionally.
|
11
|
+
4. Commit. **Do not touch any unrelated code, such as the gemspec or version.**
|
12
|
+
If you must change unrelated code, do it in a commit by itself, so that it
|
13
|
+
can be ignored.
|
14
|
+
5. Send a pull request.
|
15
|
+
|
16
|
+
## Testing
|
17
|
+
|
18
|
+
### Install prerequisites
|
19
|
+
|
20
|
+
Install the latest version of [Bundler](http://gembundler.com)
|
21
|
+
|
22
|
+
$ gem install bundler
|
23
|
+
|
24
|
+
Clone the project
|
25
|
+
|
26
|
+
$ git clone git://github.com/petems/vagrant-adam.git
|
27
|
+
|
28
|
+
and run:
|
29
|
+
|
30
|
+
$ cd vagrant-adam
|
31
|
+
$ bundle install
|
32
|
+
|
33
|
+
Bundler will install all gems and their dependencies required for testing and developing.
|
34
|
+
|
35
|
+
### Unit Tests (rspec)
|
36
|
+
|
37
|
+
The unit tests can be run with:
|
38
|
+
|
39
|
+
```
|
40
|
+
bundle exec rake test:unit
|
41
|
+
```
|
42
|
+
|
43
|
+
The tests are also executed by Travis CI every time code is pushed to GitHub.
|
44
|
+
|
45
|
+
### Acceptance
|
46
|
+
|
47
|
+
Currently this repo ships with a set of basic acceptance tests that will:
|
48
|
+
|
49
|
+
* Provision a Vagrant instance.
|
50
|
+
* Attempt to run a given script
|
51
|
+
|
52
|
+
The acceptance tests use aruba, and can be ran like so:
|
53
|
+
|
54
|
+
```
|
55
|
+
bundle exec rake features:run
|
56
|
+
```
|
data/Gemfile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
|
3
|
+
gemspec
|
4
|
+
|
5
|
+
group :development do
|
6
|
+
# We depend on Vagrant for development, but we don't add it as a
|
7
|
+
# gem dependency because we expect to be installed within the
|
8
|
+
# Vagrant environment itself using `vagrant plugin`.
|
9
|
+
gem 'vagrant', git: 'git://github.com/mitchellh/vagrant.git', tag: 'v1.4.3'
|
10
|
+
gem 'cucumber', git: 'https://github.com/cucumber/cucumber.git', tag: 'v2.0.0.beta.2'
|
11
|
+
end
|
12
|
+
|
13
|
+
group :acceptance do
|
14
|
+
gem 'vagrant-digitalocean', '~> 0.5.3'
|
15
|
+
gem 'vagrant-aws', '~> 0.4.0'
|
16
|
+
gem 'vagrant-rackspace', '~> 0.1.4'
|
17
|
+
end
|
18
|
+
|
19
|
+
group :docs do
|
20
|
+
gem 'yard', '~> 0.8.5'
|
21
|
+
gem 'redcarpet', '~> 2.2.2'
|
22
|
+
gem 'github-markup', '~> 0.7.5'
|
23
|
+
end
|
data/Guardfile
ADDED
data/LICENSE.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2014 Peter Souter
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
# vagrant-adam
|
2
|
+
|
3
|
+
[](https://travis-ci.org/petems/vagrant-adam)
|
4
|
+
[](https://coveralls.io/r/petems/vagrant-adam?branch=master)
|
5
|
+
[](https://codeclimate.com/github/petems/vagrant-adam)
|
6
|
+
|
7
|
+
A Vagrant plugin that ensures a given script is run before anything else on a Vagrant environment. This is useful if you want to fix issues around requiretty in sudoers, or doing a one-off fix for a Vagrant bo.
|
8
|
+
|
9
|
+
The plugin should work correctly with all providers, but right now the acceptance tests are only setup for Virtualbox. However, from my quick tests it works with the following [Vagrant providers](http://docs.vagrantup.com/v2/providers/index.html):
|
10
|
+
|
11
|
+
* VirtualBox (part of core)
|
12
|
+
* AWS (ships in [vagrant-aws](https://github.com/mitchellh/vagrant-aws) plugin)
|
13
|
+
* Rackspace (ships in [vagrant-rackspace](https://github.com/mitchellh/vagrant-rackspace)
|
14
|
+
plugin)
|
15
|
+
* VMWare Fusion (can be [purchased from Hashicorp](http://www.vagrantup.com/vmware))
|
16
|
+
* LXC (ships in [vagrant-lxc](https://github.com/fgrehm/vagrant-lxc))
|
17
|
+
* OpenStack (ships in [vagrant-openstack-plugin](https://github.com/cloudbau/vagrant-openstack-plugin))
|
18
|
+
* Digital Ocean (ships in [vagrant-digitalocean](https://github.com/smdahlen/vagrant-digitalocean))
|
19
|
+
* Parallels Desktop (ships in [vagrant-parallels](https://github.com/yshahin/vagrant-parallels))
|
20
|
+
|
21
|
+
## Installation
|
22
|
+
|
23
|
+
Ensure you have downloaded and installed Vagrant 1.1 or newer from the
|
24
|
+
[Vagrant downloads page](http://downloads.vagrantup.com/).
|
25
|
+
|
26
|
+
Installation is performed in the prescribed manner for Vagrant 1.1 plugins.
|
27
|
+
|
28
|
+
```
|
29
|
+
$ vagrant plugin install vagrant-adam
|
30
|
+
```
|
31
|
+
|
32
|
+
## Usage
|
33
|
+
|
34
|
+
The Vagrant Adam plugin automatically hooks into the Vagrant provisioning
|
35
|
+
middleware, and it's setup to always run before the `Vagrant::Action::Builtin::SyncedFolders` process (I believe it's unique in this fact!)
|
36
|
+
|
37
|
+
To run a particular script, you specify the path or URL of the script you want to run
|
38
|
+
|
39
|
+
### Path on host machine
|
40
|
+
```ruby
|
41
|
+
Vagrant.configure("2") do |config|
|
42
|
+
|
43
|
+
config.adam.provision_url = '/tmp/cool_script.sh'
|
44
|
+
|
45
|
+
...
|
46
|
+
|
47
|
+
end
|
48
|
+
```
|
49
|
+
|
50
|
+
### Url of script
|
51
|
+
```ruby
|
52
|
+
Vagrant.configure("2") do |config|
|
53
|
+
|
54
|
+
config.adam.provision_url = 'https://gist.githubusercontent.com/petems/367f8119bbff011bf83e/raw/29efc24e8a0db3ce2e0452f1c23d2119146ed583/remove_requiretty.sh'
|
55
|
+
|
56
|
+
...
|
57
|
+
|
58
|
+
end
|
59
|
+
```
|
60
|
+
|
61
|
+
## Contributing and Tests
|
62
|
+
|
63
|
+
|
64
|
+
## Getting Help
|
65
|
+
|
66
|
+
* If you have an issue: report it on the [issue tracker](https://github.com/petems/vagrant-adam/issues)
|
67
|
+
|
68
|
+
# Authors
|
69
|
+
|
70
|
+
- Peter Souter
|
71
|
+
|
72
|
+
Thank you to all of our [Contributors](https://github.com/petems/vagrant-adam/graphs/contributors), testers, and users.
|
73
|
+
|
74
|
+
If you'd like to contribute, please see our [contribution guidelines](https://github.com/petems/vagrant-adam/blob/master/CONTRIBUTING.md) first.
|
data/Rakefile
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'bundler/gem_tasks'
|
3
|
+
require 'rspec/core/rake_task'
|
4
|
+
require 'rubocop/rake_task'
|
5
|
+
require 'cucumber/rake/task'
|
6
|
+
require 'yard'
|
7
|
+
|
8
|
+
YARD::Rake::YardocTask.new
|
9
|
+
|
10
|
+
namespace :test do
|
11
|
+
|
12
|
+
RSpec::Core::RakeTask.new(:unit) do |t|
|
13
|
+
t.pattern = 'spec/unit/**/*_spec.rb'
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
namespace :style do
|
19
|
+
require 'rubocop/rake_task'
|
20
|
+
desc 'Run Ruby style checks'
|
21
|
+
Rubocop::RakeTask.new(:ruby) do |task|
|
22
|
+
task.patterns = [
|
23
|
+
'**/*.rb',
|
24
|
+
'**/Vagrantfile',
|
25
|
+
'*.gemspec',
|
26
|
+
'Gemfile',
|
27
|
+
'Rakefile'
|
28
|
+
]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
namespace :features do
|
33
|
+
desc 'Downloads and adds vagrant box for testing.'
|
34
|
+
task(:bootstrap) do
|
35
|
+
if `bundle exec vagrant box list`.include?('precise64.box')
|
36
|
+
puts 'precise64 box found! No bootstrap needed.'
|
37
|
+
else
|
38
|
+
system('bundle exec vagrant box add precise64 http://files.vagrantup.com/precise64.box')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
Cucumber::Rake::Task.new(:run) do |t|
|
43
|
+
t.cucumber_opts = %w(--format pretty --order random)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
task default: [
|
48
|
+
'test:unit',
|
49
|
+
'style:ruby'
|
50
|
+
]
|
data/cucumber.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
default: --require features --format html --out results.html --format pretty
|
@@ -0,0 +1,52 @@
|
|
1
|
+
Given(/^a Vagrantfile with a adam\.provision_url of "(.*?)"$/) do |provision_url|
|
2
|
+
|
3
|
+
file_content = <<EOS
|
4
|
+
require 'vagrant-adam'
|
5
|
+
|
6
|
+
Vagrant.configure("2") do |config|
|
7
|
+
config.vm.define :ubuntu do |ubuntu|
|
8
|
+
ubuntu.adam.provision_url = '#{provision_url}'
|
9
|
+
ubuntu.vm.box = "precise64"
|
10
|
+
ubuntu.vm.box_url = "http://files.vagrantup.com/precise64.box"
|
11
|
+
end
|
12
|
+
end
|
13
|
+
EOS
|
14
|
+
|
15
|
+
# Create file
|
16
|
+
write_file('Vagrantfile', file_content)
|
17
|
+
end
|
18
|
+
|
19
|
+
Given(/^a shell file '(.*?)' with content of "(.*?)"$/) do |script_name, script_contents|
|
20
|
+
|
21
|
+
file_content = <<EOS
|
22
|
+
#!/bin/sh -e
|
23
|
+
#{script_contents}
|
24
|
+
EOS
|
25
|
+
|
26
|
+
# Create file
|
27
|
+
write_file(script_name, file_content)
|
28
|
+
end
|
29
|
+
|
30
|
+
Given(/^a Vagrantfile with no adam\.provision_url$/) do
|
31
|
+
file_content = <<EOS
|
32
|
+
require 'vagrant-adam'
|
33
|
+
|
34
|
+
Vagrant.configure("2") do |config|
|
35
|
+
config.vm.define :ubuntu do |ubuntu|
|
36
|
+
ubuntu.vm.box = "precise64"
|
37
|
+
ubuntu.vm.box_url = "http://files.vagrantup.com/precise64.box"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
EOS
|
41
|
+
|
42
|
+
# Create file
|
43
|
+
write_file('Vagrantfile', file_content)
|
44
|
+
end
|
45
|
+
|
46
|
+
Given(/^the environment variable (.+) is nil$/) do |variable|
|
47
|
+
set_env(variable, nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
Given(/^the environment variable (.+) is "(.+)"$/) do |variable, value|
|
51
|
+
set_env(variable, value)
|
52
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
unless `bundle exec vagrant box list`.include?('precise64')
|
2
|
+
fail 'Box is not added! Run "bundle exec rake features:bootstrap".'
|
3
|
+
end
|
4
|
+
|
5
|
+
require 'aruba/cucumber'
|
6
|
+
|
7
|
+
# Useful for debugging Vagrant issues
|
8
|
+
# ENV['VAGRANT_LOG'] = 'info'
|
9
|
+
|
10
|
+
Before do
|
11
|
+
system 'cd tmp/aruba; bundle exec vagrant destroy -f'
|
12
|
+
system 'cd tmp/aruba; rm -rf *.sh'
|
13
|
+
# VM start takes a long time
|
14
|
+
@aruba_timeout_seconds = 180
|
15
|
+
end
|
16
|
+
|
17
|
+
After do
|
18
|
+
# halt VM
|
19
|
+
system 'cd tmp/aruba; bundle exec vagrant destroy -f'
|
20
|
+
system 'cd tmp/aruba; rm -rf *.sh'
|
21
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
@no-clobber
|
2
|
+
Feature: vagrant-adam local file
|
3
|
+
In order to check vagrant-adam is working
|
4
|
+
As a user
|
5
|
+
I should see issues with a basic smoke test
|
6
|
+
|
7
|
+
Scenario:
|
8
|
+
Given a Vagrantfile with a adam.provision_url of "./hello_world_local_file.sh"
|
9
|
+
And a shell file 'hello_world_local_file.sh' with content of "echo 'Hello World!'"
|
10
|
+
When I run `bundle exec vagrant up`
|
11
|
+
Then the exit status should not be 1
|
12
|
+
And the output should contain "Hello World"
|
13
|
+
|
14
|
+
Scenario:
|
15
|
+
Given a Vagrantfile with a adam.provision_url of "./fail_script.sh"
|
16
|
+
And a shell file 'fail_script.sh' with content of "echo 'missing single quote"
|
17
|
+
When I run `bundle exec vagrant up`
|
18
|
+
Then the exit status should not be 0
|
19
|
+
And the output should contain "Syntax error: Unterminated quoted string"
|
@@ -0,0 +1,13 @@
|
|
1
|
+
@no-clobber
|
2
|
+
Feature: vagrant-adam local file
|
3
|
+
In order to allow use of environment variables
|
4
|
+
As a user
|
5
|
+
I should be able to set an environment path from the commandline
|
6
|
+
|
7
|
+
Scenario:
|
8
|
+
Given a Vagrantfile with no adam.provision_url
|
9
|
+
And a shell file 'env_shell_script.sh' with content of "echo 'Hello World!'"
|
10
|
+
And the environment variable PRE_PROV_URL is "./env_shell_script.sh"
|
11
|
+
When I run `bundle exec vagrant up`
|
12
|
+
Then the exit status should not be 1
|
13
|
+
And the output should contain "Hello World"
|
@@ -0,0 +1,24 @@
|
|
1
|
+
@no-clobber
|
2
|
+
Feature: vagrant-adam validations
|
3
|
+
In order to avoid configuration mistakes for vagrant-adam commands
|
4
|
+
As a user
|
5
|
+
I should see proper validation errors
|
6
|
+
|
7
|
+
Scenario: raises error if url of file doesnt exist
|
8
|
+
Given a Vagrantfile with a adam.provision_url of "https://github.com/petems/vagrant-adam/this_file_doesnt_exist.sh"
|
9
|
+
When I run `bundle exec vagrant up`
|
10
|
+
Then the exit status should not be 0
|
11
|
+
And the output should contain "The requested URL returned error: 404 Not Found"
|
12
|
+
|
13
|
+
Scenario: raises error if path of file doesnt exist
|
14
|
+
Given a Vagrantfile with a adam.provision_url of "/tmp/foo_bar_baz.sh"
|
15
|
+
When I run `bundle exec vagrant up`
|
16
|
+
Then the exit status should not be 0
|
17
|
+
And the output should contain "Couldn't open file /tmp/foo_bar_baz.sh"
|
18
|
+
|
19
|
+
Scenario:
|
20
|
+
Given a Vagrantfile with no adam.provision_url
|
21
|
+
And the environment variable PRE_PROV_URL is "/tmp/foo_bar_baz.sh"
|
22
|
+
When I run `bundle exec vagrant up`
|
23
|
+
Then the exit status should not be 0
|
24
|
+
And the output should contain "Couldn't open file /tmp/foo_bar_baz.sh"
|
data/lib/vagrant-adam.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
require 'vagrant-adam/plugin'
|
3
|
+
require 'vagrant-adam/config'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
#
|
7
|
+
module Adam
|
8
|
+
def self.source_root
|
9
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
10
|
+
end
|
11
|
+
|
12
|
+
I18n.load_path << File.expand_path('locales/en.yml', source_root)
|
13
|
+
I18n.reload!
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,130 @@
|
|
1
|
+
require 'log4r'
|
2
|
+
require 'shellwords'
|
3
|
+
require 'fog'
|
4
|
+
|
5
|
+
require 'vagrant/util/downloader'
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module Adam
|
9
|
+
module Action
|
10
|
+
# This action uploads then runs a given script on the Vagrant environment
|
11
|
+
class PreProvisionScript
|
12
|
+
def initialize(app, env)
|
13
|
+
@app = app
|
14
|
+
@logger =
|
15
|
+
Log4r::Logger.new('vagrantplugins::adam::action::preprovisionscript')
|
16
|
+
@machine = env[:machine]
|
17
|
+
@provision_script = find_provision_script
|
18
|
+
@machine.config.adam.finalize!
|
19
|
+
end
|
20
|
+
|
21
|
+
def call(env)
|
22
|
+
@app.call(env)
|
23
|
+
fetch_or_create_pre_provision_script(env)
|
24
|
+
run_provision_script(env)
|
25
|
+
recover(env)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def find_provision_script
|
31
|
+
env_provision_url || config_provision_script_url
|
32
|
+
end
|
33
|
+
|
34
|
+
def windows_guest?
|
35
|
+
@machine.config.vm.guest.eql?(:windows)
|
36
|
+
end
|
37
|
+
|
38
|
+
def config_provision_script_url
|
39
|
+
@machine.config.adam.provision_url
|
40
|
+
end
|
41
|
+
|
42
|
+
def env_provision_url
|
43
|
+
ENV['PRE_PROV_URL']
|
44
|
+
end
|
45
|
+
|
46
|
+
def provision_script_name
|
47
|
+
if windows_guest?
|
48
|
+
# No Windows Version yet
|
49
|
+
else
|
50
|
+
'prov_script.sh'
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def provision_enabled?(env)
|
55
|
+
env.fetch(:provision_enabled, true)
|
56
|
+
end
|
57
|
+
|
58
|
+
#
|
59
|
+
# Upload provision script from Host's Vagrant TMP directory to guest
|
60
|
+
# and executes.
|
61
|
+
#
|
62
|
+
def run_provision_script(env)
|
63
|
+
@machine.communicate.tap do |comm|
|
64
|
+
comm.upload(@script_tmp_path, provision_script_name)
|
65
|
+
if windows_guest?
|
66
|
+
# Not sure yet...
|
67
|
+
else
|
68
|
+
provision_cmd = "sh #{provision_script_name}"
|
69
|
+
provision_cmd << ' 2>&1'
|
70
|
+
end
|
71
|
+
env[:ui].info(I18n.t('vagrant_adam.pre_provision_script_start'))
|
72
|
+
comm.sudo(provision_cmd) do |type, data|
|
73
|
+
if [:stderr, :stdout].include?(type)
|
74
|
+
env[:ui].info(data)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
env[:ui].info(I18n.t('vagrant_adam.pre_provision_script_finish'))
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# Fetches or creates a provision script to the Host's
|
83
|
+
# Vagrant TMP directory.
|
84
|
+
#
|
85
|
+
def fetch_or_create_pre_provision_script(env)
|
86
|
+
@script_tmp_path =
|
87
|
+
env[:tmp_path].join("#{Time.now.to_i}-#{provision_script_name}")
|
88
|
+
|
89
|
+
@logger.info("Generating provision script at: #{@script_tmp_path}")
|
90
|
+
|
91
|
+
url = @provision_script
|
92
|
+
|
93
|
+
if File.file?(url) || url !~ /^[a-z0-9]+:.*$/i
|
94
|
+
@logger.info('Assuming URL is a file.')
|
95
|
+
file_path = File.expand_path(url)
|
96
|
+
file_path = Vagrant::Util::Platform.cygwin_windows_path(file_path)
|
97
|
+
url = "file:#{file_path}"
|
98
|
+
end
|
99
|
+
|
100
|
+
# Download the provision script to a temporary path.
|
101
|
+
# We store the temporary path as an instance variable so that
|
102
|
+
# the `#recover` method can access it.
|
103
|
+
begin
|
104
|
+
if windows_guest?
|
105
|
+
# Not sure how to do this in Windows yet...
|
106
|
+
else
|
107
|
+
downloader = Vagrant::Util::Downloader.new(
|
108
|
+
url,
|
109
|
+
@script_tmp_path,
|
110
|
+
{}
|
111
|
+
)
|
112
|
+
downloader.download!
|
113
|
+
end
|
114
|
+
rescue Vagrant::Errors::DownloaderInterrupted
|
115
|
+
# The downloader was interrupted, so just return, because that
|
116
|
+
# means we were interrupted as well.
|
117
|
+
env[:ui].info(I18n.t('vagrant-adam.download.interrupted'))
|
118
|
+
return
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def recover(env)
|
123
|
+
if @script_tmp_path && File.exist?(@script_tmp_path)
|
124
|
+
File.unlink(@script_tmp_path)
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module Adam
|
5
|
+
# Config definition to validate given configuration values
|
6
|
+
class Config < Vagrant.plugin('2', :config)
|
7
|
+
attr_accessor :provision_url
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@provision_url = UNSET_VALUE
|
11
|
+
@logger = Log4r::Logger.new('vagrantplugins::adam::config')
|
12
|
+
end
|
13
|
+
|
14
|
+
def finalize!
|
15
|
+
@provision_url = nil if @provision_url == UNSET_VALUE
|
16
|
+
end
|
17
|
+
|
18
|
+
def validate!(_machine)
|
19
|
+
finalize!
|
20
|
+
errors = []
|
21
|
+
|
22
|
+
unless @provision_url.nil?
|
23
|
+
unless (valid_uri? @provision_url) || (valid_file? @provision_url)
|
24
|
+
msg = <<-EOH
|
25
|
+
'#{ @provision_url }' is not a valid filepath or URL
|
26
|
+
EOH
|
27
|
+
errors << msg
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
if errors.any?
|
32
|
+
rendered_errors = Vagrant::Util::TemplateRenderer.render(
|
33
|
+
'config/validation_failed',
|
34
|
+
errors: { 'vagrant-adam' => errors }
|
35
|
+
)
|
36
|
+
fail Vagrant::Errors::ConfigInvalid, errors: rendered_errors
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def valid_uri?(value)
|
43
|
+
uri = URI.parse value
|
44
|
+
uri.is_a?(URI::HTTP) || uri.is_a?(URI::HTTPS)
|
45
|
+
rescue URI::InvalidURIError
|
46
|
+
false
|
47
|
+
end
|
48
|
+
|
49
|
+
def valid_file?(value)
|
50
|
+
File.file?(value)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module VagrantPlugins
|
2
|
+
module Adam
|
3
|
+
# Plugin definition for Plugin meta-data and to check Vagrant version
|
4
|
+
# meets given requirement. We also define action_hooks to decide when actions occur
|
5
|
+
class Plugin < Vagrant.plugin('2')
|
6
|
+
VAGRANT_VERSION_REQUIREMENT = '>= 1.1.0'
|
7
|
+
|
8
|
+
name 'vagrant-adam'
|
9
|
+
description <<-DESC
|
10
|
+
This plugin ensures a pre-provision script is run before anything else
|
11
|
+
DESC
|
12
|
+
|
13
|
+
# Returns true if the Vagrant version fulfills the requirements
|
14
|
+
#
|
15
|
+
# @param requirements [String, Array<String>] the version requirement
|
16
|
+
# @return [Boolean]
|
17
|
+
def self.check_vagrant_version(*requirements)
|
18
|
+
Gem::Requirement.new(*requirements).satisfied_by?(
|
19
|
+
Gem::Version.new(Vagrant::VERSION))
|
20
|
+
end
|
21
|
+
|
22
|
+
# Verifies that the Vagrant version fulfills the requirements
|
23
|
+
#
|
24
|
+
# @raise [VagrantPlugins::ProxyConf::VagrantVersionError] if this plugin
|
25
|
+
# is incompatible with the Vagrant version
|
26
|
+
def self.check_vagrant_version!
|
27
|
+
unless check_vagrant_version(VAGRANT_VERSION_REQUIREMENT)
|
28
|
+
msg = I18n.t(
|
29
|
+
'vagrant_adam.errors.vagrant_version',
|
30
|
+
requirement: VAGRANT_VERSION_REQUIREMENT.inspect)
|
31
|
+
$stderr.puts msg
|
32
|
+
fail msg
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
action_hook(:pre_provision_script, Plugin::ALL_ACTIONS) do |hook|
|
37
|
+
require_relative 'action/pre_provision_script'
|
38
|
+
hook.after(Vagrant::Action::Builtin::SyncedFolders, Action::PreProvisionScript)
|
39
|
+
end
|
40
|
+
|
41
|
+
config(:adam) do
|
42
|
+
require_relative 'config'
|
43
|
+
Config
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
en:
|
2
|
+
vagrant_adam:
|
3
|
+
download:
|
4
|
+
downloading: "Downloading or copying pre-provision script..."
|
5
|
+
interrupted: "Script download was interrupted. Exiting."
|
6
|
+
pre_provision_script_start: |-
|
7
|
+
Running pre-provision script
|
8
|
+
pre_provision_script_finish: |-
|
9
|
+
Pre-provision script complete!
|
10
|
+
errors:
|
11
|
+
vagrant_version: |-
|
12
|
+
vagrant-adam plugin requires Vagrant version %{requirement}
|
@@ -0,0 +1,40 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../../../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'simplecov'
|
4
|
+
require 'coveralls'
|
5
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
6
|
+
SimpleCov::Formatter::HTMLFormatter,
|
7
|
+
Coveralls::SimpleCov::Formatter
|
8
|
+
]
|
9
|
+
SimpleCov.start do
|
10
|
+
coverage_dir('coverage/')
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'rspec/core'
|
14
|
+
require 'vagrant-adam'
|
15
|
+
|
16
|
+
RSpec.configure do |config|
|
17
|
+
config.formatter = :documentation
|
18
|
+
|
19
|
+
# a little syntactic sugar
|
20
|
+
config.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
|
21
|
+
|
22
|
+
# Use color in STDOUT
|
23
|
+
config.color_enabled = true
|
24
|
+
|
25
|
+
# Use color not only in STDOUT but also in pagers and files
|
26
|
+
config.tty = true
|
27
|
+
|
28
|
+
# run the examples in random order
|
29
|
+
config.order = :rand
|
30
|
+
|
31
|
+
# specify metadata with symobls only (ie no '=> true' required)
|
32
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
33
|
+
config.filter_run focus: true
|
34
|
+
config.run_all_when_everything_filtered = true
|
35
|
+
end
|
36
|
+
|
37
|
+
# @return [String] the path to the fixture file
|
38
|
+
def support_path(filename)
|
39
|
+
File.expand_path("../../support/#{filename}", __FILE__)
|
40
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require_relative '../../spec_helper'
|
2
|
+
require 'vagrant-adam/action/pre_provision_script'
|
3
|
+
|
4
|
+
describe VagrantPlugins::Adam::Action::PreProvisionScript do
|
5
|
+
let(:app) { lambda { |_env| } }
|
6
|
+
let(:env) { { machine: machine, tmp_path: ['/vagrant/'], ui: ui } }
|
7
|
+
let(:ui) do
|
8
|
+
double('ui').tap { |_ui| machine.stub(config: config, communicate: communicate, info: info) }
|
9
|
+
end
|
10
|
+
let(:info) { double('info') }
|
11
|
+
let(:vm) { true }
|
12
|
+
let(:machine) do
|
13
|
+
double('machine').tap { |machine| machine.stub(config: config, communicate: communicate) }
|
14
|
+
end
|
15
|
+
let(:communicate) do
|
16
|
+
double('communicate').tap { |machine| machine.stub(upload: upload) }
|
17
|
+
end
|
18
|
+
let(:upload) do
|
19
|
+
double('upload')
|
20
|
+
end
|
21
|
+
let(:config) do
|
22
|
+
double('config').tap { |config| config.stub(adam: adam, vm: vm) }
|
23
|
+
end
|
24
|
+
let(:vm) do
|
25
|
+
double('vm').tap { |config| config.stub(guest: 'guest') }
|
26
|
+
end
|
27
|
+
let(:adam) do
|
28
|
+
double('adam').tap { |config| config.stub(:finalize! => true, :provision_url => '/tmp/config.sh') }
|
29
|
+
end
|
30
|
+
|
31
|
+
describe '#initialize' do
|
32
|
+
subject { described_class.new(app, env) }
|
33
|
+
it { should be_a described_class }
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#call' do
|
37
|
+
context 'when called' do
|
38
|
+
subject(:pre_provision_script) { described_class.new(app, env) }
|
39
|
+
it 'should fetch the script, then run it' do
|
40
|
+
pre_provision_script.should_receive(:fetch_or_create_pre_provision_script).with(env)
|
41
|
+
pre_provision_script.should_receive(:run_provision_script).with(env)
|
42
|
+
pre_provision_script.call(env)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe VagrantPlugins::Adam::Config do
|
4
|
+
let(:machine) { double('machine') }
|
5
|
+
let(:instance) { described_class.new }
|
6
|
+
|
7
|
+
subject(:config) do
|
8
|
+
instance.tap do |o|
|
9
|
+
o.provision_url = provision_url if defined?(provision_url)
|
10
|
+
o.finalize!
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'defaults' do
|
15
|
+
its(:provision_url) { should be_nil }
|
16
|
+
end
|
17
|
+
|
18
|
+
describe 'setting `provision_url` as a url' do
|
19
|
+
let(:provision_url) { 'http://somepath.com/install.sh' }
|
20
|
+
its(:provision_url) { should eq('http://somepath.com/install.sh') }
|
21
|
+
end
|
22
|
+
|
23
|
+
describe 'setting `provision_url` as a url' do
|
24
|
+
let(:provision_url) { '/tmp/cool_script.sh' }
|
25
|
+
its(:provision_url) { should eq('/tmp/cool_script.sh') }
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'validate' do
|
29
|
+
it 'should be no-op' do
|
30
|
+
expect(subject.validate(machine)).to eq('VagrantPlugins::Adam::Config' => [])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe '#validate!' do
|
35
|
+
describe 'provision_url validation' do
|
36
|
+
{
|
37
|
+
'http://somepath.com/install.sh' => {
|
38
|
+
description: 'valid provision_url http URL string',
|
39
|
+
valid: true
|
40
|
+
},
|
41
|
+
'https://somepath.com/install.sh' => {
|
42
|
+
description: 'valid provision_url http URL string',
|
43
|
+
valid: true
|
44
|
+
},
|
45
|
+
"#{support_path('/scripts/hello_world.sh')}" => {
|
46
|
+
description: 'valid provision_url Path string',
|
47
|
+
valid: true
|
48
|
+
},
|
49
|
+
'/file_does_not_exist/foz.sh' => {
|
50
|
+
description: 'invalid provision_url URL string',
|
51
|
+
valid: false
|
52
|
+
},
|
53
|
+
'ttp:||fake.ziz' => {
|
54
|
+
description: 'invalid provision_url path string',
|
55
|
+
valid: false
|
56
|
+
}
|
57
|
+
}.each_pair do |version_string, opts|
|
58
|
+
context "#{opts[:description]}: #{version_string}" do
|
59
|
+
let(:provision_url) { version_string }
|
60
|
+
if opts[:valid]
|
61
|
+
it 'passes' do
|
62
|
+
expect { subject.validate!(machine) }.to_not raise_error
|
63
|
+
end
|
64
|
+
else
|
65
|
+
it 'fails' do
|
66
|
+
expect { subject.validate!(machine) }.to raise_error(Vagrant::Errors::ConfigInvalid)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
|
3
|
+
describe VagrantPlugins::Adam::Plugin do
|
4
|
+
|
5
|
+
context 'action hooks' do
|
6
|
+
let(:hook) { double(append: true, prepend: true) }
|
7
|
+
let(:fake_class) { Class.new }
|
8
|
+
|
9
|
+
it 'should hook PreProvisionScript before SyncedFolders' do
|
10
|
+
stub_const('VagrantPlugins::Omnibus::Action::InstallChef', fake_class)
|
11
|
+
hook_proc = described_class.components.action_hooks[:__all_actions__][0]
|
12
|
+
hook = double
|
13
|
+
expect(hook).to receive(:after).with(Vagrant::Action::Builtin::SyncedFolders, VagrantPlugins::Adam::Action::PreProvisionScript)
|
14
|
+
hook_proc.call(hook)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should define a config of type :adam' do
|
19
|
+
default_config = described_class.components.configs[:top].to_hash[:"adam"]
|
20
|
+
expect(default_config).to be(VagrantPlugins::Adam::Config)
|
21
|
+
end
|
22
|
+
|
23
|
+
describe '.check_vagrant_version' do
|
24
|
+
before :each do
|
25
|
+
stub_const('Vagrant::VERSION', '1.2.3')
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'accepts single String argument' do
|
29
|
+
expect(described_class.check_vagrant_version('~> 1.1')).to be_true
|
30
|
+
expect(described_class.check_vagrant_version('1.2')).to be_false
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'accepts an Array argument' do
|
34
|
+
expect(described_class.check_vagrant_version(['>= 1.1', '< 1.3.0.beta'])).to be_true
|
35
|
+
expect(described_class.check_vagrant_version(['>= 1.3'])).to be_false
|
36
|
+
end
|
37
|
+
|
38
|
+
it 'accepts multiple arguments' do
|
39
|
+
expect(described_class.check_vagrant_version('>= 1.0', '<= 1.3')).to be_true
|
40
|
+
expect(described_class.check_vagrant_version('~> 1.2', '>= 1.2.5')).to be_false
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '.check_vagrant_version!' do
|
45
|
+
subject { described_class.check_vagrant_version! }
|
46
|
+
let(:requirement) { '>= 1.1.0' }
|
47
|
+
let(:err_msg) { /requires Vagrant version #{Regexp.escape(requirement.inspect)}/ }
|
48
|
+
|
49
|
+
before :each do
|
50
|
+
stub_const(
|
51
|
+
'VagrantPlugins::ProxyConf::Plugin::VAGRANT_VERSION_REQUIREMENT',
|
52
|
+
requirement)
|
53
|
+
stub_const('Vagrant::VERSION', vagrant_version)
|
54
|
+
$stderr.stub(:puts)
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'on too old Vagrant version' do
|
58
|
+
let(:vagrant_version) { '1.0.9' }
|
59
|
+
it 'raises error' do
|
60
|
+
expect { subject }.to raise_error(err_msg)
|
61
|
+
end
|
62
|
+
it 'warns as stderr' do
|
63
|
+
$stderr.should_receive(:puts).with(err_msg)
|
64
|
+
expect { subject }.to raise_error(err_msg)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context 'on exact required Vagrant version' do
|
69
|
+
let(:vagrant_version) { '1.1.0' }
|
70
|
+
it 'does not raise' do
|
71
|
+
expect { subject }.not_to raise_error
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
context 'on newer Vagrant version' do
|
76
|
+
let(:vagrant_version) { '1.3.5' }
|
77
|
+
it 'does not raise' do
|
78
|
+
expect { subject }.not_to raise_error
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'vagrant-adam/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'vagrant-adam'
|
8
|
+
spec.version = VagrantPlugins::Adam::VERSION
|
9
|
+
spec.authors = ['Peter Souter']
|
10
|
+
spec.email = ['p.morsou@gmail.com']
|
11
|
+
spec.description = 'A Vagrant plugin that runs a given provision script before any other tasks. '
|
12
|
+
spec.summary = spec.description
|
13
|
+
spec.homepage = 'https://github.com/petems/vagrant-adam'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
|
+
spec.test_files = spec.files.grep(%w{^(test|spec|features)/})
|
18
|
+
spec.require_paths = ['lib']
|
19
|
+
|
20
|
+
spec.add_development_dependency 'bundler', '~> 1.3'
|
21
|
+
spec.add_development_dependency 'rake', '~> 10.1.1'
|
22
|
+
spec.add_development_dependency 'rspec', '~> 2.14.1'
|
23
|
+
spec.add_development_dependency 'rubocop', '~> 0.17.0'
|
24
|
+
spec.add_development_dependency 'coveralls', '~> 0.7.1'
|
25
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.3.1'
|
26
|
+
spec.add_development_dependency 'terminal-notifier-guard', '~> 1.5.3'
|
27
|
+
spec.add_development_dependency 'aruba', '~> 0.6.1'
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-adam
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0a
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Peter Souter
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 10.1.1
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 10.1.1
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 2.14.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 2.14.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rubocop
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.17.0
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.17.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: coveralls
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.7.1
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 0.7.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard-rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 4.3.1
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 4.3.1
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: terminal-notifier-guard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: 1.5.3
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: 1.5.3
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: aruba
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.6.1
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.6.1
|
125
|
+
description: 'A Vagrant plugin that runs a given provision script before any other
|
126
|
+
tasks. '
|
127
|
+
email:
|
128
|
+
- p.morsou@gmail.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".gitignore"
|
134
|
+
- ".rubocop.yml"
|
135
|
+
- ".ruby-version"
|
136
|
+
- ".travis.yml"
|
137
|
+
- ".yardopts"
|
138
|
+
- CONTRIBUTING.md
|
139
|
+
- Gemfile
|
140
|
+
- Guardfile
|
141
|
+
- LICENSE.md
|
142
|
+
- README.md
|
143
|
+
- Rakefile
|
144
|
+
- cucumber.yml
|
145
|
+
- features/step_definitions/steps.rb
|
146
|
+
- features/support/env.rb
|
147
|
+
- features/vagrant-adam/basic_local_file.feature
|
148
|
+
- features/vagrant-adam/environment_variable_file.feature
|
149
|
+
- features/vagrant-adam/validations.feature
|
150
|
+
- lib/vagrant-adam.rb
|
151
|
+
- lib/vagrant-adam/action/pre_provision_script.rb
|
152
|
+
- lib/vagrant-adam/config.rb
|
153
|
+
- lib/vagrant-adam/plugin.rb
|
154
|
+
- lib/vagrant-adam/version.rb
|
155
|
+
- locales/en.yml
|
156
|
+
- spec/support/scripts/hello_world.sh
|
157
|
+
- spec/unit/spec_helper.rb
|
158
|
+
- spec/unit/vagrant-puppet-install/action/pre_provision_script_spec.rb
|
159
|
+
- spec/unit/vagrant-puppet-install/config_spec.rb
|
160
|
+
- spec/unit/vagrant-puppet-install/plugin_spec.rb
|
161
|
+
- vagrant-adam.gemspec
|
162
|
+
homepage: https://github.com/petems/vagrant-adam
|
163
|
+
licenses:
|
164
|
+
- MIT
|
165
|
+
metadata: {}
|
166
|
+
post_install_message:
|
167
|
+
rdoc_options: []
|
168
|
+
require_paths:
|
169
|
+
- lib
|
170
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
171
|
+
requirements:
|
172
|
+
- - ">="
|
173
|
+
- !ruby/object:Gem::Version
|
174
|
+
version: '0'
|
175
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
176
|
+
requirements:
|
177
|
+
- - ">"
|
178
|
+
- !ruby/object:Gem::Version
|
179
|
+
version: 1.3.1
|
180
|
+
requirements: []
|
181
|
+
rubyforge_project:
|
182
|
+
rubygems_version: 2.4.1
|
183
|
+
signing_key:
|
184
|
+
specification_version: 4
|
185
|
+
summary: A Vagrant plugin that runs a given provision script before any other tasks.
|
186
|
+
test_files: []
|
187
|
+
has_rdoc:
|