puppet 8.2.0-universal-darwin → 8.3.0-universal-darwin

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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/Gemfile.lock +16 -16
  4. data/ext/project_data.yaml +2 -2
  5. data/lib/puppet/application/doc.rb +1 -1
  6. data/lib/puppet/application/ssl.rb +42 -7
  7. data/lib/puppet/application.rb +5 -1
  8. data/lib/puppet/defaults.rb +5 -5
  9. data/lib/puppet/face/config.rb +1 -1
  10. data/lib/puppet/face/epp.rb +2 -2
  11. data/lib/puppet/face/module/list.rb +2 -2
  12. data/lib/puppet/face/parser.rb +1 -1
  13. data/lib/puppet/functions/split.rb +28 -1
  14. data/lib/puppet/indirector/facts/facter.rb +1 -1
  15. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  16. data/lib/puppet/indirector/indirection.rb +1 -1
  17. data/lib/puppet/info_service/task_information_service.rb +1 -1
  18. data/lib/puppet/module_tool.rb +1 -1
  19. data/lib/puppet/network/formats.rb +3 -3
  20. data/lib/puppet/network/http/memory_response.rb +1 -1
  21. data/lib/puppet/parameter/value_collection.rb +1 -1
  22. data/lib/puppet/parser/files.rb +4 -3
  23. data/lib/puppet/parser/functions.rb +1 -1
  24. data/lib/puppet/pops/loader/loader_paths.rb +4 -4
  25. data/lib/puppet/pops/lookup/explainer.rb +1 -1
  26. data/lib/puppet/pops/lookup/hiera_config.rb +1 -1
  27. data/lib/puppet/pops/model/factory.rb +1 -1
  28. data/lib/puppet/pops/model/tree_dumper.rb +1 -1
  29. data/lib/puppet/pops/parser/epp_support.rb +1 -1
  30. data/lib/puppet/pops/parser/evaluating_parser.rb +1 -1
  31. data/lib/puppet/pops/parser/pn_parser.rb +1 -1
  32. data/lib/puppet/pops/pn.rb +1 -1
  33. data/lib/puppet/pops/serialization/json_path.rb +1 -1
  34. data/lib/puppet/pops/time/timespan.rb +4 -4
  35. data/lib/puppet/pops/types/ruby_generator.rb +2 -2
  36. data/lib/puppet/pops/types/string_converter.rb +6 -6
  37. data/lib/puppet/pops/types/type_formatter.rb +2 -2
  38. data/lib/puppet/pops/types/types.rb +1 -1
  39. data/lib/puppet/provider/nameservice/directoryservice.rb +2 -2
  40. data/lib/puppet/provider/package/apt.rb +1 -1
  41. data/lib/puppet/provider/package/dnf.rb +1 -1
  42. data/lib/puppet/provider/package/yum.rb +1 -1
  43. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  44. data/lib/puppet/reference/configuration.rb +1 -1
  45. data/lib/puppet/reference/indirection.rb +1 -1
  46. data/lib/puppet/reports.rb +1 -1
  47. data/lib/puppet/transaction/report.rb +1 -1
  48. data/lib/puppet/type/filebucket.rb +1 -1
  49. data/lib/puppet/util/diff.rb +1 -1
  50. data/lib/puppet/util/execution.rb +9 -4
  51. data/lib/puppet/util/inifile.rb +2 -2
  52. data/lib/puppet/util/monkey_patches.rb +18 -0
  53. data/lib/puppet/util/package/version/rpm.rb +1 -1
  54. data/lib/puppet/util/provider_features.rb +1 -1
  55. data/lib/puppet/util/selinux.rb +1 -1
  56. data/lib/puppet/util/windows/access_control_entry.rb +1 -1
  57. data/lib/puppet/util/windows/access_control_list.rb +1 -1
  58. data/lib/puppet/util/windows/adsi.rb +9 -2
  59. data/lib/puppet/util/windows/error.rb +1 -1
  60. data/lib/puppet/util/windows/file.rb +2 -2
  61. data/lib/puppet/util/windows/process.rb +1 -1
  62. data/lib/puppet/util/windows/sid.rb +4 -2
  63. data/lib/puppet/util.rb +2 -3
  64. data/lib/puppet/version.rb +1 -1
  65. data/lib/puppet/x509/cert_provider.rb +6 -2
  66. data/locales/puppet.pot +40 -32
  67. data/man/man5/puppet.conf.5 +3 -3
  68. data/man/man8/puppet-agent.8 +1 -1
  69. data/man/man8/puppet-apply.8 +1 -1
  70. data/man/man8/puppet-catalog.8 +1 -1
  71. data/man/man8/puppet-config.8 +1 -1
  72. data/man/man8/puppet-describe.8 +1 -1
  73. data/man/man8/puppet-device.8 +1 -1
  74. data/man/man8/puppet-doc.8 +1 -1
  75. data/man/man8/puppet-epp.8 +1 -1
  76. data/man/man8/puppet-facts.8 +1 -1
  77. data/man/man8/puppet-filebucket.8 +1 -1
  78. data/man/man8/puppet-generate.8 +1 -1
  79. data/man/man8/puppet-help.8 +1 -1
  80. data/man/man8/puppet-lookup.8 +1 -1
  81. data/man/man8/puppet-module.8 +1 -1
  82. data/man/man8/puppet-node.8 +1 -1
  83. data/man/man8/puppet-parser.8 +1 -1
  84. data/man/man8/puppet-plugin.8 +1 -1
  85. data/man/man8/puppet-report.8 +1 -1
  86. data/man/man8/puppet-resource.8 +1 -1
  87. data/man/man8/puppet-script.8 +1 -1
  88. data/man/man8/puppet-ssl.8 +5 -1
  89. data/man/man8/puppet.8 +2 -2
  90. data/spec/integration/type/exec_spec.rb +13 -0
  91. data/spec/lib/puppet_spec/verbose.rb +10 -1
  92. data/spec/unit/agent_spec.rb +2 -9
  93. data/spec/unit/application/ssl_spec.rb +49 -0
  94. data/spec/unit/functions/split_spec.rb +6 -0
  95. data/spec/unit/info_service_spec.rb +1 -1
  96. data/spec/unit/ssl/certificate_signer_spec.rb +17 -0
  97. data/spec/unit/ssl/ssl_provider_spec.rb +1 -1
  98. data/spec/unit/util/execution_spec.rb +1 -0
  99. data/spec/unit/util/monkey_patches_spec.rb +42 -0
  100. data/spec/unit/util/windows/adsi_spec.rb +25 -0
  101. metadata +5 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a007559506837db8fff3be2557fe949b928b52c8d13e5d8e12957391263e4efe
