puppet 4.10.4 → 4.10.5

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of puppet might be problematic. Click here for more details.

Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/lib/puppet/application/lookup.rb +2 -2
  3. data/lib/puppet/configurer/fact_handler.rb +1 -1
  4. data/lib/puppet/face/epp.rb +26 -24
  5. data/lib/puppet/file_serving/metadata.rb +2 -2
  6. data/lib/puppet/forge.rb +5 -3
  7. data/lib/puppet/forge/cache.rb +1 -0
  8. data/lib/puppet/forge/repository.rb +2 -1
  9. data/lib/puppet/indirector/catalog/compiler.rb +4 -3
  10. data/lib/puppet/indirector/request.rb +9 -8
  11. data/lib/puppet/module.rb +30 -0
  12. data/lib/puppet/network/http/rack/rest.rb +2 -1
  13. data/lib/puppet/parser/compiler.rb +4 -0
  14. data/lib/puppet/parser/functions/assert_type.rb +1 -1
  15. data/lib/puppet/parser/functions/binary_file.rb +1 -1
  16. data/lib/puppet/parser/functions/break.rb +1 -1
  17. data/lib/puppet/parser/functions/defined.rb +1 -1
  18. data/lib/puppet/parser/functions/dig.rb +1 -1
  19. data/lib/puppet/parser/functions/each.rb +1 -1
  20. data/lib/puppet/parser/functions/epp.rb +1 -1
  21. data/lib/puppet/parser/functions/filter.rb +1 -1
  22. data/lib/puppet/parser/functions/find_file.rb +1 -1
  23. data/lib/puppet/parser/functions/inline_epp.rb +1 -1
  24. data/lib/puppet/parser/functions/lest.rb +1 -1
  25. data/lib/puppet/parser/functions/map.rb +1 -1
  26. data/lib/puppet/parser/functions/match.rb +1 -1
  27. data/lib/puppet/parser/functions/new.rb +1 -1
  28. data/lib/puppet/parser/functions/next.rb +1 -1
  29. data/lib/puppet/parser/functions/reduce.rb +1 -1
  30. data/lib/puppet/parser/functions/return.rb +1 -1
  31. data/lib/puppet/parser/functions/reverse_each.rb +1 -1
  32. data/lib/puppet/parser/functions/slice.rb +1 -1
  33. data/lib/puppet/parser/functions/step.rb +1 -1
  34. data/lib/puppet/parser/functions/strftime.rb +1 -1
  35. data/lib/puppet/parser/functions/then.rb +1 -1
  36. data/lib/puppet/parser/functions/type.rb +1 -1
  37. data/lib/puppet/parser/functions/with.rb +1 -1
  38. data/lib/puppet/pops/evaluator/collector_transformer.rb +2 -2
  39. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +2 -2
  40. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +2 -2
  41. data/lib/puppet/pops/merge_strategy.rb +1 -1
  42. data/lib/puppet/provider/nameservice.rb +4 -2
  43. data/lib/puppet/reports/http.rb +4 -2
  44. data/lib/puppet/resource/capability_finder.rb +1 -1
  45. data/lib/puppet/type/file/source.rb +9 -3
  46. data/lib/puppet/util.rb +122 -2
  47. data/lib/puppet/util/execution.rb +1 -1
  48. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  49. data/lib/puppet/version.rb +1 -1
  50. data/locales/puppet.pot +12 -4
  51. data/spec/integration/application/apply_spec.rb +10 -0
  52. data/spec/integration/type/file_spec.rb +29 -0
  53. data/spec/integration/util/execution_spec.rb +8 -0
  54. data/spec/unit/application/lookup_spec.rb +1 -1
  55. data/spec/unit/configurer/fact_handler_spec.rb +30 -8
  56. data/spec/unit/face/epp_face_spec.rb +9 -0
  57. data/spec/unit/file_serving/metadata_spec.rb +21 -0
  58. data/spec/unit/forge/forge_spec.rb +112 -0
  59. data/spec/unit/forge/repository_spec.rb +4 -4
  60. data/spec/unit/functions/lookup_spec.rb +26 -0
  61. data/spec/unit/indirector/catalog/compiler_spec.rb +1 -1
  62. data/spec/unit/indirector/file_bucket_file/file_spec.rb +3 -3
  63. data/spec/unit/indirector/request_spec.rb +16 -1
  64. data/spec/unit/module_spec.rb +29 -0
  65. data/spec/unit/network/http/api/indirected_routes_spec.rb +3 -3
  66. data/spec/unit/network/http/rack/rest_spec.rb +3 -3
  67. data/spec/unit/type/file_spec.rb +46 -0
  68. data/spec/unit/util_spec.rb +230 -1
  69. data/tasks/parallel.rake +12 -7
  70. metadata +184 -194
@@ -1415,6 +1415,52 @@ describe Puppet::Type.type(:file) do
1415
1415
  end
1416
1416
  end
1417
1417
 
