puppet 7.12.1-x86-mingw32 → 7.15.0-x86-mingw32

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.
Files changed (100) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +2 -2
  4. data/Gemfile.lock +36 -31
  5. data/ext/project_data.yaml +1 -1
  6. data/lib/puppet/application/lookup.rb +74 -24
  7. data/lib/puppet/concurrent/thread_local_singleton.rb +5 -3
  8. data/lib/puppet/configurer.rb +8 -14
  9. data/lib/puppet/defaults.rb +13 -1
  10. data/lib/puppet/face/generate.rb +2 -0
  11. data/lib/puppet/file_serving/metadata.rb +3 -0
  12. data/lib/puppet/file_system/file_impl.rb +7 -7
  13. data/lib/puppet/file_system/jruby.rb +1 -1
  14. data/lib/puppet/file_system/path_pattern.rb +10 -15
  15. data/lib/puppet/file_system/uniquefile.rb +1 -1
  16. data/lib/puppet/file_system/windows.rb +4 -4
  17. data/lib/puppet/file_system.rb +1 -1
  18. data/lib/puppet/functions/next.rb +18 -1
  19. data/lib/puppet/functions/tree_each.rb +0 -1
  20. data/lib/puppet/functions/versioncmp.rb +6 -2
  21. data/lib/puppet/generate/type.rb +9 -0
  22. data/lib/puppet/graph/simple_graph.rb +2 -1
  23. data/lib/puppet/http/client.rb +1 -1
  24. data/lib/puppet/node.rb +1 -1
  25. data/lib/puppet/pops/parser/code_merger.rb +4 -4
  26. data/lib/puppet/pops/parser/egrammar.ra +2 -0
  27. data/lib/puppet/pops/parser/eparser.rb +574 -558
  28. data/lib/puppet/pops/serialization/to_data_converter.rb +6 -18
  29. data/lib/puppet/pops/validation/checker4_0.rb +7 -2
  30. data/lib/puppet/provider/service/init.rb +5 -4
  31. data/lib/puppet/resource/type_collection.rb +21 -17
  32. data/lib/puppet/ssl/verifier.rb +3 -1
  33. data/lib/puppet/transaction/persistence.rb +22 -12
  34. data/lib/puppet/type/exec.rb +1 -1
  35. data/lib/puppet/type/file/data_sync.rb +1 -1
  36. data/lib/puppet/type/file/group.rb +8 -1
  37. data/lib/puppet/type/file/owner.rb +8 -1
  38. data/lib/puppet/type/user.rb +41 -39
  39. data/lib/puppet/util/json.rb +17 -0
  40. data/lib/puppet/util/log.rb +7 -2
  41. data/lib/puppet/util/monkey_patches.rb +26 -4
  42. data/lib/puppet/util/package.rb +25 -16
  43. data/lib/puppet/util/yaml.rb +16 -1
  44. data/lib/puppet/util.rb +1 -0
  45. data/lib/puppet/version.rb +1 -1
  46. data/lib/puppet.rb +1 -0
  47. data/locales/puppet.pot +5 -9741
  48. data/man/man5/puppet.conf.5 +21 -2
  49. data/man/man8/puppet-agent.8 +1 -1
  50. data/man/man8/puppet-apply.8 +1 -1
  51. data/man/man8/puppet-catalog.8 +1 -1
  52. data/man/man8/puppet-config.8 +1 -1
  53. data/man/man8/puppet-describe.8 +1 -1
  54. data/man/man8/puppet-device.8 +1 -1
  55. data/man/man8/puppet-doc.8 +1 -1
  56. data/man/man8/puppet-epp.8 +1 -1
  57. data/man/man8/puppet-facts.8 +1 -1
  58. data/man/man8/puppet-filebucket.8 +1 -1
  59. data/man/man8/puppet-generate.8 +1 -1
  60. data/man/man8/puppet-help.8 +1 -1
  61. data/man/man8/puppet-lookup.8 +9 -6
  62. data/man/man8/puppet-module.8 +1 -1
  63. data/man/man8/puppet-node.8 +1 -1
  64. data/man/man8/puppet-parser.8 +1 -1
  65. data/man/man8/puppet-plugin.8 +1 -1
  66. data/man/man8/puppet-report.8 +1 -1
  67. data/man/man8/puppet-resource.8 +1 -1
  68. data/man/man8/puppet-script.8 +1 -1
  69. data/man/man8/puppet-ssl.8 +1 -1
  70. data/man/man8/puppet.8 +2 -2
  71. data/spec/fixtures/unit/forge/bacula.json +1 -1
  72. data/spec/integration/application/lookup_spec.rb +81 -50
  73. data/spec/integration/application/resource_spec.rb +6 -2
  74. data/spec/integration/parser/pcore_resource_spec.rb +10 -0
  75. data/spec/shared_contexts/l10n.rb +5 -0
  76. data/spec/unit/application/lookup_spec.rb +131 -10
  77. data/spec/unit/concurrent/thread_local_singleton_spec.rb +39 -0
  78. data/spec/unit/configurer_spec.rb +124 -61
  79. data/spec/unit/confiner_spec.rb +6 -6
  80. data/spec/unit/face/generate_spec.rb +64 -0
  81. data/spec/unit/file_system/uniquefile_spec.rb +7 -1
  82. data/spec/unit/file_system_spec.rb +34 -4
  83. data/spec/unit/forge/module_release_spec.rb +3 -3
  84. data/spec/unit/functions/versioncmp_spec.rb +40 -4
  85. data/spec/unit/node_spec.rb +6 -0
  86. data/spec/unit/pops/parser/parse_containers_spec.rb +2 -2
  87. data/spec/unit/pops/serialization/to_from_hr_spec.rb +0 -58
  88. data/spec/unit/pops/validator/validator_spec.rb +5 -0
  89. data/spec/unit/provider/service/gentoo_spec.rb +6 -5
  90. data/spec/unit/provider/service/init_spec.rb +15 -9
  91. data/spec/unit/provider/service/openwrt_spec.rb +21 -29
  92. data/spec/unit/provider/service/redhat_spec.rb +3 -2
  93. data/spec/unit/transaction/persistence_spec.rb +51 -0
  94. data/spec/unit/type/file/group_spec.rb +7 -0
  95. data/spec/unit/type/file/owner_spec.rb +7 -0
  96. data/spec/unit/type/user_spec.rb +67 -45
  97. data/spec/unit/util/json_spec.rb +126 -0
  98. data/spec/unit/util/windows_spec.rb +23 -0
  99. data/spec/unit/util/yaml_spec.rb +37 -13
  100. metadata +17 -5
