puppet 5.3.3-x86-mingw32 → 5.3.4-x86-mingw32

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 (291) hide show
  1. data/CONTRIBUTING.md +1 -1
  2. data/Gemfile +3 -0
  3. data/ext/puppet-test +3 -2
  4. data/lib/hiera/puppet_function.rb +5 -2
  5. data/lib/hiera_puppet.rb +3 -3
  6. data/lib/puppet.rb +2 -5
  7. data/lib/puppet/agent.rb +22 -2
  8. data/lib/puppet/agent/locker.rb +6 -5
  9. data/lib/puppet/application.rb +18 -1
  10. data/lib/puppet/application/agent.rb +9 -2
  11. data/lib/puppet/application/apply.rb +1 -1
  12. data/lib/puppet/application/config.rb +1 -0
  13. data/lib/puppet/application/device.rb +1 -2
  14. data/lib/puppet/application/filebucket.rb +22 -5
  15. data/lib/puppet/application/help.rb +1 -0
  16. data/lib/puppet/application/lookup.rb +1 -3
  17. data/lib/puppet/application_support.rb +6 -1
  18. data/lib/puppet/bindings.rb +2 -1
  19. data/lib/puppet/configurer.rb +9 -4
  20. data/lib/puppet/configurer/downloader_factory.rb +10 -0
  21. data/lib/puppet/configurer/plugin_handler.rb +11 -4
  22. data/lib/puppet/daemon.rb +2 -2
  23. data/lib/puppet/defaults.rb +99 -27
  24. data/lib/puppet/environments.rb +2 -0
  25. data/lib/puppet/error.rb +5 -15
  26. data/lib/puppet/external/pson/common.rb +2 -2
  27. data/lib/puppet/face/catalog.rb +1 -1
  28. data/lib/puppet/face/config.rb +14 -1
  29. data/lib/puppet/face/epp.rb +4 -2
  30. data/lib/puppet/face/help.rb +12 -14
  31. data/lib/puppet/face/man.rb +1 -0
  32. data/lib/puppet/face/module/build.rb +1 -1
  33. data/lib/puppet/face/module/list.rb +6 -17
  34. data/lib/puppet/face/module/uninstall.rb +14 -3
  35. data/lib/puppet/face/node.rb +1 -0
  36. data/lib/puppet/face/status.rb +1 -0
  37. data/lib/puppet/file_serving/base.rb +2 -1
  38. data/lib/puppet/file_serving/configuration.rb +3 -0
  39. data/lib/puppet/file_serving/configuration/parser.rb +23 -9
  40. data/lib/puppet/file_serving/mount/locales.rb +35 -0
  41. data/lib/puppet/forge.rb +2 -1
  42. data/lib/puppet/forge/errors.rb +24 -22
  43. data/lib/puppet/functions/binary_file.rb +1 -0
  44. data/lib/puppet/functions/each.rb +10 -4
  45. data/lib/puppet/functions/eyaml_lookup_key.rb +4 -2
  46. data/lib/puppet/functions/lookup.rb +2 -2
  47. data/lib/puppet/functions/map.rb +12 -2
  48. data/lib/puppet/functions/slice.rb +2 -3
  49. data/lib/puppet/functions/unique.rb +1 -1
  50. data/lib/puppet/functions/yaml_data.rb +1 -1
  51. data/lib/puppet/gettext/config.rb +144 -41
  52. data/lib/puppet/gettext/module_translations.rb +42 -0
  53. data/lib/puppet/graph/relationship_graph.rb +1 -1
  54. data/lib/puppet/graph/simple_graph.rb +3 -3
  55. data/lib/puppet/indirector/catalog/compiler.rb +40 -25
  56. data/lib/puppet/indirector/exec.rb +1 -1
  57. data/lib/puppet/indirector/facts/facter.rb +3 -3
  58. data/lib/puppet/indirector/facts/network_device.rb +2 -2
  59. data/lib/puppet/indirector/file_bucket_file/file.rb +4 -1
  60. data/lib/puppet/indirector/indirection.rb +17 -9
  61. data/lib/puppet/indirector/ldap.rb +2 -2
  62. data/lib/puppet/indirector/node/write_only_yaml.rb +3 -1
  63. data/lib/puppet/indirector/rest.rb +8 -5
  64. data/lib/puppet/indirector/ssl_file.rb +2 -2
  65. data/lib/puppet/indirector/terminus.rb +3 -3
  66. data/lib/puppet/interface.rb +2 -1
  67. data/lib/puppet/interface/action.rb +41 -24
  68. data/lib/puppet/interface/action_builder.rb +14 -5
  69. data/lib/puppet/interface/action_manager.rb +1 -1
  70. data/lib/puppet/interface/documentation.rb +21 -10
  71. data/lib/puppet/interface/face_collection.rb +4 -2
  72. data/lib/puppet/interface/option.rb +36 -15
  73. data/lib/puppet/interface/option_builder.rb +23 -9
  74. data/lib/puppet/interface/option_manager.rb +8 -3
  75. data/lib/puppet/metatype/manager.rb +7 -3
  76. data/lib/puppet/module.rb +18 -21
  77. data/lib/puppet/module_tool/errors/installer.rb +18 -20
  78. data/lib/puppet/module_tool/errors/shared.rb +20 -15
  79. data/lib/puppet/module_tool/errors/uninstaller.rb +1 -0
  80. data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
  81. data/lib/puppet/module_tool/tar/mini.rb +57 -4
  82. data/lib/puppet/network/auth_config_parser.rb +18 -13
  83. data/lib/puppet/network/authstore.rb +2 -2
  84. data/lib/puppet/network/client_request.rb +1 -1
  85. data/lib/puppet/network/format.rb +3 -3
  86. data/lib/puppet/network/http/api/indirection_type.rb +1 -1
  87. data/lib/puppet/network/http/api/master/v3/environment.rb +5 -2
  88. data/lib/puppet/network/http/error.rb +7 -7
  89. data/lib/puppet/network/http/factory.rb +9 -0
  90. data/lib/puppet/network/http/rack.rb +2 -2
  91. data/lib/puppet/network/http/webrick.rb +2 -4
  92. data/lib/puppet/node.rb +25 -6
  93. data/lib/puppet/node/environment.rb +14 -0
  94. data/lib/puppet/node/facts.rb +9 -0
  95. data/lib/puppet/parameter.rb +3 -3
  96. data/lib/puppet/parameter/value_collection.rb +9 -9
  97. data/lib/puppet/parser/ast/leaf.rb +1 -1
  98. data/lib/puppet/parser/ast/node.rb +2 -2
  99. data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
  100. data/lib/puppet/parser/compiler.rb +6 -5
  101. data/lib/puppet/parser/functions.rb +1 -1
  102. data/lib/puppet/parser/functions/generate.rb +2 -4
  103. data/lib/puppet/parser/functions/inline_template.rb +1 -2
  104. data/lib/puppet/parser/functions/sprintf.rb +17 -3
  105. data/lib/puppet/parser/functions/template.rb +6 -2
  106. data/lib/puppet/parser/resource.rb +30 -31
  107. data/lib/puppet/parser/scope.rb +20 -11
  108. data/lib/puppet/parser/templatewrapper.rb +4 -3
  109. data/lib/puppet/pops/evaluator/collector_transformer.rb +2 -1
  110. data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
  111. data/lib/puppet/pops/evaluator/epp_evaluator.rb +21 -8
  112. data/lib/puppet/pops/evaluator/evaluator_impl.rb +2 -1
  113. data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
  114. data/lib/puppet/pops/evaluator/runtime3_converter.rb +3 -1
  115. data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -1
  116. data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
  117. data/lib/puppet/pops/functions/dispatch.rb +1 -1
  118. data/lib/puppet/pops/functions/function.rb +8 -2
  119. data/lib/puppet/pops/issue_reporter.rb +7 -2
  120. data/lib/puppet/pops/issues.rb +10 -4
  121. data/lib/puppet/pops/label_provider.rb +1 -1
  122. data/lib/puppet/pops/loader/module_loaders.rb +5 -2
  123. data/lib/puppet/pops/loader/static_loader.rb +1 -1
  124. data/lib/puppet/pops/loaders.rb +7 -3
  125. data/lib/puppet/pops/lookup/explainer.rb +2 -1
  126. data/lib/puppet/pops/lookup/hiera_config.rb +2 -2
  127. data/lib/puppet/pops/lookup/lookup_adapter.rb +4 -4
  128. data/lib/puppet/pops/merge_strategy.rb +6 -3
  129. data/lib/puppet/pops/migration/migration_checker.rb +8 -8
  130. data/lib/puppet/pops/model/ast_transformer.rb +1 -1
  131. data/lib/puppet/pops/model/factory.rb +4 -2
  132. data/lib/puppet/pops/resource/resource_type_impl.rb +1 -1
  133. data/lib/puppet/pops/serialization/abstract_writer.rb +2 -1
  134. data/lib/puppet/pops/types/iterable.rb +2 -0
  135. data/lib/puppet/pops/types/p_object_type.rb +36 -15
  136. data/lib/puppet/pops/types/type_calculator.rb +2 -1
  137. data/lib/puppet/pops/types/type_factory.rb +3 -1
  138. data/lib/puppet/pops/types/type_mismatch_describer.rb +19 -6
  139. data/lib/puppet/pops/types/type_parser.rb +7 -7
  140. data/lib/puppet/pops/types/types.rb +10 -4
  141. data/lib/puppet/pops/validation.rb +14 -12
  142. data/lib/puppet/property.rb +14 -6
  143. data/lib/puppet/property/ensure.rb +2 -2
  144. data/lib/puppet/provider.rb +4 -4
  145. data/lib/puppet/provider/group/aix.rb +4 -2
  146. data/lib/puppet/provider/ldap.rb +2 -2
  147. data/lib/puppet/provider/naginator.rb +1 -1
  148. data/lib/puppet/provider/nameservice.rb +7 -4
  149. data/lib/puppet/provider/nameservice/directoryservice.rb +4 -3
  150. data/lib/puppet/provider/package/aix.rb +1 -1
  151. data/lib/puppet/provider/package/nim.rb +7 -8
  152. data/lib/puppet/provider/package/opkg.rb +1 -1
  153. data/lib/puppet/provider/package/pkg.rb +9 -6
  154. data/lib/puppet/provider/package/pkgutil.rb +3 -3
  155. data/lib/puppet/provider/package/yum.rb +1 -1
  156. data/lib/puppet/provider/parsedfile.rb +4 -4
  157. data/lib/puppet/provider/selmodule/semodule.rb +5 -3
  158. data/lib/puppet/provider/service/base.rb +1 -1
  159. data/lib/puppet/provider/service/init.rb +1 -1
  160. data/lib/puppet/provider/service/launchd.rb +2 -2
  161. data/lib/puppet/provider/service/runit.rb +2 -1
  162. data/lib/puppet/provider/service/smf.rb +2 -0
  163. data/lib/puppet/provider/service/systemd.rb +1 -0
  164. data/lib/puppet/provider/service/upstart.rb +1 -1
  165. data/lib/puppet/provider/user/aix.rb +13 -6
  166. data/lib/puppet/provider/user/openbsd.rb +2 -1
  167. data/lib/puppet/provider/yumrepo/inifile.rb +2 -1
  168. data/lib/puppet/provider/zone/solaris.rb +2 -2
  169. data/lib/puppet/reference/configuration.rb +4 -2
  170. data/lib/puppet/relationship.rb +2 -1
  171. data/lib/puppet/reports/store.rb +1 -1
  172. data/lib/puppet/resource.rb +7 -5
  173. data/lib/puppet/resource/capability_finder.rb +14 -11
  174. data/lib/puppet/resource/catalog.rb +33 -18
  175. data/lib/puppet/resource/type.rb +5 -5
  176. data/lib/puppet/settings.rb +19 -13
  177. data/lib/puppet/settings/base_setting.rb +23 -8
  178. data/lib/puppet/settings/config_file.rb +14 -4
  179. data/lib/puppet/settings/environment_conf.rb +19 -9
  180. data/lib/puppet/ssl/base.rb +9 -4
  181. data/lib/puppet/ssl/oids.rb +8 -2
  182. data/lib/puppet/syntax_checkers/base64.rb +5 -6
  183. data/lib/puppet/transaction.rb +7 -3
  184. data/lib/puppet/transaction/persistence.rb +16 -1
  185. data/lib/puppet/transaction/report.rb +6 -0
  186. data/lib/puppet/type.rb +27 -35
  187. data/lib/puppet/type/file.rb +2 -1
  188. data/lib/puppet/type/file/data_sync.rb +2 -1
  189. data/lib/puppet/type/file/source.rb +1 -1
  190. data/lib/puppet/type/group.rb +1 -1
  191. data/lib/puppet/type/mount.rb +1 -1
  192. data/lib/puppet/type/resources.rb +1 -1
  193. data/lib/puppet/type/schedule.rb +26 -14
  194. data/lib/puppet/type/user.rb +9 -3
  195. data/lib/puppet/type/zone.rb +1 -1
  196. data/lib/puppet/util.rb +27 -21
  197. data/lib/puppet/util/at_fork/solaris.rb +6 -4
  198. data/lib/puppet/util/command_line.rb +5 -0
  199. data/lib/puppet/util/command_line/trollop.rb +6 -5
  200. data/lib/puppet/util/errors.rb +61 -8
  201. data/lib/puppet/util/fileparsing.rb +3 -5
  202. data/lib/puppet/util/http_proxy.rb +14 -6
  203. data/lib/puppet/util/instance_loader.rb +1 -3
  204. data/lib/puppet/util/ldap/manager.rb +6 -3
  205. data/lib/puppet/util/log.rb +19 -24
  206. data/lib/puppet/util/logging.rb +21 -28
  207. data/lib/puppet/util/methodhelper.rb +1 -1
  208. data/lib/puppet/util/nagios_maker.rb +1 -1
  209. data/lib/puppet/util/network_device/config.rb +21 -13
  210. data/lib/puppet/util/plist.rb +3 -1
  211. data/lib/puppet/util/posix.rb +1 -1
  212. data/lib/puppet/util/provider_features.rb +1 -1
  213. data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
  214. data/lib/puppet/util/reference.rb +2 -3
  215. data/lib/puppet/util/selinux.rb +1 -1
  216. data/lib/puppet/util/storage.rb +2 -2
  217. data/lib/puppet/util/windows/eventlog.rb +10 -5
  218. data/lib/puppet/util/windows/file.rb +61 -9
  219. data/lib/puppet/util/windows/process.rb +1 -1
  220. data/lib/puppet/util/windows/taskscheduler.rb +2 -2
  221. data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +5 -1
  222. data/lib/puppet/version.rb +1 -1
  223. data/locales/en/puppet.po +19 -0
  224. data/locales/ja/puppet.po +2739 -809
  225. data/locales/puppet.pot +2367 -734
  226. data/spec/fixtures/unit/application/environments/production/data/common.yaml +2 -0
  227. data/spec/integration/agent/logging_spec.rb +2 -0
  228. data/spec/integration/faces/plugin_spec.rb +1 -0
  229. data/spec/integration/network/authconfig_spec.rb +2 -2
  230. data/spec/integration/parser/collection_spec.rb +2 -2
  231. data/spec/integration/parser/scope_spec.rb +16 -3
  232. data/spec/integration/provider/cron/crontab_spec.rb +1 -0
  233. data/spec/integration/transaction/report_spec.rb +5 -0
  234. data/spec/lib/matchers/json.rb +14 -13
  235. data/spec/unit/agent_spec.rb +33 -0
  236. data/spec/unit/application/config_spec.rb +4 -0
  237. data/spec/unit/application/lookup_spec.rb +30 -0
  238. data/spec/unit/application_spec.rb +18 -0
  239. data/spec/unit/configurer/downloader_factory_spec.rb +33 -0
  240. data/spec/unit/configurer/plugin_handler_spec.rb +71 -16
  241. data/spec/unit/environments_spec.rb +15 -0
  242. data/spec/unit/face/config_spec.rb +8 -9
  243. data/spec/unit/face/epp_face_spec.rb +2 -2
  244. data/spec/unit/face/plugin_spec.rb +50 -4
  245. data/spec/unit/file_serving/configuration/parser_spec.rb +2 -2
  246. data/spec/unit/file_serving/mount/locales_spec.rb +73 -0
  247. data/spec/unit/functions/break_spec.rb +108 -50
  248. data/spec/unit/functions/defined_spec.rb +2 -2
  249. data/spec/unit/functions/hiera_spec.rb +0 -1
  250. data/spec/unit/functions/lookup_spec.rb +85 -19
  251. data/spec/unit/functions/next_spec.rb +1 -1
  252. data/spec/unit/functions/return_spec.rb +2 -2
  253. data/spec/unit/gettext/config_spec.rb +125 -0
  254. data/spec/unit/gettext/module_loading_spec.rb +53 -0
  255. data/spec/unit/indirector/json_spec.rb +0 -11
  256. data/spec/unit/indirector/node/exec_spec.rb +1 -1
  257. data/spec/unit/info_service_spec.rb +1 -1
  258. data/spec/unit/interface_spec.rb +12 -0
  259. data/spec/unit/module_spec.rb +0 -28
  260. data/spec/unit/module_tool/tar/mini_spec.rb +34 -5
  261. data/spec/unit/network/http/factory_spec.rb +22 -0
  262. data/spec/unit/network/http/webrick_spec.rb +30 -29
  263. data/spec/unit/node/environment_spec.rb +16 -0
  264. data/spec/unit/node_spec.rb +102 -16
  265. data/spec/unit/parser/environment_compiler_spec.rb +1 -1
  266. data/spec/unit/parser/functions/sprintf_spec.rb +26 -0
  267. data/spec/unit/parser/resource/param_spec.rb +1 -1
  268. data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +9 -9
  269. data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
  270. data/spec/unit/pops/parser/parse_containers_spec.rb +1 -1
  271. data/spec/unit/pops/types/type_calculator_spec.rb +40 -0
  272. data/spec/unit/pops/types/type_mismatch_describer_spec.rb +9 -0
  273. data/spec/unit/provider/selmodule_spec.rb +6 -0
  274. data/spec/unit/provider/service/init_spec.rb +1 -1
  275. data/spec/unit/provider/service/smf_spec.rb +2 -0
  276. data/spec/unit/provider/service/systemd_spec.rb +14 -0
  277. data/spec/unit/resource/catalog_spec.rb +12 -2
  278. data/spec/unit/settings/config_file_spec.rb +1 -1
  279. data/spec/unit/transaction/persistence_spec.rb +42 -0
  280. data/spec/unit/transaction/report_spec.rb +19 -4
  281. data/spec/unit/transaction_spec.rb +27 -0
  282. data/spec/unit/type/schedule_spec.rb +14 -0
  283. data/spec/unit/type_spec.rb +3 -3
  284. data/spec/unit/util/errors_spec.rb +1 -1
  285. data/spec/unit/util/http_proxy_spec.rb +37 -0
  286. data/spec/unit/util/log_spec.rb +3 -3
  287. data/spec/unit/util/logging_spec.rb +7 -7
  288. data/spec/unit/util/monkey_patches_spec.rb +6 -2
  289. metadata +3445 -3416
  290. checksums.yaml +0 -7
  291. data/spec/unit/gettext_config_spec.rb +0 -57
