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
@@ -49,10 +49,12 @@ class Puppet::Interface::ActionBuilder
49
49
  # @dsl Faces
50
50
  def when_rendering(type = nil, &block)
51
51
  if type.nil? then # the default error message sucks --daniel 2011-04-18
52
- raise ArgumentError, 'You must give a rendering format to when_rendering'
52
+ #TRANSLATORS 'when_rendering' is a method name and should not be translated
53
+ raise ArgumentError, _('You must give a rendering format to when_rendering')
53
54
  end
54
55
  if block.nil? then
55
- raise ArgumentError, 'You must give a block to when_rendering'
56
+ #TRANSLATORS 'when_rendering' is a method name and should not be translated
57
+ raise ArgumentError, _('You must give a block to when_rendering')
56
58
  end
57
59
  @action.set_rendering_method_for(type, block)
58
60
  end
@@ -111,11 +113,15 @@ class Puppet::Interface::ActionBuilder
111
113
  # Sets the default rendering format
112
114
  # @api private
113
115
  def render_as(value = nil)
114
- value.nil? and raise ArgumentError, "You must give a rendering format to render_as"
116
+ if value.nil?
117
+ #TRANSLATORS 'render_as' is a method name and should not be translated
118
+ raise ArgumentError, _("You must give a rendering format to render_as")
119
+ end
115
120
 
116
121
  formats = Puppet::Network::FormatHandler.formats
117
122
  unless formats.include? value
118
- raise ArgumentError, "#{value.inspect} is not a valid rendering format: #{formats.sort.join(", ")}"
123
+ raise ArgumentError, _("%{value} is not a valid rendering format: %{formats_list}") %
124
+ { value: value.inspect, formats_list: formats.sort.join(", ")}
119
125
  end
120
126
 
121
127
  @action.render_as = value
@@ -144,6 +150,9 @@ class Puppet::Interface::ActionBuilder
144
150
  @face = face
145
151
  @action = Puppet::Interface::Action.new(face, name)
146
152
  instance_eval(&block)
147
- @action.when_invoked or raise ArgumentError, "actions need to know what to do when_invoked; please add the block"
153
+ unless @action.when_invoked
154
+ #TRANSLATORS 'when_invoked' is a method name and should not be translated and 'block' is a Ruby code block
155
+ raise ArgumentError, _("actions need to know what to do when_invoked; please add the block")
156
+ end
148
157
  end
149
158
  end
@@ -17,7 +17,7 @@ module Puppet::Interface::ActionManager
17
17
  # @dsl Faces
18
18
  def action(name, &block)
19
19
  @actions ||= {}
20
- Puppet.warning "Redefining action #{name} for #{self}" if action?(name)
20
+ Puppet.warning _("Redefining action %{name} for %{self}") % { name: name, self: self } if action?(name)
21
21
 
22
22
  action = Puppet::Interface::ActionBuilder.build(self, name, &block)
23
23
 
@@ -56,7 +56,8 @@ class Puppet::Interface
56
56
  # @dsl Faces
57
57
  attr_doc :summary do |value|
58
58
  value =~ /\n/ and
59
- raise ArgumentError, "Face summary should be a single line; put the long text in 'description' instead."
59
+ #TRANSLATORS 'Face' refers to a programming API in Puppet, 'summary' and 'description' are specifc attribute names and should not be translated
60
+ raise ArgumentError, _("Face summary should be a single line; put the long text in 'description' instead.")
60
61
  value
61
62
  end
62
63
 
@@ -200,11 +201,13 @@ class Puppet::Interface
200
201
  def author(value = nil)
201
202
  unless value.nil? then
202
203
  unless value.is_a? String
203
- raise ArgumentError, 'author must be a string; use multiple statements for multiple authors'
204
+ #TRANSLATORS 'author' is an attribute name and should not be translated
205
+ raise ArgumentError, _('author must be a string; use multiple statements for multiple authors')
204
206
  end
205
207
 
206
208
  if value =~ /\n/ then
207
- raise ArgumentError, 'author should be a single line; use multiple statements for multiple authors'
209
+ #TRANSLATORS 'author' is an attribute name and should not be translated
210
+ raise ArgumentError, _('author should be a single line; use multiple statements for multiple authors')
208
211
  end
209
212
  @authors.push(Puppet::Interface::DocGen.strip_whitespace(value))
