puppet 5.3.3 → 5.3.4

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 +3433 -3416
  290. checksums.yaml +0 -7
  291. data/spec/unit/gettext_config_spec.rb +0 -57
@@ -0,0 +1,42 @@
1
+ require 'puppet/gettext/config'
2
+
3
+ module Puppet::ModuleTranslations
4
+
5
+ # @api private
6
+ # Loads translation files for each of the specified modules,
7
+ # if present. Requires the modules to have `forge_name` specified.
8
+ # @param [[Module]] modules a list of modules for which to
9
+ # load translations
10
+ def self.load_from_modulepath(modules)
11
+ modules.each do |mod|
12
+ next unless mod.forge_name && mod.has_translations?(Puppet::GettextConfig.current_locale)
13
+
14
+ module_name = mod.forge_name.gsub('/', '-')
15
+ if Puppet::GettextConfig.load_translations(module_name, mod.locale_directory, :po)
16
+ Puppet.debug "Loaded translations for #{module_name}."
17
+ elsif Puppet::GettextConfig.gettext_loaded?
18
+ Puppet.debug "Could not find translation files for #{module_name} at #{mod.locale_directory}. Skipping translation initialization."
19
+ else
20
+ Puppet.warn_once("gettext_unavailable", "gettext_unavailable", "No gettext library found, skipping translation initialization.")
21
+ end
22
+ end
23
+ end
24
+
25
+ # @api private
26
+ # Loads translation files that have been pluginsync'd for modules
27
+ # from the $vardir.
28
+ # @param [String] vardir the path to Puppet's vardir
29
+ def self.load_from_vardir(vardir)
30
+ locale = Puppet::GettextConfig.current_locale
31
+ Dir.glob("#{vardir}/locales/#{locale}/*.po") do |f|
32
+ module_name = File.basename(f, ".po")
33
+ if Puppet::GettextConfig.load_translations(module_name, File.join(vardir, "locales"), :po)
34
+ Puppet.debug "Loaded translations for #{module_name}."
35
+ elsif Puppet::GettextConfig.gettext_loaded?
36
+ Puppet.debug "Could not load translations for #{module_name}."
37
+ else
38
+ Puppet.warn_once("gettext_unavailable", "gettext_unavailable", "No gettext library found, skipping translation initialization.")
39
+ end
40
+ end
41
+ end
42
+ end
@@ -70,7 +70,7 @@ class Puppet::Graph::RelationshipGraph < Puppet::Graph::SimpleGraph
70
70
  if @blockers[resource] > 0
71
71
  @blockers[resource] -= 1
72
72
  else
73
- resource.warning "appears to have a negative number of dependencies"
73
+ resource.warning _("appears to have a negative number of dependencies")
74
74
  end
75
75
  @blockers[resource] <= 0
76
76
  end
@@ -229,17 +229,17 @@ class Puppet::Graph::SimpleGraph
229
229
  return if number_of_cycles == 0
230
230
 
231
231
  message = n_("Found %{num} dependency cycle:\n", "Found %{num} dependency cycles:\n", number_of_cycles) % { num: number_of_cycles }
232
+
232
233
  cycles.each do |cycle|
233
234
  paths = paths_in_cycle(cycle)
234
- message += paths.map{ |path| '(' + path.join(" => ") + ')'}.join("\n") + "\n"
235
+ message += paths.map{ |path| '(' + path.join(' => ') + ')'}.join('\n') + '\n'
235
236
  end
236
237
 
237
238
  if Puppet[:graph] then
238
239
  filename = write_cycles_to_graph(cycles)
239
240
  message += _("Cycle graph written to %{filename}.") % { filename: filename }
240
241
  else
241
- #TRANSLATORS "graph" refers to a command line option and should not be translated
242
- #TRANSLATORS OmniGraffle and GraphViz and program names and should not be translated
242
+ #TRANSLATORS '--graph' refers to a command line option and OmniGraffle and GraphViz are program names and should not be translated
243
243
  message += _("Try the '--graph' option and opening the resulting '.dot' file in OmniGraffle or GraphViz")
244
244
  end