@@ -59,6 +59,15 @@ class Puppet::Node::Facts
59
59
  end
60
60
  end
61
61
 
62
+ # Add extra values, such as facts given to lookup on the command line. The
63
+ # extra values will override existing values.
64
+ # @param extra_values [Hash{String=>Object}] the values to add
65
+ # @api private
66
+ def add_extra_values(extra_values)
67
+ @values.merge!(extra_values)
68
+ nil
69
+ end
70
+
62
71
  # Sanitize fact values by converting everything not a string, Boolean
63
72
  # numeric, array or hash into strings.
64
73
  def sanitize
@@ -338,7 +338,7 @@ class Puppet::Parameter
338
338
  self.resource = resource
339
339
  options.delete(:resource)
340
340
  else
341
- raise Puppet::DevError, "No resource set for #{self.class.name}"
341
+ raise Puppet::DevError, _("No resource set for %{name}") % { name: self.class.name }
342
342
  end
343
343
 
344
344
  set_options(options)
@@ -425,7 +425,7 @@ class Puppet::Parameter
425
425
  Puppet.debug "Reraising #{detail}"
426
426
  raise
427
427
  rescue => detail
428
- raise Puppet::DevError, "Munging failed for value #{value.inspect} in class #{self.name}: #{detail}", detail.backtrace
428
+ raise Puppet::DevError, _("Munging failed for value %{value} in class %{class_name}: %{detail}") % { value: value.inspect, class_name: self.name, detail: detail }, detail.backtrace
429
429
  end