4
- data.tar.gz: ae6866634e1e346ef8a28a964cfa1552c02f8afe21ca4894682cc850656afb1c
3
+ metadata.gz: db1b5937c3dc9521057bf9a30727206eac33b35b26d5d76b95b1657be5080159
4
+ data.tar.gz: b24126f5caad879cd67b9218be6920a3f00cf8c7037d6897909ea6fcbf67a809
5
5
  SHA512:
6
- metadata.gz: 80c8d4b7774956f7fe5ba2a4aa0fcbffffab695d3517f91473bbde7cac509dc8b8f67317f499182cbd3f9b7d8f86d2f33de0363d936e74f012493f100dd0d199
7
- data.tar.gz: d826de6788fbe4fb802c2ff1be076783669a6c257ba2332ceca5d3e2bae64a576a4a5f8bcccab1f23f983b5b0bd4b2624106de27e6f35199d2beff79e5c6e94d
6
+ metadata.gz: '09671187cf733cda589e02a649051b71a8db0c7d44252ebf9d8fcb6ee241fc7fdeb165b2344fedbb9d30aa91306ede75a5969ce4bf461fd49e27ae3949c8a91a'
7
+ data.tar.gz: ff847955208a64f5860e557a41d43e73cf7ca5fa87769e396235a3f314baa456d9481dd78524b440ea8f36cada20a306547eabae0c6c67ca852e4373f651612a
data/Gemfile CHANGED
@@ -36,7 +36,7 @@ group(:features) do
36
36
  end
37
37
 
38
38
  group(:test) do
39
- gem "ffi", require: false
39
+ gem "ffi", '1.15.5', require: false
40
40
  gem "json-schema", "~> 2.0", require: false
41
41
  gem "rake", *location_for(ENV['RAKE_LOCATION'] || '~> 13.0')
42
42
  gem "rspec", "~> 3.1", require: false
data/Gemfile.lock CHANGED
@@ -1,6 +1,6 @@
1
1
  GIT