1418
+ describe 'when using source' do
1419
+ # different UTF-8 widths
1420
+ # 1-byte A
1421
+ # 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
1422
+ # 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
1423
+ # 4-byte <U+070E> - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
1424
+ let (:mixed_utf8) { "A\u06FF\u16A0\u{2070E}" } # Aۿᚠ<U+070E>
1425
+
1426
+ it 'should allow UTF-8 characters and return a UTF-8 uri' do
1427
+ filename = "/bar #{mixed_utf8}"
1428
+ source = "puppet://foo#{filename}"
1429
+ file[:source] = source
1430
+
1431
+ # intercept the indirector call to provide back mocked metadata for the given URI
1432
+ metadata = stub 'metadata', :source => source
1433
+ metadata.expects(:source=)
1434
+ Puppet::FileServing::Metadata.indirection.expects(:find).with do |path, opts|
1435
+ path == source
1436
+ end.returns metadata
1437
+
1438
+ uri = file.parameters[:source].uri
1439
+ expect(URI.unescape(uri.path)).to eq(filename)
1440
+ expect(uri.path.encoding).to eq(Encoding::UTF_8)
1441
+ end
1442
+
1443
+ it 'should allow UTF-8 characters inside the indirector / terminus code' do
1444
+ filename = "/bar #{mixed_utf8}"
1445
+ source = "puppet://foo#{filename}"
1446
+ file[:source] = source
1447
+
1448
+ # for this test to properly trigger previously errant behavior, the code for
1449
+ # Puppet::FileServing::Metadata.indirection.find must run and produce an
1450
+ # instance of Puppet::Indirector::FileMetadata::Rest that can be amended
1451
+ metadata = stub 'metadata', :source => source
1452
+ metadata.expects(:source=)
1453
+ require 'puppet/indirector/file_metadata/rest'
1454
+ Puppet::Indirector::FileMetadata::Rest.any_instance.expects(:find).with do |req|
1455
+ req.key == filename[1..-1]
1456
+ end.returns(metadata)
1457
+
1458
+ uri = file.parameters[:source].uri
1459
+ expect(URI.unescape(uri.path)).to eq(filename)
1460
+ expect(uri.path.encoding).to eq(Encoding::UTF_8)
1461
+ end
1462
+ end
1463
+
1418
1464
  describe "when using source" do
1419
1465
  before do
1420
1466
  file[:source] = File.expand_path('/one')
@@ -297,6 +297,14 @@ describe Puppet::Util do
297
297
  end
298
298
 
299
299
  describe "#path_to_uri" do
300
+ # different UTF-8 widths
301
+ # 1-byte A
302
+ # 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
303
+ # 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
304
+ # 4-byte ܎ - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
305
+ let (:mixed_utf8) { "A\u06FF\u16A0\u{2070E}" } # Aۿᚠ܎
306
+ let (:mixed_utf8_urlencoded) { "A%DB%BF%E1%9A%A0%F0%A0%9C%8E" }
307
+
300
308
  %w[. .. foo foo/bar foo/../bar].each do |path|
301
309
  it "should reject relative path: #{path}" do
302
310
  expect { Puppet::Util.path_to_uri(path) }.to raise_error(Puppet::Error)
@@ -307,6 +315,42 @@ describe Puppet::Util do
307
315
  expect(Puppet::Util.path_to_uri("/foo bar").path).to eq("/foo%20bar")
308
316
  end
309
317
 
318
+ it "should properly URI encode + and space in path" do
319
+ expect(Puppet::Util.path_to_uri("/foo+foo bar").path).to eq("/foo+foo%20bar")
320
+ end
321
+
322
+ # reserved characters are different for each part
323
+ # https://web.archive.org/web/20151229061347/http://blog.lunatech.com/2009/02/03/what-every-web-developer-must-know-about-url-encoding#Thereservedcharactersaredifferentforeachpart
324
+ # "?" is allowed unescaped anywhere within a query part,
325
+ # "/" is allowed unescaped anywhere within a query part,
326
+ # "=" is allowed unescaped anywhere within a path parameter or query parameter value, and within a path segment,
327
+ # ":@-._~!$&'()*+,;=" are allowed unescaped anywhere within a path segment part,
328
+ # "/?:@-._~!$&'()*+,;=" are allowed unescaped anywhere within a fragment part.
329
+ it "should properly URI encode + and space in path and query" do
330
+ path = "/foo+foo bar?foo+foo bar"
331
+ uri = Puppet::Util.path_to_uri(path)
332
+
333
+ # Ruby 1.9.3 URI#to_s has a bug that returns ASCII always
334
+ # despite parts being UTF-8 strings
335
+ expected_encoding = RUBY_VERSION == '1.9.3' ? Encoding::ASCII : Encoding::UTF_8
336
+
337
+ expect(uri.to_s.encoding).to eq(expected_encoding)
338
+ expect(uri.path).to eq("/foo+foo%20bar")
339
+ # either + or %20 is correct for an encoded space in query
340
+ # + is usually used for backward compatibility, but %20 is preferred for compat with Uri.unescape
341
+ expect(uri.query).to eq("foo%2Bfoo%20bar")
342
+ # complete roundtrip
343
+ expect(URI.unescape(uri.to_s)).to eq("file:#{path}")
344
+ expect(URI.unescape(uri.to_s).encoding).to eq(expected_encoding)
345
+ end
346
+
347
+ it "should perform UTF-8 URI escaping" do
348
+ uri = Puppet::Util.path_to_uri("/#{mixed_utf8}")
349
+
350
+ expect(uri.path.encoding).to eq(Encoding::UTF_8)
351
+ expect(uri.path).to eq("/#{mixed_utf8_urlencoded}")
352
+ end
353
+
310
354
  describe "when using platform :posix" do
311
355
  before :each do
312
356
  Puppet.features.stubs(:posix).returns true
@@ -340,7 +384,172 @@ describe Puppet::Util do
340
384
  it "should convert UNC #{path} to absolute URI" do
341
385
  uri = Puppet::Util.path_to_uri("\\\\server\\#{path}")
342
386
  expect(uri.host).to eq('server')