@@ -0,0 +1,126 @@
1
+ # coding: utf-8
2
+ require 'spec_helper'
3
+ require 'puppet/util/json'
4
+
5
+ describe Puppet::Util::Json do
6
+ include PuppetSpec::Files
7
+
8
+ shared_examples_for 'json file loader' do |load_method|
9
+ it 'reads a JSON file from disk' do
10
+ file_path = file_containing('input', JSON.dump({ "my" => "data" }))
11
+
12
+ expect(load_method.call(file_path)).to eq({ "my" => "data" })
13
+ end
14
+
15
+ it 'reads JSON as UTF-8' do
16
+ file_path = file_containing('input', JSON.dump({ "my" => "𠜎" }))
17
+
18
+ expect(load_method.call(file_path)).to eq({ "my" => "𠜎" })
19
+ end
20
+ end
21
+
22
+ context "#load" do
23
+ it 'raises an error if JSON is invalid' do
24
+ expect {
25
+ Puppet::Util::Json.load('{ invalid')
26
+ }.to raise_error(Puppet::Util::Json::ParseError, /unexpected token at '{ invalid'/)
27
+ end
28
+
29
+ it 'raises an error if the content is empty' do
30
+ expect {
31
+ Puppet::Util::Json.load('')
32
+ }.to raise_error(Puppet::Util::Json::ParseError)
33
+ end
34
+
35
+ it 'loads true' do
36
+ expect(Puppet::Util::Json.load('true')).to eq(true)
37
+ end
38
+
39
+ it 'loads false' do
40
+ expect(Puppet::Util::Json.load('false')).to eq(false)
41
+ end
42
+
43
+ it 'loads a numeric' do
44
+ expect(Puppet::Util::Json.load('42')).to eq(42)
45
+ end
46
+
47
+ it 'loads a string' do
48
+ expect(Puppet::Util::Json.load('"puppet"')).to eq('puppet')
49
+ end
50
+
51
+ it 'loads an array' do
52
+ expect(Puppet::Util::Json.load(<<~JSON)).to eq([1, 2])
53
+ [1, 2]
54
+ JSON
55
+ end
56
+
57
+ it 'loads a hash' do
58
+ expect(Puppet::Util::Json.load(<<~JSON)).to eq('a' => 1, 'b' => 2)
59
+ {
60
+ "a": 1,
61
+ "b": 2
62
+ }
63
+ JSON
64
+ end
65
+ end
66
+
67
+ context "load_file_if_valid" do
68
+ before do
69
+ Puppet[:log_level] = 'debug'
70
+ end
71
+
72
+ it_should_behave_like 'json file loader', Puppet::Util::Json.method(:load_file_if_valid)
73
+
74
+ it 'returns nil when the file is invalid JSON and debug logs about it' do
75
+ file_path = file_containing('input', '{ invalid')
76
+ expect(Puppet).to receive(:debug)
77
+ .with(/Could not retrieve JSON content .+: unexpected token at '{ invalid'/).and_call_original
78
+
79
+ expect(Puppet::Util::Json.load_file_if_valid(file_path)).to eql(nil)
80
+ end
81
+
82
+ it 'returns nil when the filename is illegal and debug logs about it' do
83
+ expect(Puppet).to receive(:debug)
84
+ .with(/Could not retrieve JSON content .+: pathname contains null byte/).and_call_original
85
+
86
+ expect(Puppet::Util::Json.load_file_if_valid("not\0allowed")).to eql(nil)
87
+ end
88
+
89
+ it 'returns nil when the file does not exist and debug logs about it' do
90
+ expect(Puppet).to receive(:debug)
91
+ .with(/Could not retrieve JSON content .+: No such file or directory/).and_call_original
92
+
93
+ expect(Puppet::Util::Json.load_file_if_valid('does/not/exist.json')).to eql(nil)
94
+ end
95
+ end
96
+
97
+ context '#load_file' do
98
+ it_should_behave_like 'json file loader', Puppet::Util::Json.method(:load_file)
99
+
100
+ it 'raises an error when the file is invalid JSON' do
101
+ file_path = file_containing('input', '{ invalid')
102
+
103
+ expect {
104
+ Puppet::Util::Json.load_file(file_path)
105
+ }.to raise_error(Puppet::Util::Json::ParseError, /unexpected token at '{ invalid'/)
106
+ end
107
+
108
+ it 'raises an error when the filename is illegal' do
109
+ expect {
110
+ Puppet::Util::Json.load_file("not\0allowed")
111
+ }.to raise_error(ArgumentError, /null byte/)
112
+ end
113
+
114
+ it 'raises an error when the file does not exist' do
115
+ expect {
116
+ Puppet::Util::Json.load_file('does/not/exist.json')
117
+ }.to raise_error(Errno::ENOENT, /No such file or directory/)
118
+ end
119
+
120
+ it 'writes data formatted as JSON to disk' do
121
+ file_path = file_containing('input', Puppet::Util::Json.dump({ "my" => "data" }))
122
+
123
+ expect(Puppet::Util::Json.load_file(file_path)).to eq({ "my" => "data" })
124
+ end
125
+ end
126
+ end
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe Puppet::Util::Windows do
6
+ %w[
7
+ ADSI
8
+ ADSI::ADSIObject
9
+ ADSI::User
10
+ ADSI::UserProfile
11
+ ADSI::Group
12
+ EventLog
13
+ File
14
+ Process
15
+ Registry
16
+ Service
17
+ SID
18
+ ].each do |name|
19
+ it "defines Puppet::Util::Windows::#{name}" do
20
+ expect(described_class.const_get(name)).to be
21
+ end
22
+ end
23
+ end
@@ -1,6 +1,5 @@
1
1
  # coding: utf-8