430
430
  ret
431
431
  end
@@ -459,7 +459,7 @@ class Puppet::Parameter
459
459
  rescue Puppet::Error, TypeError
460
460
  raise
461
461
  rescue => detail
462
- raise Puppet::DevError, "Validate method failed for class #{self.name}: #{detail}", detail.backtrace
462
+ raise Puppet::DevError, _("Validate method failed for class %{class_name}: %{detail}") % { class_name: self.name, detail: detail }, detail.backtrace
463
463
  end
464
464
  end
465
465
 
@@ -19,7 +19,7 @@ class Puppet::Parameter::ValueCollection
19
19
  def aliasvalue(name, other)
20
20
  other = other.to_sym
21
21
  unless value = match?(other)
22
- raise Puppet::DevError, "Cannot alias nonexistent value #{other}"
22
+ raise Puppet::DevError, _("Cannot alias nonexistent value %{value}") % { value: other }
23
23
  end
24
24
 
25
25
  value.alias(name)
@@ -133,7 +133,10 @@ class Puppet::Parameter::ValueCollection
133
133
  call_opt = options[:call]
134
134
  unless call_opt.nil?
135
135
  devfail "Cannot use obsolete :call value '#{call_opt}' for property '#{self.class.name}'" unless call_opt == :none || call_opt == :instead
