puppet 6.4.4 → 6.4.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 (221) hide show
  1. checksums.yaml +4 -4
  2. data/CODEOWNERS +1 -1
  3. data/Gemfile +4 -4
  4. data/Gemfile.lock +38 -32
  5. data/ext/build_defaults.yaml +1 -0
  6. data/ext/cert_inspector +3 -3
  7. data/ext/puppet-test +2 -2
  8. data/ext/regexp_nodes/regexp_nodes.rb +4 -4
  9. data/ext/windows/service/daemon.rb +38 -8
  10. data/install.rb +6 -6
  11. data/lib/puppet/application.rb +1 -1
  12. data/lib/puppet/application/apply.rb +2 -2
  13. data/lib/puppet/application/describe.rb +3 -9
  14. data/lib/puppet/application/doc.rb +1 -1
  15. data/lib/puppet/application/lookup.rb +1 -1
  16. data/lib/puppet/application/script.rb +2 -2
  17. data/lib/puppet/application/ssl.rb +4 -1
  18. data/lib/puppet/configurer.rb +86 -30
  19. data/lib/puppet/configurer/downloader.rb +2 -6
  20. data/lib/puppet/defaults.rb +32 -6
  21. data/lib/puppet/error.rb +9 -1
  22. data/lib/puppet/face/module/list.rb +5 -5
  23. data/lib/puppet/face/module/search.rb +1 -1
  24. data/lib/puppet/face/module/uninstall.rb +1 -1
  25. data/lib/puppet/face/module/upgrade.rb +1 -1
  26. data/lib/puppet/file_serving/http_metadata.rb +1 -1
  27. data/lib/puppet/file_system.rb +0 -8
  28. data/lib/puppet/file_system/memory_file.rb +1 -1
  29. data/lib/puppet/file_system/posix.rb +3 -2
  30. data/lib/puppet/forge.rb +3 -3
  31. data/lib/puppet/functions.rb +1 -2
  32. data/lib/puppet/functions/camelcase.rb +2 -2
  33. data/lib/puppet/functions/epp.rb +4 -4
  34. data/lib/puppet/functions/find_file.rb +9 -9
  35. data/lib/puppet/functions/inline_epp.rb +5 -5
  36. data/lib/puppet/gettext/module_translations.rb +1 -1
  37. data/lib/puppet/graph/rb_tree_map.rb +2 -2
  38. data/lib/puppet/graph/simple_graph.rb +4 -3
  39. data/lib/puppet/indirector/file_bucket_file/file.rb +1 -1
  40. data/lib/puppet/indirector/hiera.rb +2 -0
  41. data/lib/puppet/indirector/resource/ral.rb +1 -3
  42. data/lib/puppet/indirector/resource/validator.rb +1 -1
  43. data/lib/puppet/interface.rb +2 -1
  44. data/lib/puppet/loaders.rb +0 -1
  45. data/lib/puppet/metatype/manager.rb +1 -1
  46. data/lib/puppet/module.rb +1 -1
  47. data/lib/puppet/module/task.rb +20 -4
  48. data/lib/puppet/module_tool/applications/installer.rb +1 -1
  49. data/lib/puppet/module_tool/applications/uninstaller.rb +3 -3
  50. data/lib/puppet/module_tool/metadata.rb +1 -1
  51. data/lib/puppet/module_tool/shared_behaviors.rb +4 -4
  52. data/lib/puppet/module_tool/tar/mini.rb +1 -1
  53. data/lib/puppet/network/http/api/indirected_routes.rb +12 -11
  54. data/lib/puppet/network/http/connection.rb +10 -12
  55. data/lib/puppet/network/http/pool.rb +2 -0
  56. data/lib/puppet/network/http/site.rb +1 -1
  57. data/lib/puppet/network/resolver.rb +2 -2
  58. data/lib/puppet/node/environment.rb +4 -2
  59. data/lib/puppet/pal/pal_impl.rb +2 -2
  60. data/lib/puppet/parser/ast.rb +1 -1
  61. data/lib/puppet/parser/ast/resourceparam.rb +1 -1
  62. data/lib/puppet/parser/functions.rb +1 -1
  63. data/lib/puppet/parser/functions/epp.rb +3 -3
  64. data/lib/puppet/parser/functions/inline_epp.rb +5 -5
  65. data/lib/puppet/parser/scope.rb +8 -7
  66. data/lib/puppet/pops/evaluator/collectors/catalog_collector.rb +1 -1
  67. data/lib/puppet/pops/evaluator/collectors/exported_collector.rb +1 -1
  68. data/lib/puppet/pops/evaluator/external_syntax_support.rb +3 -2
  69. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  70. data/lib/puppet/pops/loader/task_instantiator.rb +4 -0
  71. data/lib/puppet/pops/loaders.rb +1 -1
  72. data/lib/puppet/pops/lookup/hiera_config.rb +1 -0
  73. data/lib/puppet/pops/lookup/sub_lookup.rb +1 -1
  74. data/lib/puppet/pops/merge_strategy.rb +22 -18
  75. data/lib/puppet/pops/parser/heredoc_support.rb +1 -1
  76. data/lib/puppet/pops/parser/interpolation_support.rb +4 -4
  77. data/lib/puppet/pops/parser/locator.rb +1 -1
  78. data/lib/puppet/pops/parser/pn_parser.rb +17 -16
  79. data/lib/puppet/pops/puppet_stack.rb +51 -49
  80. data/lib/puppet/pops/types/p_sensitive_type.rb +1 -1
  81. data/lib/puppet/pops/types/string_converter.rb +10 -10
  82. data/lib/puppet/pops/types/types.rb +3 -3
  83. data/lib/puppet/property.rb +1 -1
  84. data/lib/puppet/property/ensure.rb +1 -1
  85. data/lib/puppet/provider/exec.rb +6 -2
  86. data/lib/puppet/provider/nameservice/directoryservice.rb +1 -1
  87. data/lib/puppet/provider/nameservice/pw.rb +2 -2
  88. data/lib/puppet/provider/package/apt.rb +5 -1
  89. data/lib/puppet/provider/package/dnfmodule.rb +87 -0
  90. data/lib/puppet/provider/package/dpkg.rb +34 -18
  91. data/lib/puppet/provider/package/openbsd.rb +1 -1
  92. data/lib/puppet/provider/package/pip.rb +34 -9
  93. data/lib/puppet/provider/package/portage.rb +4 -4
  94. data/lib/puppet/provider/package/rpm.rb +5 -5
  95. data/lib/puppet/provider/package/windows/package.rb +1 -1
  96. data/lib/puppet/provider/package/yum.rb +1 -1
  97. data/lib/puppet/provider/package_targetable.rb +5 -4
  98. data/lib/puppet/provider/parsedfile.rb +1 -1
  99. data/lib/puppet/provider/service/daemontools.rb +9 -9
  100. data/lib/puppet/provider/service/openbsd.rb +1 -1
  101. data/lib/puppet/provider/service/rcng.rb +2 -2
  102. data/lib/puppet/provider/service/runit.rb +2 -8
  103. data/lib/puppet/provider/service/systemd.rb +9 -9
  104. data/lib/puppet/provider/user/directoryservice.rb +1 -1
  105. data/lib/puppet/provider/user/hpux.rb +1 -1
  106. data/lib/puppet/provider/user/user_role_add.rb +1 -1
  107. data/lib/puppet/provider/user/useradd.rb +22 -13
  108. data/lib/puppet/provider/user/windows_adsi.rb +4 -5
  109. data/lib/puppet/reference/indirection.rb +2 -2
  110. data/lib/puppet/reference/metaparameter.rb +1 -3
  111. data/lib/puppet/reference/providers.rb +1 -3
  112. data/lib/puppet/reference/type.rb +3 -9
  113. data/lib/puppet/reports.rb +1 -1
  114. data/lib/puppet/resource.rb +1 -1
  115. data/lib/puppet/resource/catalog.rb +1 -1
  116. data/lib/puppet/settings.rb +3 -3
  117. data/lib/puppet/settings/environment_conf.rb +1 -0
  118. data/lib/puppet/ssl/host.rb +1 -1
  119. data/lib/puppet/ssl/oids.rb +1 -1
  120. data/lib/puppet/transaction.rb +33 -11
  121. data/lib/puppet/transaction/report.rb +1 -1
  122. data/lib/puppet/type.rb +2 -4
  123. data/lib/puppet/type/exec.rb +7 -3
  124. data/lib/puppet/type/file.rb +1 -2
  125. data/lib/puppet/type/file/data_sync.rb +5 -1
  126. data/lib/puppet/type/group.rb +4 -2
  127. data/lib/puppet/type/notify.rb +3 -2
  128. data/lib/puppet/type/package.rb +10 -3
  129. data/lib/puppet/type/schedule.rb +1 -1
  130. data/lib/puppet/type/service.rb +1 -1
  131. data/lib/puppet/type/user.rb +4 -2
  132. data/lib/puppet/util.rb +35 -12
  133. data/lib/puppet/util/command_line/trollop.rb +1 -1
  134. data/lib/puppet/util/http_proxy.rb +8 -14
  135. data/lib/puppet/util/log.rb +2 -2
  136. data/lib/puppet/util/log/destinations.rb +2 -2
  137. data/lib/puppet/util/logging.rb +32 -20
  138. data/lib/puppet/util/metric.rb +2 -2
  139. data/lib/puppet/util/provider_features.rb +2 -4
  140. data/lib/puppet/util/rdoc.rb +1 -1
  141. data/lib/puppet/util/reference.rb +1 -1
  142. data/lib/puppet/util/resource_template.rb +1 -1
  143. data/lib/puppet/util/selinux.rb +3 -1
  144. data/lib/puppet/util/windows/adsi.rb +48 -18
  145. data/lib/puppet/util/windows/registry.rb +7 -5
  146. data/lib/puppet/vendor.rb +1 -1
  147. data/lib/puppet/version.rb +1 -1
  148. data/lib/puppet/x509/cert_provider.rb +13 -6
  149. data/locales/puppet.pot +199 -159
  150. data/man/man5/puppet.conf.5 +35 -5
  151. data/man/man8/puppet-agent.8 +1 -1
  152. data/man/man8/puppet-apply.8 +1 -1
  153. data/man/man8/puppet-catalog.8 +1 -1
  154. data/man/man8/puppet-config.8 +1 -1
  155. data/man/man8/puppet-describe.8 +1 -1
  156. data/man/man8/puppet-device.8 +1 -1
  157. data/man/man8/puppet-doc.8 +1 -1
  158. data/man/man8/puppet-epp.8 +1 -1
  159. data/man/man8/puppet-facts.8 +1 -1
  160. data/man/man8/puppet-filebucket.8 +1 -1
  161. data/man/man8/puppet-generate.8 +1 -1
  162. data/man/man8/puppet-help.8 +1 -1
  163. data/man/man8/puppet-key.8 +1 -1
  164. data/man/man8/puppet-lookup.8 +1 -1
  165. data/man/man8/puppet-man.8 +1 -1
  166. data/man/man8/puppet-module.8 +1 -1
  167. data/man/man8/puppet-node.8 +1 -1
  168. data/man/man8/puppet-parser.8 +1 -1
  169. data/man/man8/puppet-plugin.8 +1 -1
  170. data/man/man8/puppet-report.8 +1 -1
  171. data/man/man8/puppet-resource.8 +1 -1
  172. data/man/man8/puppet-script.8 +1 -1
  173. data/man/man8/puppet-ssl.8 +1 -1
  174. data/man/man8/puppet-status.8 +1 -1
  175. data/man/man8/puppet.8 +2 -2
  176. data/spec/fixtures/unit/provider/package/dnfmodule/dnf-module-list-installed.txt +11 -0
  177. data/spec/integration/configurer_spec.rb +52 -0
  178. data/spec/integration/type/notify_spec.rb +46 -0
  179. data/spec/lib/puppet/certificate_factory.rb +2 -2
  180. data/spec/spec_helper.rb +28 -0
  181. data/spec/unit/application/ssl_spec.rb +4 -7
  182. data/spec/unit/configurer_spec.rb +394 -398
  183. data/spec/unit/defaults_spec.rb +4 -4
  184. data/spec/unit/forge/forge_spec.rb +1 -3
  185. data/spec/unit/forge/repository_spec.rb +1 -3
  186. data/spec/unit/indirector/resource/ral_spec.rb +4 -4
  187. data/spec/unit/network/http/connection_spec.rb +119 -145
  188. data/spec/unit/parser/scope_spec.rb +10 -0
  189. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +8 -3
  190. data/spec/unit/pops/loaders/module_loaders_spec.rb +37 -0
  191. data/spec/unit/provider/exec_spec.rb +209 -0
  192. data/spec/unit/provider/package/dnfmodule_spec.rb +186 -0
  193. data/spec/unit/provider/package/dpkg_spec.rb +238 -78
  194. data/spec/unit/provider/package/pip_spec.rb +51 -6
  195. data/spec/unit/provider/package/portage_spec.rb +4 -4
  196. data/spec/unit/provider/package_targetable_spec.rb +60 -0
  197. data/spec/unit/provider/service/daemontools_spec.rb +24 -0
  198. data/spec/unit/provider/service/runit_spec.rb +24 -0
  199. data/spec/unit/provider/service/systemd_spec.rb +25 -25
  200. data/spec/unit/provider/user/hpux_spec.rb +2 -2
  201. data/spec/unit/provider/user/useradd_spec.rb +46 -0
  202. data/spec/unit/ssl/host_spec.rb +0 -5
  203. data/spec/unit/ssl/state_machine_spec.rb +0 -6
  204. data/spec/unit/transaction_spec.rb +46 -0
  205. data/spec/unit/type/exec_spec.rb +6 -12
  206. data/spec/unit/type/file/content_spec.rb +9 -3
  207. data/spec/unit/type/file_spec.rb +9 -4
  208. data/spec/unit/type/package_spec.rb +5 -0
  209. data/spec/unit/util/execution_spec.rb +16 -0
  210. data/spec/unit/util/http_proxy_spec.rb +118 -27
  211. data/spec/unit/util/log/destinations_spec.rb +7 -3
  212. data/spec/unit/util/log_spec.rb +0 -138
  213. data/spec/unit/util/logging_spec.rb +200 -0
  214. data/spec/unit/util/windows/adsi_spec.rb +51 -0
  215. data/spec/unit/x509/cert_provider_spec.rb +24 -4
  216. data/tasks/manpages.rake +1 -0
  217. metadata +12 -10
  218. data/lib/puppet/pops/loader/null_loader.rb +0 -60
  219. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_get/should_yield_to_the_block.yml +0 -24
  220. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_head/should_yield_to_the_block.yml +0 -24
  221. data/spec/fixtures/vcr/cassettes/Puppet_Network_HTTP_Connection/when_handling_requests/_request_post/should_yield_to_the_block.yml +0 -24