2
2
  require 'spec_helper'
3
-
4
3
  require 'puppet/util/yaml'
5
4
 
6
5
  describe Puppet::Util::Yaml do
@@ -10,21 +9,21 @@ describe Puppet::Util::Yaml do
10
9
 
11
10
  shared_examples_for 'yaml file loader' do |load_method|
12
11
  it 'returns false when the file is empty' do
13
- Puppet::FileSystem.touch(filename)
12
+ file_path = file_containing('input', '')
14
13
 
15
- expect(load_method.call(filename)).to eq(false)
14
+ expect(load_method.call(file_path)).to eq(false)
16
15
  end
17
16
 
18
17
  it 'reads a YAML file from disk' do
19
- write_file(filename, YAML.dump({ "my" => "data" }))
18
+ file_path = file_containing('input', YAML.dump({ "my" => "data" }))
20
19
 
21
- expect(load_method.call(filename)).to eq({ "my" => "data" })
20
+ expect(load_method.call(file_path)).to eq({ "my" => "data" })
22
21
  end
23
22
 
24
23
  it 'reads YAML as UTF-8' do
25
- write_file(filename, YAML.dump({ "my" => "𠜎" }))
24
+ file_path = file_containing('input', YAML.dump({ "my" => "𠜎" }))
26
25
 