343
- expect(uri.path).to eq('/' + path)
387
+ expect(uri.path).to eq('/' + Puppet::Util.uri_encode(path))
388
+ end
389
+ end
390
+ end
391
+ end
392
+
393
+ describe "#uri_query_encode" do
394
+ # different UTF-8 widths
395
+ # 1-byte A
396
+ # 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
397
+ # 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
398
+ # 4-byte 𠜎 - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
399
+ let (:mixed_utf8) { "A\u06FF\u16A0\u{2070E}" } # Aۿᚠ𠜎
400
+ let (:mixed_utf8_urlencoded) { "A%DB%BF%E1%9A%A0%F0%A0%9C%8E" }
401
+
402
+ it "should perform basic URI escaping that includes space and +" do
403
+ expect(Puppet::Util.uri_query_encode("foo bar+foo")).to eq("foo%20bar%2Bfoo")
404
+ end
405
+
406
+ it "should URI encode any special characters: = + <space> & * and #" do
407
+ expect(Puppet::Util.uri_query_encode("foo=bar+foo baz&bar=baz qux&special= *&qux=not fragment#")).to eq("foo%3Dbar%2Bfoo%20baz%26bar%3Dbaz%20qux%26special%3D%20%2A%26qux%3Dnot%20fragment%23")
408
+ end
409
+
410
+ [
411
+ "A\u06FF\u16A0\u{2070E}",
412
+ "A\u06FF\u16A0\u{2070E}".force_encoding(Encoding::BINARY)
413
+ ].each do |uri_string|
414
+ it "should perform UTF-8 URI escaping, even when input strings are not UTF-8" do
415
+ uri = Puppet::Util.uri_query_encode(mixed_utf8)
416
+
417
+ expect(uri.encoding).to eq(Encoding::UTF_8)
418
+ expect(uri).to eq(mixed_utf8_urlencoded)
419
+ end
420
+ end
421
+
422
+ it "should be usable by URI::parse" do
423
+ uri = URI::parse("puppet://server/path?" + Puppet::Util.uri_query_encode(mixed_utf8))
424
+
425
+ expect(uri.scheme).to eq('puppet')
426
+ expect(uri.host).to eq('server')
427
+ expect(uri.path).to eq('/path')
428
+ expect(uri.query).to eq(mixed_utf8_urlencoded)
429
+ end
430
+
431
+ it "should be usable by URI::Generic.build" do
432
+ params = {
433
+ :scheme => 'file',
434
+ :host => 'foobar',
435
+ :path => '/path/to',
436
+ :query => Puppet::Util.uri_query_encode(mixed_utf8)
437
+ }
438
+
439
+ uri = URI::Generic.build(params)
440
+
441
+ expect(uri.scheme).to eq('file')
442
+ expect(uri.host).to eq('foobar')
443
+ expect(uri.path).to eq("/path/to")
444
+ expect(uri.query).to eq(mixed_utf8_urlencoded)
445
+ end
446
+ end
447
+
448
+ describe "#uri_encode" do
449
+ # different UTF-8 widths
450
+ # 1-byte A
451
+ # 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
452
+ # 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
453
+ # 4-byte ܎ - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
454
+ let (:mixed_utf8) { "A\u06FF\u16A0\u{2070E}" } # Aۿᚠ܎
455
+ let (:mixed_utf8_urlencoded) { "A%DB%BF%E1%9A%A0%F0%A0%9C%8E" }
456
+
457
+ it "should perform URI escaping" do
458
+ expect(Puppet::Util.uri_encode("/foo bar")).to eq("/foo%20bar")
459
+ end
460
+
461
+ [
462
+ "A\u06FF\u16A0\u{2070E}",
463
+ "A\u06FF\u16A0\u{2070E}".force_encoding(Encoding::BINARY)
464
+ ].each do |uri_string|
465
+ it "should perform UTF-8 URI escaping, even when input strings are not UTF-8" do
466
+ uri = Puppet::Util.uri_encode(mixed_utf8)
467
+
468
+ expect(uri.encoding).to eq(Encoding::UTF_8)
469
+ expect(uri).to eq(mixed_utf8_urlencoded)
470
+ end
471
+ end
472
+
473
+ it "should treat & and = as delimiters in a query string, but URI encode other special characters: + <space> * and #" do
474
+ input = "http://foo.bar.com/path?foo=bar+foo baz&bar=baz qux&special= *&qux=not fragment#"
475
+ expected_output = "http://foo.bar.com/path?foo=bar%2Bfoo%20baz&bar=baz%20qux&special=%20%2A&qux=not%20fragment%23"
476
+ expect(Puppet::Util.uri_encode(input)).to eq(expected_output)
477
+ end
478
+
479
+ it "should be usable by URI::parse" do
480
+ uri = URI::parse(Puppet::Util.uri_encode("puppet://server/path/to/#{mixed_utf8}"))
481
+
482
+ expect(uri.scheme).to eq('puppet')
483
+ expect(uri.host).to eq('server')
484
+ expect(uri.path).to eq("/path/to/#{mixed_utf8_urlencoded}")
485
+ end
486
+
487
+ it "should be usable by URI::Generic.build" do
488
+ params = {
489
+ :scheme => 'file',
490
+ :host => 'foobar',
491
+ :path => Puppet::Util.uri_encode("/path/to/#{mixed_utf8}")
492
+ }
493
+
494
+ uri = URI::Generic.build(params)
495
+
496
+ expect(uri.scheme).to eq('file')
497
+ expect(uri.host).to eq('foobar')
498
+ expect(uri.path).to eq("/path/to/#{mixed_utf8_urlencoded}")
499
+ end
500
+
501
+ describe "when using platform :posix" do
502
+ before :each do
503
+ Puppet.features.stubs(:posix).returns true
504
+ Puppet.features.stubs(:microsoft_windows?).returns false
505
+ end
506
+
507
+ %w[/ /foo /foo/../bar].each do |path|
508
+ it "should not replace / in #{path} with %2F" do
509
+ expect(Puppet::Util.uri_encode(path)).to eq(path)
510
+ end
511
+ end
512
+ end
513
+
514
+ describe "with fragment support" do
515
+ context "disabled by default" do
516
+ it "should encode # as %23 in path" do
517
+ encoded = Puppet::Util.uri_encode("/foo bar#fragment")
518
+ expect(encoded).to eq("/foo%20bar%23fragment")
519
+ end
520
+
521
+ it "should encode # as %23 in query" do
522
+ encoded = Puppet::Util.uri_encode("/foo bar?baz+qux#fragment")
523
+ expect(encoded).to eq("/foo%20bar?baz%2Bqux%23fragment")
524
+ end
525
+ end
526
+
527
+ context "optionally enabled" do
528
+ it "should leave fragment delimiter # after encoded paths" do
529
+ encoded = Puppet::Util.uri_encode("/foo bar#fragment", { :allow_fragment => true })
530
+ expect(encoded).to eq("/foo%20bar#fragment")
531
+ end
532
+
533
+ it "should leave fragment delimiter # after encoded query" do
534
+ encoded = Puppet::Util.uri_encode("/foo bar?baz+qux#fragment", { :allow_fragment => true })
535
+ expect(encoded).to eq("/foo%20bar?baz%2Bqux#fragment")
536
+ end
537
+ end
538
+ end
539
+
540
+ describe "when using platform :windows" do
541
+ before :each do
542
+ Puppet.features.stubs(:posix).returns false
543
+ Puppet.features.stubs(:microsoft_windows?).returns true
544
+ end
545
+
546
+ it "should url encode \\ as %5C, but not replace : as %3F" do
547
+ expect(Puppet::Util.uri_encode('c:\\foo\\bar\\baz')).to eq('c:%5Cfoo%5Cbar%5Cbaz')
548
+ end
549
+
550
+ %w[C:/ C:/foo/bar].each do |path|
551
+ it "should not replace / in #{path} with %2F" do
552
+ expect(Puppet::Util.uri_encode(path)).to eq(path)
344
553
  end