245
245
  Puppet.err(message)
@@ -49,6 +49,8 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
49
49
  node = node_from_request(facts, request)
50
50
  node.trusted_data = Puppet.lookup(:trusted_information) { Puppet::Context::TrustedInformation.local(node) }.to_h
51
51
 
52
+ node.environment.use_text_domain if node.environment
53
+
52
54
  if catalog = compile(node, request.options)
53
55
  return catalog
54
56
  else
@@ -89,7 +91,7 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
89
91
  elsif format == 'application/json'
90
92
  return Puppet::Node::Facts.convert_from('json', CGI.unescape(facts))
91
93
  else
92
- raise ArgumentError, "Unsupported facts format"
94
+ raise ArgumentError, _("Unsupported facts format")
93
95
  end
94
96
  end
95
97
 
@@ -275,24 +277,31 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
275
277
  raise Puppet::Error, _("Unable to find a common checksum type between agent '%{agent_type}' and master '%{master_type}'.") % { agent_type: options[:checksum_type], master_type: known_checksum_types } unless checksum_type
276
278
  end
277
279
 
278
- str = if checksum_type
279
- if node.environment
280
- _("Compiled static catalog for %{node} in environment %{environment}") % { node: node.name, environment: node.environment }
281
- else
282
- _("Compiled static catalog for %{node}") % { node: node.name }
283
- end
284
- else
285
- if node.environment
286
- _("Compiled catalog for %{node} in environment %{environment}") % { node: node.name, environment: node.environment }
287
- else
288
- _("Compiled catalog for %{node}") % { node: node.name }
289
- end
290
- end
280
+ escaped_node_name = node.name.gsub(/%/, '%%')
281
+ if checksum_type
282
+ if node.environment
283
+ escaped_node_environment = node.environment.to_s.gsub(/%/, '%%')
284
+ benchmark_str = _("Compiled static catalog for %{node} in environment %{environment} in %%{seconds} seconds") % { node: escaped_node_name, environment: escaped_node_environment }
285
+ profile_str = _("Compiled static catalog for %{node} in environment %{environment}") % { node: node.name, environment: node.environment }
286
+ else
287
+ benchmark_str = _("Compiled static catalog for %{node} in %%{seconds} seconds") % { node: escaped_node_name }
288
+ profile_str = _("Compiled static catalog for %{node}") % { node: node.name }
289
+ end
290
+ else
291
+ if node.environment
292
+ escaped_node_environment = node.environment.to_s.gsub(/%/, '%%')
293
+ benchmark_str = _("Compiled catalog for %{node} in environment %{environment} in %%{seconds} seconds") % { node: escaped_node_name, environment: escaped_node_environment }
294
+ profile_str = _("Compiled catalog for %{node} in environment %{environment}") % { node: node.name, environment: node.environment }
295
+ else
296
+ benchmark_str = _("Compiled catalog for %{node} in %%{seconds} seconds") % { node: escaped_node_name }
297
+ profile_str = _("Compiled catalog for %{node}") % { node: node.name }
298
+ end
299
+ end
291
300
  config = nil
292
301
 
293
- benchmark(:notice, str) do
302
+ benchmark(:notice, benchmark_str) do
294
303
  compile_type = checksum_type ? :static_compile : :compile
295
- Puppet::Util::Profiler.profile(str, [:compiler, compile_type, node.environment, node.name]) do
304
+ Puppet::Util::Profiler.profile(profile_str, [:compiler, compile_type, node.environment, node.name]) do
296
305
  begin
297
306
  config = Puppet::Parser::Compiler.compile(node, options[:code_id])
298
307
  rescue Puppet::Error => detail
@@ -303,15 +312,21 @@ class Puppet::Resource::Catalog::Compiler < Puppet::Indirector::Code
303
312
  end
304
313
 
305
314
  if checksum_type && config.is_a?(model)