27
- expect(load_method.call(filename)).to eq({ "my" => "𠜎" })
26
+ expect(load_method.call(file_path)).to eq({ "my" => "𠜎" })
28
27
  end
29
28
  end
30
29
 
@@ -119,11 +118,11 @@ FACTS
119
118
  it_should_behave_like 'yaml file loader', Puppet::Util::Yaml.method(:safe_load_file)
120
119
 
121
120
  it 'raises an error when the file is invalid YAML' do
122
- write_file(filename, '{ invalid')
121
+ file_path = file_containing('input', '{ invalid')
123
122
 
124
123
  expect {
125
- Puppet::Util::Yaml.safe_load_file(filename)
126
- }.to raise_error(Puppet::Util::Yaml::YamlLoadError, %r[\(#{filename}\): .* at line \d+ column \d+])
124
+ Puppet::Util::Yaml.safe_load_file(file_path)
125
+ }.to raise_error(Puppet::Util::Yaml::YamlLoadError, %r[\(#{file_path}\): .* at line \d+ column \d+])
127
126
  end
128
127
 
129
128
  it 'raises an error when the filename is illegal' do
@@ -139,9 +138,34 @@ FACTS
139
138
  end
140
139
  end
141
140
 
142
- def write_file(name, contents)
143
- File.open(name, "w:UTF-8") do |fh|
144
- fh.write(contents)
141
+ context "#safe_load_file_if_valid" do
142
+ before do
143
+ Puppet[:log_level] = 'debug'
144
+ end
145
+
146
+ it_should_behave_like 'yaml file loader', Puppet::Util::Yaml.method(:safe_load_file_if_valid)
147
+
148
+ it 'returns nil when the file is invalid YAML and debug logs about it' do
149
+ file_path = file_containing('input', '{ invalid')
150
+
151
+ expect(Puppet).to receive(:debug)
152
+ .with(/Could not retrieve YAML content .+ expected ',' or '}'/).and_call_original
153
+
154
+ expect(Puppet::Util::Yaml.safe_load_file_if_valid(file_path)).to eql(nil)
155
+ end
156
+
157
+ it 'returns nil when the filename is illegal and debug logs about it' do
158
+ expect(Puppet).to receive(:debug)
159
+ .with(/Could not retrieve YAML content .+: pathname contains null byte/).and_call_original
160
+
161
+ expect(Puppet::Util::Yaml.safe_load_file_if_valid("not\0allowed")).to eql(nil)
162
+ end
163
+
164
+ it 'returns nil when the file does not exist and debug logs about it' do
165
+ expect(Puppet).to receive(:debug)
166
+ .with(/Could not retrieve YAML content .+: No such file or directory/).and_call_original
167
+
168
+ expect(Puppet::Util::Yaml.safe_load_file_if_valid('does/not/exist.yaml')).to eql(nil)
145
169
  end
146
170
  end
147
171
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.12.1
4
+ version: 7.15.0
5
5
  platform: x86-mingw32
6
6
  authors:
7
7
  - Puppet Labs
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-10-29 00:00:00.000000000 Z
11
+ date: 2022-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: facter
@@ -68,16 +68,22 @@ dependencies:
68
68
  name: fast_gettext
69
69
  requirement: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - "~>"
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '1.1'
74
+ - - "<"
75
+ - !ruby/object:Gem::Version
76
+ version: '3'
74
77
  type: :runtime
75
78
  prerelease: false
76
79
  version_requirements: !ruby/object:Gem::Requirement
77
80
  requirements:
78
- - - "~>"
81
+ - - ">="
79
82
  - !ruby/object:Gem::Version
80
83
  version: '1.1'
84
+ - - "<"
85
+ - !ruby/object:Gem::Version
86
+ version: '3'
81
87
  - !ruby/object:Gem::Dependency
82
88
  name: locale
83
89
  requirement: !ruby/object:Gem::Requirement
@@ -1869,6 +1875,7 @@ files:
1869
1875
  - spec/unit/application_spec.rb
1870
1876
  - spec/unit/certificate_factory_spec.rb
1871
1877
  - spec/unit/concurrent/lock_spec.rb
1878
+ - spec/unit/concurrent/thread_local_singleton_spec.rb
1872
1879
  - spec/unit/configurer/downloader_spec.rb
1873
1880
  - spec/unit/configurer/fact_handler_spec.rb
1874
1881
  - spec/unit/configurer/plugin_handler_spec.rb
@@ -2465,6 +2472,7 @@ files:
2465
2472
  - spec/unit/util/filetype_spec.rb
2466
2473
  - spec/unit/util/inifile_spec.rb
2467
2474
  - spec/unit/util/json_lockfile_spec.rb
2475
+ - spec/unit/util/json_spec.rb
2468
2476
  - spec/unit/util/ldap/connection_spec.rb
2469
2477
  - spec/unit/util/ldap/generator_spec.rb
2470
2478
  - spec/unit/util/ldap/manager_spec.rb
@@ -2524,6 +2532,7 @@ files:
2524
2532
  - spec/unit/util/windows/service_spec.rb
2525
2533
  - spec/unit/util/windows/sid_spec.rb
2526
2534
  - spec/unit/util/windows/string_spec.rb
2535
+ - spec/unit/util/windows_spec.rb
2527
2536
  - spec/unit/util/yaml_spec.rb
2528
2537
  - spec/unit/util_spec.rb
2529
2538
  - spec/unit/version_spec.rb
@@ -2563,7 +2572,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2563
2572
  - !ruby/object:Gem::Version
2564
2573
  version: 1.3.1
2565
2574
  requirements: []
2566
- rubygems_version: 3.0.8
2575
+ rubygems_version: 3.1.6
2567
2576
  signing_key:
2568
2577
  specification_version: 4
2569
2578
  summary: Puppet, an automated configuration management tool
@@ -3126,6 +3135,7 @@ test_files:
3126
3135
  - spec/unit/application_spec.rb
3127
3136
  - spec/unit/certificate_factory_spec.rb
3128
3137
  - spec/unit/concurrent/lock_spec.rb
3138
+ - spec/unit/concurrent/thread_local_singleton_spec.rb
3129
3139
  - spec/unit/configurer/downloader_spec.rb
3130
3140
  - spec/unit/configurer/fact_handler_spec.rb
3131
3141
  - spec/unit/configurer/plugin_handler_spec.rb
@@ -3722,6 +3732,7 @@ test_files:
3722
3732
  - spec/unit/util/filetype_spec.rb
3723
3733
  - spec/unit/util/inifile_spec.rb
3724
3734
  - spec/unit/util/json_lockfile_spec.rb
3735
+ - spec/unit/util/json_spec.rb
3725
3736
  - spec/unit/util/ldap/connection_spec.rb
3726
3737
  - spec/unit/util/ldap/generator_spec.rb
3727
3738
  - spec/unit/util/ldap/manager_spec.rb
@@ -3781,6 +3792,7 @@ test_files:
3781
3792
  - spec/unit/util/windows/service_spec.rb
3782
3793
  - spec/unit/util/windows/sid_spec.rb
3783
3794
  - spec/unit/util/windows/string_spec.rb
3795
+ - spec/unit/util/windows_spec.rb
3784
3796
  - spec/unit/util/yaml_spec.rb
3785
3797
  - spec/unit/util_spec.rb
3786
3798
  - spec/unit/version_spec.rb