136
- Puppet.deprecation_warning(_("Property option :call is deprecated and no longer used. Please remove it."))
136
+ #TRANSLATORS ':call' is a property and should not be translated
137
+ message = _("Property option :call is deprecated and no longer used.")
138
+ message += ' ' + _("Please remove it.")
139
+ Puppet.deprecation_warning(message)
137
140
  options = options.reject { |k,v| k == :call }
138
141
  end
139
142
 
@@ -180,13 +183,10 @@ class Puppet::Parameter::ValueCollection
180
183
  def validate(value)
181
184
  return if empty?
182
185
 
183
- unless @values.detect { |name, v| v.match?(value) }
184
- str = _("Invalid value %{value}. ") % { value: value.inspect }
185
-
186
- str += _("Valid values are %{value_list}. ") % { value_list: values.join(", ") } unless values.empty?
187
-
188
- str += _("Valid values match %{pattern}.") % { pattern: regexes.join(", ") } unless regexes.empty?
189
-
186
+ unless @values.detect {|name, v| v.match?(value)}
187
+ str = _("Invalid value %{value}.") % { value: value.inspect }
188
+ str += " " + _("Valid values are %{value_list}.") % { value_list: values.join(", ") } unless values.empty?
189
+ str += " " + _("Valid values match %{pattern}.") % { pattern: regexes.join(", ") } unless regexes.empty?
190
190
  raise ArgumentError, str