2
2
  remote: https://github.com/puppetlabs/packaging
3
- revision: affecba5dfacc5862fc7199895ccf11b69153570
3
+ revision: 8adf33f59cc443c311c5d5d70c6ba2084625ceea
4
4
  branch: 1.0.x
5
5
  specs:
6
6
  packaging (0)
@@ -15,7 +15,7 @@ GIT
15
15
  PATH
16
16
  remote: .
17
17
  specs:
18
- puppet (8.2.0)
18
+ puppet (8.3.0)
19
19
  CFPropertyList (~> 2.2)
20
20
  concurrent-ruby (~> 1.0)
21
21
  deep_merge (~> 1.0)
@@ -37,6 +37,7 @@ GEM
37
37
  docopt
38
38
  artifactory (3.0.15)
39
39
  ast (2.4.2)
40
+ base64 (0.1.1)
40
41
  coderay (1.1.3)
41
42
  concurrent-ruby (1.2.2)
42
43
  crack (0.4.5)
@@ -49,17 +50,18 @@ GEM
49
50
  rake (>= 12.0.0, < 14.0.0)
50
51
  docopt (0.6.1)
51
52
  erubi (1.12.0)
52
- facter (4.4.2)
53
+ facter (4.5.0)
53
54
  hocon (~> 1.3)
54
55
  thor (>= 1.0.1, < 2.0)
55
- faraday (2.7.10)
56
+ faraday (2.7.11)
57
+ base64
56
58
  faraday-net_http (>= 2.0, < 3.1)
57
59
  ruby2_keywords (>= 0.0.4)
58
60
  faraday-net_http (3.0.2)
59
61
  fast_gettext (2.3.0)
60
62
  ffi (1.15.5)
61
63
  forwardable (1.3.3)
62
- gettext (3.4.7)
64
+ gettext (3.4.9)
63
65
  erubi
64
66
  locale (>= 2.0.5)
65
67
  prime
@@ -96,10 +98,9 @@ GEM
96
98
  google-cloud-core (~> 1.6)
97
99
  googleauth (>= 0.16.2, < 2.a)
98
100
  mini_mime (~> 1.0)
99
- googleauth (1.7.0)
101
+ googleauth (1.8.1)
100
102
  faraday (>= 0.17.3, < 3.a)
101
103
  jwt (>= 1.4, < 3.0)
102
- memoist (~> 0.16)
103
104
  multi_json (~> 1.11)
104
105
  os (>= 0.9, < 2.0)
105
106
  signet (>= 0.16, < 2.a)
@@ -115,7 +116,6 @@ GEM
115
116
  addressable (>= 2.4)
116
117
  jwt (2.7.1)
117
118
  locale (2.1.3)
118
- memoist (0.16.2)
119
119
  memory_profiler (1.0.1)
120
120
  method_source (1.0.0)
121
121
  mini_mime (1.1.5)
@@ -126,7 +126,7 @@ GEM
126
126
  optimist (3.1.0)
127
127
  os (1.1.4)
128
128
  parallel (1.23.0)
129
- parser (3.2.2.3)
129
+ parser (3.2.2.4)
130
130
  ast (~> 2.4.1)
131
131
  racc
132
132
  prime (0.1.2)
@@ -145,7 +145,7 @@ GEM
145
145
  rake (13.0.6)
146
146
  rdiscount (2.2.7.1)
147
147
  rdoc (6.3.3)
148
- regexp_parser (2.8.1)
148
+ regexp_parser (2.8.2)
149
149
  release-metrics (1.1.0)
150
150
  csv
151
151
  docopt
@@ -193,19 +193,19 @@ GEM
193
193
  ruby2_keywords (0.0.5)
194
194
  scanf (1.0.0)
195
195
  semantic_puppet (1.1.0)
196
- signet (0.17.0)
196
+ signet (0.18.0)
197
197
  addressable (~> 2.8)
198
198
  faraday (>= 0.17.5, < 3.a)
199
199
  jwt (>= 1.5, < 3.0)
200
200
  multi_json (~> 1.10)
201
201
  singleton (0.1.1)
202
202
  text (1.3.1)
203
- thor (1.2.2)
203
+ thor (1.3.0)
204
204
  trailblazer-option (0.1.2)
205
205
  uber (0.1.0)