345
554
  end
346
555
  end
@@ -349,6 +558,13 @@ describe Puppet::Util do
349
558
  describe ".uri_to_path" do
350
559
  require 'uri'
351
560
 
561
+ # different UTF-8 widths
562
+ # 1-byte A
563
+ # 2-byte ۿ - http://www.fileformat.info/info/unicode/char/06ff/index.htm - 0xDB 0xBF / 219 191
564
+ # 3-byte ᚠ - http://www.fileformat.info/info/unicode/char/16A0/index.htm - 0xE1 0x9A 0xA0 / 225 154 160
565
+ # 4-byte 𠜎 - http://www.fileformat.info/info/unicode/char/2070E/index.htm - 0xF0 0xA0 0x9C 0x8E / 240 160 156 142
566
+ let (:mixed_utf8) { "A\u06FF\u16A0\u{2070E}" } # Aۿᚠ𠜎
567
+
352
568
  it "should strip host component" do
353
569
  expect(Puppet::Util.uri_to_path(URI.parse('http://foo/bar'))).to eq('/bar')
354
570
  end
@@ -361,6 +577,19 @@ describe Puppet::Util do
361
577
  expect(Puppet::Util.uri_to_path(URI.parse('http://foo/bar%20baz'))).to eq('/bar baz')
362
578
  end
363
579
 
580
+
581
+ [
582
+ "http://foo/A%DB%BF%E1%9A%A0%F0%A0%9C%8E",
583
+ "http://foo/A%DB%BF%E1%9A%A0%F0%A0%9C%8E".force_encoding(Encoding::ASCII)
584
+ ].each do |uri_string|
585
+ it "should return paths as UTF-8" do
586
+ path = Puppet::Util.uri_to_path(URI.parse(uri_string))
587
+
588
+ expect(path).to eq("/#{mixed_utf8}")
589
+ expect(path.encoding).to eq(Encoding::UTF_8)
590
+ end
591
+ end
592
+
364
593
  it "should be nil-safe" do
365
594
  expect(Puppet::Util.uri_to_path(nil)).to be_nil
366
595
  end
@@ -156,17 +156,21 @@ else
156
156
 
157
157
  #
158
158
  # Responsible for parallelizing spec testing.
159
+ # Optional options list will be passed to rspec.
159
160
  #
160
161
  class Parallelizer
161
162
  # Number of processes to use
162
163
  attr_reader :process_count
163
164
  # Approximate size of each group of tests
164
165
  attr_reader :group_size
166
+ # Options list for rspec
167
+ attr_reader :options
165
168
 
166
- def initialize(process_count, group_size, color)
169
+ def initialize(process_count, group_size, color, options = [])
167
170
  @process_count = process_count
168
171
  @group_size = group_size
169
172
  @color = color
173
+ @options = options
170
174
  end
171
175
 
172
176
  def color?
@@ -180,7 +184,7 @@ else
180
184
  fail red('error: no specs were found') if groups.length == 0
181
185
 
182
186
  begin
183
- run_specs groups
187
+ run_specs(groups, options)
184
188
  ensure
185
189
  groups.each do |file|
186
190
  File.unlink(file)
@@ -211,7 +215,7 @@ else
211
215
  spec_group_files
212
216
  end
213
217
 
214
- def run_specs(groups)
218
+ def run_specs(groups, options)
215
219
  puts "Processing #{groups.length} spec group(s) with #{@process_count} worker(s)"
216
220
 
217
221
  interrupted = false
@@ -246,7 +250,8 @@ else
246
250
  break unless group && !interrupted
247
251
 
248
252
  # Spawn the worker process with redirected output
249
- io = IO.popen("ruby util/rspec_runner #{group}")
253
+ options_string = options ? options.join(' ') : ''
254
+ io = IO.popen("ruby util/rspec_runner #{group} #{options_string}")
250
255
  pids[thread_id] = io.pid
251
256
 
252
257
  # TODO: make the buffer pluggable to handle other output formats like documentation
@@ -391,15 +396,15 @@ else
391
396
  config.color
392
397
  end
393
398
 
394
- desc 'Runs specs in parallel.'
395
- task 'spec', :process_count, :group_size do |_, args|
399
+ desc 'Runs specs in parallel. Extra args are passed to rspec.'
400
+ task 'spec', [:process_count, :group_size] do |_, args|
396
401
  # Default group size in rspec examples
397
402
  DEFAULT_GROUP_SIZE = 1000
398
403
 
399
404
  process_count = [(args[:process_count] || Facter.value("processorcount")).to_i, 1].max
400
405
  group_size = [(args[:group_size] || DEFAULT_GROUP_SIZE).to_i, 1].max
401
406
 