191
191
  end
192
192
  end
@@ -28,7 +28,7 @@ class Puppet::Parser::AST::HostName < Puppet::Parser::AST::Leaf
28
28
  unless @value.is_a?(Regex)
29
29
  @value = @value.to_s.downcase
30
30
  if @value =~ /[^-\w.]/
31
- raise Puppet::DevError, "'#{@value}' is not a valid hostname"
31
+ raise Puppet::DevError, _("'%{value}' is not a valid hostname") % { value: @value }
32
32
  end
33
33
  end
34
34
  end
@@ -2,9 +2,9 @@ class Puppet::Parser::AST::Node < Puppet::Parser::AST::TopLevelConstruct
2
2
  attr_accessor :names, :context
3
3
 
4
4
  def initialize(names, context = {})
5
- raise ArgumentError, "names should be an array" unless names.is_a? Array
5
+ raise ArgumentError, _("names should be an array") unless names.is_a? Array
6
6
  if context[:parent]
7
- raise Puppet::DevError, "Node inheritance is removed in Puppet 4.0.0. See http://links.puppet.com/puppet-node-inheritance-deprecation"
7
+ raise Puppet::DevError, _("Node inheritance is removed in Puppet 4.0.0. See http://links.puppet.com/puppet-node-inheritance-deprecation")
8
8
  end
9
9
 
10
10
  @names = names
@@ -122,7 +122,7 @@ class Puppet::Parser::AST::PopsBridge
122
122
  when Puppet::Pops::Model::Application
123
123
  instantiate_ApplicationDefinition(d, modname)
124
124
  else
125
- raise Puppet::ParseError, "Internal Error: Unknown type of definition - got '#{d.class}'"
125
+ raise Puppet::ParseError, _("Internal Error: Unknown type of definition - got '%{name}'") % { name: d.class }
126
126
  end
127
127
  end.flatten().compact() # flatten since node definition may have returned an array
128
128
  # Compact since functions are not understood by compiler
@@ -24,8 +24,8 @@ class Puppet::Parser::Compiler
24
24
  if !errors.empty?
25
25
  errors.each { |e| Puppet.err(e) } if errors.size > 1
26
26
  errmsg = [
27
- "Compilation has been halted because: #{errors.first}",
28
- "For more information, see https://docs.puppet.com/puppet/latest/reference/environments.html",
27
+ _("Compilation has been halted because: %{error}") % { error: errors.first },
28
+ _("For more information, see https://docs.puppet.com/puppet/latest/reference/environments.html"),
29
29
  ]
30
30
  raise(Puppet::Error, errmsg.join(' '))
31
31
  end
@@ -36,7 +36,7 @@ class Puppet::Parser::Compiler
36
36
  Puppet.log_exception(detail)
37
37
  raise
38
38
  rescue => detail
39
- message = "#{detail} on node #{node.name}"
39
+ message = _("%{message} on node %{node}") % { message: detail, node: node.name }
40
40
  Puppet.log_exception(detail, message)
