vagrant-s3auth 0.0.1
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 +4 -0
- data/.rubocop.yml +20 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +58 -0
- data/LICENSE +3 -0
- data/README.md +181 -0
- data/Rakefile +6 -0
- data/lib/vagrant-s3auth.rb +14 -0
- data/lib/vagrant-s3auth/action.rb +14 -0
- data/lib/vagrant-s3auth/action/authenticate_box_url.rb +86 -0
- data/lib/vagrant-s3auth/action/box_add.rb +41 -0
- data/lib/vagrant-s3auth/errors.rb +15 -0
- data/lib/vagrant-s3auth/plugin.rb +53 -0
- data/lib/vagrant-s3auth/version.rb +5 -0
- data/locales/en.yml +10 -0
- data/vagrant-s3auth.gemspec +20 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8bd07d8c67e818f8b050629b918f2939c85d6b43
|
4
|
+
data.tar.gz: 1439d1a6f47f937886bd861affe61a38c49bee2a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e6d3178aca6715909b44ba0e548045e3c70e752ca0ce81b8894214ac6d15ebe6612aeb85b1c35e6caffb089771b5a654c0098354ea36a31c990f3f060774c7a6
|
7
|
+
data.tar.gz: 1f79b0b7fb583e0f627ac3b6dd80bde532aab476bb80b1f42e9072a09c42842b2dd874291c81479442edd202fc46fecaf9683cddc33429020e1d0726b7509266
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
AlignParameters:
|
2
|
+
Enabled: false
|
3
|
+
|
4
|
+
AssignmentInCondition:
|
5
|
+
Enabled: false
|
6
|
+
|
7
|
+
Documentation:
|
8
|
+
Enabled: false
|
9
|
+
|
10
|
+
LineLength:
|
11
|
+
Max: 100
|
12
|
+
|
13
|
+
MethodLength:
|
14
|
+
CountComments: false # count full line comments?
|
15
|
+
Max: 20
|
16
|
+
|
17
|
+
SignalException:
|
18
|
+
EnforcedStyle: only_raise
|
19
|
+
SupportedStyles:
|
20
|
+
- only_raise
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/mitchellh/vagrant.git
|
3
|
+
revision: b97c509c15d94ee70af8ce25739934c5dccb7452
|
4
|
+
specs:
|
5
|
+
vagrant (1.5.3.dev)
|
6
|
+
bundler (~> 1.5.2)
|
7
|
+
childprocess (~> 0.5.0)
|
8
|
+
erubis (~> 2.7.0)
|
9
|
+
i18n (~> 0.6.0)
|
10
|
+
listen (~> 2.7.1)
|
11
|
+
log4r (~> 1.1.9, < 1.1.11)
|
12
|
+
net-scp (~> 1.1.0)
|
13
|
+
net-ssh (>= 2.6.6, < 2.8.0)
|
14
|
+
rb-kqueue (~> 0.2.0)
|
15
|
+
wdm (~> 0.1.0)
|
16
|
+
|
17
|
+
PATH
|
18
|
+
remote: .
|
19
|
+
specs:
|
20
|
+
vagrant-s3auth (0.0.1)
|
21
|
+
|
22
|
+
GEM
|
23
|
+
remote: https://rubygems.org/
|
24
|
+
specs:
|
25
|
+
celluloid (0.15.2)
|
26
|
+
timers (~> 1.1.0)
|
27
|
+
celluloid-io (0.15.0)
|
28
|
+
celluloid (>= 0.15.0)
|
29
|
+
nio4r (>= 0.5.0)
|
30
|
+
childprocess (0.5.2)
|
31
|
+
ffi (~> 1.0, >= 1.0.11)
|
32
|
+
erubis (2.7.0)
|
33
|
+
ffi (1.9.3)
|
34
|
+
i18n (0.6.9)
|
35
|
+
listen (2.7.1)
|
36
|
+
celluloid (>= 0.15.2)
|
37
|
+
celluloid-io (>= 0.15.0)
|
38
|
+
rb-fsevent (>= 0.9.3)
|
39
|
+
rb-inotify (>= 0.9)
|
40
|
+
log4r (1.1.10)
|
41
|
+
net-scp (1.1.2)
|
42
|
+
net-ssh (>= 2.6.5)
|
43
|
+
net-ssh (2.7.0)
|
44
|
+
nio4r (1.0.0)
|
45
|
+
rb-fsevent (0.9.4)
|
46
|
+
rb-inotify (0.9.3)
|
47
|
+
ffi (>= 0.5.0)
|
48
|
+
rb-kqueue (0.2.2)
|
49
|
+
ffi (>= 0.5.0)
|
50
|
+
timers (1.1.0)
|
51
|
+
wdm (0.1.0)
|
52
|
+
|
53
|
+
PLATFORMS
|
54
|
+
ruby
|
55
|
+
|
56
|
+
DEPENDENCIES
|
57
|
+
vagrant!
|
58
|
+
vagrant-s3auth!
|
data/LICENSE
ADDED
data/README.md
ADDED
@@ -0,0 +1,181 @@
|
|
1
|
+
# vagrant-s3auth
|
2
|
+
|
3
|
+
Private, versioned Vagrant boxes hosted on Amazon S3.
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
From the command line:
|
8
|
+
|
9
|
+
```bash
|
10
|
+
$ vagrant plugin install vagrant-s3auth
|
11
|
+
```
|
12
|
+
|
13
|
+
### Requirements
|
14
|
+
|
15
|
+
* [Vagrant][vagrant], v1.5.0+
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
vagrant-s3auth will automatically convert S3 box URLs
|
20
|
+
|
21
|
+
```
|
22
|
+
s3://bucket.example.com/path/to/metadata
|
23
|
+
```
|
24
|
+
|
25
|
+
to URLs [signed with your AWS access key][aws-signed]:
|
26
|
+
|
27
|
+
```
|
28
|
+
https://s3.amazonaws.com/bucket.example.com/path/to/metadata?AWSAccessKeyId=
|
29
|
+
AKIAIOSFODNN7EXAMPLE&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv4%3D
|
30
|
+
```
|
31
|
+
|
32
|
+
This means you can host your team's sensitive, private boxes on S3, and use your
|
33
|
+
developers' existing AWS credentials to securely grant access.
|
34
|
+
|
35
|
+
If you've already got your credentials stored in the appropriate environment
|
36
|
+
variables:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
# Vagrantfile
|
40
|
+
|
41
|
+
Vagrant.configure('2') do |config|
|
42
|
+
config.vm.box = 'simple-secrets'
|
43
|
+
config.vm.box_url = 's3://example.com/secret.box'
|
44
|
+
end
|
45
|
+
```
|
46
|
+
|
47
|
+
### Configuration
|
48
|
+
|
49
|
+
#### AWS credentials
|
50
|
+
|
51
|
+
AWS credentials are read from the standard environment variables
|
52
|
+
`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`.
|
53
|
+
|
54
|
+
If you need to obtain credentials from elsewhere, drop a block like the
|
55
|
+
following at the top of your Vagrantfile:
|
56
|
+
|
57
|
+
```ruby
|
58
|
+
creds = File.read(File.expand_path('~/.company-aws-creds')).lines
|
59
|
+
ENV['AWS_ACCESS_KEY_ID'] = creds[0]
|
60
|
+
ENV['AWS_SECRET_ACCESS_KEY'] = creds[1]
|
61
|
+
```
|
62
|
+
|
63
|
+
|
64
|
+
#### Simple boxes
|
65
|
+
|
66
|
+
Simply point your `box_url` at Amazon S3:
|
67
|
+
|
68
|
+
```ruby
|
69
|
+
Vagrant.configure('2') do |config|
|
70
|
+
config.vm.box = 'simple-secrets'
|
71
|
+
config.vm.box_url = 'https://s3.amazonaws.com/bucket.example.com/secret.box'
|
72
|
+
end
|
73
|
+
```
|
74
|
+
|
75
|
+
Note that your URL must be of the form
|
76
|
+
|
77
|
+
```
|
78
|
+
https://s3.amazonaws.com/bucket/resource
|
79
|
+
```
|
80
|
+
|
81
|
+
Other valid forms of S3 URLs (`bucket.s3.amazonaws.com/resource.box`, etc.) will
|
82
|
+
not be detected by vagrant-s3auth.
|
83
|
+
|
84
|
+
As shorthand, `s3://` URLs will be automatically transformed. This is equivalent
|
85
|
+
to the above:
|
86
|
+
|
87
|
+
```ruby
|
88
|
+
Vagrant.configure('2') do |config|
|
89
|
+
config.vm.box = 'simple-secrets'
|
90
|
+
config.vm.box_url = 's3://example.com/secret.box'
|
91
|
+
end
|
92
|
+
```
|
93
|
+
|
94
|
+
**Note:** Simple box URLs must end in `.box`, or they'll be interpreted as
|
95
|
+
[metadata boxes](#metadata-boxes).
|
96
|
+
|
97
|
+
#### Vagrant Cloud
|
98
|
+
|
99
|
+
Boxes on [Vagrant Cloud][vagrant-cloud] have support for versioning, multiple
|
100
|
+
providers, and a GUI management tool. If you've got a box version on Vagrant
|
101
|
+
Cloud.
|
102
|
+
|
103
|
+
Then just configure your Vagrantfile like normal:
|
104
|
+
|
105
|
+
```ruby
|
106
|
+
Vagrant.configure('2') do |config|
|
107
|
+
config.vm.box = 'examplecorp/secrets'
|
108
|
+
end
|
109
|
+
```
|
110
|
+
|
111
|
+
#### Metadata boxes
|
112
|
+
|
113
|
+
[Metadata boxes][metadata-boxes] were added to Vagrant in 1.5 and power Vagrant
|
114
|
+
Cloud. You can host your own metadata and bypass Vagrant Cloud entirely.
|
115
|
+
|
116
|
+
Essentially, you point your `box_url` at a [JSON metadata file][metadata-boxes]
|
117
|
+
that tells Vagrant where to find all possible versions:
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
# Vagrantfile
|
121
|
+
|
122
|
+
Vagrant.configure('2') do |config|
|
123
|
+
config.vm.box = 'examplecorp/secrets'
|
124
|
+
config.vm.box_url = 's3://example.com/secrets'
|
125
|
+
end
|
126
|
+
```
|
127
|
+
|
128
|
+
```json
|
129
|
+
"s3://example.com/secrets"
|
130
|
+
|
131
|
+
{
|
132
|
+
"name": "examplecorp/secrets",
|
133
|
+
"description": "This box contains company secrets.",
|
134
|
+
"versions": [{
|
135
|
+
"version": "0.1.0",
|
136
|
+
"providers": [{
|
137
|
+
"name": "virtualbox",
|
138
|
+
"url": "https://s3.amazonaws.com/example.com/secrets.box",
|
139
|
+
"checksum_type": "sha1",
|
140
|
+
"checksum": "foo"
|
141
|
+
}]
|
142
|
+
}]
|
143
|
+
}
|
144
|
+
```
|
145
|
+
|
146
|
+
**Note:** box URLs in metadata JSON must use the
|
147
|
+
`s3.amazonaws.com/bucket.example.com/resource.box` URL form, or it won't get
|
148
|
+
auto-signed.
|
149
|
+
|
150
|
+
### Rules
|
151
|
+
|
152
|
+
To sum up:
|
153
|
+
|
154
|
+
* Only the `box_url` setting can use the `s3://` shorthand. URLs entered on the
|
155
|
+
Vagrant Cloud management interface and in JSON metadata must use the full
|
156
|
+
HTTPS URL.
|
157
|
+
|
158
|
+
* The full HTTPS URL must be of the form
|
159
|
+
`https://s3.amazonaws.com/bucket.example.com/resource.box`, or it won't be
|
160
|
+
signed properly.
|
161
|
+
|
162
|
+
* Metadata box files must *not* end in `.box`.
|
163
|
+
|
164
|
+
* Actual box files *must* end in `.box`.
|
165
|
+
|
166
|
+
### Auto-install
|
167
|
+
|
168
|
+
The beauty of Vagrant is the magic of "`vagrant up` and done." Making your users
|
169
|
+
install a plugin is lame.
|
170
|
+
|
171
|
+
But wait! Just stick some shell in your Vagrantfile:
|
172
|
+
|
173
|
+
```ruby
|
174
|
+
%x(vagrant plugin install vagrant-s3auth) unless Vagrant.has_plugin?('vagrant-s3auth')
|
175
|
+
```
|
176
|
+
|
177
|
+
|
178
|
+
[aws-signed]: http://docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html#RESTAuthenticationQueryStringAuth
|
179
|
+
[metadata-boxes]: http://docs.vagrantup.com/v2/boxes/format.html
|
180
|
+
[vagrant]: http://vagrantup.com
|
181
|
+
[vagrant-cloud]: http://vagrantcloud.com
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
|
3
|
+
require 'vagrant-s3auth/plugin'
|
4
|
+
|
5
|
+
module VagrantPlugins
|
6
|
+
module S3Auth
|
7
|
+
S3_HOST = 's3.amazonaws.com'
|
8
|
+
BOX_URL_MATCHER = %r{^s3://(?<bucket>[[:alnum:]\-\.]+)(?<resource>.*)/?}
|
9
|
+
|
10
|
+
def self.source_root
|
11
|
+
@source_root ||= Pathname.new(File.expand_path('../../', __FILE__))
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require_relative 'action/authenticate_box_url'
|
2
|
+
require_relative 'action/box_add'
|
3
|
+
|
4
|
+
module VagrantPlugins
|
5
|
+
module S3Auth
|
6
|
+
module Action
|
7
|
+
def self.authenticate_box_url
|
8
|
+
Vagrant::Action::Builder.new.tap do |b|
|
9
|
+
b.use AuthenticateBoxUrl
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'base64'
|
2
|
+
require 'cgi'
|
3
|
+
require 'log4r'
|
4
|
+
require 'openssl'
|
5
|
+
require 'uri'
|
6
|
+
|
7
|
+
module VagrantPlugins
|
8
|
+
module S3Auth
|
9
|
+
module Action
|
10
|
+
class AuthenticateBoxUrl
|
11
|
+
def initialize(app, env)
|
12
|
+
@app = app
|
13
|
+
@logger = Log4r::Logger.new('vagrant_s3auth::action::authenticate_box_url')
|
14
|
+
@access_key = ENV['AWS_ACCESS_KEY_ID']
|
15
|
+
@secret_key = ENV['AWS_SECRET_ACCESS_KEY']
|
16
|
+
end
|
17
|
+
|
18
|
+
def call(env)
|
19
|
+
env[:box_urls].map! do |url_string|
|
20
|
+
begin
|
21
|
+
url = URI.parse(url_string)
|
22
|
+
rescue URI::InvalidURIError
|
23
|
+
next url_string
|
24
|
+
end
|
25
|
+
|
26
|
+
unless s3_url?(url)
|
27
|
+
@logger.debug("Skipping non-S3 host: #{url}")
|
28
|
+
next url_string
|
29
|
+
end
|
30
|
+
|
31
|
+
# Vagrant makes a HEAD request for metadata. S3 doesn't support
|
32
|
+
# query-string authentication on HEAD requests, so skip signing. We
|
33
|
+
# need to provide a different "authenticated" URL, though, or
|
34
|
+
# Vagrant will think the box doesn't require authentication,
|
35
|
+
# and won't request an authenticated URL for the box itself.
|
36
|
+
unless box_url?(url)
|
37
|
+
@logger.debug("Munging S3 metadata URL: #{url}")
|
38
|
+
next url_string + '?'
|
39
|
+
end
|
40
|
+
|
41
|
+
@logger.info("Signing URL for S3 box: #{url}")
|
42
|
+
sign(url)
|
43
|
+
end
|
44
|
+
|
45
|
+
@app.call(env)
|
46
|
+
end
|
47
|
+
|
48
|
+
def sign(url)
|
49
|
+
ensure_credentials
|
50
|
+
|
51
|
+
expires = (Time.now + 20).to_i
|
52
|
+
message = "GET\n\n\n#{expires}\n#{url.path}"
|
53
|
+
signature = CGI.escape(Base64.strict_encode64(
|
54
|
+
OpenSSL::HMAC.digest('sha1', @secret_key, message)))
|
55
|
+
|
56
|
+
url.query = {
|
57
|
+
'AWSAccessKeyId' => @access_key,
|
58
|
+
'Expires' => expires,
|
59
|
+
'Signature' => signature
|
60
|
+
}.map { |k, v| "#{k}=#{v}" }.join('&')
|
61
|
+
|
62
|
+
url.to_s
|
63
|
+
end
|
64
|
+
|
65
|
+
def ensure_credentials
|
66
|
+
missing_variables = []
|
67
|
+
missing_variables << 'AWS_ACCESS_KEY_ID' unless @access_key
|
68
|
+
missing_variables << 'AWS_SECRET_ACCESS_KEY' unless @secret_key
|
69
|
+
|
70
|
+
unless missing_variables.empty?
|
71
|
+
raise Errors::MissingCredentialsError,
|
72
|
+
missing_variables: missing_variables.join(', ')
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def s3_url?(url)
|
77
|
+
url.host == S3_HOST
|
78
|
+
end
|
79
|
+
|
80
|
+
def box_url?(url)
|
81
|
+
url.path.end_with?('.box')
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
3
|
+
module Vagrant
|
4
|
+
module Action
|
5
|
+
module Builtin
|
6
|
+
class BoxAdd
|
7
|
+
def call_with_s3(env)
|
8
|
+
box_url = env[:box_url]
|
9
|
+
|
10
|
+
# Non-iterable box_urls are Vagrant Cloud boxes, which we don't need
|
11
|
+
# to handle.
|
12
|
+
if box_url.respond_to?(:map!)
|
13
|
+
box_url.map! do |url|
|
14
|
+
if matched = VagrantPlugins::S3Auth::BOX_URL_MATCHER.match(url)
|
15
|
+
@logger.info('Transforming S3 box URL: #{url}')
|
16
|
+
s3_url(matched[:bucket], matched[:resource])
|
17
|
+
else
|
18
|
+
@logger.info("Not transforming non-S3 box: #{url}")
|
19
|
+
url
|
20
|
+
end
|
21
|
+
end
|
22
|
+
else
|
23
|
+
@logger.debug('Box URL #{box_url.inspect} looks like a Vagrant "
|
24
|
+
Cloud box, skipping S3 transformation...')
|
25
|
+
end
|
26
|
+
|
27
|
+
call_without_s3(env)
|
28
|
+
end
|
29
|
+
|
30
|
+
def s3_url(bucket, resource)
|
31
|
+
URI::HTTPS.build(
|
32
|
+
host: VagrantPlugins::S3Auth::S3_HOST,
|
33
|
+
path: File.join('/', bucket, resource)).to_s
|
34
|
+
end
|
35
|
+
|
36
|
+
alias_method :call_without_s3, :call
|
37
|
+
alias_method :call, :call_with_s3
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'vagrant'
|
2
|
+
|
3
|
+
module VagrantPlugins
|
4
|
+
module S3Auth
|
5
|
+
module Errors
|
6
|
+
class VagrantS3AuthError < Vagrant::Errors::VagrantError
|
7
|
+
error_namespace('vagrant_s3auth.errors')
|
8
|
+
end
|
9
|
+
|
10
|
+
class MissingCredentialsError < VagrantS3AuthError
|
11
|
+
error_key(:missing_credentials)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
begin
|
2
|
+
require 'vagrant'
|
3
|
+
rescue LoadError
|
4
|
+
raise 'The Vagrant S3Auth plugin must be run within Vagrant.'
|
5
|
+
end
|
6
|
+
|
7
|
+
if Vagrant::VERSION < '1.5.0'
|
8
|
+
raise 'The Vagrant AWS plugin is only compatible with Vagrant 1.5+'
|
9
|
+
end
|
10
|
+
|
11
|
+
require_relative 'action'
|
12
|
+
require_relative 'errors'
|
13
|
+
|
14
|
+
module VagrantPlugins
|
15
|
+
module S3Auth
|
16
|
+
class Plugin < Vagrant.plugin(2)
|
17
|
+
name 's3auth'
|
18
|
+
|
19
|
+
description <<-DESC
|
20
|
+
Use versioned Vagrant boxes with S3 authentication.
|
21
|
+
DESC
|
22
|
+
|
23
|
+
action_hook 'authenticate-box-url', :authenticate_box_url do |hook|
|
24
|
+
setup_i18n
|
25
|
+
setup_logging
|
26
|
+
|
27
|
+
hook.append(Action.authenticate_box_url)
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.setup_i18n
|
31
|
+
I18n.load_path << File.expand_path('locales/en.yml', VagrantPlugins::S3Auth.source_root)
|
32
|
+
I18n.reload!
|
33
|
+
end
|
34
|
+
|
35
|
+
def self.setup_logging
|
36
|
+
require 'log4r'
|
37
|
+
|
38
|
+
level = nil
|
39
|
+
begin
|
40
|
+
level = Log4r.const_get(ENV['VAGRANT_LOG'].upcase)
|
41
|
+
rescue NameError
|
42
|
+
level = nil
|
43
|
+
end
|
44
|
+
|
45
|
+
if level
|
46
|
+
logger = Log4r::Logger.new('vagrant_s3auth')
|
47
|
+
logger.outputters = Log4r::Outputter.stderr
|
48
|
+
logger.level = level
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/locales/en.yml
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
|
2
|
+
|
3
|
+
require 'vagrant-s3auth/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'vagrant-s3auth'
|
7
|
+
spec.version = VagrantPlugins::S3Auth::VERSION
|
8
|
+
spec.authors = ['Nikhil Benesch']
|
9
|
+
spec.email = ['benesch@whoop.com']
|
10
|
+
spec.summary = 'Private, versioned Vagrant boxes hosted on Amazon S3.'
|
11
|
+
spec.homepage = 'https://github.com/WhoopInc/vagrant-s3auth'
|
12
|
+
spec.license = 'All rights reserved'
|
13
|
+
|
14
|
+
spec.files = `git ls-files -z`.split("\x0")
|
15
|
+
spec.test_files = spec.files.grep(/spec/)
|
16
|
+
spec.require_paths = ['lib']
|
17
|
+
|
18
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
19
|
+
spec.add_development_dependency 'rake'
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vagrant-s3auth
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nikhil Benesch
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-04-11 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.5'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.5'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- benesch@whoop.com
|
44
|
+
executables: []
|
45
|
+
extensions: []
|
46
|
+
extra_rdoc_files: []
|
47
|
+
files:
|
48
|
+
- .gitignore
|
49
|
+
- .rubocop.yml
|
50
|
+
- Gemfile
|
51
|
+
- Gemfile.lock
|
52
|
+
- LICENSE
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- lib/vagrant-s3auth.rb
|
56
|
+
- lib/vagrant-s3auth/action.rb
|
57
|
+
- lib/vagrant-s3auth/action/authenticate_box_url.rb
|
58
|
+
- lib/vagrant-s3auth/action/box_add.rb
|
59
|
+
- lib/vagrant-s3auth/errors.rb
|
60
|
+
- lib/vagrant-s3auth/plugin.rb
|
61
|
+
- lib/vagrant-s3auth/version.rb
|
62
|
+
- locales/en.yml
|
63
|
+
- vagrant-s3auth.gemspec
|
64
|
+
homepage: https://github.com/WhoopInc/vagrant-s3auth
|
65
|
+
licenses:
|
66
|
+
- All rights reserved
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - '>='
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: '0'
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.0.14
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: Private, versioned Vagrant boxes hosted on Amazon S3.
|
88
|
+
test_files:
|
89
|
+
- vagrant-s3auth.gemspec
|