306
- str = if node.environment
307
- #TRANSLATORS Inlined refers to adding additional metadata
308
- _("Inlined resource metadata into static catalog for %{node} in environment %{environment}") % { node: node.name, environment: node.environment }
309
- else
310
- #TRANSLATORS Inlined refers to adding additional metadata
311
- _("Inlined resource metadata into static catalog for %{node}") % { node: node.name }
312
- end
313
- benchmark(:notice, str) do
314
- Puppet::Util::Profiler.profile(str, [:compiler, :static_compile_postprocessing, node.environment, node.name]) do
315
+ escaped_node_name = node.name.gsub(/%/, '%%')
316
+ if node.environment
317
+ escaped_node_environment = node.environment.to_s.gsub(/%/, '%%')
318
+ #TRANSLATORS Inlined refers to adding additional metadata
319
+ benchmark_str = _("Inlined resource metadata into static catalog for %{node} in environment %{environment} in %%{seconds} seconds") % { node: escaped_node_name, environment: escaped_node_environment }
320
+ #TRANSLATORS Inlined refers to adding additional metadata
321
+ profile_str = _("Inlined resource metadata into static catalog for %{node} in environment %{environment}") % { node: node.name, environment: node.environment }
322
+ else
323
+ #TRANSLATORS Inlined refers to adding additional metadata
324
+ benchmark_str = _("Inlined resource metadata into static catalog for %{node} in %%{seconds} seconds") % { node: escaped_node_name }
325
+ #TRANSLATORS Inlined refers to adding additional metadata
326
+ profile_str = _("Inlined resource metadata into static catalog for %{node}") % { node: node.name }
327
+ end
328
+ benchmark(:notice, benchmark_str) do
329
+ Puppet::Util::Profiler.profile(profile_str, [:compiler, :static_compile_postprocessing, node.environment, node.name]) do
315
330
  inline_metadata(config, checksum_type)
316
331
  end
317
332
  end
@@ -8,7 +8,7 @@ class Puppet::Indirector::Exec < Puppet::Indirector::Terminus
8
8
  external_command = command
9
9
 
10
10
  # Make sure it's an array
11
- raise Puppet::DevError, "Exec commands must be an array" unless external_command.is_a?(Array)
11
+ raise Puppet::DevError, _("Exec commands must be an array") unless external_command.is_a?(Array)
12
12
 
13
13
  # Make sure it's fully qualified.
14
14
  raise ArgumentError, _("You must set the exec parameter to a fully qualified command") unless Puppet::Util.absolute_path?(external_command[0])
@@ -11,11 +11,11 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
11
11
  end
12
12
 
13
13
  def destroy(facts)
14
- raise Puppet::DevError, 'You cannot destroy facts in the code store; it is only used for getting facts from Facter'
14
+ raise Puppet::DevError, _('You cannot destroy facts in the code store; it is only used for getting facts from Facter')
15
15
  end
16
16
 
17
17
  def save(facts)
18
- raise Puppet::DevError, 'You cannot save facts to the code store; it is only used for getting facts from Facter'
18
+ raise Puppet::DevError, _('You cannot save facts to the code store; it is only used for getting facts from Facter')
19
19
  end
20
20
 
21
21
  # Lookup a host's facts up in Facter.
@@ -55,7 +55,7 @@ class Puppet::Node::Facts::Facter < Puppet::Indirector::Code
55
55
  # print out each .rb in the facts directory as module
56
56
  # developers may find that information useful for debugging purposes
57
57
  if Puppet::Util::Log.sendlevel?(:info)
58
- Puppet.info "Loading facts"
58
+ Puppet.info _("Loading facts")
59
59
  Dir.glob("#{dir}/*.rb").each do |file|
60
60
  Puppet.debug "Loading facts from #{file}"
61
61
  end
@@ -18,10 +18,10 @@ class Puppet::Node::Facts::NetworkDevice < Puppet::Indirector::Code
18
18
  end
19
19
 
20
20
  def destroy(facts)
21
- raise Puppet::DevError, "You cannot destroy facts in the code store; it is only used for getting facts from a remote device"
21
+ raise Puppet::DevError, _("You cannot destroy facts in the code store; it is only used for getting facts from a remote device")
22
22
  end
23
23
 
24
24
  def save(facts)