41
41
  raise Puppet::Error, message, detail.backtrace
42
42
  end
@@ -352,7 +352,7 @@ class Puppet::Parser::Compiler
352
352
  # evaluated later in the process.
353
353
  #
354
354
  def evaluate_classes(classes, scope, lazy_evaluate = true)
355
- raise Puppet::DevError, "No source for scope passed to evaluate_classes" unless scope.source
355
+ raise Puppet::DevError, _("No source for scope passed to evaluate_classes") unless scope.source
356
356
  class_parameters = nil
357
357
  # if we are a param class, save the classes hash
358
358
  # and transform classes to be the keys
@@ -470,7 +470,8 @@ class Puppet::Parser::Compiler
470
470
  component = krt.find_hostclass(component_name)
471
471
  end
472
472
  if component.nil?
473
- raise Puppet::ParseError, "Capability mapping error: #{kind} clause references nonexistent #{component_type} #{component_name}"
473
+ raise Puppet::ParseError, _("Capability mapping error: %{kind} clause references nonexistent %{component_type} %{component_name}") %
474
+ { kind: kind, component_type: component_type, component_name: component_name }
474
475
  end
475
476
 
476
477
  blueprint = args['blueprint']
@@ -152,7 +152,7 @@ module Puppet::Parser::Functions
152
152
  ftype = options[:type] || :statement
153
153
 
154
154
  unless ftype == :statement or ftype == :rvalue
155
- raise Puppet::DevError, "Invalid statement type #{ftype.inspect}"
155
+ raise Puppet::DevError, _("Invalid statement type %{type}") % { type: ftype.inspect }
156
156
  end
157
157
 
158
158
  # the block must be installed as a method because it may use "return",
