bib-vagrant 0.1.2 → 0.1.3
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 +4 -4
- data/.gitignore +1 -0
- data/.travis.yml +0 -1
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +2 -3
- data/README.md +8 -5
- data/Rakefile +2 -2
- data/Vagrantfile +5 -6
- data/bib-vagrant.gemspec +13 -14
- data/bin/bib-vagrant +1 -1
- data/lib/bib/bib_vagrant.rb +94 -0
- data/lib/bib/{vagrant/provisioner.rb → bib_vagrant_npm_provisioner.rb} +62 -49
- data/lib/bib/plugin.rb +23 -0
- data/lib/bib/vagrant.rb +10 -13
- data/lib/bib/{vagrant/version.rb → version.rb} +1 -1
- data/test/config_test.rb +17 -22
- metadata +10 -10
- data/lib/bib-vagrant.rb +0 -8
- data/lib/bib/vagrant/config.rb +0 -102
- data/lib/bib/vagrant/plugin.rb +0 -27
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 321c5c79c1c30f4f74a06e99065d2d3efd47ee03
|
4
|
+
data.tar.gz: 5065e81e14aa4a075bdb949ddf4ae4e3164b3756
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 81fe49a54adf89136038fb269dd716e245b28bb35b96750da69cd53d7e7b59420fbe5266d3891cbd827c84b5d17cf3389c09c9387d4e4a855d09e650a4328401
|
7
|
+
data.tar.gz: 5b0d4ed21cd034e2dc9f75948f5e04f7212062064ec61ae9f241e4adb0c31bbfb2709803b6fcc7592089bab0230a2dd2bff6cbc93687b479575dc799c81ea6f2
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
data/CONTRIBUTING.md
CHANGED
data/Gemfile
CHANGED
@@ -5,12 +5,11 @@ source 'https://rubygems.org'
|
|
5
5
|
gemspec
|
6
6
|
|
7
7
|
group :development do
|
8
|
-
gem
|
8
|
+
gem 'vagrant', git: 'https://github.com/mitchellh/vagrant.git'
|
9
9
|
# gem "vagrant", git: "git://github.com/mitchellh/vagrant.git", tag: "v1.7.4"
|
10
10
|
# gem "vagrant", git: "git://github.com/mitchellh/vagrant.git", tag: "v1.3.5"
|
11
11
|
end
|
12
12
|
|
13
13
|
group :plugins do
|
14
|
-
gem
|
14
|
+
gem 'bib-vagrant', path: '.'
|
15
15
|
end
|
16
|
-
|
data/README.md
CHANGED
@@ -16,10 +16,11 @@ This is a work in progress - and subject to [additions and changes](CONTRIBUTING
|
|
16
16
|
Install the plugin:
|
17
17
|
|
18
18
|
$ vagrant plugin install bib-vagrant
|
19
|
-
|
19
|
+
|
20
20
|
Do not use this command in a directory with a Vagrantfile which requires the plugin. Vagrant does _always_ include the Vagrantfile, and therefore will fail before installation because of the missing plugin. Just ```cd``` somewhere else and retry the command, maybe from your homedir?
|
21
21
|
|
22
22
|
## Usage
|
23
|
+
|
23
24
|
### Developer Settings
|
24
25
|
The config file with all developer specific settings is currently ```~/.config/easybib/vagrantdefault.yml```. If no such file exists, the plugin will create the file with default settings.
|
25
26
|
|
@@ -30,7 +31,7 @@ The current default settings and their respective usage in our Vagrantfiles are:
|
|
30
31
|
```
|
31
32
|
|
32
33
|
#Use filesystem shares over nfs
|
33
|
-
nfs: false
|
34
|
+
nfs: false
|
34
35
|
|
35
36
|
#Path to the cookbooks
|
36
37
|
cookbook_path: ~/Sites/easybib/cookbooks
|
@@ -92,9 +93,9 @@ Vagrant.configure("2") do |config|
|
|
92
93
|
chef.add_recipe "something::here"
|
93
94
|
chef.log_level = vagrantconfig["chef_log_level"]
|
94
95
|
end
|
95
|
-
|
96
|
-
web_config.vm.provision "bib_configure_npm"
|
97
|
-
|
96
|
+
|
97
|
+
web_config.vm.provision "bib_configure_npm"
|
98
|
+
|
98
99
|
end
|
99
100
|
```
|
100
101
|
|
@@ -114,6 +115,8 @@ npm_usermail: <npm or github users email address>
|
|
114
115
|
npm_userpass: <npm or github authentication token>
|
115
116
|
```
|
116
117
|
|
118
|
+
NOTE: the npm_registry should be in the format of 'http[s]://host.domain.tld/' - The trailing slash is important
|
119
|
+
|
117
120
|
## Contributing
|
118
121
|
|
119
122
|
See [Contributing](CONTRIBUTING.md)
|
data/Rakefile
CHANGED
@@ -3,8 +3,8 @@ Coveralls.wear!
|
|
3
3
|
|
4
4
|
## Bundler::GemHelper.install_tasks
|
5
5
|
|
6
|
-
require
|
7
|
-
require
|
6
|
+
require 'bundler/gem_tasks'
|
7
|
+
require 'minitest/autorun'
|
8
8
|
|
9
9
|
Encoding.default_external = Encoding::UTF_8
|
10
10
|
Encoding.default_internal = Encoding::UTF_8
|
data/Vagrantfile
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
|
2
|
-
Vagrant.configure(
|
3
|
-
foo = Bib::Vagrant::Config.new
|
2
|
+
Vagrant.configure('2') do |config|
|
3
|
+
foo = Bib::Vagrant::Config.new
|
4
4
|
puts foo.get.inspect
|
5
|
-
|
5
|
+
|
6
6
|
# for testing ubuntu 14.04
|
7
7
|
config.vm.box = 'trusty-server-cloudimg-amd64-vagrant-disk1.box'
|
8
8
|
config.vm.box_url = 'https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box'
|
9
9
|
|
10
10
|
# for testing ubuntu 15.04
|
11
11
|
# config.vm.box = 'vivid-server-cloudimg-amd64-vagrant-disk1.box'
|
12
|
-
# config.vm.box_url = 'https://cloud-images.ubuntu.com/vagrant/vivid/current/vivid-server-cloudimg-amd64-vagrant-disk1.box'
|
12
|
+
# config.vm.box_url = 'https://cloud-images.ubuntu.com/vagrant/vivid/current/vivid-server-cloudimg-amd64-vagrant-disk1.box'
|
13
13
|
|
14
14
|
# config.vm.provision :shell, :path => 'apt-spy-2-bootstrap.sh'
|
15
15
|
|
@@ -21,10 +21,9 @@ Vagrant.configure("2") do |config|
|
|
21
21
|
|
22
22
|
config.vm.provision 'shell', inline: 'sudo apt-get -y install nodejs npm'
|
23
23
|
|
24
|
-
config.vm.provision 'bib_configure_npm'
|
24
|
+
config.vm.provision 'bib_configure_npm'
|
25
25
|
|
26
26
|
config.vm.provision 'shell', inline: 'npm config list'
|
27
27
|
|
28
28
|
config.vm.provision 'shell', inline: 'npm --loglevel silly view test'
|
29
|
-
|
30
29
|
end
|
data/bib-vagrant.gemspec
CHANGED
@@ -1,31 +1,30 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
lib = File.expand_path('../lib', __FILE__)
|
3
3
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require 'bib/
|
4
|
+
require 'bib/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'bib-vagrant'
|
8
8
|
spec.version = Bib::Vagrant::VERSION
|
9
|
-
spec.authors =
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = %w('tillk', 'fh', 'gilleyj')
|
10
|
+
spec.email = ['till@php.net']
|
11
11
|
spec.description = "A rubygem to centralize configuration and setup in every project's Vagrantfile"
|
12
|
-
spec.summary =
|
13
|
-
spec.homepage =
|
14
|
-
spec.license =
|
12
|
+
spec.summary = 'Centralize configuration and setup'
|
13
|
+
spec.homepage = 'https://github.com/easybiblabs/bib-vagrant'
|
14
|
+
spec.license = 'New BSD License'
|
15
15
|
|
16
|
-
spec.files = `git ls-files`.split(
|
16
|
+
spec.files = `git ls-files`.split($INPUT_RECORD_SEPARATOR)
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
-
spec.require_paths = [
|
19
|
+
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency 'thor', '>= 0.18.1'
|
22
22
|
spec.add_dependency 'colored', '>= 1.2'
|
23
23
|
spec.add_dependency 'rest_client'
|
24
24
|
spec.add_dependency 'json'
|
25
25
|
|
26
|
-
spec.add_development_dependency
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.5'
|
27
|
+
spec.add_development_dependency 'rake'
|
28
|
+
spec.add_development_dependency 'minitest', '~> 5.0.8'
|
29
|
+
spec.add_development_dependency 'coveralls'
|
30
30
|
end
|
31
|
-
|
data/bin/bib-vagrant
CHANGED
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module Bib
|
4
|
+
module Vagrant
|
5
|
+
class Config
|
6
|
+
@@home_dir = nil
|
7
|
+
@@verbose = true
|
8
|
+
|
9
|
+
def initialize(home = '~', verbose = true)
|
10
|
+
@@home = home
|
11
|
+
@@verbose = verbose
|
12
|
+
end
|
13
|
+
|
14
|
+
def get
|
15
|
+
vagrantconfig = get_defaults
|
16
|
+
|
17
|
+
begin
|
18
|
+
localconfigfile = File.open(get_path, 'r')
|
19
|
+
vagrantconfig.merge!(YAML.load(localconfigfile.read))
|
20
|
+
rescue Errno::ENOENT
|
21
|
+
puts 'WARNING: No vagrant user-config found, using default cookbook path' if @@verbose
|
22
|
+
create(get_path, vagrantconfig)
|
23
|
+
end
|
24
|
+
|
25
|
+
vagrantconfig
|
26
|
+
end
|
27
|
+
|
28
|
+
def has?
|
29
|
+
File.exist?(get_path)
|
30
|
+
end
|
31
|
+
|
32
|
+
def get_path
|
33
|
+
File.expand_path("#{@@home}/.config/easybib/vagrantdefault.yml")
|
34
|
+
end
|
35
|
+
|
36
|
+
def validate!(config)
|
37
|
+
current_config_keys = config.keys
|
38
|
+
|
39
|
+
get_defaults.keys.each do |required_key|
|
40
|
+
fail "Missing #{required_key}!" unless current_config_keys.include?(required_key)
|
41
|
+
end
|
42
|
+
|
43
|
+
errors = []
|
44
|
+
log_level = %w(debug info warn error fatal)
|
45
|
+
bool = [TrueClass, FalseClass]
|
46
|
+
|
47
|
+
cookbook_path = File.expand_path(config['cookbook_path'])
|
48
|
+
|
49
|
+
errors << 'nfs: must be a boolean' unless bool.include?(config['nfs'].class)
|
50
|
+
errors << 'gui: must be a boolean' unless bool.include?(config['gui'].class)
|
51
|
+
errors << 'cookbook_path: does not exist' unless File.directory?(cookbook_path)
|
52
|
+
errors << "chef_log_level: must be one of #{log_level.join}" unless log_level.include?(config['chef_log_level'])
|
53
|
+
|
54
|
+
unless config['additional_json'].empty?
|
55
|
+
errors << 'additional_json: must be empty or valid json' unless is_valid_json?(config['additional_json'])
|
56
|
+
end
|
57
|
+
|
58
|
+
return true if errors.count == 0
|
59
|
+
|
60
|
+
fail "Errors: #{errors.join(', ')}"
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def create(localconfigpath, vagrantconfig)
|
66
|
+
FileUtils.mkdir_p(File.dirname(localconfigpath))
|
67
|
+
File.open(localconfigpath, 'w+') do |file|
|
68
|
+
file.write(vagrantconfig.to_yaml)
|
69
|
+
puts "INFO: Created default vagrant user-config in #{localconfigpath}" if @@verbose
|
70
|
+
puts 'INFO: You probably want to fix the path to the cookbooks in this file.' if @@verbose
|
71
|
+
end
|
72
|
+
rescue
|
73
|
+
puts "WARNING: Unable to create default #{localconfigpath} - please do it manually." if @@verbose
|
74
|
+
end
|
75
|
+
|
76
|
+
def get_defaults
|
77
|
+
{
|
78
|
+
'nfs' => false,
|
79
|
+
'cookbook_path' => '~/Sites/easybib/cookbooks',
|
80
|
+
'chef_log_level' => 'debug',
|
81
|
+
'additional_json' => '{}',
|
82
|
+
'gui' => false
|
83
|
+
}
|
84
|
+
end
|
85
|
+
|
86
|
+
def is_valid_json?(json)
|
87
|
+
JSON.parse(json)
|
88
|
+
return true
|
89
|
+
rescue JSON::ParserError
|
90
|
+
false
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -4,13 +4,22 @@ require 'rest_client'
|
|
4
4
|
require 'json'
|
5
5
|
require 'base64'
|
6
6
|
|
7
|
-
|
7
|
+
String.class_eval do
|
8
|
+
def is_valid_url?
|
9
|
+
uri = URI.parse self
|
10
|
+
uri.is_a? URI::HTTP
|
11
|
+
rescue URI::InvalidURIError
|
12
|
+
false
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# Define the provisioner.
|
17
|
+
# do this outside of the bib::vagrant module for ease of calling
|
8
18
|
class BibConfigurePlugin < Vagrant.plugin('2')
|
9
|
-
name 'NPM configuration
|
19
|
+
name 'NPM configuration Provisioner'
|
10
20
|
|
11
21
|
# This plugin provides a provisioner called unix_reboot.
|
12
22
|
provisioner 'bib_configure_npm' do
|
13
|
-
|
14
23
|
# Create a provisioner.
|
15
24
|
class BibConfigureProvisioner < Vagrant.plugin('2', :provisioner)
|
16
25
|
# Initialization, define internal state. Nothing needed.
|
@@ -20,12 +29,12 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
20
29
|
def initialize(machine, config)
|
21
30
|
super(machine, config)
|
22
31
|
end
|
23
|
-
|
32
|
+
|
24
33
|
# Configuration changes to be done. Nothing needed here either.
|
25
34
|
def configure(root_config)
|
26
35
|
super(root_config)
|
27
36
|
end
|
28
|
-
|
37
|
+
|
29
38
|
# Run the provisioning.
|
30
39
|
def provision
|
31
40
|
return unless @machine.communicate.ready?
|
@@ -58,7 +67,7 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
58
67
|
userpass = bib_config_values['npm_userpass'].clone
|
59
68
|
end
|
60
69
|
|
61
|
-
if
|
70
|
+
if registry && username && usermail && userpass
|
62
71
|
auth_hash = Base64.strict_encode64(username + ':' + userpass)
|
63
72
|
auth_token = get_npm_token(registry, username, usermail, userpass)
|
64
73
|
if auth_token
|
@@ -73,13 +82,13 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
73
82
|
# npmrc_set('username', username)
|
74
83
|
|
75
84
|
# for older npm user/pass hash authentication
|
76
|
-
npmrc_set(
|
85
|
+
npmrc_set('_auth', '"' + auth_hash + '"')
|
77
86
|
|
78
87
|
# for newer npm token authentication
|
79
|
-
npmrc_set(
|
80
|
-
|
88
|
+
npmrc_set(registry_ident + ':_authToken', '"' + auth_token + '"')
|
89
|
+
|
81
90
|
else
|
82
|
-
@machine.ui.info(
|
91
|
+
@machine.ui.info('npm registry token request failed. Attempting old style auth configuration.')
|
83
92
|
npmrc_set('always-auth', 'true')
|
84
93
|
npmrc_set('registry', registry)
|
85
94
|
npmrc_set('email', usermail)
|
@@ -90,27 +99,19 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
90
99
|
npmrc_set('_auth', auth_hash)
|
91
100
|
end
|
92
101
|
|
93
|
-
else
|
102
|
+
else
|
94
103
|
|
95
104
|
message = ''
|
96
|
-
|
97
|
-
message += " npm_registry"
|
98
|
-
end
|
105
|
+
message += ' npm_registry' unless registry
|
99
106
|
|
100
|
-
|
101
|
-
message += " npm_username"
|
102
|
-
end
|
107
|
+
message += ' npm_username' unless username
|
103
108
|
|
104
|
-
|
105
|
-
message += " npm_userpass"
|
106
|
-
end
|
109
|
+
message += ' npm_userpass' unless usermail
|
107
110
|
|
108
|
-
|
109
|
-
message += " npm_userpass"
|
110
|
-
end
|
111
|
+
message += ' npm_userpass' unless userpass
|
111
112
|
|
112
|
-
@machine.ui.warn(
|
113
|
-
@machine.ui.warn(
|
113
|
+
@machine.ui.warn('WARNING: Missing ' + message + ' value(s) in ~/.config/easybib/vagrantdefault.yml (On your HOST OS)')
|
114
|
+
@machine.ui.warn('WARNING: .npmrc not setup on your guest OS')
|
114
115
|
end
|
115
116
|
|
116
117
|
# if bib_config_values.includ?('composer_github_token')
|
@@ -118,9 +119,9 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
118
119
|
# else
|
119
120
|
# @machine.ui.warn("Missing composer_github_token value in config")
|
120
121
|
# end
|
121
|
-
|
122
|
-
send_command(
|
123
|
-
send_command(
|
122
|
+
|
123
|
+
send_command('mkdir -p ~/.npm/_locks')
|
124
|
+
send_command('sudo chown -R $USER ~/.npm')
|
124
125
|
|
125
126
|
# Now the machine is up again, perform the necessary tasks.
|
126
127
|
@machine.ui.info('bib-vagrant config complete...')
|
@@ -132,7 +133,7 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
132
133
|
# end
|
133
134
|
|
134
135
|
def npmrc_set(key, value)
|
135
|
-
command =
|
136
|
+
command = 'npm -g config '
|
136
137
|
if value
|
137
138
|
command << "set #{key} #{value}"
|
138
139
|
else
|
@@ -156,7 +157,7 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
156
157
|
end
|
157
158
|
end
|
158
159
|
|
159
|
-
def sudo_command(command)
|
160
|
+
def sudo_command(command)
|
160
161
|
@machine.communicate.sudo(command) do |type, data|
|
161
162
|
if type == :stderr
|
162
163
|
@machine.ui.warn(data)
|
@@ -167,34 +168,47 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
167
168
|
end
|
168
169
|
|
169
170
|
# my nifty function to get an NPM token from the registry
|
170
|
-
def get_npm_token(registry_url, username, usermail, userpass)
|
171
|
+
def get_npm_token(registry_url, username, usermail, userpass)
|
171
172
|
# get the date for some reason
|
172
|
-
date = Time.now
|
173
|
-
# set up the request _id ???
|
173
|
+
date = Time.now
|
174
|
+
# set up the request _id ???
|
174
175
|
_id = 'org.couchdb.user:' + username
|
175
176
|
# set up the registry URL to request the token from
|
176
177
|
url = registry_url + '-/user/' + _id
|
177
178
|
# create json object passed to the registry
|
178
|
-
data = { _id: _id
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
179
|
+
data = { _id: _id,
|
180
|
+
name: username,
|
181
|
+
password: userpass,
|
182
|
+
email: usermail,
|
183
|
+
type: 'user',
|
184
|
+
roles: [],
|
185
|
+
date: date
|
185
186
|
}
|
186
187
|
# convert it to json
|
187
188
|
jdata = JSON.generate(data)
|
188
189
|
# make the request and see if we get a token
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
190
|
+
if url.is_valid_url?
|
191
|
+
begin
|
192
|
+
response_json = RestClient.put url, jdata, content_type: :json
|
193
|
+
# convert the response to a hash???
|
194
|
+
hash = JSON.parse response_json
|
195
|
+
# check to see if the key token is there
|
196
|
+
if hash.key?('token')
|
197
|
+
# it is, so return it
|
198
|
+
hash['token']
|
199
|
+
else
|
200
|
+
# it doesn't so return false
|
201
|
+
false
|
202
|
+
end
|
203
|
+
rescue => error
|
204
|
+
# not a valid connection
|
205
|
+
puts 'WARNING: could not connect to ' + url + ' to exchange tokens'
|
206
|
+
false
|
207
|
+
end
|
208
|
+
|
196
209
|
else
|
197
|
-
#
|
210
|
+
# not a valid URL
|
211
|
+
puts 'WARNING: ' + url + ' does not seem to be valid'
|
198
212
|
false
|
199
213
|
end
|
200
214
|
end
|
@@ -207,4 +221,3 @@ class BibConfigurePlugin < Vagrant.plugin('2')
|
|
207
221
|
BibConfigureProvisioner
|
208
222
|
end
|
209
223
|
end
|
210
|
-
|
data/lib/bib/plugin.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
begin
|
2
|
+
require 'bib_vagrant'
|
3
|
+
rescue LoadError
|
4
|
+
raise 'This is a vagrant plugin, do not use standalone.'
|
5
|
+
end
|
6
|
+
|
7
|
+
fail 'This vagrant plugin needs vagrant 1.2.0+' if Vagrant::VERSION < '1.2.0'
|
8
|
+
|
9
|
+
require_relative 'version'
|
10
|
+
require_relative 'bib_vagrant'
|
11
|
+
|
12
|
+
module VagrantPlugins
|
13
|
+
module Bib
|
14
|
+
module Vagrant
|
15
|
+
class Plugin < ::Vagrant.plugin('2')
|
16
|
+
name 'bib-vagrant'
|
17
|
+
description <<-DESC
|
18
|
+
This is a null plugin to get bib::vagrant into vagrant
|
19
|
+
DESC
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/bib/vagrant.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
require_relative 'version'
|
2
|
+
require_relative 'bib_vagrant'
|
3
|
+
require_relative 'bib_vagrant_npm_provisioner'
|
4
|
+
|
5
|
+
require 'thor'
|
4
6
|
|
5
7
|
class BibVagrant < Thor
|
6
8
|
package_name 'bib-vagrant'
|
@@ -8,20 +10,16 @@ class BibVagrant < Thor
|
|
8
10
|
desc 'validate', 'validate the local configuration'
|
9
11
|
def validate
|
10
12
|
config = get_wrapper
|
11
|
-
|
12
13
|
vagrant_defaults = config.get
|
13
14
|
config.validate!(vagrant_defaults)
|
14
|
-
|
15
15
|
end
|
16
16
|
|
17
17
|
desc 'show', 'show configuration settings'
|
18
18
|
def show
|
19
19
|
config = get_wrapper
|
20
|
-
|
21
20
|
puts "Your configuration is located in: #{config.get_path}"
|
22
|
-
puts
|
23
|
-
|
24
|
-
config.get.each do |config_key,config_value|
|
21
|
+
puts ''
|
22
|
+
config.get.each do |config_key, config_value|
|
25
23
|
puts "#{config_key}: #{config_value}"
|
26
24
|
end
|
27
25
|
end
|
@@ -29,17 +27,16 @@ class BibVagrant < Thor
|
|
29
27
|
desc 'setup', 'setup local configuration with default values'
|
30
28
|
def setup
|
31
29
|
config = Bib::Vagrant::Config.new
|
32
|
-
|
33
|
-
|
30
|
+
fail "Your configuration is already created: #{config.get_path}" if config.has?
|
34
31
|
config.get
|
35
|
-
|
36
32
|
puts "Configuration created in #{config.get_path}!"
|
37
33
|
end
|
38
34
|
|
39
35
|
private
|
36
|
+
|
40
37
|
def get_wrapper
|
41
38
|
config = Bib::Vagrant::Config.new
|
42
|
-
|
39
|
+
fail 'No configuration, run `bib-vagrant setup`!' unless config.has?
|
43
40
|
config
|
44
41
|
end
|
45
42
|
end
|
data/test/config_test.rb
CHANGED
@@ -1,45 +1,42 @@
|
|
1
|
-
require 'bib/
|
1
|
+
require 'bib/bib_vagrant'
|
2
2
|
|
3
3
|
class ConfigTest < Minitest::Test
|
4
|
-
|
5
4
|
@@fixture_dir = nil
|
6
5
|
|
7
6
|
def setup
|
8
|
-
@@fixture_dir = File.dirname(__FILE__) +
|
7
|
+
@@fixture_dir = File.dirname(__FILE__) + '/fixtures'
|
9
8
|
|
10
9
|
FileUtils.mkdir @@fixture_dir
|
11
10
|
end
|
12
11
|
|
13
12
|
def teardown
|
14
|
-
FileUtils.rm_rf @@fixture_dir if File.
|
13
|
+
FileUtils.rm_rf @@fixture_dir if File.exist?(@@fixture_dir)
|
15
14
|
end
|
16
15
|
|
17
16
|
def test_config
|
18
|
-
|
19
17
|
c = Bib::Vagrant::Config.new(@@fixture_dir, false)
|
20
18
|
assert_equal(false, c.has?)
|
21
19
|
|
22
20
|
vagrant_config = c.get
|
23
21
|
|
24
|
-
assert(File.
|
22
|
+
assert(File.exist?("#{@@fixture_dir}/.config/easybib/vagrantdefault.yml"))
|
25
23
|
assert_kind_of(Hash, vagrant_config)
|
26
24
|
|
27
|
-
assert_equal(false, vagrant_config[
|
28
|
-
assert_equal(
|
29
|
-
assert_equal(
|
30
|
-
assert_equal(
|
31
|
-
assert_equal(false, vagrant_config[
|
32
|
-
|
25
|
+
assert_equal(false, vagrant_config['nfs'])
|
26
|
+
assert_equal('~/Sites/easybib/cookbooks', vagrant_config['cookbook_path'])
|
27
|
+
assert_equal('debug', vagrant_config['chef_log_level'])
|
28
|
+
assert_equal('{}', vagrant_config['additional_json'])
|
29
|
+
assert_equal(false, vagrant_config['gui'])
|
33
30
|
end
|
34
31
|
|
35
32
|
# I wish I knew how to write a data provider with minitest
|
36
33
|
def test_validate!
|
37
34
|
config = {
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
35
|
+
'nfs' => 'yes',
|
36
|
+
'gui' => false,
|
37
|
+
'cookbook_path' => '/this/does/not/exist',
|
38
|
+
'chef_log_level' => 'debug',
|
39
|
+
'additional_json' => ''
|
43
40
|
}
|
44
41
|
|
45
42
|
c = Bib::Vagrant::Config.new(@@fixture_dir, false)
|
@@ -49,17 +46,15 @@ class ConfigTest < Minitest::Test
|
|
49
46
|
c.validate!(config)
|
50
47
|
}
|
51
48
|
|
52
|
-
config[
|
53
|
-
config[
|
49
|
+
config['nfs'] = false
|
50
|
+
config['cookbook_path'] = '~/'
|
54
51
|
|
55
52
|
assert(c.validate!(config))
|
56
53
|
|
57
|
-
config[
|
54
|
+
config['additional_json'] = "{'hello'}"
|
58
55
|
|
59
56
|
assert_raises(RuntimeError) {
|
60
57
|
c.validate!(config)
|
61
58
|
}
|
62
|
-
|
63
59
|
end
|
64
|
-
|
65
60
|
end
|
metadata
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bib-vagrant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
- tillk
|
8
|
-
- fh
|
9
|
-
- gilleyj
|
7
|
+
- '''tillk'','
|
8
|
+
- '''fh'','
|
9
|
+
- '''gilleyj'''
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2016-01-13 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: thor
|
@@ -142,12 +142,11 @@ files:
|
|
142
142
|
- Vagrantfile
|
143
143
|
- bib-vagrant.gemspec
|
144
144
|
- bin/bib-vagrant
|
145
|
-
- lib/bib
|
145
|
+
- lib/bib/bib_vagrant.rb
|
146
|
+
- lib/bib/bib_vagrant_npm_provisioner.rb
|
147
|
+
- lib/bib/plugin.rb
|
146
148
|
- lib/bib/vagrant.rb
|
147
|
-
- lib/bib/
|
148
|
-
- lib/bib/vagrant/plugin.rb
|
149
|
-
- lib/bib/vagrant/provisioner.rb
|
150
|
-
- lib/bib/vagrant/version.rb
|
149
|
+
- lib/bib/version.rb
|
151
150
|
- test/config_test.rb
|
152
151
|
homepage: https://github.com/easybiblabs/bib-vagrant
|
153
152
|
licenses:
|
@@ -175,3 +174,4 @@ specification_version: 4
|
|
175
174
|
summary: Centralize configuration and setup
|
176
175
|
test_files:
|
177
176
|
- test/config_test.rb
|
177
|
+
has_rdoc:
|
data/lib/bib-vagrant.rb
DELETED
data/lib/bib/vagrant/config.rb
DELETED
@@ -1,102 +0,0 @@
|
|
1
|
-
require 'yaml'
|
2
|
-
|
3
|
-
module Bib
|
4
|
-
module Vagrant
|
5
|
-
class Config
|
6
|
-
|
7
|
-
@@home_dir = nil
|
8
|
-
@@verbose = true
|
9
|
-
|
10
|
-
def initialize(home = "~", verbose = true)
|
11
|
-
@@home = home
|
12
|
-
@@verbose = verbose
|
13
|
-
end
|
14
|
-
|
15
|
-
def get
|
16
|
-
vagrantconfig = get_defaults
|
17
|
-
|
18
|
-
begin
|
19
|
-
localconfigfile = File.open(get_path, 'r')
|
20
|
-
vagrantconfig.merge!(YAML.load(localconfigfile.read))
|
21
|
-
rescue Errno::ENOENT
|
22
|
-
puts 'WARNING: No vagrant user-config found, using default cookbook path' if @@verbose
|
23
|
-
create(get_path, vagrantconfig)
|
24
|
-
end
|
25
|
-
|
26
|
-
vagrantconfig
|
27
|
-
end
|
28
|
-
|
29
|
-
def has?
|
30
|
-
File.exists?(get_path)
|
31
|
-
end
|
32
|
-
|
33
|
-
def get_path
|
34
|
-
File.expand_path("#{@@home}/.config/easybib/vagrantdefault.yml")
|
35
|
-
end
|
36
|
-
|
37
|
-
def validate!(config)
|
38
|
-
|
39
|
-
current_config_keys = config.keys
|
40
|
-
|
41
|
-
get_defaults.keys.each do |required_key|
|
42
|
-
raise "Missing #{required_key}!" unless current_config_keys.include?(required_key)
|
43
|
-
end
|
44
|
-
|
45
|
-
errors = []
|
46
|
-
log_level = ['debug', 'info', 'warn', 'error', 'fatal']
|
47
|
-
bool = [TrueClass, FalseClass]
|
48
|
-
|
49
|
-
cookbook_path = File.expand_path(config['cookbook_path'])
|
50
|
-
|
51
|
-
errors << "nfs: must be a boolean" unless bool.include?(config['nfs'].class)
|
52
|
-
errors << "gui: must be a boolean" unless bool.include?(config['gui'].class)
|
53
|
-
errors << "cookbook_path: does not exist" unless File.directory?(cookbook_path)
|
54
|
-
errors << "chef_log_level: must be one of #{log_level.join}" unless log_level.include?(config['chef_log_level'])
|
55
|
-
|
56
|
-
if !config['additional_json'].empty?
|
57
|
-
errors << "additional_json: must be empty or valid json" unless is_valid_json?(config['additional_json'])
|
58
|
-
end
|
59
|
-
|
60
|
-
if errors.count == 0
|
61
|
-
return true
|
62
|
-
end
|
63
|
-
|
64
|
-
raise "Errors: #{errors.join(', ')}"
|
65
|
-
end
|
66
|
-
|
67
|
-
private
|
68
|
-
def create(localconfigpath, vagrantconfig)
|
69
|
-
begin
|
70
|
-
FileUtils.mkdir_p(File.dirname(localconfigpath))
|
71
|
-
File.open(localconfigpath, 'w+') do |file|
|
72
|
-
file.write( vagrantconfig.to_yaml )
|
73
|
-
puts "INFO: Created default vagrant user-config in #{localconfigpath}" if @@verbose
|
74
|
-
puts "INFO: You probably want to fix the path to the cookbooks in this file." if @@verbose
|
75
|
-
end
|
76
|
-
rescue
|
77
|
-
puts "WARNING: Unable to create default #{localconfigpath} - please do it manually." if @@verbose
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
def get_defaults
|
82
|
-
{
|
83
|
-
"nfs" => false,
|
84
|
-
"cookbook_path" => '~/Sites/easybib/cookbooks',
|
85
|
-
"chef_log_level" => 'debug',
|
86
|
-
"additional_json" => '{}',
|
87
|
-
"gui" => false
|
88
|
-
}
|
89
|
-
end
|
90
|
-
|
91
|
-
def is_valid_json?(json)
|
92
|
-
begin
|
93
|
-
JSON.parse(json)
|
94
|
-
return true
|
95
|
-
rescue JSON::ParserError
|
96
|
-
false
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
data/lib/bib/vagrant/plugin.rb
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
begin
|
2
|
-
require "vagrant"
|
3
|
-
rescue LoadError
|
4
|
-
raise "This is a vagrant plugin, do not use standalone."
|
5
|
-
end
|
6
|
-
|
7
|
-
if Vagrant::VERSION < "1.2.0"
|
8
|
-
raise "This vagrant plugin needs vagrant 1.2.0+"
|
9
|
-
end
|
10
|
-
|
11
|
-
require_relative 'config'
|
12
|
-
require_relative 'version'
|
13
|
-
|
14
|
-
module VagrantPlugins
|
15
|
-
module Bib
|
16
|
-
module Vagrant
|
17
|
-
class Plugin < ::Vagrant.plugin("2")
|
18
|
-
|
19
|
-
name "bib-vagrant"
|
20
|
-
description <<-DESC
|
21
|
-
This is a fake plugin to get bib::vagrant into vagrant
|
22
|
-
DESC
|
23
|
-
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|