206
- unicode-display_width (2.4.2)
206
+ unicode-display_width (2.5.0)
207
207
  vcr (6.2.0)
208
- webmock (3.18.1)
208
+ webmock (3.19.1)
209
209
  addressable (>= 2.8.0)
210
210
  crack (>= 0.3.2)
211
211
  hashdiff (>= 0.4.0, < 2.0.0)
@@ -218,7 +218,7 @@ PLATFORMS
218
218
  DEPENDENCIES
219
219
  diff-lcs (~> 1.3)
220
220
  facter (~> 4.3)
221
- ffi
221
+ ffi (= 1.15.5)
222
222
  gettext-setup (~> 1.0)
223
223
  hiera-eyaml
224
224
  hocon (~> 1.0)
@@ -248,4 +248,4 @@ DEPENDENCIES
248
248
  yard
249
249
 
250
250
  BUNDLED WITH
251
- 2.4.12
251
+ 2.4.20
@@ -39,11 +39,11 @@ gem_platform_dependencies:
39
39
  CFPropertyList: '~> 2.2'
40
40
  x86-mingw32:
41
41
  gem_runtime_dependencies:
42
- ffi: ['> 1.9.24', '< 2']
42
+ ffi: '1.15.5'
43
43
  minitar: '~> 0.9'
44
44
  x64-mingw32:
45
45
  gem_runtime_dependencies:
46
- ffi: ['> 1.9.24', '< 2']
46
+ ffi: '1.15.5'
47
47
  minitar: '~> 0.9'
48
48
  bundle_platforms:
49
49
  universal-darwin: all
@@ -152,7 +152,7 @@ HELP
152
152
  end
153
153
 
154
154
  def other
155
- text = String.new
155
+ text = ''.dup
156
156
  with_contents = options[:references].length <= 1
157
157
  exit_code = 0
158
158
  require_relative '../../puppet/util/reference'
@@ -60,6 +60,11 @@ ACTIONS
60
60
  the CSR. Otherwise a new key pair will be generated. If a CSR has already
61
61
  been submitted with the given `certname`, then the operation will fail.
62
62
 
63
+ * generate_request:
64
+ Generate a certificate signing request (CSR). If
65
+ a private and public key pair already exist, they will be used to generate
66
+ the CSR. Otherwise a new key pair will be generated.
67
+
63
68
  * download_cert:
64
69
  Download a certificate for this host. If the current private key matches
65
70
  the downloaded certificate, then the certificate will be saved and used
@@ -137,9 +142,21 @@ HELP
137
142
  unless cert
138
143
  raise Puppet::Error, _("The certificate for '%{name}' has not yet been signed") % { name: certname }
139
144
  end
145
+ when 'generate_request'
146
+ generate_request(certname)
140
147
  when 'verify'
141
148
  verify(certname)
142
149
  when 'clean'
150
+ possible_extra_args = command_line.args.drop(1)
151
+ unless possible_extra_args.empty?
152
+ raise Puppet::Error, _(<<END) % { args: possible_extra_args.join(' ')}
153
+ Extra arguments detected: %{args}
154
+ Did you mean to run:
155
+ puppetserver ca clean --certname <name>
156
+ Or:
157
+ puppet ssl clean --target <name>
158
+ END
159
+ end
143
160
  clean(certname)
144
161
  when 'bootstrap'
145
162
  if !Puppet::Util::Log.sendlevel?(:info)
@@ -163,13 +180,7 @@ HELP
163
180
  def submit_request(ssl_context)
164
181
  key = @cert_provider.load_private_key(Puppet[:certname])
165
182
  unless key
166
- if Puppet[:key_type] == 'ec'
167
- Puppet.info _("Creating a new EC SSL key for %{name} using curve %{curve}") % { name: Puppet[:certname], curve: Puppet[:named_curve] }
168
- key = OpenSSL::PKey::EC.generate(Puppet[:named_curve])
169
- else
170
- Puppet.info _("Creating a new SSL key for %{name}") % { name: Puppet[:certname] }
171
- key = OpenSSL::PKey::RSA.new(Puppet[:keylength].to_i)
172
- end
183
+ key = create_key(Puppet[:certname])
173
184
  @cert_provider.save_private_key(Puppet[:certname], key)
174
185
  end
175
186
 