25
- raise Puppet::DevError, "You cannot save facts to the code store; it is only used for getting facts from a remote device"
25
+ raise Puppet::DevError, _("You cannot save facts to the code store; it is only used for getting facts from a remote device")
26
26
  end
27
27
  end
@@ -29,6 +29,7 @@ module Puppet::FileBucketFile
29
29
  raise _("Unable to diff on this platform") unless Puppet[:diff] != ""
30
30
  return diff(Puppet::FileSystem.path_string(contents_file), Puppet::FileSystem.path_string(other_contents_file))
31
31
  else
32
+ #TRANSLATORS "FileBucket" should not be translated
32
33
  Puppet.info _("FileBucket read %{checksum}") % { checksum: checksum }
33
34
  model.new(Puppet::FileSystem.binread(contents_file))
34
35
  end
@@ -158,7 +159,8 @@ module Puppet::FileBucketFile
158
159
  Puppet::FileSystem.exclusive_open(paths_file, 0640, 'a+:external') do |f|
159
160
  if Puppet::FileSystem.exist?(contents_file)
160
161
  if verify_identical_file(contents_file, bucket_file)
161
- Puppet.info "FileBucket got a duplicate file #{bucket_file.checksum}"
162
+ #TRANSLATORS "FileBucket" should not be translated
163
+ Puppet.info _("FileBucket got a duplicate file %{file_checksum}") % { file_checksum: bucket_file.checksum }
162
164
  Puppet::FileSystem.touch(contents_file)
163
165
  elsif contents_file_matches_checksum?(contents_file, bucket_file.checksum_data, bucket_file.checksum_type)
164
166
  # If the contents or sizes don't match, but the checksum does,
@@ -167,6 +169,7 @@ module Puppet::FileBucketFile
167
169
  # needed, but ask the user to validate.
168
170
  # Note: Don't print the full path to the bucket file in the
169
171
  # exception to avoid disclosing file system layout on server.
172
+ #TRANSLATORS "FileBucket" should not be translated
170
173
  Puppet.err(_("Unable to verify existing FileBucket backup at '%{path}'.") % { path: contents_file.to_path })
171
174
  raise Puppet::FileBucket::BucketError, _("Existing backup and new file have different content but same checksum, %{value}. Verify existing backup and remove if incorrect.") %
172
175
  { value: bucket_file.checksum }
@@ -37,7 +37,7 @@ class Puppet::Indirector::Indirection
37
37
 
38
38
  # Create and return our cache terminus.
39
39
  def cache
40
- raise(Puppet::DevError, "Tried to cache when no cache class was set") unless cache_class
40
+ raise Puppet::DevError, _("Tried to cache when no cache class was set") unless cache_class
41
41
  terminus(cache_class)
42
42
  end
43
43
 
@@ -97,7 +97,7 @@ class Puppet::Indirector::Indirection
97
97
  @cache_class = nil
98
98
  @terminus_class = nil
99
99
 
100
- raise(ArgumentError, "Indirection #{@name} is already defined") if @@indirections.find { |i| i.name == @name }
100
+ raise(ArgumentError, _("Indirection %{name} is already defined") % { name: @name }) if @@indirections.find { |i| i.name == @name }
101
101
  @@indirections << self
102
102
 
103
103
  @indirected_class = options.delete(:indirected_class)
@@ -118,7 +118,7 @@ class Puppet::Indirector::Indirection
118
118
  # Return the singleton terminus for this indirection.
119
119
  def terminus(terminus_name = nil)
120
120
  # Get the name of the terminus.
121
- raise Puppet::DevError, "No terminus specified for #{self.name}; cannot redirect" unless terminus_name ||= terminus_class
121
+ raise Puppet::DevError, _("No terminus specified for %{name}; cannot redirect") % { name: self.name } unless terminus_name ||= terminus_class
122
122
 
123
123
  termini[terminus_name] ||= make_terminus(terminus_name)
124
124
  end
@@ -132,7 +132,7 @@ class Puppet::Indirector::Indirection
132
132
  if setting = self.terminus_setting
133
133
  self.terminus_class = Puppet.settings[setting]
134
134
  else