@@ -89,6 +89,8 @@ class Puppet::Network::HTTP::Pool < Puppet::Network::HTTP::BasePool
89
89
  #
90
90
  # @api private
91
91
  def setsockopts(netio)
92
+ return unless netio
93
+
92
94
  socket = netio.io
93
95
  socket.setsockopt(Socket::SOL_SOCKET, Socket::SO_KEEPALIVE, true)
94
96
  end
@@ -15,7 +15,7 @@ class Puppet::Network::HTTP::Site
15
15
  end
16
16
 
17
17
  def addr
18
- "#{@scheme}://#{@host}:#{@port.to_s}"
18
+ "#{@scheme}://#{@host}:#{@port}"
19
19
  end
20
20
  alias to_s addr
21
21
 
@@ -50,7 +50,7 @@ module Puppet::Network
50
50
  case service_name
51
51
  when :puppet then service = '_x-puppet'
52
52
  when :file then service = '_x-puppet-fileserver'
53
- else service = "_x-puppet-#{service_name.to_s}"
53
+ else service = "_x-puppet-#{service_name}"
54
54
  end
55
55
  record_name = "#{service}._tcp.#{domain}"
56
56
 
@@ -72,7 +72,7 @@ module Puppet::Network
72
72
  else
73
73
  each_priority(records) do |recs|