402
- abort unless Parallel::RSpec::Parallelizer.new(process_count, group_size, color_output?).run
407
+ abort unless Parallel::RSpec::Parallelizer.new(process_count, group_size, color_output?, args.extras).run
403
408
  end
404
409
  end
405
410
  end
metadata CHANGED
@@ -1,112 +1,101 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.10.4
5
- prerelease:
4
+ version: 4.10.5
6
5
  platform: ruby
7
6
  authors:
8
7
  - Puppet Labs
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2017-06-19 00:00:00.000000000 Z
11
+ date: 2017-07-26 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: facter
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>'
17
+ - - ">"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '2.0'
22
- - - <
20
+ - - "<"
23
21
  - !ruby/object:Gem::Version
24
22
  version: '4'
25
23
  type: :runtime
26
24
  prerelease: false
27
25
  version_requirements: !ruby/object:Gem::Requirement
28
- none: false
29
26
  requirements:
30
- - - ! '>'
27
+ - - ">"
31
28
  - !ruby/object:Gem::Version
32
29
  version: '2.0'
33
- - - <
30
+ - - "<"
34
31
  - !ruby/object:Gem::Version
35
32
  version: '4'
36
33
  - !ruby/object:Gem::Dependency
37
34
  name: hiera
38
35
  requirement: !ruby/object:Gem::Requirement
39
- none: false
40
36
  requirements:
41
- - - ! '>='
37
+ - - ">="
42
38
  - !ruby/object:Gem::Version
43
39
  version: '2.0'
44
- - - <
40
+ - - "<"
45
41
  - !ruby/object:Gem::Version
46
42
  version: '4'
47
43
  type: :runtime
48
44
  prerelease: false
49
45
  version_requirements: !ruby/object:Gem::Requirement
50
- none: false
51
46
  requirements:
52
- - - ! '>='
47
+ - - ">="
53
48
  - !ruby/object:Gem::Version
54
49
  version: '2.0'
55
- - - <
50
+ - - "<"
56
51
  - !ruby/object:Gem::Version
57
52
  version: '4'
58
53
  - !ruby/object:Gem::Dependency
59
54
  name: json_pure
60
55
  requirement: !ruby/object:Gem::Requirement
61
- none: false
62
56
  requirements:
63
- - - ~>
57
+ - - "~>"
64
58
  - !ruby/object:Gem::Version
65
59
  version: '1.8'
66
60
  type: :runtime
67
61
  prerelease: false
68
62
  version_requirements: !ruby/object:Gem::Requirement
69
- none: false
70
63
  requirements:
71
- - - ~>
64
+ - - "~>"
72
65
  - !ruby/object:Gem::Version
73
66
  version: '1.8'
74
67
  - !ruby/object:Gem::Dependency
75
68
  name: gettext-setup
76
69
  requirement: !ruby/object:Gem::Requirement
77
- none: false
78
70
  requirements:
79
- - - ! '>='
71
+ - - ">="
80
72
  - !ruby/object:Gem::Version
81
73
  version: '0.10'
82
- - - <
74
+ - - "<"
83
75
  - !ruby/object:Gem::Version
84
76
  version: '1'
85
77
  type: :runtime
86
78
  prerelease: false
87
79
  version_requirements: !ruby/object:Gem::Requirement
88
- none: false
89
80
  requirements:
90
- - - ! '>='
81
+ - - ">="
91
82
  - !ruby/object:Gem::Version
92
83
  version: '0.10'
93
- - - <
84
+ - - "<"
94
85
  - !ruby/object:Gem::Version
95
86
  version: '1'
96
87
  - !ruby/object:Gem::Dependency
97
88
  name: locale
98
89
  requirement: !ruby/object:Gem::Requirement
99
- none: false
100
90
  requirements:
101
- - - ~>
91
+ - - "~>"
102
92
  - !ruby/object:Gem::Version
103
93
  version: '2.1'
104
94
  type: :runtime
105
95
  prerelease: false
106
96
  version_requirements: !ruby/object:Gem::Requirement
107
- none: false
108
97
  requirements:
109
- - - ~>
98
+ - - "~>"
110
99
  - !ruby/object:Gem::Version
111
100
  version: '2.1'
112
101
  description: Puppet, an automated configuration management tool
@@ -123,9 +112,154 @@ files:
123
112
  - MAINTAINERS
124
113
  - README.md
125
114
  - Rakefile
126
- - install.rb
127
115
  - bin/extlookup2hiera
128
116
  - bin/puppet