135
- raise Puppet::DevError, "No terminus class nor terminus setting was provided for indirection #{self.name}"
135
+ raise Puppet::DevError, _("No terminus class nor terminus setting was provided for indirection %{name}") % { name: self.name}
136
136
  end
137
137
  end
138
138
  @terminus_class
@@ -150,9 +150,12 @@ class Puppet::Indirector::Indirection
150
150
 
151
151
  # This is used by terminus_class= and cache=.
152
152
  def validate_terminus_class(terminus_class)
153
- raise ArgumentError, "Invalid terminus name #{terminus_class.inspect}" unless terminus_class and terminus_class.to_s != ""
153
+ unless terminus_class and terminus_class.to_s != ""
154
+ raise ArgumentError, _("Invalid terminus name %{terminus_class}") % { terminus_class: terminus_class.inspect }
155
+ end
154
156
  unless Puppet::Indirector::Terminus.terminus_class(self.name, terminus_class)
155
- raise ArgumentError, "Could not find terminus #{terminus_class} for indirection #{self.name}"
157
+ raise ArgumentError, _("Could not find terminus %{terminus_class} for indirection %{name}") %
158
+ { terminus_class: terminus_class, name: self.name }
156
159
  end
157
160
  end
158
161
 
@@ -268,7 +271,7 @@ class Puppet::Indirector::Indirection
268
271
  terminus = prepare(request)
269
272
 
270
273
  if result = terminus.search(request)
271
- raise Puppet::DevError, "Search results from terminus #{terminus.name} are not an array" unless result.is_a?(Array)
274
+ raise Puppet::DevError, _("Search results from terminus %{terminus_name} are not an array") % { terminus_name: terminus.name } unless result.is_a?(Array)
272
275
  result.each do |instance|
273
276
  next unless instance.respond_to? :expiration
274
277
  instance.expiration ||= self.expiration
@@ -304,8 +307,13 @@ class Puppet::Indirector::Indirection
304
307
  return unless terminus.respond_to?(:authorized?)
305
308
 
306
309
  unless terminus.authorized?(request)
307
- msg = "Not authorized to call #{request.method} on #{request.description}"
308
- msg += " with #{request.options.inspect}" unless request.options.empty?
310
+ msg = if request.options.empty?
311
+ _("Not authorized to call %{method} on %{description}") %
312
+ { method: request.method, description: request.description }
313
+ else
314
+ _("Not authorized to call %{method} on %{description} with %{option}") %
315
+ { method: request.method, description: request.description, option: request.options.inspect }
316
+ end
309
317
  raise ArgumentError, msg
310
318
  end
311
319
  end
@@ -10,7 +10,7 @@ class Puppet::Indirector::Ldap < Puppet::Indirector::Terminus
10
10
  # Process the found entry. We assume that we don't just want the
11
11
  # ldap object.
12
12
  def process(entry)
13
- raise Puppet::DevError, "The 'process' method has not been overridden for the LDAP terminus for #{self.name}"
13
+ raise Puppet::DevError, _("The 'process' method has not been overridden for the LDAP terminus for %{name}") % { name: self.name }
14
14
  end
15
15
 
16
16
  # Default to all attributes.
@@ -24,7 +24,7 @@ class Puppet::Indirector::Ldap < Puppet::Indirector::Terminus
24
24
 
25
25
  # The ldap search filter to use.
26
26
  def search_filter(name)
27
- raise Puppet::DevError, "No search string set for LDAP terminus for #{self.name}"
27
+ raise Puppet::DevError, _("No search string set for LDAP terminus for %{name}") % { name: self.name }
28
28
  end
29
29
 
30
30
  # Find the ldap node, return the class list and parent node specially,
@@ -12,7 +12,9 @@ require 'puppet/indirector/yaml'
12
12
  #
13
13
  class Puppet::Node::WriteOnlyYaml < Puppet::Indirector::Yaml
14
14
  def initialize
