beaker 2.34.0 → 2.35.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/HISTORY.md +95 -2
- data/README.md +1 -1
- data/lib/beaker/dsl/install_utils/foss_utils.rb +15 -62
- data/lib/beaker/host.rb +36 -7
- data/lib/beaker/host/mac.rb +0 -42
- data/lib/beaker/host/mac/pkg.rb +80 -0
- data/lib/beaker/host/unix.rb +0 -95
- data/lib/beaker/host/unix/pkg.rb +212 -0
- data/lib/beaker/host/windows.rb +0 -22
- data/lib/beaker/host/windows/pkg.rb +44 -0
- data/lib/beaker/hypervisor.rb +4 -2
- data/lib/beaker/hypervisor/docker.rb +1 -1
- data/lib/beaker/network_manager.rb +1 -0
- data/lib/beaker/options/command_line_parser.rb +0 -1
- data/lib/beaker/result.rb +7 -0
- data/lib/beaker/ssh_connection.rb +4 -11
- data/lib/beaker/version.rb +1 -1
- data/spec/beaker/dsl/install_utils/foss_utils_spec.rb +1 -36
- data/spec/beaker/host/unix/pkg_spec.rb +87 -0
- data/spec/beaker/host/unix_spec.rb +20 -0
- data/spec/beaker/host_spec.rb +18 -19
- data/spec/beaker/hypervisor/docker_spec.rb +10 -0
- data/spec/beaker/hypervisor/hypervisor_spec.rb +19 -0
- metadata +2 -2
@@ -162,11 +162,6 @@ module Beaker
|
|
162
162
|
stderr_callback = stdout_callback
|
163
163
|
|
164
164
|
result = Result.new(@hostname, command)
|
165
|
-
# why are we getting to this point on a dry run anyways?
|
166
|
-
# also... the host creates connections through the class method,
|
167
|
-
# which automatically connects, so you can't do a dry run unless you also
|
168
|
-
# can connect to your hosts?
|
169
|
-
return result if options[:dry_run]
|
170
165
|
|
171
166
|
@ssh.open_channel do |channel|
|
172
167
|
request_terminal_for( channel, command ) if options[:pty]
|
@@ -267,8 +262,7 @@ module Beaker
|
|
267
262
|
channel.eof!
|
268
263
|
end
|
269
264
|
|
270
|
-
def scp_to source, target, options = {}
|
271
|
-
return if dry_run
|
265
|
+
def scp_to source, target, options = {}
|
272
266
|
|
273
267
|
local_opts = options.dup
|
274
268
|
if local_opts[:recursive].nil?
|
@@ -278,10 +272,10 @@ module Beaker
|
|
278
272
|
|
279
273
|
result = Result.new(@hostname, [source, target])
|
280
274
|
result.stdout = "\n"
|
275
|
+
|
281
276
|
@ssh.scp.upload! source, target, local_opts do |ch, name, sent, total|
|
282
277
|
result.stdout << "\tcopying %s: %10d/%d\n" % [name, sent, total]
|
283
278
|
end
|
284
|
-
|
285
279
|
# Setting these values allows reporting via result.log(test_name)
|
286
280
|
result.stdout << " SCP'ed file #{source} to #{@hostname}:#{target}"
|
287
281
|
|
@@ -292,8 +286,7 @@ module Beaker
|
|
292
286
|
return result
|
293
287
|
end
|
294
288
|
|
295
|
-
def scp_from source, target, options = {}
|
296
|
-
return if dry_run
|
289
|
+
def scp_from source, target, options = {}
|
297
290
|
|
298
291
|
local_opts = options.dup
|
299
292
|
if local_opts[:recursive].nil?
|
@@ -303,10 +296,10 @@ module Beaker
|
|
303
296
|
|
304
297
|
result = Result.new(@hostname, [source, target])
|
305
298
|
result.stdout = "\n"
|
299
|
+
|
306
300
|
@ssh.scp.download! source, target, local_opts do |ch, name, sent, total|
|
307
301
|
result.stdout << "\tcopying %s: %10d/%d\n" % [name, sent, total]
|
308
302
|
end
|
309
|
-
|
310
303
|
# Setting these values allows reporting via result.log(test_name)
|
311
304
|
result.stdout << " SCP'ed file #{@hostname}:#{source} to #{target}"
|
312
305
|
|
data/lib/beaker/version.rb
CHANGED
@@ -805,35 +805,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
805
805
|
|
806
806
|
describe '#install_puppet_agent_pe_promoted_repo_on' do
|
807
807
|
|
808
|
-
it 'splits the platform string version correctly to get ubuntu puppet-agent packages (format 9999)' do
|
809
|
-
platform = Object.new()
|
810
|
-
allow(platform).to receive(:to_array) { ['ubuntu', '9999', 'x42']}
|
811
|
-
host = basic_hosts.first
|
812
|
-
host['platform'] = platform
|
813
|
-
|
814
|
-
expect(subject).to receive(:fetch_http_file).once.with(/\/puppet-agent\//, "puppet-agent-ubuntu-99.99-x42.tar.gz", /ubuntu/)
|
815
|
-
expect(subject).to receive(:scp_to).once.with(host, /-ubuntu-99.99-x42\./, "/root")
|
816
|
-
expect(subject).to receive(:on).ordered.with(host, /^tar.*-ubuntu-99.99-x42/)
|
817
|
-
expect(subject).to receive(:on).ordered.with(host, /dpkg\ -i\ --force-all/)
|
818
|
-
expect(subject).to receive(:on).ordered.with(host, /apt-get\ update/)
|
819
|
-
|
820
|
-
subject.install_puppet_agent_pe_promoted_repo_on( host, {} )
|
821
|
-
end
|
822
|
-
|
823
|
-
it 'doesn\'t split the platform string version correctly to get ubuntu puppet-agent packages when unnecessary (format 99.99)' do
|
824
|
-
platform = Object.new()
|
825
|
-
allow(platform).to receive(:to_array) { ['ubuntu', '99.99', 'x42']}
|
826
|
-
host = basic_hosts.first
|
827
|
-
host['platform'] = platform
|
828
808
|
|
829
|
-
expect(subject).to receive(:fetch_http_file).once.with(/\/puppet-agent\//, "puppet-agent-ubuntu-99.99-x42.tar.gz", /ubuntu/)
|
830
|
-
expect(subject).to receive(:scp_to).once.with(host, /-ubuntu-99.99-x42\./, "/root")
|
831
|
-
expect(subject).to receive(:on).ordered.with(host, /^tar.*-ubuntu-99.99-x42/)
|
832
|
-
expect(subject).to receive(:on).ordered.with(host, /dpkg\ -i\ --force-all/)
|
833
|
-
expect(subject).to receive(:on).ordered.with(host, /apt-get\ update/)
|
834
|
-
|
835
|
-
subject.install_puppet_agent_pe_promoted_repo_on( host, {} )
|
836
|
-
end
|
837
809
|
|
838
810
|
end
|
839
811
|
|
@@ -1003,12 +975,7 @@ describe ClassMixedWithDSLInstallUtils do
|
|
1003
975
|
expect( subject ).to receive( :scp_to ).once.with(
|
1004
976
|
host, /#{release_file}$/, anything )
|
1005
977
|
|
1006
|
-
|
1007
|
-
allow( host ).to receive( :noask_file_text ).and_return( noask_text )
|
1008
|
-
expect( subject ).to receive( :create_remote_file ).with(
|
1009
|
-
host, /noask$/, noask_text )
|
1010
|
-
expect( subject ).to receive( :on ).with(
|
1011
|
-
host, /^gunzip.*#{release_file}.*pkgadd.*noask.*all$/ )
|
978
|
+
expect( host ).to receive( :solaris_install_local_package )
|
1012
979
|
|
1013
980
|
allow( subject ).to receive( :configure_type_defaults_on )
|
1014
981
|
subject.install_puppet_agent_dev_repo_on( host, opts )
|
@@ -1098,13 +1065,11 @@ describe ClassMixedWithDSLInstallUtils do
|
|
1098
1065
|
it 'calls fetch_http_file with no ending slash' do
|
1099
1066
|
test_fetch_http_file_no_ending_slash( 'windows-7-x86_64' )
|
1100
1067
|
end
|
1101
|
-
|
1102
1068
|
end
|
1103
1069
|
|
1104
1070
|
it 'calls fetch_http_file with no ending slash' do
|
1105
1071
|
test_fetch_http_file_no_ending_slash( 'debian-5-x86_64' )
|
1106
1072
|
end
|
1107
|
-
|
1108
1073
|
end
|
1109
1074
|
|
1110
1075
|
describe '#remove_puppet_on' do
|
@@ -186,6 +186,93 @@ module Beaker
|
|
186
186
|
|
187
187
|
end
|
188
188
|
|
189
|
+
context '#pe_puppet_agent_promoted_package_install' do
|
190
|
+
context 'on solaris platforms' do
|
191
|
+
before :each do
|
192
|
+
allow( subject ).to receive( :fetch_http_file )
|
193
|
+
allow( subject ).to receive( :scp_to )
|
194
|
+
allow( subject ).to receive( :configure_type_defaults_on )
|
195
|
+
end
|
196
|
+
|
197
|
+
context 'version support' do
|
198
|
+
(7..17).each do |version|
|
199
|
+
supported_version = version == 10 || version == 11
|
200
|
+
supported_str = ( supported_version ? '' : 'not ')
|
201
|
+
test_title = "does #{supported_str}support version #{version}"
|
202
|
+
|
203
|
+
it "#{test_title}" do
|
204
|
+
solaris_platform = Beaker::Platform.new("solaris-#{version}-x86_64")
|
205
|
+
@opts = {'platform' => solaris_platform}
|
206
|
+
allow( instance ).to receive( :execute )
|
207
|
+
allow( instance ).to receive( :exec )
|
208
|
+
if supported_version
|
209
|
+
if version == 10
|
210
|
+
allow( instance ).to receive( :noask_file_text )
|
211
|
+
allow( instance ).to receive( :create_remote_file )
|
212
|
+
end
|
213
|
+
# only expect diff in the last line: .not_to vs .to raise_error
|
214
|
+
expect{
|
215
|
+
instance.pe_puppet_agent_promoted_package_install(
|
216
|
+
'oh_cp_base', 'oh_cp_dl', 'oh_cp_fl', 'dl_fl', {}
|
217
|
+
)
|
218
|
+
}.not_to raise_error
|
219
|
+
else
|
220
|
+
expect{
|
221
|
+
instance.pe_puppet_agent_promoted_package_install(
|
222
|
+
'oh_cp_base', 'oh_cp_dl', 'oh_cp_fl', 'dl_fl', {}
|
223
|
+
)
|
224
|
+
}.to raise_error(ArgumentError, /^Solaris #{version} is not supported/ )
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
end
|
230
|
+
|
231
|
+
context 'on solaris 10' do
|
232
|
+
before :each do
|
233
|
+
solaris_platform = Beaker::Platform.new('solaris-10-x86_64')
|
234
|
+
@opts = {'platform' => solaris_platform}
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'sets a noask file' do
|
238
|
+
allow( instance ).to receive( :execute )
|
239
|
+
allow( instance ).to receive( :exec )
|
240
|
+
expect( instance ).to receive( :noask_file_text )
|
241
|
+
expect( instance ).to receive( :create_remote_file )
|
242
|
+
instance.pe_puppet_agent_promoted_package_install('', '', '', '', {})
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'calls the correct install command' do
|
246
|
+
allow( instance ).to receive( :noask_file_text )
|
247
|
+
allow( instance ).to receive( :create_remote_file )
|
248
|
+
# a number of `execute` calls before the one we're looking for
|
249
|
+
allow( instance ).to receive( :execute )
|
250
|
+
allow( instance ).to receive( :exec )
|
251
|
+
# actual gunzip call to
|
252
|
+
expect( Beaker::Command ).to receive( :new ).with( /^gunzip\ \-c\ / )
|
253
|
+
instance.pe_puppet_agent_promoted_package_install(
|
254
|
+
'oh_cp_base', 'oh_cp_dl', 'oh_cp_fl', 'dl_fl', {}
|
255
|
+
)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context 'on solaris 11' do
|
260
|
+
before :each do
|
261
|
+
solaris_platform = Beaker::Platform.new('solaris-11-x86_64')
|
262
|
+
@opts = {'platform' => solaris_platform}
|
263
|
+
end
|
264
|
+
|
265
|
+
it 'calls the correct install command' do
|
266
|
+
allow( instance ).to receive( :execute )
|
267
|
+
allow( instance ).to receive( :exec )
|
268
|
+
expect( Beaker::Command ).to receive( :new ).with( /^pkg\ install\ \-g / )
|
269
|
+
instance.pe_puppet_agent_promoted_package_install(
|
270
|
+
'oh_cp_base', 'oh_cp_dl', 'oh_cp_fl', 'dl_fl', {}
|
271
|
+
)
|
272
|
+
end
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
189
276
|
end
|
190
277
|
end
|
191
278
|
|
@@ -179,6 +179,26 @@ module Unix
|
|
179
179
|
end
|
180
180
|
end
|
181
181
|
|
182
|
+
describe '#pe_puppet_agent_promoted_package_info' do
|
183
|
+
context 'on ubuntu platforms' do
|
184
|
+
it 'splits the platform string version to get puppet-agent packages (format 9999)' do
|
185
|
+
@platform = 'ubuntu-9999-x42'
|
186
|
+
_, _, download_file = host.pe_puppet_agent_promoted_package_info(
|
187
|
+
'pa_collection'
|
188
|
+
)
|
189
|
+
expect( download_file ).to match( /-ubuntu-99\.99-x42/ )
|
190
|
+
end
|
191
|
+
|
192
|
+
it 'skips splitting the platform string version to get puppet-agent packages when unnecessary (format 99.99)' do
|
193
|
+
@platform = 'ubuntu-88.88-x63'
|
194
|
+
_, _, download_file = host.pe_puppet_agent_promoted_package_info(
|
195
|
+
'pa_collection'
|
196
|
+
)
|
197
|
+
expect( download_file ).to match( /-ubuntu-88\.88-x63/ )
|
198
|
+
end
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
182
202
|
describe '#external_copy_base' do
|
183
203
|
|
184
204
|
it 'returns /root in general' do
|
data/spec/beaker/host_spec.rb
CHANGED
@@ -412,7 +412,7 @@ module Beaker
|
|
412
412
|
@options = { :logger => logger }
|
413
413
|
host.instance_variable_set :@connection, conn
|
414
414
|
args = [ '/source', 'target', {} ]
|
415
|
-
conn_args = args
|
415
|
+
conn_args = args
|
416
416
|
|
417
417
|
expect( logger ).to receive(:trace)
|
418
418
|
expect( conn ).to receive(:scp_to).with( *conn_args ).and_return(Beaker::Result.new(host, 'output!'))
|
@@ -430,7 +430,7 @@ module Beaker
|
|
430
430
|
@options = { :logger => logger }
|
431
431
|
host.instance_variable_set :@connection, conn
|
432
432
|
args = [ '/source', 'target', {} ]
|
433
|
-
conn_args = args
|
433
|
+
conn_args = args
|
434
434
|
|
435
435
|
allow( logger ).to receive(:trace)
|
436
436
|
expect( conn ).to receive(:scp_to).ordered.with(
|
@@ -488,7 +488,7 @@ module Beaker
|
|
488
488
|
conn = double(:connection)
|
489
489
|
@options = { :logger => logger }
|
490
490
|
host.instance_variable_set :@connection, conn
|
491
|
-
args = [ source_path, target_path, {:ignore => [exclude_file]} ]
|
491
|
+
args = [ source_path, target_path, {:ignore => [exclude_file], :dry_run => false} ]
|
492
492
|
|
493
493
|
allow( Dir ).to receive( :glob ).and_return( @fileset1 + @fileset2 )
|
494
494
|
|
@@ -498,12 +498,12 @@ module Beaker
|
|
498
498
|
|
499
499
|
(@fileset1 + @fileset2).each do |file|
|
500
500
|
if file !~ /#{exclude_file}/
|
501
|
-
file_args = [ file, File.join(created_target_path, File.dirname(file).gsub(source_path,'')), {:ignore => [exclude_file]} ]
|
502
|
-
conn_args = file_args
|
501
|
+
file_args = [ file, File.join(created_target_path, File.dirname(file).gsub(source_path,'')), {:ignore => [exclude_file], :dry_run => false} ]
|
502
|
+
conn_args = file_args
|
503
503
|
expect( conn ).to receive(:scp_to).with( *conn_args ).and_return(Beaker::Result.new(host, 'output!'))
|
504
504
|
else
|
505
|
-
file_args = [ file, File.join(created_target_path, File.dirname(file).gsub(source_path,'')), {:ignore => [exclude_file]} ]
|
506
|
-
conn_args = file_args
|
505
|
+
file_args = [ file, File.join(created_target_path, File.dirname(file).gsub(source_path,'')), {:ignore => [exclude_file], :dry_run => false} ]
|
506
|
+
conn_args = file_args
|
507
507
|
expect( conn ).to_not receive(:scp_to).with( *conn_args )
|
508
508
|
end
|
509
509
|
end
|
@@ -553,7 +553,7 @@ module Beaker
|
|
553
553
|
conn = double(:connection)
|
554
554
|
@options = { :logger => logger }
|
555
555
|
host.instance_variable_set :@connection, conn
|
556
|
-
args = [ 'tmp', 'target', {:ignore => [exclude_file]} ]
|
556
|
+
args = [ 'tmp', 'target', {:ignore => [exclude_file], :dry_run => false} ]
|
557
557
|
|
558
558
|
allow( Dir ).to receive( :glob ).and_return( @fileset1 + @fileset2 )
|
559
559
|
|
@@ -562,19 +562,18 @@ module Beaker
|
|
562
562
|
expect( host ).to receive( :mkdir_p ).with('target/tmp/tests2')
|
563
563
|
(@fileset1 + @fileset2).each do |file|
|
564
564
|
if file !~ /#{exclude_file}/
|
565
|
-
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file]} ]
|
566
|
-
conn_args = file_args
|
565
|
+
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file], :dry_run => false} ]
|
566
|
+
conn_args = file_args
|
567
567
|
expect( conn ).to receive(:scp_to).with( *conn_args ).and_return(Beaker::Result.new(host, 'output!'))
|
568
568
|
else
|
569
|
-
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file]} ]
|
570
|
-
conn_args = file_args
|
569
|
+
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file], :dry_run => false} ]
|
570
|
+
conn_args = file_args
|
571
571
|
expect( conn ).to_not receive(:scp_to).with( *conn_args )
|
572
572
|
end
|
573
573
|
end
|
574
574
|
allow( conn ).to receive(:ip).and_return(host['ip'])
|
575
575
|
allow( conn ).to receive(:vmhostname).and_return(host['vmhostname'])
|
576
576
|
allow( conn ).to receive(:hostname).and_return(host.name)
|
577
|
-
|
578
577
|
host.do_scp_to *args
|
579
578
|
end
|
580
579
|
|
@@ -584,7 +583,7 @@ module Beaker
|
|
584
583
|
conn = double(:connection)
|
585
584
|
@options = { :logger => logger }
|
586
585
|
host.instance_variable_set :@connection, conn
|
587
|
-
args = [ 'tmp', 'target', {:ignore => [exclude_file]} ]
|
586
|
+
args = [ 'tmp', 'target', {:ignore => [exclude_file], :dry_run => false} ]
|
588
587
|
|
589
588
|
allow( Dir ).to receive( :glob ).and_return( @fileset1 + @fileset2 )
|
590
589
|
|
@@ -592,13 +591,13 @@ module Beaker
|
|
592
591
|
expect( host ).to_not receive( :mkdir_p ).with('target/tmp/tests')
|
593
592
|
expect( host ).to receive( :mkdir_p ).with('target/tmp/tests2')
|
594
593
|
(@fileset1).each do |file|
|
595
|
-
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file]} ]
|
596
|
-
conn_args = file_args
|
594
|
+
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file], :dry_run => false} ]
|
595
|
+
conn_args = file_args
|
597
596
|
expect( conn ).to_not receive(:scp_to).with( *conn_args )
|
598
597
|
end
|
599
598
|
(@fileset2).each do |file|
|
600
|
-
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file]} ]
|
601
|
-
conn_args = file_args
|
599
|
+
file_args = [ file, File.join('target', File.dirname(file)), {:ignore => [exclude_file], :dry_run => false} ]
|
600
|
+
conn_args = file_args
|
602
601
|
expect( conn ).to receive(:scp_to).with( *conn_args ).and_return(Beaker::Result.new(host, 'output!'))
|
603
602
|
end
|
604
603
|
|
@@ -617,7 +616,7 @@ module Beaker
|
|
617
616
|
@options = { :logger => logger }
|
618
617
|
host.instance_variable_set :@connection, conn
|
619
618
|
args = [ 'source', 'target', {} ]
|
620
|
-
conn_args = args
|
619
|
+
conn_args = args
|
621
620
|
|
622
621
|
expect( logger ).to receive(:debug)
|
623
622
|
expect( conn ).to receive(:scp_from).with( *conn_args ).and_return(Beaker::Result.new(host, 'output!'))
|
@@ -220,6 +220,14 @@ module Beaker
|
|
220
220
|
'container_path' => '/different_mount',
|
221
221
|
'opts' => 'rw',
|
222
222
|
},
|
223
|
+
'mount4' => {
|
224
|
+
'host_path' => './',
|
225
|
+
'container_path' => '/relative_mount',
|
226
|
+
},
|
227
|
+
'mount5' => {
|
228
|
+
'host_path' => 'local_folder',
|
229
|
+
'container_path' => '/another_relative_mount',
|
230
|
+
}
|
223
231
|
}
|
224
232
|
|
225
233
|
expect( ::Docker::Container ).to receive(:create).with({
|
@@ -230,6 +238,8 @@ module Beaker
|
|
230
238
|
'/source_folder:/mount_point',
|
231
239
|
'/another_folder:/another_mount:ro',
|
232
240
|
'/different_folder:/different_mount:rw',
|
241
|
+
"#{File.expand_path('./')}:/relative_mount",
|
242
|
+
"#{File.expand_path('local_folder')}:/another_relative_mount",
|
233
243
|
]
|
234
244
|
}
|
235
245
|
})
|
@@ -73,6 +73,25 @@ module Beaker
|
|
73
73
|
let( :hosts ) { make_hosts( { :platform => 'el-5' } ) }
|
74
74
|
let( :hypervisor ) { Beaker::Hypervisor.new( hosts, options ) }
|
75
75
|
|
76
|
+
context 'if :timesync option set true on host' do
|
77
|
+
it 'does call timesync for host' do
|
78
|
+
hosts[0][:timesync] = true
|
79
|
+
allow( hypervisor ).to receive( :set_env )
|
80
|
+
expect( hypervisor ).to receive( :timesync ).once
|
81
|
+
hypervisor.configure
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
context 'if :timesync option set true but false on host' do
|
86
|
+
it 'does not call timesync for host' do
|
87
|
+
options[:timesync] = true
|
88
|
+
hosts[0][:timesync] = false
|
89
|
+
allow( hypervisor ).to receive( :set_env )
|
90
|
+
expect( hypervisor ).to_not receive( :timesync )
|
91
|
+
hypervisor.configure
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
76
95
|
context "if :disable_iptables option set false" do
|
77
96
|
it "does not call disable_iptables" do
|
78
97
|
options[:disable_iptables] = false
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: beaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.35.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Puppetlabs
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|