@@ -21,13 +21,11 @@ Puppet::Parser::Functions::newfunction(:generate, :arity => -2, :type => :rvalue
21
21
  end
22
22
 
23
23
  unless valid
24
- raise Puppet::ParseError,
25
- _("Generators can only contain alphanumerics, file separators, and dashes")
24
+ raise Puppet::ParseError, _("Generators can only contain alphanumerics, file separators, and dashes")
26
25
  end
27
26
 
28
27
  if args[0] =~ /\.\./
29
- raise Puppet::ParseError,
30
- _("Can not use generators with '..' in them.")
28
+ raise Puppet::ParseError, _("Can not use generators with '..' in them.")
31
29
  end
32
30
 
33
31
  begin
@@ -14,8 +14,7 @@ Puppet::Parser::Functions::newfunction(:inline_template, :type => :rvalue, :arit
14
14
  begin
15
15
  wrapper.result(string)
16
16
  rescue => detail
17
- raise Puppet::ParseError,
18
- _("Failed to parse inline template: %{detail}") % { detail: detail }, detail.backtrace
17
+ raise Puppet::ParseError, _("Failed to parse inline template: %{detail}") % { detail: detail }, detail.backtrace
19
18
  end
20
19
  end.join("")
21
20
  end
@@ -29,8 +29,22 @@ Puppet::Parser::Functions::newfunction(
29
29
  :arity => -2,
30
30
  :doc => "Perform printf-style formatting of text.
31
31
 
32
- The first parameter is format string describing how the rest of the parameters should be formatted. See the documentation for the `Kernel::sprintf` function in Ruby for all the details."
32
+ The first parameter is format string describing how the rest of the parameters should be formatted.
33
+ See the documentation for the `Kernel::sprintf` function in Ruby for all the details."
33
34
  ) do |args|
34
- fmt = args.shift
35
- return sprintf(fmt, *args)
35
+ fmt = args[0]
36
+ args = args[1..-1]
37
+ begin
38
+ return sprintf(fmt, *args)
39
+ rescue KeyError => e
40
+ if args.size == 1 && args[0].is_a?(Hash)
41
+ # map the single hash argument such that all top level string keys are symbols
42
+ # as that allows named arguments to be used in the format string.
43
+ #
44
+ result = {}
45
+ args[0].each_pair { |k,v| result[k.is_a?(String) ? k.to_sym : k] = v }
46
+ return sprintf(fmt, result)
47
+ end
48
+ raise e
49
+ end
36
50
  end
@@ -23,8 +23,12 @@ Puppet::Parser::Functions::newfunction(:template, :type => :rvalue, :arity => -2
23
23
  wrapper.result
24
24
  rescue => detail
25
25
  info = detail.backtrace.first.split(':')
26
- raise Puppet::ParseError,
27
- "Failed to parse template #{file}:\n Filepath: #{info[0]}\n Line: #{info[1]}\n Detail: #{detail}\n"
26
+ message = []
27
+ message << _("Failed to parse template %{file}:") % { file: file }
28
+ message << _(" Filepath: %{file_path}") % { file_path: info[0] }
29
+ message << _(" Line: %{line}") % { line: info[1] }
30
+ message << _(" Detail: %{detail}") % { detail: detail }
31
+ raise Puppet::ParseError, message.join("\n") + "\n"
28
32
  end
29
33
  end.join("")
30
34
  end
@@ -169,13 +169,20 @@ class Puppet::Parser::Resource < Puppet::Resource
169
169
  end
170
170
 
171
171
  if evaluated?
172
+ error_location_str = Puppet::Util::Errors.error_location(file, line)
173
+ msg = if error_location_str.empty?
174
+ _('Attempt to override an already evaluated resource with new values')
175
+ else
176
+ _('Attempt to override an already evaluated resource, defined at %{error_location}, with new values') % { error_location: error_location_str }
177
+ end
172
178
  strict = Puppet[:strict]
173
179
  unless strict == :off
174
- msg = _('Attempt to override an already evaluated resource%{location} with new values') %
175
- { resource: ref, location: append_location(file, line, _(', defined'), ',') }
176
- raise Puppet::ParseError.new(msg, resource.file, resource.line) if strict == :error
177
- msg << append_location(resource.file, resource.line)
178
- Puppet.warning(msg)
180
+ if strict == :error
181
+ raise Puppet::ParseError.new(msg, resource.file, resource.line)
182
+ else
183
+ msg += Puppet::Util::Errors.error_location_with_space(resource.file, resource.line)
184
+ Puppet.warning(msg)
185
+ end
179
186
  end
180
187
  end
181
188
 
@@ -322,28 +329,6 @@ class Puppet::Parser::Resource < Puppet::Resource
322
329
 
323
330
  private
324
331
 
325
- # Append location to the message if location is present. If it is not, an empty string
326
- # is returned instead.
327
- #
328
- # @param file [String] path to the file
329
- # @param line [Integer] the line in the file
330
- # @param prefix [String] string prefix
331
- # @param suffix [String] string suffix
332
- # @return [String] the formatted location or an empty string
333
- def append_location(file, line, prefix = '', suffix = '')
334
- if file && file != ''
335
- if line
336
- _('%{prefix} at %{file}:%{line}%{suffix}') % { prefix: prefix, suffix: suffix, file: file, line: line }
337
- else
338
- _('%{prefix} in %{file}%{suffix}') % { prefix: prefix, suffix: suffix, file: file }
339
- end
340
- elsif line
341
- _('%{prefix} at line %{line}%{suffix}') % { prefix: prefix, suffix: suffix, line: line }
342
- else
343
- ''
344
- end
345
- end
346
-
347
332
  def add_scope_tags
348
333
  scope_resource = scope.resource
349
334
  unless scope_resource.nil? || scope_resource.equal?(self)
@@ -371,10 +356,24 @@ class Puppet::Parser::Resource < Puppet::Resource
371
356
 
372
357
  # The parameter is already set. Fail if they're not allowed to override it.
373
358
  unless param.source.child_of?(current.source) || param.source.equal?(current.source) && scope.is_default?(type, param.name, current.value)
374
- msg = _("Parameter '%{name}' is already set on %{resource}") % { name: param.name, resource: ref }
375
- msg << _(' by %{source}') % { source: current.source.to_s } unless current.source.to_s == ''
376
- msg << append_location(current.file, current.line)
377
- msg << _('; cannot redefine')
359
+ error_location_str = Puppet::Util::Errors.error_location(current.file, current.line)
360
+ msg = if current.source.to_s == ''
361
+ if error_location_str.empty?
362
+ _("Parameter '%{name}' is already set on %{resource}; cannot redefine") %
363
+ { name: param.name, resource: ref }
364
+ else
365
+ _("Parameter '%{name}' is already set on %{resource} at %{error_location}; cannot redefine") %
366
+ { name: param.name, resource: ref, error_location: error_location_str }
367
+ end
368
+ else
369
+ if error_location_str.empty?
370
+ _("Parameter '%{name}' is already set on %{resource} by %{source}; cannot redefine") %
371
+ { name: param.name, resource: ref, source: current.source.to_s }
372
+ else
373
+ _("Parameter '%{name}' is already set on %{resource} by %{source} at %{error_location}; cannot redefine") %
374
+ { name: param.name, resource: ref, source: current.source.to_s, error_location: error_location_str }
375
+ end
376
+ end
378
377
  raise Puppet::ParseError.new(msg, param.file, param.line)
379
378
  end
380
379
 
@@ -378,7 +378,7 @@ class Puppet::Parser::Scope
378
378
  if compiler.is_a? Puppet::Parser::Compiler
379
379
  @compiler = compiler
380
380
  else
381
- raise Puppet::DevError, "you must pass a compiler instance to a new scope object"
381
+ raise Puppet::DevError, _("you must pass a compiler instance to a new scope object")
382
382
  end
383
383
 
384
384
  set_options(options)
@@ -611,6 +611,7 @@ class Puppet::Parser::Scope
611
611
  begin
612
612
  qs = qualified_scope(class_name)
613
613
  unless qs.nil?
614
+ return qs.get_local_variable(leaf_name) if qs.has_local_variable?(leaf_name)
614
615
  iscope = qs.inherited_scope
615
616
  return lookup_qualified_variable("#{iscope.source.name}::#{leaf_name}", options) unless iscope.nil?
616
617
  end
@@ -623,15 +624,23 @@ class Puppet::Parser::Scope
623
624
  return handle_not_found('', fqn, options)
624
625
  end
625
626
 
627
+ # @api private
628
+ def has_local_variable?(name)
629
+ @ephemeral.last.include?(name)
630
+ end
631
+
632
+ # @api private
633
+ def get_local_variable(name)
634
+ @ephemeral.last[name]
635
+ end
636
+
626
637
  def handle_not_found(class_name, variable_name, position, reason = nil)
627
638
  unless Puppet[:strict_variables]
628
639
  # Do not issue warning if strict variables are on, as an error will be raised by variable_not_found
629
640
  location = if position[:lineproc]
630
- " at #{position[:lineproc].call}"
631
- elsif position[:file] && position[:line]
632
- " at #{position[:file]}:#{position[:line]}"
641
+ Puppet::Util::Errors.error_location_with_space(nil, position[:lineproc].call)
633
642
  else
634
- ""
643
+ Puppet::Util::Errors.error_location_with_space(position[:file], position[:line])
635
644
  end
636
645
  variable_not_found("#{class_name}::#{variable_name}", "#{reason}#{location}")
637
646
  return nil
@@ -751,7 +760,7 @@ class Puppet::Parser::Scope
751
760
  raise Puppet::ParseError.new(_("Cannot assign to a numeric match result variable '$%{name}'") % { name: name }) # unless options[:ephemeral]
752
761
  end
753
762
  unless name.is_a? String
754
- raise Puppet::ParseError, _("Scope variable name %{value0} is a %{value1}, not a string") % { value0: name.inspect, value1: name.class }
763
+ raise Puppet::ParseError, _("Scope variable name %{name} is a %{class_type}, not a string") % { name: name.inspect, class_type: name.class }
755
764
  end
756
765
 
757
766
  # Check for reserved variable names
@@ -986,17 +995,17 @@ class Puppet::Parser::Scope
986
995
 
987
996
  # @api private
988
997
  def find_resource_type(type)
989
- raise Puppet::DevError, "Scope#find_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead"
998
+ raise Puppet::DevError, _("Scope#find_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
990
999
  end
991
1000
 
992
1001
  # @api private
993
1002
  def find_builtin_resource_type(type)
994
- raise Puppet::DevError, "Scope#find_builtin_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead"
1003
+ raise Puppet::DevError, _("Scope#find_builtin_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
995
1004
  end
996
1005
 
997
1006
  # @api private
998
1007
  def find_defined_resource_type(type)
999
- raise Puppet::DevError, "Scope#find_defined_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead"
1008
+ raise Puppet::DevError, _("Scope#find_defined_resource_type() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1000
1009
  end
1001
1010
 
1002
1011
 
@@ -1010,14 +1019,14 @@ class Puppet::Parser::Scope
1010
1019
  if respond_to? method
1011
1020
  send(method, *args)
1012
1021
  else
1013
- raise Puppet::DevError, "Function #{name} not defined despite being loaded!"
1022
+ raise Puppet::DevError, _("Function %{name} not defined despite being loaded!") % { name: name }
1014
1023
  end
1015
1024
  end
1016
1025
 
1017
1026
  # To be removed when enough time has passed after puppet 5.0.0
1018
1027
  # @api private
1019
1028
  def resolve_type_and_titles(type, titles)
1020
- raise Puppet::DevError, "Scope#resolve_type_and_title() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead"
1029
+ raise Puppet::DevError, _("Scope#resolve_type_and_title() is no longer supported, use Puppet::Pops::Evaluator::Runtime3ResourceSupport instead")
1021
1030
  end
1022
1031
 
1023
1032
  # Transforms references to classes to the form suitable for
@@ -62,7 +62,7 @@ class Puppet::Parser::TemplateWrapper
62
62
  # @api private
63
63
  def file=(filename)
64
64
  unless @__file__ = Puppet::Parser::Files.find_template(filename, scope.compiler.environment)
65
- raise Puppet::ParseError, "Could not find template '#{filename}'"
65
+ raise Puppet::ParseError, _("Could not find template '%{filename}'") % { filename: filename }
66
66
  end
67
67
  end
68
68
 
@@ -78,7 +78,8 @@ class Puppet::Parser::TemplateWrapper
78
78
  # Expose all the variables in our scope as instance variables of the
79
79
  # current object, making it possible to access them without conflict
80
80
  # to the regular methods.
81
- benchmark(:debug, _("Bound template variables for %{template_source}") % { template_source: template_source }) do
81
+ escaped_template_source = template_source.gsub(/%/, '%%')
82
+ benchmark(:debug, _("Bound template variables for %{template_source} in %%{seconds} seconds") % { template_source: escaped_template_source }) do
82
83
  scope.to_hash.each do |name, value|
83
84
  realname = name.gsub(/[^\w]/, "_")
84
85
  instance_variable_set("@#{realname}", value)
@@ -86,7 +87,7 @@ class Puppet::Parser::TemplateWrapper
86
87
  end
87
88
 
88
89
  result = nil
89
- benchmark(:debug, _("Interpolated template %{template_source}") % { template_source: template_source }) do
90
+ benchmark(:debug, _("Interpolated template %{template_source} in %%{seconds} seconds") % { template_source: escaped_template_source }) do
90
91
  template = ERB.new(string, 0, "-")
91
92
  template.filename = @__file__
92
93
  result = template.result(binding)
@@ -10,7 +10,8 @@ class CollectorTransformer
10
10
  end
11
11
 
12
12
  def transform(o, scope)
13
- raise ArgumentError, "Expected CollectExpression" unless o.is_a? Model::CollectExpression
13
+ #TRANSLATORS 'CollectExpression' is a class name and should not be translated
14
+ raise ArgumentError, _("Expected CollectExpression") unless o.is_a? Model::CollectExpression
14
15
 
15
16
  raise "LHS is not a type" unless o.type_expr.is_a? Model::QualifiedReference
16
17
  type = o.type_expr.value().downcase()