210
213
  end
@@ -223,7 +226,8 @@ class Puppet::Interface
223
226
  # I think it's a bug that this ends up being the exposed
224
227
  # version of `author` on ActionBuilder
225
228
  if Array(value).any? {|x| x =~ /\n/ } then
226
- raise ArgumentError, 'author should be a single line; use multiple statements'
229
+ #TRANSLATORS 'author' is an attribute name and should not be translated
230
+ raise ArgumentError, _('author should be a single line; use multiple statements')
227
231
  end
228
232
  @authors = Array(value).map{|x| Puppet::Interface::DocGen.strip_whitespace(x) }
229
233
  end
@@ -243,7 +247,8 @@ class Puppet::Interface
243
247
  # @dsl Faces
244
248
  def copyright(owner = nil, years = nil)
245
249
  if years.nil? and not owner.nil? then
246
- raise ArgumentError, 'copyright takes the owners names, then the years covered'
250
+ #TRANSLATORS 'copyright' is an attribute name and should not be translated
251
+ raise ArgumentError, _('copyright takes the owners names, then the years covered')
247
252
  end
248
253
  self.copyright_owner = owner unless owner.nil?
249
254
  self.copyright_years = years unless years.nil?
@@ -266,7 +271,8 @@ class Puppet::Interface
266
271
  when String then @copyright_owner = value
267
272
  when Array then @copyright_owner = value.join(", ")
268
273
  else
269
- raise ArgumentError, "copyright owner must be a string or an array of strings"
274
+ #TRANSLATORS 'copyright' is an attribute name and should not be translated
275
+ raise ArgumentError, _("copyright owner must be a string or an array of strings")
270
276
  end
271
277
  @copyright_owner
272
278
  end
@@ -302,7 +308,9 @@ class Puppet::Interface
302
308
  fault = "after #{future}"
303
309
  end
304
310
  if fault then
305
- raise ArgumentError, "copyright with a year #{fault} is very strange; did you accidentally add or subtract two years?"
311
+ #TRANSLATORS 'copyright' is an attribute name and should not be translated
312
+ raise ArgumentError, _("copyright with a year %{value} is very strange; did you accidentally add or subtract two years?") %
313
+ { value: fault }
306
314
  end
307
315
 
308
316
  input
@@ -314,11 +322,13 @@ class Puppet::Interface
314
322
  part.to_i
315
323
  elsif found = part.split(/-/) then
316
324
  unless found.length == 2 and found.all? {|x| x.strip =~ /^\d+$/ }
317
- raise ArgumentError, "#{part.inspect} is not a good copyright year or range"
325
+ #TRANSLATORS 'copyright' is an attribute name and should not be translated
326
+ raise ArgumentError, _("%{value} is not a good copyright year or range") % { value: part.inspect }
318
327
  end
319
328
  Range.new(found[0].to_i, found[1].to_i)
320
329
  else
321
- raise ArgumentError, "#{part.inspect} is not a good copyright year or range"
330
+ #TRANSLATORS 'copyright' is an attribute name and should not be translated
331
+ raise ArgumentError, _("%{value} is not a good copyright year or range") % { value: part.inspect }
322
332
  end
323
333
  end
324
334
 
@@ -335,7 +345,8 @@ class Puppet::Interface
335
345
  result
336
346
 
337
347
  else
338
- raise ArgumentError, "#{input.inspect} is not a good copyright year, set, or range"
348
+ #TRANSLATORS 'copyright' is an attribute name and should not be translated
349
+ raise ArgumentError, _("%{value} is not a good copyright year, set, or range") % { value: input.inspect }
339
350
  end
340
351
  end
341
352
  end
@@ -111,7 +111,7 @@ module Puppet::Interface::FaceCollection
111
111
  nil
112
112
  rescue SyntaxError => e
