rouster 0.53 → 0.57
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/README.md +5 -2
- data/examples/passthrough.rb +71 -0
- data/lib/rouster.rb +194 -242
- data/lib/rouster/deltas.rb +44 -39
- data/lib/rouster/puppet.rb +82 -21
- data/lib/rouster/testing.rb +129 -19
- data/lib/rouster/tests.rb +34 -6
- data/lib/rouster/vagrant.rb +242 -0
- data/test/basic.rb +4 -1
- data/test/functional/deltas/test_get_crontab.rb +22 -1
- data/test/functional/deltas/test_get_services.rb +6 -0
- data/test/functional/test_inspect.rb +1 -1
- data/test/functional/test_is_file.rb +17 -1
- data/test/functional/test_new.rb +185 -16
- data/test/functional/test_passthroughs.rb +94 -0
- data/test/functional/test_put.rb +2 -2
- data/test/functional/test_validate_file.rb +55 -3
- data/test/puppet/test_apply.rb +7 -5
- data/test/unit/puppet/test_get_puppet_star.rb +27 -4
- data/test/unit/test_new.rb +23 -0
- data/test/unit/test_parse_ls_string.rb +24 -0
- data/test/unit/testing/test_validate_cron.rb +78 -0
- metadata +24 -20
@@ -17,20 +17,19 @@ class TestGetPuppetStar < Test::Unit::TestCase
|
|
17
17
|
Rouster.send(:public, *Rouster.protected_instance_methods)
|
18
18
|
end
|
19
19
|
|
20
|
-
def
|
20
|
+
def test_happy_27_get_errors
|
21
21
|
|
22
22
|
output = "[1;35merr: Could not retrieve catalog from remote server: Error 400 on SERVER: no result for [api_vip] in Hiera (YAML/CMS)[0m\nfizzybang\n[1;35merr: Could not retrieve catalog from remote server: Error 400 on SERVER: no result for [foobar] in Hiera (YAML/CMS)[0m"
|
23
23
|
@app.output.push(output)
|
24
24
|
|
25
25
|
assert_not_nil(@app.get_puppet_errors())
|
26
26
|
assert_equal(2, @app.get_puppet_errors().size)
|
27
|
-
assert_equal(@app.get_puppet_errors(), @app.get_puppet_errors(output)) #
|
27
|
+
assert_equal(@app.get_puppet_errors(), @app.get_puppet_errors(output)) # tests that passed args is same as derived
|
28
28
|
|
29
29
|
assert_nil(@app.get_puppet_notices())
|
30
|
-
|
31
30
|
end
|
32
31
|
|
33
|
-
def
|
32
|
+
def test_happy_27_get_notices
|
34
33
|
|
35
34
|
output = "[0;36mnotice: Not using cache on failed catalog[0m\nfizzbang\n[0;36mnotice: Not using cache on failed catalog[0m"
|
36
35
|
@app.output.push(output)
|
@@ -43,6 +42,30 @@ class TestGetPuppetStar < Test::Unit::TestCase
|
|
43
42
|
|
44
43
|
end
|
45
44
|
|
45
|
+
def test_happy_30_get_errors
|
46
|
+
|
47
|
+
output = "\e[0;32mInfo: Retrieving plugin\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/root_home.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/drac_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/sfdc-custom_facts.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/concat_basedir.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/drac_fw_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/razor_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/oob_mac.rb\e[0m\n\e[1;31mError: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class razor for ops-tools1-1-piab.ops.sfdc.net on node ops-tools1-1-piab.ops.sfdc.net\e[0m\n\e[1;31mWarning: Not using cache on failed catalog\e[0m\n\e[1;31mError: Could not retrieve catalog; skipping run\e[0m\n"
|
48
|
+
@app.output.push(output)
|
49
|
+
|
50
|
+
assert_not_nil(@app.get_puppet_errors())
|
51
|
+
assert_equal(2, @app.get_puppet_errors().size)
|
52
|
+
assert_equal(@app.get_puppet_errors(), @app.get_puppet_errors(output))
|
53
|
+
|
54
|
+
assert_nil(@app.get_puppet_notices())
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_happy_30_get_notices
|
58
|
+
|
59
|
+
output = "\e[0;32mInfo: Retrieving plugin\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/root_home.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/drac_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/sfdc-custom_facts.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/concat_basedir.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/drac_fw_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/razor_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb\e[0m\n\e[0;32mInfo: Loading facts in /var/lib/puppet/lib/facter/oob_mac.rb\e[0m\n\e[0;32mInfo: Caching catalog for ops-tools1-1-piab.ops.sfdc.net\e[0m\n\e[0;32mInfo: Applying configuration version '1385418175'\e[0m\n\e[mNotice: /Stage[main]/Razor::Service/Razor::Api[tag]/Exec[razor-api-tag]/returns: executed successfully\e[0m\n\e[mNotice: /Stage[main]/Razor::Service/Razor::Api[policy]/Exec[razor-api-policy]/returns: executed successfully\e[0m\n\e[mNotice: /Stage[main]/Razor::Service/Razor::Api[model]/Exec[razor-api-model]/returns: executed successfully\e[0m\n\e[mNotice: Finished catalog run in 33.76 seconds\e[0m\n"
|
60
|
+
@app.output.push(output)
|
61
|
+
|
62
|
+
assert_not_nil(@app.get_puppet_notices())
|
63
|
+
assert_equal(4, @app.get_puppet_notices().size)
|
64
|
+
assert_equal(@app.get_puppet_notices(), @app.get_puppet_notices(output))
|
65
|
+
|
66
|
+
assert_nil(@app.get_puppet_errors())
|
67
|
+
end
|
68
|
+
|
46
69
|
def test_no_errors
|
47
70
|
|
48
71
|
output = 'there are no errors here'
|
data/test/unit/test_new.rb
CHANGED
@@ -9,6 +9,8 @@ class TestNew < Test::Unit::TestCase
|
|
9
9
|
|
10
10
|
def setup
|
11
11
|
@app = nil
|
12
|
+
# TODO make this work, don't want to have to instance_variable_get everything..
|
13
|
+
#Rouster.send(:public, *Rouster.instance_variables)
|
12
14
|
end
|
13
15
|
|
14
16
|
# TODO this is an awful pattern, do better
|
@@ -24,6 +26,27 @@ class TestNew < Test::Unit::TestCase
|
|
24
26
|
assert_equal(true, @app.uses_sudo?())
|
25
27
|
end
|
26
28
|
|
29
|
+
def test_2_good_instantiation
|
30
|
+
|
31
|
+
assert_nothing_raised do
|
32
|
+
@app = Rouster.new(
|
33
|
+
:cache_timeout => 10,
|
34
|
+
:name => 'ppm',
|
35
|
+
:retries => 3,
|
36
|
+
:verbosity => [3,2],
|
37
|
+
:unittest => true,
|
38
|
+
)
|
39
|
+
end
|
40
|
+
|
41
|
+
assert_equal(10, @app.cache_timeout)
|
42
|
+
assert_equal('ppm', @app.name)
|
43
|
+
assert_equal(3, @app.retries)
|
44
|
+
|
45
|
+
assert_equal(3, @app.instance_variable_get(:@verbosity_console))
|
46
|
+
assert_equal(2, @app.instance_variable_get(:@verbosity_logfile))
|
47
|
+
|
48
|
+
end
|
49
|
+
|
27
50
|
def teardown
|
28
51
|
# noop
|
29
52
|
end
|
@@ -29,6 +29,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
29
29
|
:owner => 'root',
|
30
30
|
:group => 'root',
|
31
31
|
:size => '199',
|
32
|
+
:symlink? => false,
|
32
33
|
:executable? => [false, false, false],
|
33
34
|
:readable? => [true, true, true],
|
34
35
|
:writeable? => [false, false, false]
|
@@ -50,6 +51,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
50
51
|
:owner => 'root',
|
51
52
|
:group => 'root',
|
52
53
|
:size => '199',
|
54
|
+
:symlink? => false,
|
53
55
|
:executable? => [false, false, false],
|
54
56
|
:readable? => [true, false, false],
|
55
57
|
:writeable? => [false, false, false]
|
@@ -71,6 +73,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
71
73
|
:owner => 'root',
|
72
74
|
:group => 'root',
|
73
75
|
:size => '199',
|
76
|
+
:symlink? => false,
|
74
77
|
:executable? => [false, false, false],
|
75
78
|
:readable? => [false, true, false],
|
76
79
|
:writeable? => [false, false, false]
|
@@ -92,6 +95,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
92
95
|
:owner => 'root',
|
93
96
|
:group => 'root',
|
94
97
|
:size => '199',
|
98
|
+
:symlink? => false,
|
95
99
|
:executable? => [false, false, false],
|
96
100
|
:readable? => [false, false, true],
|
97
101
|
:writeable? => [false, false, false]
|
@@ -113,6 +117,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
113
117
|
:owner => 'root',
|
114
118
|
:group => 'root',
|
115
119
|
:size => '199',
|
120
|
+
:symlink? => false,
|
116
121
|
:executable? => [true, true, true],
|
117
122
|
:readable? => [false, false, false],
|
118
123
|
:writeable? => [false, false, false]
|
@@ -134,6 +139,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
134
139
|
:owner => 'root',
|
135
140
|
:group => 'root',
|
136
141
|
:size => '199',
|
142
|
+
:symlink? => false,
|
137
143
|
:executable? => [true, false, false],
|
138
144
|
:readable? => [false, false, false],
|
139
145
|
:writeable? => [false, false, false]
|
@@ -155,6 +161,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
155
161
|
:owner => 'root',
|
156
162
|
:group => 'root',
|
157
163
|
:size => '199',
|
164
|
+
:symlink? => false,
|
158
165
|
:executable? => [false, true, false],
|
159
166
|
:readable? => [false, false, false],
|
160
167
|
:writeable? => [false, false, false]
|
@@ -176,6 +183,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
176
183
|
:owner => 'root',
|
177
184
|
:group => 'root',
|
178
185
|
:size => '199',
|
186
|
+
:symlink? => false,
|
179
187
|
:executable? => [false, false, true],
|
180
188
|
:readable? => [false, false, false],
|
181
189
|
:writeable? => [false, false, false]
|
@@ -197,6 +205,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
197
205
|
:owner => 'root',
|
198
206
|
:group => 'root',
|
199
207
|
:size => '199',
|
208
|
+
:symlink? => false,
|
200
209
|
:executable? => [false, false, false],
|
201
210
|
:readable? => [false, false, false],
|
202
211
|
:writeable? => [true, true, true]
|
@@ -218,6 +227,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
218
227
|
:owner => 'root',
|
219
228
|
:group => 'root',
|
220
229
|
:size => '199',
|
230
|
+
:symlink? => false,
|
221
231
|
:executable? => [false, false, false],
|
222
232
|
:readable? => [false, false, false],
|
223
233
|
:writeable? => [true, false, false]
|
@@ -239,6 +249,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
239
249
|
:owner => 'root',
|
240
250
|
:group => 'root',
|
241
251
|
:size => '199',
|
252
|
+
:symlink? => false,
|
242
253
|
:executable? => [false, false, false],
|
243
254
|
:readable? => [false, false, false],
|
244
255
|
:writeable? => [false, true, false]
|
@@ -260,6 +271,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
260
271
|
:owner => 'root',
|
261
272
|
:group => 'root',
|
262
273
|
:size => '199',
|
274
|
+
:symlink? => false,
|
263
275
|
:executable? => [false, false, false],
|
264
276
|
:readable? => [false, false, false],
|
265
277
|
:writeable? => [false, false, true]
|
@@ -281,6 +293,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
281
293
|
:owner => 'vagrant',
|
282
294
|
:group => 'vagrant',
|
283
295
|
:size => '1909',
|
296
|
+
:symlink? => false,
|
284
297
|
:executable? => [false, false, true],
|
285
298
|
:readable? => [false, false, true],
|
286
299
|
:writeable? => [false, false, true]
|
@@ -302,6 +315,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
302
315
|
:owner => 'vagrant',
|
303
316
|
:group => 'root',
|
304
317
|
:size => '0',
|
318
|
+
:symlink? => false,
|
305
319
|
:executable? => [false, false, false],
|
306
320
|
:readable? => [true, true, true],
|
307
321
|
:writeable? => [true, false, false]
|
@@ -327,6 +341,15 @@ class TestParseLsString < Test::Unit::TestCase
|
|
327
341
|
|
328
342
|
end
|
329
343
|
|
344
|
+
def test_symlink_detection
|
345
|
+
link = "lrwxrwxrwx 1 vagrant vagrant 10 Mar 13 22:53 foo -> /etc/hosts\n"
|
346
|
+
file = "-rw-r--r-- 2 root root 166 Mar 13 22:50 /etc/hosts\n"
|
347
|
+
|
348
|
+
assert_equal(true, @app.exposed_parse_ls_string(link)[:symlink?])
|
349
|
+
assert_equal(false, @app.exposed_parse_ls_string(file)[:symlink?])
|
350
|
+
|
351
|
+
end
|
352
|
+
|
330
353
|
def test_suid
|
331
354
|
str = "drwxr-sr-x 2 root root 4096 Oct 7 17:09 /etc/nagios/objects\n"
|
332
355
|
|
@@ -340,6 +363,7 @@ class TestParseLsString < Test::Unit::TestCase
|
|
340
363
|
:owner => 'root',
|
341
364
|
:group => 'root',
|
342
365
|
:size => '4096',
|
366
|
+
:symlink? => false,
|
343
367
|
:executable? => [true, true, true], # right now, we return [true,false,true]
|
344
368
|
:readable? => [true, true, true],
|
345
369
|
:writeable? => [true, false, false],
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require sprintf('%s/../../../path_helper', File.dirname(File.expand_path(__FILE__)))
|
2
|
+
|
3
|
+
require 'rouster'
|
4
|
+
require 'rouster/puppet'
|
5
|
+
require 'rouster/testing'
|
6
|
+
require 'test/unit'
|
7
|
+
|
8
|
+
class TestValidateCron < Test::Unit::TestCase
|
9
|
+
|
10
|
+
def setup
|
11
|
+
# expose private methods
|
12
|
+
Rouster.send(:public, *Rouster.private_instance_methods)
|
13
|
+
Rouster.send(:public, *Rouster.protected_instance_methods)
|
14
|
+
|
15
|
+
fake_facts = { 'is_virtual' => 'true', 'timezone' => 'PDT', 'uptime_days' => 42 }
|
16
|
+
|
17
|
+
fake_crons = {
|
18
|
+
'root' => {
|
19
|
+
'printf > /var/log/apache/error_log' => {
|
20
|
+
:minute => 10,
|
21
|
+
:hour => 2,
|
22
|
+
:dom => '*',
|
23
|
+
:mon => '*',
|
24
|
+
:dow => '*'
|
25
|
+
}
|
26
|
+
},
|
27
|
+
'a_user' => {
|
28
|
+
'/home/a_user/test.pl' => {
|
29
|
+
:minute => '0',
|
30
|
+
:hour => ['0', '6', '12', '18'],
|
31
|
+
:dom => '*',
|
32
|
+
:mon => '*',
|
33
|
+
:dow => '*'
|
34
|
+
}
|
35
|
+
}, 'cronless_user' => {}
|
36
|
+
}
|
37
|
+
|
38
|
+
@app = Rouster.new(:name => 'app', :unittest => true)
|
39
|
+
@app.deltas[:crontab] = fake_crons
|
40
|
+
@app.facts = fake_facts
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_positive_basic
|
44
|
+
|
45
|
+
assert(@app.validate_cron('root', 'printf > /var/log/apache/error_log', { :minute => 10, :hour => 2, :dom => '*', :mon => '*', :dow => '*'}))
|
46
|
+
assert(@app.validate_cron('a_user', '/home/a_user/test.pl', { :minute => '0', :hour => ['0', '6', '12', '18'], :dom => '*', :mon => '*', :dow => '*' }))
|
47
|
+
assert(@app.validate_cron('root', 'chmod 1777 /tmp', { :ensure => 'absent' }))
|
48
|
+
assert(@app.validate_cron('cronless_user', 'rm -f /tmp/foo', { :ensure => 'absent' }))
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_positive_constrained
|
53
|
+
|
54
|
+
assert(@app.validate_cron('root', 'printf > /var/log/apache/error_log', { :minute => 10 , :constrain => 'is_virtual true'} ))
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_negative_basic
|
59
|
+
|
60
|
+
assert_equal(false, @app.validate_cron('root', 'printf > /var/log/apache/error_log', { :minute => 1 }))
|
61
|
+
assert_equal(false, @app.validate_cron('root', 'rm -rf /', { :minute => '*', :hour => '*', :dom => '*', :mon => '*', :dow => '*'}))
|
62
|
+
assert_equal(false, @app.validate_cron('a_user', '/home/a_user/test.pl', { :ensure => 'absent' }))
|
63
|
+
assert_equal(false, @app.validate_cron('root', '/home/a_user/test.pl', { :minute => '0', :hour => ['0', '6', '12', '18'], :dom => '*', :mon => '*', :dow => '*' }))
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_negative_constrained
|
68
|
+
|
69
|
+
assert(@app.validate_cron('root', 'printf > /var/log/apache/error_log', { :minute => 10, :constrain => 'is_virtual false' } ))
|
70
|
+
assert(@app.validate_cron('root', 'printf > /var/log/apache/error_log', { :gid => 55, :constrain => 'is_virtual false' } ))
|
71
|
+
|
72
|
+
end
|
73
|
+
|
74
|
+
def teardown
|
75
|
+
# noop
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
metadata
CHANGED
@@ -1,111 +1,111 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rouster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.57'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Conor Horan-Kates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-04-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - '>='
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - '>='
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: log4r
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ~>
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.1.9
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.1.9
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: net-scp
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - '>='
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - '>='
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: net-ssh
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - '>='
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - '>='
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: test-unit
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- -
|
87
|
+
- - ~>
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '2.0'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- -
|
94
|
+
- - ~>
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '2.0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: reek
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- -
|
101
|
+
- - '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '0'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- -
|
108
|
+
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
description: Rouster allows you to programmatically control and interact with your
|
@@ -115,7 +115,7 @@ executables: []
|
|
115
115
|
extensions: []
|
116
116
|
extra_rdoc_files: []
|
117
117
|
files:
|
118
|
-
-
|
118
|
+
- .gitignore
|
119
119
|
- LICENSE
|
120
120
|
- README.md
|
121
121
|
- Rakefile
|
@@ -123,11 +123,13 @@ files:
|
|
123
123
|
- examples/bootstrap.rb
|
124
124
|
- examples/demo.rb
|
125
125
|
- examples/error.rb
|
126
|
+
- examples/passthrough.rb
|
126
127
|
- lib/rouster.rb
|
127
128
|
- lib/rouster/deltas.rb
|
128
129
|
- lib/rouster/puppet.rb
|
129
130
|
- lib/rouster/testing.rb
|
130
131
|
- lib/rouster/tests.rb
|
132
|
+
- lib/rouster/vagrant.rb
|
131
133
|
- path_helper.rb
|
132
134
|
- rouster.gemspec
|
133
135
|
- test/basic.rb
|
@@ -147,6 +149,7 @@ files:
|
|
147
149
|
- test/functional/test_is_dir.rb
|
148
150
|
- test/functional/test_is_file.rb
|
149
151
|
- test/functional/test_new.rb
|
152
|
+
- test/functional/test_passthroughs.rb
|
150
153
|
- test/functional/test_put.rb
|
151
154
|
- test/functional/test_rebuild.rb
|
152
155
|
- test/functional/test_restart.rb
|
@@ -170,6 +173,7 @@ files:
|
|
170
173
|
- test/unit/test_parse_ls_string.rb
|
171
174
|
- test/unit/test_traverse_up.rb
|
172
175
|
- test/unit/testing/test_meets_constraint.rb
|
176
|
+
- test/unit/testing/test_validate_cron.rb
|
173
177
|
- test/unit/testing/test_validate_file.rb
|
174
178
|
- test/unit/testing/test_validate_group.rb
|
175
179
|
- test/unit/testing/test_validate_package.rb
|
@@ -186,17 +190,17 @@ require_paths:
|
|
186
190
|
- lib
|
187
191
|
required_ruby_version: !ruby/object:Gem::Requirement
|
188
192
|
requirements:
|
189
|
-
- -
|
193
|
+
- - '>='
|
190
194
|
- !ruby/object:Gem::Version
|
191
195
|
version: '0'
|
192
196
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
193
197
|
requirements:
|
194
|
-
- -
|
198
|
+
- - '>='
|
195
199
|
- !ruby/object:Gem::Version
|
196
200
|
version: 1.3.6
|
197
201
|
requirements: []
|
198
202
|
rubyforge_project: Rouster
|
199
|
-
rubygems_version: 2.
|
203
|
+
rubygems_version: 2.2.2
|
200
204
|
signing_key:
|
201
205
|
specification_version: 4
|
202
206
|
summary: Rouster is an abstraction layer for Vagrant
|