15
- Puppet.warn_once('deprecations', 'Puppet::Node::WriteOnlyYaml', _('Puppet::Node::WriteOnlyYaml is deprecated and will be removed in a future release of Puppet.'))
15
+ #TRANSLATORS 'Puppet::Node::WriteOnlyYaml' is a class and should not be translated
16
+ message = _('Puppet::Node::WriteOnlyYaml is deprecated and will be removed in a future release of Puppet.')
17
+ Puppet.warn_once('deprecations', 'Puppet::Node::WriteOnlyYaml', message)
16
18
  super
17
19
  end
18
20
 
@@ -262,11 +262,14 @@ class Puppet::Indirector::REST < Puppet::Indirector::Terminus
262
262
 
263
263
  def handle_response(request, response)
264
264
  server_version = response[Puppet::Network::HTTP::HEADER_PUPPET_VERSION]
265
- if server_version &&
266
- SemanticPuppet::Version.parse(server_version).major < MAJOR_VERSION_JSON_DEFAULT &&
267
- Puppet[:preferred_serialization_format] != 'pson'
268
- Puppet.warning("Downgrading to PSON for future requests")
269
- Puppet[:preferred_serialization_format] = 'pson'
265
+ if server_version
266
+ Puppet.push_context({:server_agent_version => server_version})
267
+ if SemanticPuppet::Version.parse(server_version).major < MAJOR_VERSION_JSON_DEFAULT &&
268
+ Puppet[:preferred_serialization_format] != 'pson'
269
+ #TRANSLATORS "PSON" should not be translated
270
+ Puppet.warning(_("Downgrading to PSON for future requests"))
271
+ Puppet[:preferred_serialization_format] = 'pson'
272
+ end
270
273
  end
271
274
  end
272
275
 
@@ -49,7 +49,7 @@ class Puppet::Indirector::SslFile < Puppet::Indirector::Terminus
49
49
  def initialize
50
50
  Puppet.settings.use(:main, :ssl)
51
51
 
52
- (collection_directory || file_location) or raise Puppet::DevError, "No file or directory setting provided; terminus #{self.class.name} cannot function"
52
+ (collection_directory || file_location) or raise Puppet::DevError, _("No file or directory setting provided; terminus %{class_name} cannot function") % { class_name: self.class.name }
53
53
  end
54
54
 
55
55
  def path(name)
@@ -190,7 +190,7 @@ class Puppet::Indirector::SslFile < Puppet::Indirector::Terminus
190
190
  raise Puppet::Error, _("Could not write %{path} to %{setting}: %{detail}") % { path: path, setting: setting, detail: detail }, detail.backtrace
191
191
  end
192
192
  else
193
- raise Puppet::DevError, "You must provide a setting to determine where the files are stored"
193
+ raise Puppet::DevError, _("You must provide a setting to determine where the files are stored")
194
194
  end
195
195
  end
196
196
  end
@@ -46,7 +46,7 @@ class Puppet::Indirector::Terminus
46
46
  def inherited(subclass)
47
47
  longname = subclass.to_s
48
48
  if longname =~ /#<Class/
49
- raise Puppet::DevError, "Terminus subclasses must have associated constants"
49
+ raise Puppet::DevError, _("Terminus subclasses must have associated constants")
50
50
  end
51
51
  names = longname.split("::")
52
52
 
@@ -71,7 +71,7 @@ class Puppet::Indirector::Terminus
71
71
  processed_name = names.pop.sub(/^[A-Z]/) { |i| i.downcase }.gsub(/[A-Z]/) { |i| "_#{i.downcase}" }
72
72
 
73
73
  if processed_name.empty?
74
- raise Puppet::DevError, "Could not discern indirection model from class constant"
74
+ raise Puppet::DevError, _("Could not discern indirection model from class constant")
75
75
  end
76
76
 
77
77
  # This will throw an exception if the indirection instance cannot be found.
@@ -129,7 +129,7 @@ class Puppet::Indirector::Terminus
129
129
  end
130
130
 
131
131
  def initialize
132
- raise Puppet::DevError, "Cannot create instances of abstract terminus types" if self.class.abstract_terminus?
132
+ raise Puppet::DevError, _("Cannot create instances of abstract terminus types") if self.class.abstract_terminus?
133
133
  end
134
134
 
135
135
  def model