113
113
  raise unless e.message =~ %r{#{path}\.rb:\d+: }
114
- Puppet.err "Failed to load face #{name}:\n#{e}"
114
+ Puppet.err _("Failed to load face %{name}:\n%{detail}") % { name: name, detail: e }
115
115
  # ...but we just carry on after complaining.
116
116
  nil
117
117
  end
@@ -122,7 +122,9 @@ module Puppet::Interface::FaceCollection
122
122
 
123
123
  def self.underscorize(name)
124
124
  unless name.to_s =~ /^[-_a-z][-_a-z0-9]*$/i then
125
- raise ArgumentError, "#{name.inspect} (#{name.class}) is not a valid face name"
125
+ #TRANSLATORS 'face' refers to a programming API in Puppet
126
+ raise ArgumentError, _("%{name} (%{class_name}) is not a valid face name") %
127
+ { name: name.inspect, class_name: name.class }
126
128
  end
127
129
 
128
130
  name.to_s.downcase.split(/[-_]/).join('_').to_sym
@@ -18,7 +18,7 @@ class Puppet::Interface::Option
18
18
  declaration.each do |item|
19
19
  if item.is_a? String and item.to_s =~ /^-/ then
20
20
  unless item =~ /^-[a-z]\b/ or item =~ /^--[^-]/ then
21
- raise ArgumentError, "#{item.inspect}: long options need two dashes (--)"
21
+ raise ArgumentError, _("%{option}: long options need two dashes (--)") % { option: item.inspect }
22
22
  end
23
23
  @optparse << item
24
24
 
@@ -33,20 +33,21 @@ class Puppet::Interface::Option
33
33
  # jeffweiss 17 april 2012
34
34
  name = optparse_to_optionname(item)
35
35
  if Puppet.settings.include? name then
36
- raise ArgumentError, "#{item.inspect}: already defined in puppet"
36
+ raise ArgumentError, _("%{option}: already defined in puppet") % { option: item.inspect }
37
37
  end
38
38
  if dup = dups[name] then
39
- raise ArgumentError, "#{item.inspect}: duplicates existing alias #{dup.inspect} in #{@parent}"
39
+ raise ArgumentError, _("%{option}: duplicates existing alias %{duplicate} in %{parent}") %
40
+ { option: item.inspect, duplicate: dup.inspect, parent: @parent }
40
41
  else
41
42
  dups[name] = item
42
43
  end
43
44
  else
44
- raise ArgumentError, "#{item.inspect} is not valid for an option argument"
45
+ raise ArgumentError, _("%{option} is not valid for an option argument") % { option: item.inspect }
45
46
  end
46
47
  end
47
48
 
48
49
  if @optparse.empty? then
49
- raise ArgumentError, "No option declarations found while building"
50
+ raise ArgumentError, _("No option declarations found while building")
50
51
  end
51
52
 
52
53
  # Now, infer the name from the options; we prefer the first long option as
@@ -59,15 +60,17 @@ class Puppet::Interface::Option
59
60
  # relax this rule later if we find a valid use case for it. --daniel 2011-03-30
60
61
  @argument = @optparse.any? { |o| o =~ /[ =]/ }
61
62
  if @argument and not @optparse.all? { |o| o =~ /[ =]/ } then
62
- raise ArgumentError, "Option #{@name} is inconsistent about taking an argument"
63
+ raise ArgumentError, _("Option %{name} is inconsistent about taking an argument") % { name: @name }
63
64
  end
64
65
 
65
66
  # Is our argument optional? The rules about consistency apply here, also,
66
67
  # just like they do to taking arguments at all. --daniel 2011-03-30
67
68
  @optional_argument = @optparse.any? { |o| o=~/[ =]\[/ }
68
- @optional_argument and raise ArgumentError, "Options with optional arguments are not supported"
69
+ if @optional_argument
70
+ raise ArgumentError, _("Options with optional arguments are not supported")
71
+ end
69
72
  if @optional_argument and not @optparse.all? { |o| o=~/[ =]\[/ } then
70
- raise ArgumentError, "Option #{@name} is inconsistent about the argument being optional"
73
+ raise ArgumentError, _("Option %{name} is inconsistent about the argument being optional") % { name: @name }
71
74
  end
72
75
  end
73
76
 
@@ -82,7 +85,7 @@ class Puppet::Interface::Option
82
85
  # @api private
83
86
  def optparse_to_optionname(declaration)
84
87
  unless found = declaration.match(/^-+(?:\[no-\])?([^ =]+)/) then
85
- raise ArgumentError, "Can't find a name in the declaration #{declaration.inspect}"
88
+ raise ArgumentError, _("Can't find a name in the declaration %{declaration}") % { declaration: declaration.inspect }
86
89
  end
87
90
  found.captures.first
88
91
  end
@@ -90,7 +93,9 @@ class Puppet::Interface::Option
90
93
  # @api private
91
94
  def optparse_to_name(declaration)
92
95
  name = optparse_to_optionname(declaration).tr('-', '_')
93
- raise "#{name.inspect} is an invalid option name" unless name.to_s =~ /^[a-z]\w*$/
96
+ unless name.to_s =~ /^[a-z]\w*$/
97
+ raise _("%{name} is an invalid option name") % { name: name.inspect }
98
+ end
94
99
  name.to_sym
95
100
  end
96
101
 
@@ -110,8 +115,14 @@ class Puppet::Interface::Option
110
115
  end
111
116
 
112
117
  def default=(proc)
113
- required and raise ArgumentError, "#{self} can't be optional and have a default value"
114
- proc.is_a? Proc or raise ArgumentError, "default value for #{self} is a #{proc.class.name.inspect}, not a proc"
118
+ if required
119
+ raise ArgumentError, _("%{name} can't be optional and have a default value") % { name: self }
120
+ end
121
+ unless proc.is_a? Proc
122
+ #TRANSLATORS 'proc' is a Ruby block of code
123
+ raise ArgumentError, _("default value for %{name} is a %{class_name}, not a proc") %
124
+ { name: self, class_name: proc.class.name.inspect }
125
+ end
115
126
  @default = proc
116
127
  end
117
128
 
@@ -122,20 +133,30 @@ class Puppet::Interface::Option
122
133
  attr_reader :parent, :name, :aliases, :optparse
123
134
  attr_accessor :required
124
135
  def required=(value)
125
- has_default? and raise ArgumentError, "#{self} can't be optional and have a default value"
136
+ if has_default?
137
+ raise ArgumentError, _("%{name} can't be optional and have a default value") % { name: self }
138
+ end
126
139
  @required = value
127
140
  end
128
141
 
129
142
  attr_accessor :before_action
130
143
  def before_action=(proc)
131
- proc.is_a? Proc or raise ArgumentError, "before action hook for #{self} is a #{proc.class.name.inspect}, not a proc"
144
+ unless proc.is_a? Proc
145
+ #TRANSLATORS 'proc' is a Ruby block of code
146
+ raise ArgumentError, _("before action hook for %{name} is a %{class_name}, not a proc") %
147
+ { name: self, class_name: proc.class.name.inspect }
148
+ end
132
149
  @before_action =
133
150
  @parent.__send__(:__add_method, __decoration_name(:before), proc)
134
151
  end
135
152
 
136
153
  attr_accessor :after_action
137
154
  def after_action=(proc)
138
- proc.is_a? Proc or raise ArgumentError, "after action hook for #{self} is a #{proc.class.name.inspect}, not a proc"
155
+ unless proc.is_a? Proc
156
+ #TRANSLATORS 'proc' is a Ruby block of code
157
+ raise ArgumentError, _("after action hook for %{name} is a %{class_name}, not a proc") %
158
+ { name: self, class_name: proc.class.name.inspect }
159
+ end
139
160
  @after_action =
140
161
  @parent.__send__(:__add_method, __decoration_name(:after), proc)
141
162
  end
@@ -40,12 +40,17 @@ class Puppet::Interface::OptionBuilder
40
40
  # @api public
41
41
  # @dsl Faces
42
42
  def before_action(&block)
43
- block or raise ArgumentError, "#{@option} before_action requires a block"
43
+ unless block
44
+ #TRANSLATORS 'before_action' is a method name and should not be translated
45
+ raise ArgumentError, _("%{option} before_action requires a block") % { option: @option }
46
+ end
44
47
  if @option.before_action
45
- raise ArgumentError, "#{@option} already has a before_action set"
48
+ #TRANSLATORS 'before_action' is a method name and should not be translated
49
+ raise ArgumentError, _("%{option} already has a before_action set") % { option: @option }
46
50
  end
47
51
  unless block.arity == 3 then
48
- raise ArgumentError, "before_action takes three arguments, action, args, and options"
52
+ #TRANSLATORS 'before_action' is a method name and should not be translated
53
+ raise ArgumentError, _("before_action takes three arguments, action, args, and options")
49
54
  end
50
55
  @option.before_action = block
51
56
  end
@@ -55,12 +60,17 @@ class Puppet::Interface::OptionBuilder
55
60
  # @api public
56
61
  # @dsl Faces
57
62
  def after_action(&block)
58
- block or raise ArgumentError, "#{@option} after_action requires a block"
63
+ unless block
64
+ #TRANSLATORS 'after_action' is a method name and should not be translated
65
+ raise ArgumentError, _("%{option} after_action requires a block") % { option: @option }
66
+ end
59
67
  if @option.after_action
60
- raise ArgumentError, "#{@option} already has an after_action set"
68
+ #TRANSLATORS 'after_action' is a method name and should not be translated
69
+ raise ArgumentError, _("%{option} already has an after_action set") % { option: @option }
61
70
  end
62
71
  unless block.arity == 3 then
63
- raise ArgumentError, "after_action takes three arguments, action, args, and options"
72
+ #TRANSLATORS 'after_action' is a method name and should not be translated
73
+ raise ArgumentError, _("after_action takes three arguments, action, args, and options")
64
74
  end
65
75
  @option.after_action = block
66
76
  end
@@ -79,12 +89,16 @@ class Puppet::Interface::OptionBuilder
79
89
  # @api public
80
90
  # @dsl Faces
81
91
  def default_to(&block)
82
- block or raise ArgumentError, "#{@option} default_to requires a block"
92
+ unless block
93
+ #TRANSLATORS 'default_to' is a method name and should not be translated
94
+ raise ArgumentError, _("%{option} default_to requires a block") % { option: @option }
95
+ end
83
96
  if @option.has_default?
84
- raise ArgumentError, "#{@option} already has a default value"
97
+ raise ArgumentError, _("%{option} already has a default value") % { option: @option }
85
98
  end
86
99
  unless block.arity == 0
87
- raise ArgumentError, "#{@option} default_to block should not take any arguments"
100
+ #TRANSLATORS 'default_to' is a method name and should not be translated
101
+ raise ArgumentError, _("%{option} default_to block should not take any arguments") % { option: @option }
88
102
  end
89
103
  @option.default = block
90
104
  end
@@ -9,7 +9,10 @@ module Puppet::Interface::OptionManager
9
9
  def display_global_options(*args)
10
10
  @display_global_options ||= []
11
11
  [args].flatten.each do |refopt|
12
- raise ArgumentError, "Global option #{refopt} does not exist in Puppet.settings" unless Puppet.settings.include? refopt
12
+ unless Puppet.settings.include?(refopt)
13
+ #TRANSLATORS 'Puppet.settings' references to the Puppet settings options and should not be translated
14
+ raise ArgumentError, _("Global option %{option} does not exist in Puppet.settings") % { option: refopt }
15
+ end
13
16
  @display_global_options << refopt if refopt
14
17
  end
15
18
  @display_global_options.uniq!
@@ -51,13 +54,15 @@ module Puppet::Interface::OptionManager
51
54
 
52
55
  option.aliases.each do |name|
53
56
  if conflict = get_option(name) then
54
- raise ArgumentError, "Option #{option} conflicts with existing option #{conflict}"
57
+ raise ArgumentError, _("Option %{option} conflicts with existing option %{conflict}") %
58
+ { option: option, conflict: conflict }
55
59
  end
56
60
 
57
61
  actions.each do |action|
58
62
  action = get_action(action)
59
63
  if conflict = action.get_option(name) then
60
- raise ArgumentError, "Option #{option} conflicts with existing option #{conflict} on #{action}"
64
+ raise ArgumentError, _("Option %{option} conflicts with existing option %{conflict} on %{action}") %
65
+ { option: option, conflict: conflict, action: action }
61
66
  end
62
67
  end
63
68
  end
@@ -72,7 +72,9 @@ module Manager
72
72
  def newtype(name, options = {}, &block)
73
73
  # Handle backward compatibility
74
74
  unless options.is_a?(Hash)
75
- Puppet.warning "Puppet::Type.newtype(#{name}) now expects a hash as the second argument, not #{options.inspect}"
75
+ #TRANSLATORS 'Puppet::Type.newtype' should not be translated
76
+ Puppet.warning(_("Puppet::Type.newtype(%{name}) now expects a hash as the second argument, not %{argument}") %
77
+ { name: name, argument: options.inspect})
76
78
  end
77
79
 
78
80
  # First make sure we don't have a method sitting around
@@ -107,7 +109,8 @@ module Manager
107
109
  # Now define a "new<type>" method for convenience.
108
110
  if self.respond_to? newmethod
109
111
  # Refuse to overwrite existing methods like 'newparam' or 'newtype'.
110
- Puppet.warning "'new#{name.to_s}' method already exists; skipping"
112
+ #TRANSLATORS 'new%{method}' will become a method name, do not translate this string
113
+ Puppet.warning(_("'new%{method}' method already exists; skipping") % { method: name.to_s })
111
114
  else
112
115
  selfobj.send(:define_method, newmethod) do |*args|
113
116
  klass.new(*args)
@@ -169,7 +172,8 @@ module Manager
169
172
  end
170
173
  # Try loading the type.
171
174
  if typeloader.load(name, Puppet.lookup(:current_environment))
172
- Puppet.warning "Loaded puppet/type/#{name} but no class was created" unless @types.include? name
175
+ #TRANSLATORS 'puppet/type/%{name}' should not be translated
176
+ Puppet.warning(_("Loaded puppet/type/%{name} but no class was created") % { name: name }) unless @types.include? name
173
177
  elsif !Puppet[:always_retry_plugins]
174
178
  # PUP-5482 - Only look for a type once if plugin retry is disabled
175
179
  @types[name] = nil
@@ -23,6 +23,7 @@ class Puppet::Module
23
23
  "templates" => "templates",
24
24
  "plugins" => "lib",
25
25
  "pluginfacts" => "facts.d",
26
+ "locales" => "locales",
26
27
  }
27
28
 
28
29
  # Find and return the +module+ that +path+ belongs to. If +path+ is
@@ -96,9 +97,6 @@ class Puppet::Module
96
97
  load_metadata
97
98
 
98
99
  @absolute_path_to_manifests = Puppet::FileSystem::PathPattern.absolute(manifests)
99
-
100
- # i18n initialization for modules
101
- initialize_i18n unless Puppet[:disable_i18n]
102
100
  end
103
101
 
104
102
  # @deprecated The puppetversion module metadata field is no longer used.
@@ -208,7 +206,8 @@ class Puppet::Module
208
206
  rescue Errno::ENOENT
209
207
  {}
210
208
  rescue JSON::JSONError => e
211
- msg = "#{name} has an invalid and unparsable metadata.json file. The parse error: #{e.message}"
209
+ #TRANSLATORS 'metadata.json' is a specific file name and should not be translated.
210
+ msg = _("%{name} has an invalid and unparsable metadata.json file. The parse error: %{error}") % { name: name, error: e.message }
212
211
  case Puppet[:strict]
213
212
  when :off
214
213
  Puppet.debug(msg)
@@ -302,6 +301,21 @@ class Puppet::Module
302
301
  subpath("facts.d")
303
302
  end
304
303
 
304
+ #@return [String]
305
+ def locale_directory
306
+ subpath("locales")
307
+ end
308
+
309
+ # Returns true if the module has translation files for the
310
+ # given locale.
311
+ # @param [String] locale the two-letter language code to check
312
+ # for translations
313
+ # @return true if the module has a directory for the locale, false
314
+ # false otherwise
315
+ def has_translations?(locale)
316
+ return Puppet::FileSystem.exist?(File.join(locale_directory, locale))
317
+ end
318
+
305
319
  def has_external_facts?
306
320
  File.directory?(plugin_fact_directory)
307
321
  end
@@ -422,23 +436,6 @@ class Puppet::Module
422
436
  @strict_semver
423
437
  end
424
438
 
425
- def initialize_i18n
426
- # this name takes the form "namespace-module", and should match the name of
427
- # the PO file containing the translations.
428
- module_name = @forge_name ? @forge_name.gsub("/", "-") : name
429
- return if Puppet::GettextConfig.translations_loaded?(module_name)
430
-
431
- locales_path = File.absolute_path('locales', path)
432
-
433
- if Puppet::GettextConfig.load_translations(module_name, locales_path, :po)
434
- Puppet.debug "i18n initialized for #{module_name}"
435
- elsif Puppet::GettextConfig.gettext_loaded?
436
- Puppet.debug "Could not find translation files for #{module_name} at #{locales_path}. Skipping i18n initialization."
437
- else
438
- Puppet.debug "No gettext library found, skipping i18n initialization."
439
- end
440
- end
441
-
442
439
  private
443
440
 
444
441
  def wanted_manifests_from(pattern)