74
74
  while next_rr = recs.delete(find_weighted_server(recs))
75
- Puppet.debug "Yielding next server of #{next_rr.target.to_s}:#{next_rr.port}"
75
+ Puppet.debug "Yielding next server of #{next_rr.target}:#{next_rr.port}"
76
76
  yield next_rr.target.to_s, next_rr.port
77
77
  end
78
78
  end
@@ -490,8 +490,7 @@ class Puppet::Node::Environment
490
490
  [self.class, name, full_modulepath, manifest].hash
491
491
  end
492
492
 
493
- private
494
-
493
+ # not private so it can be called in tests
495
494
  def self.extralibs()
496
495
  if Puppet::Util.get_env('PUPPETLIB')
497
496
  split_path(Puppet::Util.get_env('PUPPETLIB'))
@@ -500,12 +499,15 @@ class Puppet::Node::Environment
500
499
  end
501
500
  end
502
501
 
502
+ # not private so it can be called in initialize
503
503
  def self.expand_dirs(dirs)
504
504
  dirs.collect do |dir|
505
505
  Puppet::FileSystem.expand_path(dir)
506
506
  end
507
507
  end
508
508
 
509
+ private
510
+
509
511
  # Reparse the manifests for the given environment
510
512
  #
511
513
  # There are two sources that can be used for the initial parse:
