nugrant 1.2.0 → 1.3.0
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 +9 -9
- data/.gitignore +1 -0
- data/CHANGELOG.md +35 -2
- data/README.md +109 -2
- data/lib/nugrant/bag.rb +7 -3
- data/lib/nugrant/helper/bag.rb +12 -14
- data/lib/nugrant/helper/env.rb +232 -0
- data/lib/nugrant/vagrant/v1/command/env.rb +73 -0
- data/lib/nugrant/vagrant/v1/command/parameters.rb +13 -13
- data/lib/nugrant/vagrant/v1/command/root.rb +7 -2
- data/lib/nugrant/vagrant/v2/command/env.rb +73 -0
- data/lib/nugrant/vagrant/v2/command/parameters.rb +1 -1
- data/lib/nugrant/vagrant/v2/command/root.rb +7 -2
- data/lib/nugrant/version.rb +1 -1
- data/nugrant.gemspec +3 -2
- data/test/lib/nugrant/helper/test_env.rb +150 -0
- data/test/lib/nugrant/helper/test_stack.rb +2 -2
- data/test/lib/nugrant/test_bag.rb +7 -7
- data/test/lib/nugrant/test_config.rb +123 -120
- data/test/lib/nugrant/test_parameters.rb +199 -177
- data/test/resources/json/params_user_nil_values.json +9 -0
- data/test/resources/vagrantfiles/v2.defaults_null_values_in_vagrantuser +25 -0
- data/test/resources/yml/params_user_nil_values.yml +5 -0
- metadata +25 -51
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'nugrant'
|
2
|
+
require 'nugrant/helper/env'
|
3
|
+
|
4
|
+
module Nugrant
|
5
|
+
module Vagrant
|
6
|
+
module V1
|
7
|
+
module Command
|
8
|
+
class Env < ::Vagrant::Command::Base
|
9
|
+
def initialize(arguments, environment)
|
10
|
+
super(arguments, environment)
|
11
|
+
|
12
|
+
@unset = false
|
13
|
+
@script = false
|
14
|
+
@show_help = false
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_parser()
|
18
|
+
return OptionParser.new do |parser|
|
19
|
+
parser.banner = "Usage: vagrant user env [<options>]"
|
20
|
+
parser.separator ""
|
21
|
+
|
22
|
+
parser.separator "Outputs the commands that should be executed to export\n" +
|
23
|
+
"the various parameter as environment variables. By default,\n" +
|
24
|
+
"existing ones are overridden."
|
25
|
+
parser.separator ""
|
26
|
+
|
27
|
+
parser.separator "Available options:"
|
28
|
+
parser.separator ""
|
29
|
+
|
30
|
+
parser.on("-u", "--[no-]unset", "Generates commands needed to unset environment variables, default false") do |unset|
|
31
|
+
@unset = unset
|
32
|
+
end
|
33
|
+
|
34
|
+
parser.on("-s", "--[no-]script", "Generates a bash script instead of simply showing command, default false") do |script|
|
35
|
+
@script = script
|
36
|
+
end
|
37
|
+
|
38
|
+
parser.on("-h", "--help", "Print this help") do
|
39
|
+
@show_help = true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def help(parser)
|
45
|
+
@env.ui.info(parser.help, :prefix => false)
|
46
|
+
end
|
47
|
+
|
48
|
+
def execute
|
49
|
+
parser = create_parser()
|
50
|
+
arguments = parse_options(parser)
|
51
|
+
|
52
|
+
return help(parser) if @show_help
|
53
|
+
|
54
|
+
@logger.debug("Nugrant 'Env'")
|
55
|
+
with_target_vms(arguments) do |vm|
|
56
|
+
config = vm.config.user
|
57
|
+
parameters = config ? config.parameters : Nugrant::Parameters.new()
|
58
|
+
bag = parameters.__all
|
59
|
+
|
60
|
+
options = {:type => @unset ? :unset : :export}
|
61
|
+
|
62
|
+
Helper::Env.write_commands(bag, options) if not @script
|
63
|
+
Helper::Env.write_script(bag, options) if @script
|
64
|
+
|
65
|
+
# No need to execute for the other VMs
|
66
|
+
return 0
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -37,18 +37,18 @@ module Nugrant
|
|
37
37
|
end
|
38
38
|
|
39
39
|
parser.on("-u", "--user", "Show only user parameters") do
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
40
|
+
@show_user = true
|
41
|
+
end
|
42
|
+
|
43
|
+
parser.on("-p", "--project", "Show only project parameters") do
|
44
|
+
@show_project = true
|
45
|
+
end
|
46
|
+
|
47
|
+
parser.separator ""
|
48
|
+
parser.separator "When no options is provided, the command prints the names and values \n" +
|
49
|
+
"of all parameters that would be available for usage in the Vagrantfile.\n" +
|
50
|
+
"The hierarchy of the parameters is respected, so the final values are\n" +
|
51
|
+
"displayed."
|
52
52
|
end
|
53
53
|
end
|
54
54
|
|
@@ -110,7 +110,7 @@ module Nugrant
|
|
110
110
|
|
111
111
|
print_parameters(kind, {
|
112
112
|
'config' => {
|
113
|
-
'user' => bag.__to_hash()
|
113
|
+
'user' => bag.__to_hash(:string_key => true)
|
114
114
|
}
|
115
115
|
})
|
116
116
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'nugrant'
|
2
|
+
require 'nugrant/vagrant/v1/command/env'
|
3
|
+
require 'nugrant/vagrant/v1/command/parameters'
|
2
4
|
require 'nugrant/version'
|
3
5
|
|
4
6
|
module Nugrant
|
@@ -15,9 +17,12 @@ module Nugrant
|
|
15
17
|
@argv = @arguments
|
16
18
|
|
17
19
|
@subcommands = ::Vagrant::Registry.new()
|
20
|
+
@subcommands.register(:env) do
|
21
|
+
Command::Env
|
22
|
+
end
|
23
|
+
|
18
24
|
@subcommands.register(:parameters) do
|
19
|
-
|
20
|
-
Parameters
|
25
|
+
Command::Parameters
|
21
26
|
end
|
22
27
|
|
23
28
|
@show_help = false
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'nugrant'
|
2
|
+
require 'nugrant/helper/env'
|
3
|
+
|
4
|
+
module Nugrant
|
5
|
+
module Vagrant
|
6
|
+
module V2
|
7
|
+
module Command
|
8
|
+
class Env < ::Vagrant.plugin("2", :command)
|
9
|
+
def initialize(arguments, environment)
|
10
|
+
super(arguments, environment)
|
11
|
+
|
12
|
+
@unset = false
|
13
|
+
@script = false
|
14
|
+
@show_help = false
|
15
|
+
end
|
16
|
+
|
17
|
+
def create_parser()
|
18
|
+
return OptionParser.new do |parser|
|
19
|
+
parser.banner = "Usage: vagrant user env [<options>]"
|
20
|
+
parser.separator ""
|
21
|
+
|
22
|
+
parser.separator "Outputs the commands that should be executed to export\n" +
|
23
|
+
"the various parameter as environment variables. By default,\n" +
|
24
|
+
"existing ones are overridden."
|
25
|
+
parser.separator ""
|
26
|
+
|
27
|
+
parser.separator "Available options:"
|
28
|
+
parser.separator ""
|
29
|
+
|
30
|
+
parser.on("-u", "--[no-]unset", "Generates commands needed to unset environment variables, default false") do |unset|
|
31
|
+
@unset = unset
|
32
|
+
end
|
33
|
+
|
34
|
+
parser.on("-s", "--[no-]script", "Generates a bash script instead of simply showing command, default false") do |script|
|
35
|
+
@script = script
|
36
|
+
end
|
37
|
+
|
38
|
+
parser.on("-h", "--help", "Print this help") do
|
39
|
+
@show_help = true
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def help(parser)
|
45
|
+
@env.ui.info(parser.help, :prefix => false)
|
46
|
+
end
|
47
|
+
|
48
|
+
def execute
|
49
|
+
parser = create_parser()
|
50
|
+
arguments = parse_options(parser)
|
51
|
+
|
52
|
+
return help(parser) if @show_help
|
53
|
+
|
54
|
+
@logger.debug("Nugrant 'Env'")
|
55
|
+
with_target_vms(arguments) do |vm|
|
56
|
+
config = vm.config.user
|
57
|
+
parameters = config ? config.parameters : Nugrant::Parameters.new()
|
58
|
+
bag = parameters.__all
|
59
|
+
|
60
|
+
options = {:type => @unset ? :unset : :export}
|
61
|
+
|
62
|
+
Helper::Env.write_commands(bag, options) if not @script
|
63
|
+
Helper::Env.write_script(bag, options) if @script
|
64
|
+
|
65
|
+
# No need to execute for the other VMs
|
66
|
+
return 0
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require 'nugrant'
|
2
|
+
require 'nugrant/vagrant/v2/command/env'
|
3
|
+
require 'nugrant/vagrant/v2/command/parameters'
|
2
4
|
require 'nugrant/version'
|
3
5
|
|
4
6
|
module Nugrant
|
@@ -15,9 +17,12 @@ module Nugrant
|
|
15
17
|
@argv = @arguments
|
16
18
|
|
17
19
|
@subcommands = ::Vagrant::Registry.new()
|
20
|
+
@subcommands.register(:env) do
|
21
|
+
Command::Env
|
22
|
+
end
|
23
|
+
|
18
24
|
@subcommands.register(:parameters) do
|
19
|
-
|
20
|
-
Parameters
|
25
|
+
Command::Parameters
|
21
26
|
end
|
22
27
|
|
23
28
|
@show_help = false
|
data/lib/nugrant/version.rb
CHANGED
data/nugrant.gemspec
CHANGED
@@ -25,10 +25,11 @@ Gem::Specification.new do |gem|
|
|
25
25
|
|
26
26
|
gem.files = `git ls-files`.split($/)
|
27
27
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
28
|
-
gem.test_files = gem.files.grep(%r{^(test
|
28
|
+
gem.test_files = gem.files.grep(%r{^(test/lib)/})
|
29
29
|
gem.require_paths = ["lib"]
|
30
30
|
|
31
|
-
gem.add_dependency
|
31
|
+
gem.add_dependency "multi_json", "~> 1.8"
|
32
32
|
|
33
33
|
gem.add_development_dependency "rake"
|
34
|
+
gem.add_development_dependency "minitest", "~> 5.0.8"
|
34
35
|
end
|
@@ -0,0 +1,150 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
|
3
|
+
require 'nugrant/bag'
|
4
|
+
require 'nugrant/helper/env'
|
5
|
+
|
6
|
+
module Nugrant
|
7
|
+
module Helper
|
8
|
+
class TestEnv < ::Minitest::Test
|
9
|
+
def create_bag(parameters)
|
10
|
+
return Nugrant::Bag.new(parameters)
|
11
|
+
end
|
12
|
+
|
13
|
+
def assert_export(expected, key, value, options = {})
|
14
|
+
actual = Helper::Env.export_command(key, value, options)
|
15
|
+
|
16
|
+
assert_equal(expected, actual)
|
17
|
+
end
|
18
|
+
|
19
|
+
def assert_unset(expected, key, options = {})
|
20
|
+
actual = Helper::Env.unset_command(key, options)
|
21
|
+
|
22
|
+
assert_equal(expected, actual)
|
23
|
+
end
|
24
|
+
|
25
|
+
def assert_export_commands(expected, bag, options = {})
|
26
|
+
actual = Helper::Env.export_commands(bag, options)
|
27
|
+
|
28
|
+
assert_equal(expected.sort!(), actual.sort!())
|
29
|
+
end
|
30
|
+
|
31
|
+
def assert_unset_commands(expected, bag, options = {})
|
32
|
+
actual = Helper::Env.unset_commands(bag, options)
|
33
|
+
|
34
|
+
assert_equal(expected, actual)
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_export_command
|
38
|
+
assert_export("export TEST=\\\"running\\ with\\ space\\\"", "TEST", "\"running with space\"")
|
39
|
+
assert_export("export TEST=running with space", "TEST", "running with space", :escape_value => false)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_export_commands
|
43
|
+
bag = create_bag({
|
44
|
+
:existing => "downcase",
|
45
|
+
:level1 => {
|
46
|
+
:level2 => {
|
47
|
+
:first => "first with space",
|
48
|
+
:second => "\"second\\"
|
49
|
+
},
|
50
|
+
:third => "third"
|
51
|
+
}
|
52
|
+
})
|
53
|
+
|
54
|
+
stub_env(:existing => "exist", :EXISTING => "exist") do
|
55
|
+
assert_export_commands([
|
56
|
+
"export EXISTING=downcase",
|
57
|
+
"export LEVEL1_LEVEL2_FIRST=first\\ with\\ space",
|
58
|
+
"export LEVEL1_LEVEL2_SECOND=\\\"second\\\\",
|
59
|
+
"export LEVEL1_THIRD=third",
|
60
|
+
], bag)
|
61
|
+
|
62
|
+
assert_export_commands([
|
63
|
+
"export LEVEL1_LEVEL2_FIRST=first\\ with\\ space",
|
64
|
+
"export LEVEL1_LEVEL2_SECOND=\\\"second\\\\",
|
65
|
+
"export LEVEL1_THIRD=third",
|
66
|
+
], bag, :override => false)
|
67
|
+
|
68
|
+
assert_export_commands([
|
69
|
+
"export EXISTING=downcase",
|
70
|
+
"export LEVEL1_LEVEL2_FIRST=first with space",
|
71
|
+
"export LEVEL1_LEVEL2_SECOND=\"second\\",
|
72
|
+
"export LEVEL1_THIRD=third",
|
73
|
+
], bag, :override => true, :escape_value => false)
|
74
|
+
|
75
|
+
default_namer = Helper::Env.default_namer(".")
|
76
|
+
prefix_namer = Helper::Env.prefix_namer("CONFIG", default_namer)
|
77
|
+
|
78
|
+
assert_export_commands([
|
79
|
+
"export CONFIG.EXISTING=downcase",
|
80
|
+
"export CONFIG.LEVEL1.LEVEL2.FIRST=first with space",
|
81
|
+
"export CONFIG.LEVEL1.LEVEL2.SECOND=\"second\\",
|
82
|
+
"export CONFIG.LEVEL1.THIRD=third",
|
83
|
+
], bag, :override => true, :escape_value => false, :namer => prefix_namer)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_unset_command
|
88
|
+
assert_unset("unset TEST", "TEST")
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_unset_commands
|
92
|
+
bag = create_bag({
|
93
|
+
:existing => "downcase",
|
94
|
+
:level1 => {
|
95
|
+
:level2 => {
|
96
|
+
:first => "first",
|
97
|
+
:second => "second"
|
98
|
+
},
|
99
|
+
:third => "third"
|
100
|
+
}
|
101
|
+
})
|
102
|
+
|
103
|
+
stub_env(:existing => "exist", :EXISTING => "exist") do
|
104
|
+
assert_unset_commands([
|
105
|
+
"unset EXISTING",
|
106
|
+
"unset LEVEL1_LEVEL2_FIRST",
|
107
|
+
"unset LEVEL1_LEVEL2_SECOND",
|
108
|
+
"unset LEVEL1_THIRD",
|
109
|
+
], bag)
|
110
|
+
|
111
|
+
assert_unset_commands([
|
112
|
+
"unset LEVEL1_LEVEL2_FIRST",
|
113
|
+
"unset LEVEL1_LEVEL2_SECOND",
|
114
|
+
"unset LEVEL1_THIRD",
|
115
|
+
], bag, :override => false)
|
116
|
+
|
117
|
+
default_namer = Helper::Env.default_namer(".")
|
118
|
+
prefix_namer = Helper::Env.prefix_namer("CONFIG", default_namer)
|
119
|
+
|
120
|
+
assert_unset_commands([
|
121
|
+
"unset CONFIG.EXISTING",
|
122
|
+
"unset CONFIG.LEVEL1.LEVEL2.FIRST",
|
123
|
+
"unset CONFIG.LEVEL1.LEVEL2.SECOND",
|
124
|
+
"unset CONFIG.LEVEL1.THIRD",
|
125
|
+
], bag, :override => true, :namer => prefix_namer)
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
def replace_env(variables)
|
130
|
+
ENV.clear()
|
131
|
+
|
132
|
+
variables = Hash[variables.map do |name, value|
|
133
|
+
[name.to_s, value]
|
134
|
+
end]
|
135
|
+
|
136
|
+
ENV.update(variables)
|
137
|
+
end
|
138
|
+
|
139
|
+
def stub_env(new = {})
|
140
|
+
old = ENV.to_hash()
|
141
|
+
|
142
|
+
replace_env(new)
|
143
|
+
yield
|
144
|
+
|
145
|
+
ensure
|
146
|
+
replace_env(old)
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|
@@ -1,10 +1,10 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
|
3
3
|
require 'nugrant/helper/stack'
|
4
4
|
|
5
5
|
module Nugrant
|
6
6
|
module Helper
|
7
|
-
class TestStack <
|
7
|
+
class TestStack < ::Minitest::Test
|
8
8
|
def assert_error_location(expected, entry, matcher = nil)
|
9
9
|
assert_equal(expected, Stack::extract_error_location(entry, :matcher => matcher))
|
10
10
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
require '
|
1
|
+
require 'minitest/autorun'
|
2
2
|
|
3
3
|
require 'nugrant/bag'
|
4
4
|
|
5
5
|
module Nugrant
|
6
|
-
class TestBag <
|
7
|
-
def create_bag(
|
8
|
-
return Bag.new(
|
6
|
+
class TestBag < ::Minitest::Test
|
7
|
+
def create_bag(elements)
|
8
|
+
return Bag.new(elements)
|
9
9
|
end
|
10
10
|
|
11
11
|
def assert_all_access_equal(value, bag, key)
|
@@ -84,15 +84,15 @@ module Nugrant
|
|
84
84
|
def test_undefined_value()
|
85
85
|
bag = create_bag({"value" => "one"})
|
86
86
|
|
87
|
-
|
87
|
+
assert_raises(KeyError) do
|
88
88
|
bag.invalid_value
|
89
89
|
end
|
90
90
|
|
91
|
-
|
91
|
+
assert_raises(KeyError) do
|
92
92
|
bag["invalid_value"]
|
93
93
|
end
|
94
94
|
|
95
|
-
|
95
|
+
assert_raises(KeyError) do
|
96
96
|
bag[:invalid_value]
|
97
97
|
end
|
98
98
|
end
|