117
+ - conf/auth.conf
118
+ - conf/environment.conf
119
+ - conf/fileserver.conf
120
+ - conf/puppet.conf
121
+ - examples/hiera/README.md
122
+ - examples/hiera/etc/hiera.yaml
123
+ - examples/hiera/etc/hieradb/common.yaml
124
+ - examples/hiera/etc/hieradb/dc1.yaml
125
+ - examples/hiera/etc/hieradb/development.yaml
126
+ - examples/hiera/etc/puppet.conf
127
+ - examples/hiera/modules/data/manifests/common.pp
128
+ - examples/hiera/modules/ntp/manifests/config.pp
129
+ - examples/hiera/modules/ntp/manifests/data.pp
130
+ - examples/hiera/modules/ntp/templates/ntp.conf.erb
131
+ - examples/hiera/modules/users/manifests/common.pp
132
+ - examples/hiera/modules/users/manifests/dc1.pp
133
+ - examples/hiera/modules/users/manifests/development.pp
134
+ - examples/hiera/site.pp
135
+ - ext/README.environment
136
+ - ext/autotest/Rakefile
137
+ - ext/autotest/config
138
+ - ext/autotest/readme.rst
139
+ - ext/build_defaults.yaml
140
+ - ext/cert_inspector
141
+ - ext/dbfix.sql
142
+ - ext/debian/README.Debian
143
+ - ext/debian/README.source
144
+ - ext/debian/TODO.Debian
145
+ - ext/debian/changelog.erb
146
+ - ext/debian/compat
147
+ - ext/debian/control
148
+ - ext/debian/copyright
149
+ - ext/debian/docs
150
+ - ext/debian/fileserver.conf
151
+ - ext/debian/puppet-common.dirs
152
+ - ext/debian/puppet-common.install
153
+ - ext/debian/puppet-common.lintian-overrides
154
+ - ext/debian/puppet-common.manpages
155
+ - ext/debian/puppet-common.postinst
156
+ - ext/debian/puppet-common.postrm
157
+ - ext/debian/puppet-el.dirs
158
+ - ext/debian/puppet-el.emacsen-install
159
+ - ext/debian/puppet-el.emacsen-remove
160
+ - ext/debian/puppet-el.emacsen-startup
161
+ - ext/debian/puppet-el.install
162
+ - ext/debian/puppet-testsuite.install
163
+ - ext/debian/puppet-testsuite.lintian-overrides
164
+ - ext/debian/puppet.default
165
+ - ext/debian/puppet.init
166
+ - ext/debian/puppet.lintian-overrides
167
+ - ext/debian/puppet.logrotate
168
+ - ext/debian/puppet.postinst
169
+ - ext/debian/puppet.postrm
170
+ - ext/debian/puppet.preinst
171
+ - ext/debian/puppetmaster-common.install
172
+ - ext/debian/puppetmaster-common.manpages
173
+ - ext/debian/puppetmaster-common.postinst
174
+ - ext/debian/puppetmaster-passenger.dirs
175
+ - ext/debian/puppetmaster-passenger.postinst
176
+ - ext/debian/puppetmaster-passenger.postrm
177
+ - ext/debian/puppetmaster.README.debian
178
+ - ext/debian/puppetmaster.default
179
+ - ext/debian/puppetmaster.init
180
+ - ext/debian/puppetmaster.lintian-overrides
181
+ - ext/debian/puppetmaster.postinst
182
+ - ext/debian/puppetmaster.postrm
183
+ - ext/debian/puppetmaster.preinst
184
+ - ext/debian/rules
185
+ - ext/debian/source/format
186
+ - ext/debian/source/options
187
+ - ext/debian/vim-puppet.README.Debian
188
+ - ext/debian/vim-puppet.dirs
189
+ - ext/debian/vim-puppet.yaml
190
+ - ext/debian/watch
191
+ - ext/emacs/puppet-mode-init.el
192
+ - ext/emacs/puppet-mode.el
193
+ - ext/envpuppet
194
+ - ext/envpuppet.bat
195
+ - ext/freebsd/puppetd
196
+ - ext/freebsd/puppetmasterd
197
+ - ext/gentoo/conf.d/puppet
198
+ - ext/gentoo/conf.d/puppetmaster
199
+ - ext/gentoo/init.d/puppet
200
+ - ext/gentoo/init.d/puppetmaster
201
+ - ext/gentoo/puppet/fileserver.conf
202
+ - ext/ips/puppet-agent
203
+ - ext/ips/puppet-master
204
+ - ext/ips/puppet.p5m.erb
205
+ - ext/ips/puppetagent.xml
206
+ - ext/ips/puppetmaster.xml
207
+ - ext/ips/rules
208
+ - ext/ips/transforms
209
+ - ext/ldap/puppet.schema
210
+ - ext/logcheck/puppet
211
+ - ext/nagios/check_puppet.rb
212
+ - ext/osx/file_mapping.yaml
213
+ - ext/osx/postflight.erb
214
+ - ext/osx/preflight.erb
215
+ - ext/osx/prototype.plist.erb
216
+ - ext/osx/puppet.plist
217
+ - ext/project_data.yaml
218
+ - ext/puppet-test
219
+ - ext/pure_ruby_dsl/dsl_test.rb
220
+ - ext/rack/config.ru
221
+ - ext/rack/example-passenger-vhost.conf
222
+ - ext/redhat/client.init
223
+ - ext/redhat/client.sysconfig
224
+ - ext/redhat/fileserver.conf
225
+ - ext/redhat/logrotate
226
+ - ext/redhat/puppet.spec.erb
227
+ - ext/redhat/server.init
228
+ - ext/redhat/server.sysconfig
229
+ - ext/regexp_nodes/classes/databases
230
+ - ext/regexp_nodes/classes/webservers
231
+ - ext/regexp_nodes/environment/development
232
+ - ext/regexp_nodes/parameters/service/prod
233
+ - ext/regexp_nodes/parameters/service/qa
234
+ - ext/regexp_nodes/parameters/service/sandbox
235
+ - ext/regexp_nodes/regexp_nodes.rb
236
+ - ext/solaris/pkginfo
237
+ - ext/solaris/smf/puppet
238
+ - ext/solaris/smf/puppet.xml
239
+ - ext/solaris/smf/puppetd.xml
240
+ - ext/solaris/smf/puppetmasterd.xml
241
+ - ext/solaris/smf/svc-puppetd
242
+ - ext/solaris/smf/svc-puppetmasterd
243
+ - ext/suse/client.init
244
+ - ext/suse/puppet.spec
245
+ - ext/suse/server.init
246
+ - ext/systemd/puppet.service
247
+ - ext/upload_facts.rb
248
+ - ext/vim/README
249
+ - ext/vim/ftdetect/puppet.vim
250
+ - ext/vim/ftplugin/puppet.vim
251
+ - ext/vim/indent/puppet.vim
252
+ - ext/vim/syntax/puppet.vim
253
+ - ext/windows/eventlog/Rakefile
254
+ - ext/windows/eventlog/puppetres.dll
255
+ - ext/windows/eventlog/puppetres.mc
256
+ - ext/windows/puppet_interactive.bat
257
+ - ext/windows/puppet_shell.bat
258
+ - ext/windows/run_puppet_interactive.bat
259
+ - ext/windows/service/daemon.bat
260
+ - ext/windows/service/daemon.rb
261
+ - ext/yaml_nodes.rb
262
+ - install.rb
129
263
  - lib/hiera/puppet_function.rb