@@ -462,8 +462,8 @@ module Pal
462
462
  end
463
463
  end
464
464
 
465
- rescue Puppet::ParseErrorWithIssue, Puppet::Error
466
- # already logged and handled by the compiler for these two cases
465
+ rescue Puppet::Error
466
+ # already logged and handled by the compiler, including Puppet::ParseErrorWithIssue
467
467
  raise
468
468
 
469
469
  rescue => detail
@@ -11,7 +11,7 @@ class Puppet::Parser::AST
11
11
  attr_accessor :parent, :scope, :file, :line, :pos
12
12
 
13
13
  def inspect
14
- "( #{self.class} #{self.to_s} #{@children.inspect} )"
14
+ "( #{self.class} #{self} #{@children.inspect} )"
15
15
  end
16
16
 
17
17
  # Evaluate the current object. Just a stub method, since the subclass
@@ -26,6 +26,6 @@ class Puppet::Parser::AST::ResourceParam < Puppet::Parser::AST::Branch
26
26
  end
27
27
 
28
28
  def to_s
29
- "#{@param} => #{@value.to_s}"
29
+ "#{@param} => #{@value}"
30
30
  end
31
31
  end
@@ -24,7 +24,7 @@ module Puppet::Parser::Functions
24
24
  Puppet::Util::Log.levels.each do |level|