@@ -188,6 +199,20 @@ HELP
188
199
  raise Puppet::Error.new(_("Failed to submit certificate request: %{message}") % { message: e.message }, e)
189
200
  end
190
201
 
202
+ def generate_request(certname)
203
+ key = @cert_provider.load_private_key(certname)
204
+ unless key
205
+ key = create_key(certname)
206
+ @cert_provider.save_private_key(certname, key)
207
+ end
208
+
209
+ csr = @cert_provider.create_request(certname, key)
210
+ @cert_provider.save_request(certname, csr)
211
+ Puppet.notice _("Generated certificate request in '%{path}'") % { path: @cert_provider.to_path(Puppet[:requestdir], certname) }
212
+ rescue => e
213
+ raise Puppet::Error.new(_("Failed to generate certificate request: %{message}") % { message: e.message }, e)
214
+ end
215
+
191
216
  def download_cert(ssl_context)
192
217
  key = @cert_provider.load_private_key(Puppet[:certname])
193
218
 
@@ -286,4 +311,14 @@ END
286
311
  def create_route(ssl_context)
287
312
  @session.route_to(:ca, ssl_context: ssl_context)
288
313
  end
314
+
315
+ def create_key(certname)
316
+ if Puppet[:key_type] == 'ec'
317
+ Puppet.info _("Creating a new EC SSL key for %{name} using curve %{curve}") % { name: certname, curve: Puppet[:named_curve] }
318
+ OpenSSL::PKey::EC.generate(Puppet[:named_curve])
319
+ else
320
+ Puppet.info _("Creating a new SSL key for %{name}") % { name: certname }
321
+ OpenSSL::PKey::RSA.new(Puppet[:keylength].to_i)
322
+ end
323
+ end
289
324
  end
@@ -504,8 +504,12 @@ class Application
504
504
  runtime_info = {
505
505
  'puppet_version' => Puppet.version,
506
506
  'ruby_version' => RUBY_VERSION,
507
- 'run_mode' => self.class.run_mode.name,
507
+ 'run_mode' => self.class.run_mode.name
508
508
  }
509
+ unless Puppet::Util::Platform.jruby_fips?
510
+ runtime_info['openssl_version'] = "'#{OpenSSL::OPENSSL_VERSION}'"
511
+ runtime_info['openssl_fips'] = OpenSSL::OPENSSL_FIPS
512
+ end
509
513
  runtime_info['default_encoding'] = Encoding.default_external
510
514
  runtime_info.merge!(extra_info) unless extra_info.nil?
511
515
 