130
264
  - lib/hiera/scope.rb
131
265
  - lib/hiera_puppet.rb
@@ -1397,10 +1531,8 @@ files:
1397
1531
  - lib/puppet/version.rb
1398
1532
  - lib/puppet_x.rb
1399
1533
  - lib/semver.rb
1400
- - conf/auth.conf
1401
- - conf/environment.conf
1402
- - conf/fileserver.conf
1403
- - conf/puppet.conf
1534
+ - locales/config.yaml
1535
+ - locales/puppet.pot
1404
1536
  - man/man5/puppet.conf.5
1405
1537
  - man/man8/extlookup2hiera.8
1406
1538
  - man/man8/puppet-agent.8
@@ -1433,155 +1565,6 @@ files:
1433
1565
  - man/man8/puppet-resource_type.8
1434
1566
  - man/man8/puppet-status.8
1435
1567
  - man/man8/puppet.8
1436
- - examples/hiera/README.md
1437
- - examples/hiera/etc/hiera.yaml
1438
- - examples/hiera/etc/hieradb/common.yaml
1439
- - examples/hiera/etc/hieradb/dc1.yaml
1440
- - examples/hiera/etc/hieradb/development.yaml
1441
- - examples/hiera/etc/puppet.conf
1442
- - examples/hiera/modules/data/manifests/common.pp
1443
- - examples/hiera/modules/ntp/manifests/config.pp
1444
- - examples/hiera/modules/ntp/manifests/data.pp
1445
- - examples/hiera/modules/ntp/templates/ntp.conf.erb
1446
- - examples/hiera/modules/users/manifests/common.pp
1447
- - examples/hiera/modules/users/manifests/dc1.pp
1448
- - examples/hiera/modules/users/manifests/development.pp
1449
- - examples/hiera/site.pp
1450
- - ext/README.environment
1451
- - ext/autotest/Rakefile
1452
- - ext/autotest/config
1453
- - ext/autotest/readme.rst
1454
- - ext/build_defaults.yaml
1455
- - ext/cert_inspector
1456
- - ext/dbfix.sql
1457
- - ext/debian/README.Debian
1458
- - ext/debian/README.source
1459
- - ext/debian/TODO.Debian
1460
- - ext/debian/changelog.erb
1461
- - ext/debian/compat
1462
- - ext/debian/control
1463
- - ext/debian/copyright
1464
- - ext/debian/docs
1465
- - ext/debian/fileserver.conf
1466
- - ext/debian/puppet-common.dirs
1467
- - ext/debian/puppet-common.install
1468
- - ext/debian/puppet-common.lintian-overrides
1469
- - ext/debian/puppet-common.manpages
1470
- - ext/debian/puppet-common.postinst
1471
- - ext/debian/puppet-common.postrm
1472
- - ext/debian/puppet-el.dirs
1473
- - ext/debian/puppet-el.emacsen-install
1474
- - ext/debian/puppet-el.emacsen-remove
1475
- - ext/debian/puppet-el.emacsen-startup
1476
- - ext/debian/puppet-el.install
1477
- - ext/debian/puppet-testsuite.install
1478
- - ext/debian/puppet-testsuite.lintian-overrides
1479
- - ext/debian/puppet.default
1480
- - ext/debian/puppet.init
1481
- - ext/debian/puppet.lintian-overrides
1482
- - ext/debian/puppet.logrotate
1483
- - ext/debian/puppet.postinst
1484
- - ext/debian/puppet.postrm
1485
- - ext/debian/puppet.preinst
1486
- - ext/debian/puppetmaster-common.install
1487
- - ext/debian/puppetmaster-common.manpages
1488
- - ext/debian/puppetmaster-common.postinst
1489
- - ext/debian/puppetmaster-passenger.dirs
1490
- - ext/debian/puppetmaster-passenger.postinst
1491
- - ext/debian/puppetmaster-passenger.postrm
1492
- - ext/debian/puppetmaster.README.debian
1493
- - ext/debian/puppetmaster.default
1494
- - ext/debian/puppetmaster.init
1495
- - ext/debian/puppetmaster.lintian-overrides
1496
- - ext/debian/puppetmaster.postinst
1497
- - ext/debian/puppetmaster.postrm
1498
- - ext/debian/puppetmaster.preinst
1499
- - ext/debian/rules
1500
- - ext/debian/source/format
1501
- - ext/debian/source/options
1502
- - ext/debian/vim-puppet.README.Debian
1503
- - ext/debian/vim-puppet.dirs
1504
- - ext/debian/vim-puppet.yaml
1505
- - ext/debian/watch
1506
- - ext/emacs/puppet-mode-init.el
1507
- - ext/emacs/puppet-mode.el
1508
- - ext/envpuppet
1509
- - ext/envpuppet.bat
1510
- - ext/freebsd/puppetd
1511
- - ext/freebsd/puppetmasterd
1512
- - ext/gentoo/conf.d/puppet
1513
- - ext/gentoo/conf.d/puppetmaster
1514
- - ext/gentoo/init.d/puppet
1515
- - ext/gentoo/init.d/puppetmaster
1516
- - ext/gentoo/puppet/fileserver.conf
1517
- - ext/ips/puppet-agent
1518
- - ext/ips/puppet-master
1519
- - ext/ips/puppet.p5m.erb
1520
- - ext/ips/puppetagent.xml
1521
- - ext/ips/puppetmaster.xml
1522
- - ext/ips/rules
1523
- - ext/ips/transforms
1524
- - ext/ldap/puppet.schema
1525
- - ext/logcheck/puppet
1526
- - ext/nagios/check_puppet.rb
1527
- - ext/osx/file_mapping.yaml
1528
- - ext/osx/postflight.erb
1529
- - ext/osx/preflight.erb
1530
- - ext/osx/prototype.plist.erb
1531
- - ext/osx/puppet.plist
1532
- - ext/project_data.yaml
1533
- - ext/puppet-test
1534
- - ext/pure_ruby_dsl/dsl_test.rb
1535
- - ext/rack/config.ru
1536
- - ext/rack/example-passenger-vhost.conf
1537
- - ext/redhat/client.init
1538
- - ext/redhat/client.sysconfig
1539
- - ext/redhat/fileserver.conf
1540
- - ext/redhat/logrotate
1541
- - ext/redhat/puppet.spec.erb
1542
- - ext/redhat/server.init
1543
- - ext/redhat/server.sysconfig
1544
- - ext/regexp_nodes/classes/databases
1545
- - ext/regexp_nodes/classes/webservers
1546
- - ext/regexp_nodes/environment/development
1547
- - ext/regexp_nodes/parameters/service/prod
1548
- - ext/regexp_nodes/parameters/service/qa
1549
- - ext/regexp_nodes/parameters/service/sandbox
1550
- - ext/regexp_nodes/regexp_nodes.rb
1551
- - ext/solaris/pkginfo
1552
- - ext/solaris/smf/puppet
1553
- - ext/solaris/smf/puppet.xml
1554
- - ext/solaris/smf/puppetd.xml
1555
- - ext/solaris/smf/puppetmasterd.xml
1556
- - ext/solaris/smf/svc-puppetd
1557
- - ext/solaris/smf/svc-puppetmasterd
1558
- - ext/suse/client.init
1559
- - ext/suse/puppet.spec
1560
- - ext/suse/server.init
1561
- - ext/systemd/puppet.service
1562
- - ext/upload_facts.rb
1563
- - ext/vim/README
1564
- - ext/vim/ftdetect/puppet.vim
1565
- - ext/vim/ftplugin/puppet.vim
1566
- - ext/vim/indent/puppet.vim
1567
- - ext/vim/syntax/puppet.vim
1568
- - ext/windows/eventlog/Rakefile
1569
- - ext/windows/eventlog/puppetres.dll
1570
- - ext/windows/eventlog/puppetres.mc
1571
- - ext/windows/puppet_interactive.bat
1572
- - ext/windows/puppet_shell.bat
1573
- - ext/windows/run_puppet_interactive.bat
1574
- - ext/windows/service/daemon.bat
1575
- - ext/windows/service/daemon.rb
1576
- - ext/yaml_nodes.rb
1577
- - tasks/benchmark.rake
1578
- - tasks/cfpropertylist.rake
1579
- - tasks/ci.rake
1580
- - tasks/manpages.rake
1581
- - tasks/memwalk.rake
1582
- - tasks/parallel.rake
1583
- - tasks/parser.rake
1584
- - tasks/yard.rake
1585
1568
  - spec/fixtures/faulty_face/puppet/face/syntax.rb