@@ -149,7 +149,7 @@ class Puppet::Interface
149
149
  # @api private
150
150
  def initialize(name, version, &block)
151
151
  unless SemanticPuppet::Version.valid?(version)
152
- raise ArgumentError, "Cannot create face #{name.inspect} with invalid version number '#{version}'!"
152
+ raise ArgumentError, _("Cannot create face %{name} with invalid version number '%{version}'!") % { name: name.inspect, version: version }
153
153
  end
154
154
 
155
155
  @name = Puppet::Interface::FaceCollection.underscorize(name)
@@ -178,6 +178,7 @@ class Puppet::Interface
178
178
  def to_s
179
179
  "Puppet::Face[#{name.inspect}, #{version.inspect}]"
180
180
  end
181
+ alias_method :inspect, :to_s
181
182
 
182
183
  # @return [void]
183
184
  def deprecate
@@ -78,7 +78,7 @@ class Puppet::Interface::Action
78
78
  # @api private
79
79
  def when_rendering(type)
80
80
  unless type.is_a? Symbol
81
- raise ArgumentError, "The rendering format must be a symbol, not #{type.class.name}"
81
+ raise ArgumentError, _("The rendering format must be a symbol, not %{class_name}") % { class_name: type.class.name }
82
82
  end
83
83
  # Do we have a rendering hook for this name?
84
84
  return @when_rendering[type].bind(@face) if @when_rendering.has_key? type
@@ -94,28 +94,38 @@ class Puppet::Interface::Action
94
94
  # @api private
95
95
  def set_rendering_method_for(type, proc)
96
96
  unless proc.is_a? Proc
97
- msg = "The second argument to set_rendering_method_for must be a Proc"
98
- msg += ", not #{proc.class.name}" unless proc.nil?
97
+ msg = if proc.nil?
98
+ #TRANSLATORS 'set_rendering_method_for' and 'Proc' should not be translated
99
+ _("The second argument to set_rendering_method_for must be a Proc")
100
+ else
101
+ #TRANSLATORS 'set_rendering_method_for' and 'Proc' should not be translated
102
+ _("The second argument to set_rendering_method_for must be a Proc, not %{class_name}") %
103
+ { class_name: proc.class.name }
104
+ end
99
105
  raise ArgumentError, msg
100
106
  end
101
107
 
102
108
  if proc.arity != 1 and proc.arity != (@positional_arg_count + 1)
103
- msg = "the when_rendering method for the #{@face.name} face #{name} action "
104
- msg += "takes either just one argument, the result of when_invoked, "
105
- msg += "or the result plus the #{@positional_arg_count} arguments passed "
106
- msg += "to the when_invoked block, not "
107
- if proc.arity < 0 then
108
- msg += "a variable number"
109
- else
110
- msg += proc.arity.to_s
111
- end
109
+ msg = if proc.arity < 0 then
110
+ #TRANSLATORS 'when_rendering', 'when_invoked' are method names and should not be translated
111
+ _("The when_rendering method for the %{face} face %{name} action takes either just one argument,"\
112
+ " the result of when_invoked, or the result plus the %{arg_count} arguments passed to the"\
113
+ " when_invoked block, not a variable number") %
114
+ { face: @face.name, name: name, arg_count: @positional_arg_count }
115
+ else
116
+ #TRANSLATORS 'when_rendering', 'when_invoked' are method names and should not be translated
117
+ _("The when_rendering method for the %{face} face %{name} action takes either just one argument,"\
118
+ " the result of when_invoked, or the result plus the %{arg_count} arguments passed to the"\
119
+ " when_invoked block, not %{string}") %
120
+ { face: @face.name, name: name, arg_count: @positional_arg_count, string: proc.arity.to_s }
121
+ end
112
122
  raise ArgumentError, msg
113
123
  end
114
124
  unless type.is_a? Symbol
115
- raise ArgumentError, "The rendering format must be a symbol, not #{type.class.name}"
125
+ raise ArgumentError, _("The rendering format must be a symbol, not %{class_name}") % { class_name: type.class.name }
116
126
  end
117
127
  if @when_rendering.has_key? type then