25
25
  newfunction(level,
26
26
  :environment => root_env,
27
- :doc => "Log a message on the server at level #{level.to_s}.") do |vals|
27
+ :doc => "Log a message on the server at level #{level}.") do |vals|
28
28
  send(level, vals.join(" "))
29
29
  end
30
30
  end
@@ -7,12 +7,12 @@ result as a String.
7
7
  The first argument to this function should be a `<MODULE NAME>/<TEMPLATE FILE>`
8
8
  reference, which loads `<TEMPLATE FILE>` from `<MODULE NAME>`'s `templates`
9
9
  directory. In most cases, the last argument is optional; if used, it should be a
10
- [hash](/puppet/latest/reference/lang_data_hash.html) that contains parameters to
10
+ [hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
11
11
  pass to the template.
12
12
 
13
- - See the [template](/puppet/latest/reference/lang_template.html) documentation
13
+ - See the [template](https://puppet.com/docs/puppet/latest/lang_template.html) documentation
14
14
  for general template usage information.
15
- - See the [EPP syntax](/puppet/latest/reference/lang_template_epp.html)
15
+ - See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
16
16
  documentation for examples of EPP.
17
17
 
18
18
  For example, to call the apache module's `templates/vhost/_docroot.epp`
@@ -6,12 +6,12 @@ text result as a String.
6
6
 
7
7
  The first argument to this function should be a string containing an EPP
8
8
  template. In most cases, the last argument is optional; if used, it should be a
9
- [hash](/puppet/latest/reference/lang_data_hash.html) that contains parameters to
9
+ [hash](https://puppet.com/docs/puppet/latest/lang_data_hash.html) that contains parameters to
10
10
  pass to the template.
11
11
 
12
- - See the [template](/puppet/latest/reference/lang_template.html) documentation
12
+ - See the [template](https://puppet.com/docs/puppet/latest/lang_template.html) documentation
13
13
  for general template usage information.
14
- - See the [EPP syntax](/puppet/latest/reference/lang_template_epp.html)
14
+ - See the [EPP syntax](https://puppet.com/docs/puppet/latest/lang_template_epp.html)
15
15
  documentation for examples of EPP.
16
16
 
17
17
  For example, to evaluate an inline EPP template and pass it the `docroot` and
@@ -29,7 +29,7 @@ parameter tag without default values. Puppet produces an error if the
29
29
  `inline_epp` function fails to pass any required parameter.
30
30
 
31
31
  An inline EPP template should be written as a single-quoted string or
32
- [heredoc](/puppet/latest/reference/lang_data_string.html#heredocs).
32
+ [heredoc](https://puppet.com/docs/puppet/latest/lang_data_string.html#heredocs).
33
33
  A double-quoted string is subject to expression interpolation before the string
34
34
  is parsed as an EPP template.
35
35
 
@@ -45,7 +45,7 @@ END
45
45
  ~~~
46
46
 
47
47
  - Since 3.5
48
- - Requires [future parser](/puppet/3.8/reference/experiments_future.html) in Puppet 3.5 to 3.8") do |arguments|
48
+ - Requires [future parser](https://puppet.com/docs/puppet/3.8/experiments_future.html) in Puppet 3.5 to 3.8") do |arguments|
49
49
 
50
50
  Puppet::Parser::Functions::Error.is4x('inline_epp')
51
51
  end
@@ -67,8 +67,8 @@ class Puppet::Parser::Scope
67
67
  false
68
68
  end
69
69
 
70
- def add_entries_to(target = {})
71
- @parent.add_entries_to(target) unless @parent.nil?
70
+ def add_entries_to(target = {}, include_undef = false)
71
+ @parent.add_entries_to(target, include_undef) unless @parent.nil?
72
72
  # do not include match data ($0-$n)
73
73
  target
74
74
  end
@@ -106,10 +106,10 @@ class Puppet::Parser::Scope
106
106
  @symbols.include?(name)
107
107
  end
108
108
 
109
- def add_entries_to(target = {})
109
+ def add_entries_to(target = {}, include_undef = false)
110
110
  super
111
111
  @symbols.each do |k, v|
112
- if v == :undef || v.nil?
112
+ if (v == :undef || v.nil?) && !include_undef
113
113
  target.delete(k)
114
114
  else
115
115
  target[ k ] = v
@@ -161,7 +161,7 @@ class Puppet::Parser::Scope
161
161
  raise Puppet::ParseError, _("Numerical variables cannot be deleted: Attempt to delete: $%{name}") % { name: name }
162
162
  end
163
163
 
164
- def add_entries_to(target = {})
164
+ def add_entries_to(target = {}, include_undef = false)
165
165
  # do not include match data ($0-$n)
166
166
  super
167
167
  end
@@ -661,8 +661,9 @@ class Puppet::Parser::Scope
661
661
  # Returns a Hash containing all variables and their values, optionally (and
662
662
  # by default) including the values defined in parent. Local values
663
663
  # shadow parent values. Ephemeral scopes for match results ($0 - $n) are not included.
664
+ # Optionally include the variables that are explicitly set to `undef`.
664
665
  #
665
- def to_hash(recursive = true)
666
+ def to_hash(recursive = true, include_undef = false)
666
667
  if recursive and has_enclosing_scope?
667
668
  target = enclosing_scope.to_hash(recursive)
668
669
  if !(inherited = inherited_scope).nil?
@@ -673,7 +674,7 @@ class Puppet::Parser::Scope
673
674
  end
674
675
 
675
676
  # add all local scopes
676
- @ephemeral.last.add_entries_to(target)
677
+ @ephemeral.last.add_entries_to(target, include_undef)
677
678
  target
678
679
  end
679
680
 
@@ -24,6 +24,6 @@ class Puppet::Pops::Evaluator::Collectors::CatalogCollector < Puppet::Pops::Eval
24
24
  end
25
25
 
26
26
  def to_s
27
- "Catalog-Collector[#{@type.to_s}]"
27
+ "Catalog-Collector[#{@type}]"
28
28
  end
29
29
  end
@@ -64,6 +64,6 @@ class Puppet::Pops::Evaluator::Collectors::ExportedCollector < Puppet::Pops::Eva
64
64
  end
65
65
 
66
66
  def to_s
67
- "Exported-Collector[#{@type.to_s}]"
67
+ "Exported-Collector[#{@type}]"
68
68
  end
69
69
  end
@@ -35,10 +35,11 @@ module Puppet::Pops::Evaluator::ExternalSyntaxSupport
35
35
  def lookup_keys_for_syntax(syntax)
36
36
  segments = syntax.split(/\+/)
37
37
  result = []
38
- begin
38
+ loop do
39
39
  result << segments.join("+")
40
40
  segments.shift
41
- end until segments.empty?
41
+ break if segments.empty?
42
+ end
42
43
  result
43
44
  end
44
45
 
@@ -33,7 +33,7 @@ module Runtime3Support
33
33
  # @raise [Puppet::ParseError] an evaluation error initialized from the arguments (TODO: Change to EvaluationError?)
34
34
  #
35
35
  def optionally_fail(issue, semantic, options={}, except=nil)
36
- if except.nil?
36
+ if except.nil? && diagnostic_producer.severity_producer[issue] == :error
37
37
  # Want a stacktrace, and it must be passed as an exception
38
38
  begin
39
39
  raise EvaluationError.new()
@@ -299,10 +299,10 @@ module Runtime3Support
299
299
  # 'ruby -wc' thinks that _func is unused, because the only reference to it
300
300
  # is inside of the Kernel.eval string below. By prefixing it with the
301
301
  # underscore, we let Ruby know to not worry about whether it's unused or not.
302
- if loader && _func = loader.load(:function, name)
302
+ if loader && func = loader.load(:function, name)
303
303
  Puppet::Util::Profiler.profile(name, [:functions, name]) do
304
- # Add stack frame when calling. See Puppet::Pops::PuppetStack
305
- return Kernel.eval('_func.call(scope, *args, &block)'.freeze, Kernel.binding, file || '', line)
304
+ # Add stack frame when calling.
305
+ return Puppet::Pops::PuppetStack.stack(file || '', line, func, :call, [scope, *args], &block)
306
306
  end
307
307
  end
308
308
  # Call via 3x API if function exists there without having been autoloaded
@@ -18,6 +18,10 @@ class TaskInstantiator
18
18
  task = { 'name' => name, 'metadata' => metadata, 'files' => files }
19
19
 
20
20
  begin
21
+ unless metadata['parameters'].is_a?(Hash) || metadata['parameters'].nil?
22
+ msg = _('Failed to load metadata for task %{name}: \'parameters\' must be a hash') % { name: name }
23
+ raise Puppet::ParseError.new(msg, metadata_file)
24
+ end
21
25
  task['parameters'] = convert_types(metadata['parameters'])
22
26
 
23
27
  Types::TypeFactory.task.from_hash(task)
@@ -283,7 +283,7 @@ class Loaders
283
283
  nil
284
284
  elsif File.directory?(file)
285
285
  raise Puppet::Error, "manifest of environment '#{@environment.name}' appoints directory '#{file}'. It must be a file"
286
- elsif File.exists?(file)
286
+ elsif File.exist?(file)
287
287
  parser.parse_file(file)
288
288
  else
289
289
  raise Puppet::Error, "manifest of environment '#{@environment.name}' appoints '#{file}'. It does not exist"
@@ -339,6 +339,7 @@ class HieraConfig
339
339
  def self.not_implemented(impl, method_name)
340
340
  raise NotImplementedError, "The class #{impl.class.name} should have implemented the method #{method_name}()"
341
341
  end
342
+ private_class_method :not_implemented
342
343
  end
343
344
 
344
345
  # @api private
@@ -30,7 +30,7 @@ module SubLookup
30
30
  raise yield('Syntax error') unless segments.size * 2 == count + 1
31
31
  segments.map! do |segment|
32
32
  segment.strip!
33
- if segment.start_with?('"') || segment.start_with?("'")
33
+ if segment.start_with?('"', "'")
34
34
  segment[1..-2]
35
35
  elsif segment =~ /^(:?[+-]?[0-9]+)$/
36
36
  segment.to_i
@@ -173,12 +173,14 @@ module Puppet::Pops
173
173
 
174
174
  protected
175
175
 
176
- # Returns the type used to validate the options hash
177
- #
178
- # @return [Types::PStructType] the puppet type
179
- #
180
- def self.options_t
181
- @options_t ||=Types::TypeParser.singleton.parse("Struct[{strategy=>Optional[Pattern[/#{key}/]]}]")
176
+ class << self
177
+ # Returns the type used to validate the options hash
178
+ #
179
+ # @return [Types::PStructType] the puppet type
180
+ #
181
+ def options_t
182
+ @options_t ||=Types::TypeParser.singleton.parse("Struct[{strategy=>Optional[Pattern[/#{key}/]]}]")
183
+ end
182
184
  end
183
185
 
184
186
  # Returns the type used to validate the options hash
@@ -383,18 +385,20 @@ module Puppet::Pops
383
385
 
384
386
  protected
385
387
 
386
- # Returns a type that allows all deep_merge options except 'preserve_unmergeables' since we force
387
- # the setting of that option to false
388
- #
389
- # @return [Types::PAnyType] the puppet type used when validating the options hash
390
- def self.options_t
391
- @options_t ||= Types::TypeParser.singleton.parse('Struct[{'\
392
- "strategy=>Optional[Pattern[#{key}]],"\
393
- 'knockout_prefix=>Optional[String],'\
394
- 'merge_debug=>Optional[Boolean],'\
395
- 'merge_hash_arrays=>Optional[Boolean],'\
396
- 'sort_merged_arrays=>Optional[Boolean],'\
397
- '}]')
388
+ class << self
389
+ # Returns a type that allows all deep_merge options except 'preserve_unmergeables' since we force
390
+ # the setting of that option to false
391
+ #
392
+ # @return [Types::PAnyType] the puppet type used when validating the options hash
393
+ def options_t
394
+ @options_t ||= Types::TypeParser.singleton.parse('Struct[{'\
395
+ "strategy=>Optional[Pattern[#{key}]],"\
396
+ 'knockout_prefix=>Optional[String],'\
397
+ 'merge_debug=>Optional[Boolean],'\
398
+ 'merge_hash_arrays=>Optional[Boolean],'\
399
+ 'sort_merged_arrays=>Optional[Boolean],'\
400
+ '}]')
401
+ end
398
402
  end
399
403
 
400
404
  def value_t
@@ -136,7 +136,7 @@ module HeredocSupport
136
136
  # simply leaves lines that have text in the margin untouched.
137
137
  #
138
138
  processed_lines = lines.collect {|s| s.gsub(leading_pattern, '') }
139
- margin_per_line = processed_lines.length.times.map {|x| lines[x].length - processed_lines[x].length }
139
+ margin_per_line = Array.new(processed_lines.length) {|x| lines[x].length - processed_lines[x].length }
140
140
  lines = processed_lines
141
141
  else
142
142
  # Array with a 0 per line
@@ -23,7 +23,7 @@ module Puppet::Pops::Parser::InterpolationSupport
23
23
  value,terminator = slurp_dqstring()
24
24
  text = value
25
25
  after = scn.pos
26
- while true
26
+ loop do
27
27
  case terminator
28
28
  when '"'
29
29
  # simple case, there was no interpolation, return directly
@@ -63,7 +63,7 @@ module Puppet::Pops::Parser::InterpolationSupport
63
63
  value,terminator = slurp_dqstring
64
64
  text = value
65
65
  after = scn.pos
66
- while true
66
+ loop do
67
67
  case terminator
68
68
  when '"'
69
69
  # simple case, there was no further interpolation, return directly
@@ -107,7 +107,7 @@ module Puppet::Pops::Parser::InterpolationSupport
107
107
  value,terminator = slurp_uqstring()
108
108
  text = value
109
109
  after = scn.pos
110
- while true
110
+ loop do
111
111
  case terminator
112
112
  when ''
113
113
  # simple case, there was no interpolation, return directly
@@ -147,7 +147,7 @@ module Puppet::Pops::Parser::InterpolationSupport
147
147
  value,terminator = slurp_uqstring
148
148
  text = value
149
149
  after = scn.pos
150
- while true
150
+ loop do
151
151
  case terminator
152
152
  when ''
153
153
  # simple case, there was no further interpolation, return directly
@@ -90,7 +90,7 @@ class Locator
90
90
  f = Puppet::Util.path_to_uri(f).to_s
91
91
  end
92
92
  offset = ast.offset
93
- URI("#{f}?line=#{line_for_offset(offset).to_s}&pos=#{pos_on_line(offset).to_s}")
93
+ URI("#{f}?line=#{line_for_offset(offset)}&pos=#{pos_on_line(offset)}")
94
94
  end
95
95
 
96
96
  class AbstractLocator < Locator
@@ -48,6 +48,23 @@ class PNParser
48
48
  parse_next
49
49
  end
50
50
 
51
+ def self.char_types
52
+ unless instance_variable_defined?(:@char_types)
53
+ @char_types = Array.new(0x80, TYPE_IDENTIFIER)
54
+ @char_types[0] = TYPE_END
55
+ [0x09, 0x0d, 0x0a, 0x20].each { |n| @char_types[n] = TYPE_WS }
56
+ [TOKEN_LP, TOKEN_RP, TOKEN_LB, TOKEN_RB, TOKEN_LC, TOKEN_RC].each { |n| @char_types[n] = TYPE_DELIM }
57
+ @char_types[0x2d] = TYPE_MINUS
58
+ (0x30..0x39).each { |n| @char_types[n] = TYPE_DIGIT }
59
+ (0x41..0x5a).each { |n| @char_types[n] = TYPE_ALPHA }
60
+ (0x61..0x7a).each { |n| @char_types[n] = TYPE_ALPHA }
61
+ @char_types[TOKEN_KEY] = TYPE_KEY_START
62
+ @char_types[TOKEN_STRING] = TYPE_STRING_START
63
+ @char_types.freeze
64
+ end
65
+ @char_types
66
+ end
67
+
51
68
  private
52
69
 
53
70
  def parse_next
@@ -128,22 +145,6 @@ class PNParser
128
145
  end
129
146
 
130
147
  # All methods below belong to the PN lexer
131
- def self.char_types
132
- unless instance_variable_defined?(:@char_types)
133
- @char_types = Array.new(0x80, TYPE_IDENTIFIER)
134
- @char_types[0] = TYPE_END
135
- [0x09, 0x0d, 0x0a, 0x20].each { |n| @char_types[n] = TYPE_WS }
136
- [TOKEN_LP, TOKEN_RP, TOKEN_LB, TOKEN_RB, TOKEN_LC, TOKEN_RC].each { |n| @char_types[n] = TYPE_DELIM }
137
- @char_types[0x2d] = TYPE_MINUS
138
- (0x30..0x39).each { |n| @char_types[n] = TYPE_DIGIT }
139
- (0x41..0x5a).each { |n| @char_types[n] = TYPE_ALPHA }
140
- (0x61..0x7a).each { |n| @char_types[n] = TYPE_ALPHA }
141
- @char_types[TOKEN_KEY] = TYPE_KEY_START
142
- @char_types[TOKEN_STRING] = TYPE_STRING_START
143
- @char_types.freeze
144
- end
145
- @char_types
146
- end
147
148
 
148
149
  def next_token
149
150
  skip_white