1586
1569
  - spec/fixtures/hiera.yaml
1587
1570
  - spec/fixtures/integration/node/environment/sitedir/00_a.pp
@@ -2213,6 +2196,7 @@ files:
2213
2196
  - spec/unit/file_system/uniquefile_spec.rb
2214
2197
  - spec/unit/file_system_spec.rb
2215
2198
  - spec/unit/forge/errors_spec.rb
2199
+ - spec/unit/forge/forge_spec.rb
2216
2200
  - spec/unit/forge/module_release_spec.rb
2217
2201
  - spec/unit/forge/repository_spec.rb
2218
2202
  - spec/unit/forge_spec.rb
@@ -2832,36 +2816,41 @@ files:
2832
2816
  - spec/unit/util_spec.rb
2833
2817
  - spec/unit/version_spec.rb
2834
2818
  - spec/watchr.rb
2835
- - locales/config.yaml
2836
- - locales/puppet.pot
2819
+ - tasks/benchmark.rake
2820
+ - tasks/cfpropertylist.rake
2821
+ - tasks/ci.rake
2822
+ - tasks/manpages.rake
2823
+ - tasks/memwalk.rake
2824
+ - tasks/parallel.rake
2825
+ - tasks/parser.rake
2826
+ - tasks/yard.rake
2837
2827
  homepage: https://github.com/puppetlabs/puppet
2838
2828
  licenses: []
2829
+ metadata: {}
2839
2830
  post_install_message:
2840
2831
  rdoc_options:
2841
- - --title
2832
+ - "--title"
2842
2833
  - Puppet - Configuration Management
2843
- - --main
2834
+ - "--main"
2844
2835
  - README.md
2845
- - --line-numbers
2836
+ - "--line-numbers"
2846
2837
  require_paths:
2847
2838
  - lib
2848
2839
  required_ruby_version: !ruby/object:Gem::Requirement
2849
- none: false
2850
2840
  requirements:
2851
- - - ! '>='
2841
+ - - ">="
2852
2842
  - !ruby/object:Gem::Version
2853
2843
  version: 1.9.3
2854
2844
  required_rubygems_version: !ruby/object:Gem::Requirement
2855
- none: false
2856
2845
  requirements:
2857
- - - ! '>'
2846
+ - - ">"
2858
2847
  - !ruby/object:Gem::Version
2859
2848
  version: 1.3.1
2860
2849
  requirements: []
2861
2850
  rubyforge_project: puppet
2862
- rubygems_version: 1.8.23
2851
+ rubygems_version: 2.4.8
2863
2852
  signing_key:
2864
- specification_version: 3
2853
+ specification_version: 4
2865
2854
  summary: Puppet, an automated configuration management tool
2866
2855
  test_files:
2867
2856
  - spec/fixtures/faulty_face/puppet/face/syntax.rb
@@ -3495,6 +3484,7 @@ test_files:
3495
3484
  - spec/unit/file_system/uniquefile_spec.rb
3496
3485
  - spec/unit/file_system_spec.rb
3497
3486
  - spec/unit/forge/errors_spec.rb
3487
+ - spec/unit/forge/forge_spec.rb
3498
3488
  - spec/unit/forge/module_release_spec.rb
3499
3489
  - spec/unit/forge/repository_spec.rb
3500
3490
  - spec/unit/forge_spec.rb