dev-vault 0.5.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +9 -0
- data/.rubocop.yml +23 -0
- data/.travis.yml +4 -0
- data/Gemfile +4 -0
- data/LICENSE +19 -0
- data/README.md +59 -0
- data/Rakefile +20 -0
- data/bin/vault_0.5.2_darwin_386 +0 -0
- data/bin/vault_0.5.2_darwin_amd64 +0 -0
- data/bin/vault_0.5.2_freebsd_386 +0 -0
- data/bin/vault_0.5.2_freebsd_amd64 +0 -0
- data/bin/vault_0.5.2_freebsd_arm +0 -0
- data/bin/vault_0.5.2_linux_386 +0 -0
- data/bin/vault_0.5.2_linux_amd64 +0 -0
- data/bin/vault_0.5.2_linux_arm +0 -0
- data/dev-vault.gemspec +27 -0
- data/lib/dev/vault/build.rb +54 -0
- data/lib/dev/vault/version.rb +5 -0
- data/lib/dev/vault.rb +125 -0
- metadata +106 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3d012554f26c1dd685c900a550f05afdeb0aceba
|
4
|
+
data.tar.gz: 220279ed96aa66f8aeb46182c6395389d8661015
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: bec5ef4030ed4fe559c9abf7d4b09ad805d3e8439c5fe6e2a0d9a88289f1a9ec40836f7b67f6bc29f2da65b3f68dd87b370a04a9d45c037bf746f5fbd768ebb0
|
7
|
+
data.tar.gz: ad7ee8e0b5e41be7f451287b8a2f863985650f13a80a283595ebcd209347fbacc04a0d0dbb917dd69548ad919f44103e3f44d695ee18e4fbaaa46bbb20965136
|
data/.gitignore
ADDED
data/.rubocop.yml
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# inherit_from: .rubocop_todo.yml
|
2
|
+
|
3
|
+
Metrics/AbcSize:
|
4
|
+
Max: 48
|
5
|
+
Metrics/CyclomaticComplexity:
|
6
|
+
Max: 24
|
7
|
+
Metrics/MethodLength:
|
8
|
+
Max: 48
|
9
|
+
Metrics/PerceivedComplexity:
|
10
|
+
Max: 12
|
11
|
+
|
12
|
+
Encoding:
|
13
|
+
Enabled: false
|
14
|
+
LineLength:
|
15
|
+
Enabled: false
|
16
|
+
HashSyntax:
|
17
|
+
Enabled: false
|
18
|
+
FileName:
|
19
|
+
Enabled: false
|
20
|
+
RescueModifier:
|
21
|
+
Enabled: false
|
22
|
+
SpaceInsideStringInterpolation:
|
23
|
+
Enabled: false
|
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
Copyright (c) 2016 Rapid7 Inc.
|
3
|
+
|
4
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
5
|
+
this software and associated documentation files (the "Software"), to deal in the
|
6
|
+
Software without restriction, including without limitation the rights to use,
|
7
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
|
8
|
+
Software, and to permit persons to whom the Software is furnished to do so,
|
9
|
+
subject to the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be included in all
|
12
|
+
copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
16
|
+
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
17
|
+
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
18
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
19
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
Dev::Vault
|
2
|
+
===========
|
3
|
+
|
4
|
+
`Dev::Vault` is a simple wrapper around the Vault binary for development and testing. It bundles all of the published Vault binaries at `Dev::Vault::VERSION` and runs the correct build for the local system.
|
5
|
+
|
6
|
+
Note that `Dev::Vault`'s version follows that of Vault.
|
7
|
+
|
8
|
+
Vault is maintained by Hashicorp. Please see https://www.vaultproject.io/ for details.
|
9
|
+
|
10
|
+
## Installation
|
11
|
+
|
12
|
+
Add this line to your application's Gemfile:
|
13
|
+
|
14
|
+
```ruby
|
15
|
+
gem 'dev-vault'
|
16
|
+
```
|
17
|
+
|
18
|
+
Or Gemspec:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
spec.add_development_dependency 'dev-vault', '0.6.4'
|
22
|
+
```
|
23
|
+
|
24
|
+
And then execute:
|
25
|
+
|
26
|
+
$ bundle install
|
27
|
+
|
28
|
+
Or install it yourself as:
|
29
|
+
|
30
|
+
$ gem install dev-vault
|
31
|
+
|
32
|
+
## Usage
|
33
|
+
|
34
|
+
Run `bundle exec rake` to launch a local instance of Vault.
|
35
|
+
|
36
|
+
To integrate into tests:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
require 'dev/vault'
|
40
|
+
|
41
|
+
RSpec.configure do |config|
|
42
|
+
config.before(:suite) do
|
43
|
+
Dev::Vault.run
|
44
|
+
|
45
|
+
## Mute output once the vault server is running
|
46
|
+
Dev::Vault.output(false)
|
47
|
+
end
|
48
|
+
|
49
|
+
config.after(:suite) do
|
50
|
+
Dev::Vault.stop
|
51
|
+
end
|
52
|
+
|
53
|
+
## ...
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
## Contributing
|
58
|
+
|
59
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/rapid7/dev-vault.
|
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require_relative './lib/dev/vault/build'
|
2
|
+
|
3
|
+
## On interupt, wait fot the Vault process to shutdown
|
4
|
+
Signal.trap('INT') do
|
5
|
+
Dev::Vault.stop
|
6
|
+
end
|
7
|
+
|
8
|
+
task :fetch do
|
9
|
+
Dev::Vault::Build.fetch
|
10
|
+
end
|
11
|
+
|
12
|
+
task :run do
|
13
|
+
Dev::Vault.run
|
14
|
+
end
|
15
|
+
|
16
|
+
task :wait do
|
17
|
+
Dev::Vault.wait
|
18
|
+
end
|
19
|
+
|
20
|
+
task :default => [:run, :wait]
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/dev-vault.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'dev/vault/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'dev-vault'
|
8
|
+
spec.version = Dev::Vault::VERSION
|
9
|
+
spec.authors = ['John Manero']
|
10
|
+
spec.email = ['jmanero@rapid7.com']
|
11
|
+
|
12
|
+
spec.summary = 'Test/development wrapper for Vault by Hashicorp'
|
13
|
+
spec.description = "dev/vault bundles all of Hashicorp's platform-specific binaries "\
|
14
|
+
'for Vault and provides helpers to detect the local platform '\
|
15
|
+
'and run the right build.'
|
16
|
+
spec.homepage = 'https://github.com/rapid7/dev-vault'
|
17
|
+
spec.license = 'MIT'
|
18
|
+
|
19
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
20
|
+
spec.bindir = 'bin'
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ['lib']
|
23
|
+
|
24
|
+
spec.add_development_dependency 'zipruby', '~> 0.3'
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.11'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative '../vault'
|
2
|
+
|
3
|
+
require 'net/http'
|
4
|
+
require 'uri'
|
5
|
+
|
6
|
+
begin
|
7
|
+
require 'zipruby'
|
8
|
+
rescue LoadError
|
9
|
+
puts 'To use Dev::Vault::Build, you must install the zipruby gem!'
|
10
|
+
end
|
11
|
+
|
12
|
+
module Dev
|
13
|
+
module Vault
|
14
|
+
##
|
15
|
+
# Tools to fetch and extract Hashicorp's platform builds of Vault
|
16
|
+
##
|
17
|
+
module Build
|
18
|
+
REPOSITORY = "https://releases.hashicorp.com/vault/#{VERSION}".freeze
|
19
|
+
PACKAGES = [
|
20
|
+
"vault_#{VERSION}_darwin_386.zip",
|
21
|
+
"vault_#{VERSION}_darwin_amd64.zip",
|
22
|
+
"vault_#{VERSION}_freebsd_386.zip",
|
23
|
+
"vault_#{VERSION}_freebsd_amd64.zip",
|
24
|
+
"vault_#{VERSION}_freebsd_arm.zip",
|
25
|
+
"vault_#{VERSION}_linux_386.zip",
|
26
|
+
"vault_#{VERSION}_linux_amd64.zip",
|
27
|
+
"vault_#{VERSION}_linux_arm.zip"
|
28
|
+
].freeze
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def fetch
|
32
|
+
uri = URI.parse(REPOSITORY)
|
33
|
+
client = Net::HTTP.new(uri.host, uri.port)
|
34
|
+
client.use_ssl = true if uri.scheme == 'https'
|
35
|
+
|
36
|
+
PACKAGES.each do |package|
|
37
|
+
puts "Fetch #{File.join(uri.path, package)}"
|
38
|
+
request = Net::HTTP::Get.new(File.join(uri.path, package))
|
39
|
+
|
40
|
+
client.request(request) do |response|
|
41
|
+
Zip::Archive.open_buffer(response.body) do |archive|
|
42
|
+
archive.each do |file|
|
43
|
+
next unless file.name == 'vault'
|
44
|
+
|
45
|
+
open(File.join(Vault.bindir, File.basename(package, '.zip')), 'wb', 00755) { |io| io.write(file.read) }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/dev/vault.rb
ADDED
@@ -0,0 +1,125 @@
|
|
1
|
+
require_relative './vault/version'
|
2
|
+
|
3
|
+
require 'json'
|
4
|
+
require 'net/http'
|
5
|
+
require 'securerandom'
|
6
|
+
|
7
|
+
module Dev
|
8
|
+
##
|
9
|
+
# Helpers to fetch and run a development-instance of vault
|
10
|
+
##
|
11
|
+
module Vault
|
12
|
+
class << self
|
13
|
+
def bindir
|
14
|
+
File.expand_path('../../bin', __dir__)
|
15
|
+
end
|
16
|
+
|
17
|
+
def architecture
|
18
|
+
case RUBY_PLATFORM
|
19
|
+
when /x86_64/ then 'amd64'
|
20
|
+
when /amd64/ then 'amd64'
|
21
|
+
when /386/ then '386'
|
22
|
+
when /arm/ then 'arm'
|
23
|
+
else raise NameError, "Unable to detect system architecture for #{RUBY_PLATFORM}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def platform
|
28
|
+
case RUBY_PLATFORM
|
29
|
+
when /darwin/ then 'darwin'
|
30
|
+
when /freebsd/ then 'freebsd'
|
31
|
+
when /linux/ then 'linux'
|
32
|
+
else raise NameError, "Unable to detect system platfrom for #{RUBY_PLATFORM}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def bin
|
37
|
+
File.join(bindir, "vault_#{VERSION}_#{platform}_#{architecture}")
|
38
|
+
end
|
39
|
+
|
40
|
+
def token
|
41
|
+
@token ||= SecureRandom.uuid
|
42
|
+
end
|
43
|
+
|
44
|
+
def mount(name)
|
45
|
+
post = Net::HTTP::Post.new("/v1/sys/mounts/#{name}")
|
46
|
+
post.body = JSON.generate(:type => name)
|
47
|
+
post['X-Vault-Token'] = token
|
48
|
+
|
49
|
+
Net::HTTP.new('localhost', 8200).request(post)
|
50
|
+
end
|
51
|
+
|
52
|
+
def output(arg = nil)
|
53
|
+
@thread[:output] = arg unless @thread.nil? || arg.nil?
|
54
|
+
@thread[:output] unless @thread.nil?
|
55
|
+
end
|
56
|
+
|
57
|
+
def run
|
58
|
+
puts "Starting #{bin}"
|
59
|
+
|
60
|
+
## Fork a child process for Vault from a thread
|
61
|
+
@thread = Thread.new do
|
62
|
+
IO.popen(%(#{bin} server -dev -dev-root-token-id="#{token}"), 'r+') do |io|
|
63
|
+
Thread.current[:process] = io.pid
|
64
|
+
puts "Started #{bin} (#{io.pid})"
|
65
|
+
|
66
|
+
## Stream output
|
67
|
+
loop do
|
68
|
+
break if io.eof?
|
69
|
+
chunk = io.readpartial(1024)
|
70
|
+
|
71
|
+
if Thread.current[:output]
|
72
|
+
Thread.current[:output].write(chunk)
|
73
|
+
Thread.current[:output].flush
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
@thread[:output] = $stdout
|
80
|
+
|
81
|
+
## Wait for the service to become ready
|
82
|
+
loop do
|
83
|
+
begin
|
84
|
+
break if @stopped
|
85
|
+
|
86
|
+
status = Net::HTTP.get('localhost', '/v1/sys/seal-status', 8200)
|
87
|
+
status = JSON.parse(status, :symbolize_names => true)
|
88
|
+
|
89
|
+
if status[:sealed]
|
90
|
+
puts 'Waiting for Vault HTTP API to be ready'
|
91
|
+
sleep 1
|
92
|
+
|
93
|
+
next
|
94
|
+
end
|
95
|
+
|
96
|
+
puts 'Vault HTTP API is ready!'
|
97
|
+
break
|
98
|
+
|
99
|
+
rescue Errno::ECONNREFUSED, JSON::ParseError
|
100
|
+
puts 'Waiting for Vault HTTP API to be ready'
|
101
|
+
sleep 1
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
def wait
|
107
|
+
@thread.join unless @thread.nil?
|
108
|
+
end
|
109
|
+
|
110
|
+
def stop
|
111
|
+
unless @thread.nil?
|
112
|
+
unless @thread[:process].nil?
|
113
|
+
puts "Stop #{bin} (#{@thread[:process]})"
|
114
|
+
Process.kill('INT', @thread[:process])
|
115
|
+
end
|
116
|
+
|
117
|
+
@thread.join
|
118
|
+
end
|
119
|
+
|
120
|
+
@thread = nil
|
121
|
+
@stopped = true
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
metadata
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dev-vault
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- John Manero
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-05-11 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: zipruby
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.11'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.11'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
description: dev/vault bundles all of Hashicorp's platform-specific binaries for Vault
|
56
|
+
and provides helpers to detect the local platform and run the right build.
|
57
|
+
email:
|
58
|
+
- jmanero@rapid7.com
|
59
|
+
executables: []
|
60
|
+
extensions: []
|
61
|
+
extra_rdoc_files: []
|
62
|
+
files:
|
63
|
+
- .gitignore
|
64
|
+
- .rubocop.yml
|
65
|
+
- .travis.yml
|
66
|
+
- Gemfile
|
67
|
+
- LICENSE
|
68
|
+
- README.md
|
69
|
+
- Rakefile
|
70
|
+
- bin/vault_0.5.2_darwin_386
|
71
|
+
- bin/vault_0.5.2_darwin_amd64
|
72
|
+
- bin/vault_0.5.2_freebsd_386
|
73
|
+
- bin/vault_0.5.2_freebsd_amd64
|
74
|
+
- bin/vault_0.5.2_freebsd_arm
|
75
|
+
- bin/vault_0.5.2_linux_386
|
76
|
+
- bin/vault_0.5.2_linux_amd64
|
77
|
+
- bin/vault_0.5.2_linux_arm
|
78
|
+
- dev-vault.gemspec
|
79
|
+
- lib/dev/vault.rb
|
80
|
+
- lib/dev/vault/build.rb
|
81
|
+
- lib/dev/vault/version.rb
|
82
|
+
homepage: https://github.com/rapid7/dev-vault
|
83
|
+
licenses:
|
84
|
+
- MIT
|
85
|
+
metadata: {}
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - '>='
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
requirements: []
|
101
|
+
rubyforge_project:
|
102
|
+
rubygems_version: 2.0.14.1
|
103
|
+
signing_key:
|
104
|
+
specification_version: 4
|
105
|
+
summary: Test/development wrapper for Vault by Hashicorp
|
106
|
+
test_files: []
|