@@ -1247,11 +1247,11 @@ EOT
1247
1247
  :hostcert_renewal_interval => {
1248
1248
  :default => "30d",
1249
1249
  :type => :duration,
1250
- :desc => "How often the Puppet agent refreshes its client certificate.
1251
- By default the client certificate is refreshed once every 30 days. If
1252
- a different duration is specified, then the agent will refresh its
1253
- client certificate whenever it next runs and the elapsed time since the
1254
- client certificate was last refreshed exceeds the duration.
1250
+ :desc => "When the Puppet agent refreshes its client certificate.
1251
+ By default the client certificate will refresh 30 days before the certificate
1252
+ expires. If a different duration is specified, then the agent will refresh its
1253
+ client certificate whenever it next runs and if the client certificate expires
1254
+ within the duration specified.
1255
1255
 
1256
1256
  In general, the duration should be greater than the `runinterval`.
1257
1257
  Setting it to 0 will disable automatic renewal.
@@ -82,7 +82,7 @@ Puppet::Face.define(:config, '0.0.1') do
82
82
  end
83
83
 
84
84
  when_rendering :console do |to_be_rendered|
85
- output = String.new
85
+ output = ''.dup
86
86
  if to_be_rendered.keys.length > 1
87
87
  to_be_rendered.keys.sort.each do |setting|
88
88
  output << "#{setting} = #{to_be_rendered[setting]}\n"
@@ -367,7 +367,7 @@ Puppet::Face.define(:epp, '0.0.1') do
367
367
  end
368
368
 
369
369
  def dump_parse(source, filename, options, show_filename = true)
370
- output = String.new
370
+ output = ''.dup
371
371
  evaluating_parser = Puppet::Pops::Parser::EvaluatingParser::EvaluatingEppParser.new
372
372
  begin
373
373
  if options[:validate]
@@ -451,7 +451,7 @@ Puppet::Face.define(:epp, '0.0.1') do
451
451
 
452
452
  def render_file(epp_template_name, compiler, options, show_filename, file_nbr)
453
453
  template_args = get_values(compiler, options)
454
- output = String.new
454
+ output = ''.dup
455
455
  begin
456
456
  if show_filename && options[:header]
457
457
  output << "\n" unless file_nbr == 1
@@ -74,7 +74,7 @@ Puppet::Face.define(:module, '1.0.0') do
74
74
  environment = result[:environment]
75
75
  modules_by_path = result[:modules_by_path]
76
76
 
77
- output = String.new
77
+ output = ''.dup
78
78
 
79
79
  warn_unmet_dependencies(environment)
80
80
 
@@ -248,7 +248,7 @@ Puppet::Face.define(:module, '1.0.0') do
248
248
  # Returns a Hash
249
249
  #
250
250
  def list_build_node(mod, parent, params)
251
- str = String.new
251
+ str = ''.dup
252
252
  str << (mod.forge_name ? mod.forge_name.tr('/', '-') : mod.name)
253
253
  str << ' (' + colorize(:cyan, mod.version ? "v#{mod.version}" : '???') + ')'
254
254
 
@@ -174,7 +174,7 @@ Puppet::Face.define(:parser, '0.0.1') do
174
174
  end
175
175
 
176
176
  def dump_parse(source, filename, options, show_filename = true)
177
- output = String.new
177
+ output = ''.dup
178
178
  evaluating_parser = Puppet::Pops::Parser::EvaluatingParser.new
179
179
  begin
180
180
  if options[:validate]
@@ -36,6 +36,21 @@ Puppet::Functions.create_function(:split) do
36
36
  param 'Type[Regexp]', :pattern
37
37
  end
38
38
 
39
+ dispatch :split_String_sensitive do
40
+ param 'Sensitive[String]', :sensitive
41
+ param 'String', :pattern
42
+ end
43
+
44
+ dispatch :split_Regexp_sensitive do
45
+ param 'Sensitive[String]', :sensitive
46
+ param 'Regexp', :pattern
47
+ end
48
+
49
+ dispatch :split_RegexpType_sensitive do
50
+ param 'Sensitive[String]', :sensitive
51
+ param 'Type[Regexp]', :pattern
52
+ end
53
+
39
54
  def split_String(str, pattern)
40
55
  str.split(Regexp.compile(pattern))
41
56
  end
@@ -47,4 +62,16 @@ Puppet::Functions.create_function(:split) do
47
62
  def split_RegexpType(str, pattern)
48
63
  str.split(pattern.regexp)
49
64
  end
50
- end
65
+
66
+ def split_String_sensitive(sensitive, pattern)
67
+ Puppet::Pops::Types::PSensitiveType::Sensitive.new(split_String(sensitive.unwrap, pattern))
68
+ end
69
+
70
+ def split_Regexp_sensitive(sensitive, pattern)
71
+ Puppet::Pops::Types::PSensitiveType::Sensitive.new(split_Regexp(sensitive.unwrap, pattern))
72
+ end
73
+
74
+ def split_RegexpType_sensitive(sensitive, pattern)
75
+ Puppet::Pops::Types::PSensitiveType::Sensitive.new(split_RegexpType(sensitive.unwrap, pattern))
76
+ end
77
+ end
@@ -105,7 +105,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
105
105
 
106
106
  def find_with_options(request)
107
107
  options = request.options
108
- options_for_facter = String.new
108
+ options_for_facter = ''.dup
109
109
  options_for_facter += options[:user_query].join(' ')
110
110
  options_for_facter += " --config #{options[:config_file]}" if options[:config_file]
111
111
  options_for_facter += " --show-legacy" if options[:show_legacy]
@@ -58,7 +58,7 @@ module Puppet::FileBucketFile
58
58
  end
59
59
  # Setting hash's default value to [], needed by the following loop
60
60
  bucket = Hash.new {[]}
61
- msg = String.new
61
+ msg = ''.dup
62
62
  # Get all files with mtime between 'from' and 'to'
63
63
  Pathname.new(request.options[:bucket_path]).find { |item|
64
64
  if item.file? and item.basename.to_s == "paths"
@@ -81,7 +81,7 @@ class Puppet::Indirector::Indirection
81
81
 
82
82
  # Generate the full doc string.
83
83
  def doc
84
- text = String.new
84
+ text = ''.dup
85
85
 
86
86
  text << scrub(@doc) << "\n\n" if @doc
87
87
 
@@ -13,7 +13,7 @@ class Puppet::InfoService::TaskInformationService
13
13
  task.validate
14
14
  {:module => {:name => task.module.name}, :name => task.name, :metadata => task.metadata}
15
15
  rescue Puppet::Module::Task::Error => err
16
- Puppet.log_exception(err, 'Failed to validate task')
16
+ Puppet.log_exception(err)
17
17
  nil
18
18
  end
19
19
  end
@@ -70,7 +70,7 @@ module Puppet
70
70
  # Builds a formatted tree from a list of node hashes containing +:text+
71
71
  # and +:dependencies+ keys.
72
72
  def self.format_tree(nodes, level = 0)
73
- str = String.new
73
+ str = ''.dup
74
74
  nodes.each_with_index do |node, i|
75
75
  last_node = nodes.length - 1 == i
76
76
  deps = node[:dependencies] || []
@@ -156,7 +156,7 @@ Puppet::Network::FormatHandler.create(:console,
156
156
 
157
157
  # Simple hash to table
158
158
  if datum.is_a?(Hash) && datum.keys.all? { |x| x.is_a?(String) || x.is_a?(Numeric) }
159
- output = String.new
159
+ output = ''.dup
160
160
  column_a = datum.empty? ? 2 : datum.map{ |k,v| k.to_s.length }.max + 2
161
161
  datum.sort_by { |k,v| k.to_s } .each do |key, value|
162
162
  output << key.to_s.ljust(column_a)
@@ -169,7 +169,7 @@ Puppet::Network::FormatHandler.create(:console,
169
169
 
170
170
  # Print one item per line for arrays
171
171
  if datum.is_a? Array
172
- output = String.new
172
+ output = ''.dup
173
173
  datum.each do |item|
174
174
  output << item.to_s
175
175
  output << "\n"
@@ -227,7 +227,7 @@ Puppet::Network::FormatHandler.create(:flat,
227
227
  end
228
228
 
229
229
  def construct_output(data)
230
- output = String.new
230
+ output = ''.dup
231
231
  data.each do |key, value|
232
232
  output << "#{key}=#{value}"
233
233
  output << "\n"
@@ -3,7 +3,7 @@ class Puppet::Network::HTTP::MemoryResponse
3
3
  attr_reader :code, :type, :body
4
4
 
5
5
  def initialize
6
- @body = String.new
6
+ @body = ''.dup
7
7
  end
8
8
 
9
9
  def respond_with(code, type, body)
@@ -31,7 +31,7 @@ class Puppet::Parameter::ValueCollection
31
31
  #
32
32
  def doc
33
33
  unless defined?(@doc)
34
- @doc = String.new
34
+ @doc = ''.dup
35
35
  unless values.empty?
36
36
  @doc << "Valid values are "
37
37
  @doc << @strings.collect do |value|
@@ -29,9 +29,10 @@ module Puppet::Parser::Files
29
29
  # * modulename/filename selector: a file is found in the file directory
30
30
  # of the named module.
31
31
  #
32
- # In the second case a nil is returned if there isn't a file found. In the
33
- # first case (absolute path), there is no existence check done and so the
34
- # path will be returned even if there isn't a file available.
32
+ # The check for file existence is performed on the node compiling the
33
+ # manifest. A node running "puppet apply" compiles its own manifest, but
34
+ # a node running "puppet agent" depends on the configured puppetserver
35
+ # for compiling. In either case, a nil is returned if no file is found.
35
36
  #
36
37
  # @param template [String] the file selector
37
38
  # @param environment [Puppet::Node::Environment] the environment in which to search
@@ -258,7 +258,7 @@ module Puppet::Parser::Functions
258
258
  def self.functiondocs(environment = Puppet.lookup(:current_environment))
259
259
  autoloader.delegatee.loadall(environment)
260
260
 
261
- ret = String.new
261
+ ret = ''.dup
262
262
 
263
263
  merged_functions(environment).sort { |a,b| a[0].to_s <=> b[0].to_s }.each do |name, hash|
264
264
  ret << "#{name}\n#{"-" * name.to_s.length}\n"
@@ -88,7 +88,7 @@ module LoaderPaths
88
88
 
89
89
  def typed_name(type, name_authority, relative_path, module_name)
90
90
  # Module name is assumed to be included in the path and therefore not added here
91
- n = String.new
91
+ n = ''.dup
92
92
  unless extension.empty?
93
93
  # Remove extension
94
94
  relative_path = relative_path[0..-(extension.length+1)]
@@ -153,7 +153,7 @@ module LoaderPaths
153
153
  end
154
154
 
155
155
  def typed_name(type, name_authority, relative_path, module_name)
156
- n = String.new
156
+ n = ''.dup
157
157
  n << module_name unless module_name.nil?
158
158
  unless extension.empty?
159
159
  # Remove extension
@@ -249,7 +249,7 @@ module LoaderPaths
249
249
  end
250
250
 
251
251
  def typed_name(type, name_authority, relative_path, module_name)
252
- n = String.new
252
+ n = ''.dup
253
253
  n << module_name unless module_name.nil?
254
254
 
255
255
  # Remove the file extension, defined as everything after the *last* dot.
@@ -351,7 +351,7 @@ module LoaderPaths
351
351
  if @init_filenames.include?(relative_path) && !(module_name.nil? || module_name.empty?)
352
352
  TypedName.new(type, module_name, name_authority)
353
353
  else
354
- n = String.new
354
+ n = ''.dup
355
355
  n << module_name unless module_name.nil?
356
356
  ext = @extensions.find { |extension| relative_path.end_with?(extension) }
357
357
  relative_path = relative_path[0..-(ext.length+1)]
@@ -20,7 +20,7 @@ module Lookup
20
20
  end
21
21
 
22
22
  def explain
23
- io = String.new
23
+ io = ''.dup
24
24
  dump_on(io, '', '')
25
25
  io
26
26
  end
@@ -228,7 +228,7 @@ class HieraConfig
228
228
  line_number += 1
229
229
  next if line_number < start_line
230
230
  quote = nil
231
- stripped = String.new
231
+ stripped = ''.dup
232
232
  line.each_codepoint do |cp|
233
233
  if cp == 0x22 || cp == 0x27 # double or single quote
234
234
  if quote == cp
@@ -1112,7 +1112,7 @@ class Factory
1112
1112
  end
1113
1113
 
1114
1114
  def self.concat(*args)
1115
- result = String.new
1115
+ result = ''.dup
1116
1116
  args.each do |e|
1117
1117
  if e.instance_of?(Factory) && e.model_class <= LiteralString
1118
1118
  result << e[KEY_VALUE]
@@ -21,7 +21,7 @@ class Puppet::Pops::Model::TreeDumper
21
21
  end
22
22
 
23
23
  def format(x)
24
- result = String.new
24
+ result = ''.dup
25
25
  parts = format_r(x)
26
26
  parts.each_index do |i|
27
27
  if i > 0
@@ -183,7 +183,7 @@ module EppSupport
183
183
  @skip_leading = skip_leading
184
184
 
185
185
  return nil if scanner.eos?
186
- s = String.new
186
+ s = ''.dup
187
187
  until scanner.eos?
188
188
  part = @scanner.scan_until(/(<%)|\z/)
189
189
  if @skip_leading
@@ -125,7 +125,7 @@ class EvaluatingParser
125
125
  # @return [String] The quoted string
126
126
  #
127
127
  def self.quote(x)
128
- escaped = String.new('"')
128
+ escaped = '"'.dup
129
129
  p = nil
130
130
  x.each_char do |c|
131
131
  case p
@@ -218,7 +218,7 @@ class PNParser
218
218
 
219
219
  def consume_string
220
220
  s = @pos
221
- b = String.new
221
+ b = ''.dup
222
222
  loop do
223
223
  c = next_cp
224
224
  case c
@@ -20,7 +20,7 @@ module PN
20
20
  end
21
21
 
22
22
  def to_s
23
- s = String.new
23
+ s = ''.dup
24
24
  format(nil, s)
25
25
  s
26
26
  end
@@ -11,7 +11,7 @@ module JsonPath
11
11
  #
12
12
  # @api private
13
13
  def self.to_json_path(path)
14
- p = String.new('$')
14
+ p = '$'.dup
15
15
  path.each do |seg|
16
16
  if seg.nil?
17
17
  p << '[null]'