118
- raise ArgumentError, "You can't define a rendering method for #{type} twice"
128
+ raise ArgumentError, _("You can't define a rendering method for %{type} twice") % { type: type }
119
129
  end
120
130
  # Now, the ugly bit. We add the method to our interface object, and
121
131
  # retrieve it, to rotate through the dance of getting a suitable method
@@ -213,7 +223,8 @@ class Puppet::Interface::Action
213
223
  # but will on 1.9.2, which treats it as "no arguments". Which bites,
214
224
  # because this just begs for us to wind up in the horrible situation
215
225
  # where a 1.8 vs 1.9 error bites our end users. --daniel 2011-04-19
216
- raise ArgumentError, "when_invoked requires at least one argument (options) for action #{@name}"
226
+ #TRANSLATORS 'when_invoked' should not be translated
227
+ raise ArgumentError, _("when_invoked requires at least one argument (options) for action %{name}") % { name: @name }
217
228
  elsif arity > 0 then
218
229
  range = Range.new(1, arity - 1)
219
230
  decl = range.map { |x| "arg#{x}" } << "options = {}"
@@ -259,9 +270,11 @@ WRAPPER
259
270
  def add_option(option)
260
271
  option.aliases.each do |name|
261
272
  if conflict = get_option(name) then
262
- raise ArgumentError, "Option #{option} conflicts with existing option #{conflict}"
273
+ raise ArgumentError, _("Option %{option} conflicts with existing option %{conflict}") %
274
+ { option: option, conflict: conflict }
263
275
  elsif conflict = @face.get_option(name) then
264
- raise ArgumentError, "Option #{option} conflicts with existing option #{conflict} on #{@face}"
276
+ raise ArgumentError, _("Option %{option} conflicts with existing option %{conflict} on %{face}") %
277
+ { option: option, conflict: conflict, face: @face }
265
278
  end
266
279
  end
267
280
 
@@ -285,7 +298,10 @@ WRAPPER
285
298
  def add_display_global_options(*args)
286
299
  @display_global_options ||= []
287
300
  [args].flatten.each do |refopt|
288
- raise ArgumentError, "Global option #{refopt} does not exist in Puppet.settings" unless Puppet.settings.include? refopt
301
+ unless Puppet.settings.include? refopt
302
+ #TRANSLATORS 'Puppet.settings' should not be translated
303
+ raise ArgumentError, _("Global option %{option} does not exist in Puppet.settings") % { option: refopt }
304
+ end
289
305
  @display_global_options << refopt
290
306
  end
291
307
  @display_global_options.uniq!
@@ -331,13 +347,14 @@ WRAPPER
331
347
  end
332
348
 
333
349
  unless overlap.empty?
334
- msg = overlap.map {|k, v| "(#{k}, #{v.sort.join(', ')})" }.join(", ")
335
- raise ArgumentError, "Multiple aliases for the same option passed: #{msg}"
350
+ overlap_list = overlap.map {|k, v| "(#{k}, #{v.sort.join(', ')})" }.join(", ")
351
+ raise ArgumentError, _("Multiple aliases for the same option passed: %{overlap_list}") %
352
+ { overlap_list: overlap_list }
336
353
  end
337
354
 
338
355
  unless unknown.empty?
339
- msg = unknown.sort.join(", ")
340
- raise ArgumentError, "Unknown options passed: #{msg}"
356
+ unknown_list = unknown.sort.join(", ")
357
+ raise ArgumentError, _("Unknown options passed: %{unknown_list}") % { unknown_list: unknown_list }
341
358
  end
342
359
 
343
360
  # Inject default arguments and check for missing mandating options.
@@ -354,8 +371,8 @@ WRAPPER
354
371
  end
355
372
 
356
373
  unless missing.empty?
357
- msg = missing.sort.join(', ')
358
- raise ArgumentError, "The following options are required: #{msg}"
374
+ missing_list = missing.sort.join(', ')
375
+ raise ArgumentError, _("The following options are required: %{missing_list}") % { missing_list: missing_list }
359
376
  end
360
377
 
361
378
  # All done.