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.
- data/CONTRIBUTING.md +1 -1
- data/Gemfile +3 -0
- data/ext/puppet-test +3 -2
- data/lib/hiera/puppet_function.rb +5 -2
- data/lib/hiera_puppet.rb +3 -3
- data/lib/puppet.rb +2 -5
- data/lib/puppet/agent.rb +22 -2
- data/lib/puppet/agent/locker.rb +6 -5
- data/lib/puppet/application.rb +18 -1
- data/lib/puppet/application/agent.rb +9 -2
- data/lib/puppet/application/apply.rb +1 -1
- data/lib/puppet/application/config.rb +1 -0
- data/lib/puppet/application/device.rb +1 -2
- data/lib/puppet/application/filebucket.rb +22 -5
- data/lib/puppet/application/help.rb +1 -0
- data/lib/puppet/application/lookup.rb +1 -3
- data/lib/puppet/application_support.rb +6 -1
- data/lib/puppet/bindings.rb +2 -1
- data/lib/puppet/configurer.rb +9 -4
- data/lib/puppet/configurer/downloader_factory.rb +10 -0
- data/lib/puppet/configurer/plugin_handler.rb +11 -4
- data/lib/puppet/daemon.rb +2 -2
- data/lib/puppet/defaults.rb +99 -27
- data/lib/puppet/environments.rb +2 -0
- data/lib/puppet/error.rb +5 -15
- data/lib/puppet/external/pson/common.rb +2 -2
- data/lib/puppet/face/catalog.rb +1 -1
- data/lib/puppet/face/config.rb +14 -1
- data/lib/puppet/face/epp.rb +4 -2
- data/lib/puppet/face/help.rb +12 -14
- data/lib/puppet/face/man.rb +1 -0
- data/lib/puppet/face/module/build.rb +1 -1
- data/lib/puppet/face/module/list.rb +6 -17
- data/lib/puppet/face/module/uninstall.rb +14 -3
- data/lib/puppet/face/node.rb +1 -0
- data/lib/puppet/face/status.rb +1 -0
- data/lib/puppet/file_serving/base.rb +2 -1
- data/lib/puppet/file_serving/configuration.rb +3 -0
- data/lib/puppet/file_serving/configuration/parser.rb +23 -9
- data/lib/puppet/file_serving/mount/locales.rb +35 -0
- data/lib/puppet/forge.rb +2 -1
- data/lib/puppet/forge/errors.rb +24 -22
- data/lib/puppet/functions/binary_file.rb +1 -0
- data/lib/puppet/functions/each.rb +10 -4
- data/lib/puppet/functions/eyaml_lookup_key.rb +4 -2
- data/lib/puppet/functions/lookup.rb +2 -2
- data/lib/puppet/functions/map.rb +12 -2
- data/lib/puppet/functions/slice.rb +2 -3
- data/lib/puppet/functions/unique.rb +1 -1
- data/lib/puppet/functions/yaml_data.rb +1 -1
- data/lib/puppet/gettext/config.rb +144 -41
- data/lib/puppet/gettext/module_translations.rb +42 -0
- data/lib/puppet/graph/relationship_graph.rb +1 -1
- data/lib/puppet/graph/simple_graph.rb +3 -3
- data/lib/puppet/indirector/catalog/compiler.rb +40 -25
- data/lib/puppet/indirector/exec.rb +1 -1
- data/lib/puppet/indirector/facts/facter.rb +3 -3
- data/lib/puppet/indirector/facts/network_device.rb +2 -2
- data/lib/puppet/indirector/file_bucket_file/file.rb +4 -1
- data/lib/puppet/indirector/indirection.rb +17 -9
- data/lib/puppet/indirector/ldap.rb +2 -2
- data/lib/puppet/indirector/node/write_only_yaml.rb +3 -1
- data/lib/puppet/indirector/rest.rb +8 -5
- data/lib/puppet/indirector/ssl_file.rb +2 -2
- data/lib/puppet/indirector/terminus.rb +3 -3
- data/lib/puppet/interface.rb +2 -1
- data/lib/puppet/interface/action.rb +41 -24
- data/lib/puppet/interface/action_builder.rb +14 -5
- data/lib/puppet/interface/action_manager.rb +1 -1
- data/lib/puppet/interface/documentation.rb +21 -10
- data/lib/puppet/interface/face_collection.rb +4 -2
- data/lib/puppet/interface/option.rb +36 -15
- data/lib/puppet/interface/option_builder.rb +23 -9
- data/lib/puppet/interface/option_manager.rb +8 -3
- data/lib/puppet/metatype/manager.rb +7 -3
- data/lib/puppet/module.rb +18 -21
- data/lib/puppet/module_tool/errors/installer.rb +18 -20
- data/lib/puppet/module_tool/errors/shared.rb +20 -15
- data/lib/puppet/module_tool/errors/uninstaller.rb +1 -0
- data/lib/puppet/module_tool/errors/upgrader.rb +1 -1
- data/lib/puppet/module_tool/tar/mini.rb +57 -4
- data/lib/puppet/network/auth_config_parser.rb +18 -13
- data/lib/puppet/network/authstore.rb +2 -2
- data/lib/puppet/network/client_request.rb +1 -1
- data/lib/puppet/network/format.rb +3 -3
- data/lib/puppet/network/http/api/indirection_type.rb +1 -1
- data/lib/puppet/network/http/api/master/v3/environment.rb +5 -2
- data/lib/puppet/network/http/error.rb +7 -7
- data/lib/puppet/network/http/factory.rb +9 -0
- data/lib/puppet/network/http/rack.rb +2 -2
- data/lib/puppet/network/http/webrick.rb +2 -4
- data/lib/puppet/node.rb +25 -6
- data/lib/puppet/node/environment.rb +14 -0
- data/lib/puppet/node/facts.rb +9 -0
- data/lib/puppet/parameter.rb +3 -3
- data/lib/puppet/parameter/value_collection.rb +9 -9
- data/lib/puppet/parser/ast/leaf.rb +1 -1
- data/lib/puppet/parser/ast/node.rb +2 -2
- data/lib/puppet/parser/ast/pops_bridge.rb +1 -1
- data/lib/puppet/parser/compiler.rb +6 -5
- data/lib/puppet/parser/functions.rb +1 -1
- data/lib/puppet/parser/functions/generate.rb +2 -4
- data/lib/puppet/parser/functions/inline_template.rb +1 -2
- data/lib/puppet/parser/functions/sprintf.rb +17 -3
- data/lib/puppet/parser/functions/template.rb +6 -2
- data/lib/puppet/parser/resource.rb +30 -31
- data/lib/puppet/parser/scope.rb +20 -11
- data/lib/puppet/parser/templatewrapper.rb +4 -3
- data/lib/puppet/pops/evaluator/collector_transformer.rb +2 -1
- data/lib/puppet/pops/evaluator/collectors/abstract_collector.rb +1 -1
- data/lib/puppet/pops/evaluator/epp_evaluator.rb +21 -8
- data/lib/puppet/pops/evaluator/evaluator_impl.rb +2 -1
- data/lib/puppet/pops/evaluator/external_syntax_support.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_converter.rb +3 -1
- data/lib/puppet/pops/evaluator/runtime3_resource_support.rb +1 -1
- data/lib/puppet/pops/evaluator/runtime3_support.rb +4 -4
- data/lib/puppet/pops/functions/dispatch.rb +1 -1
- data/lib/puppet/pops/functions/function.rb +8 -2
- data/lib/puppet/pops/issue_reporter.rb +7 -2
- data/lib/puppet/pops/issues.rb +10 -4
- data/lib/puppet/pops/label_provider.rb +1 -1
- data/lib/puppet/pops/loader/module_loaders.rb +5 -2
- data/lib/puppet/pops/loader/static_loader.rb +1 -1
- data/lib/puppet/pops/loaders.rb +7 -3
- data/lib/puppet/pops/lookup/explainer.rb +2 -1
- data/lib/puppet/pops/lookup/hiera_config.rb +2 -2
- data/lib/puppet/pops/lookup/lookup_adapter.rb +4 -4
- data/lib/puppet/pops/merge_strategy.rb +6 -3
- data/lib/puppet/pops/migration/migration_checker.rb +8 -8
- data/lib/puppet/pops/model/ast_transformer.rb +1 -1
- data/lib/puppet/pops/model/factory.rb +4 -2
- data/lib/puppet/pops/resource/resource_type_impl.rb +1 -1
- data/lib/puppet/pops/serialization/abstract_writer.rb +2 -1
- data/lib/puppet/pops/types/iterable.rb +2 -0
- data/lib/puppet/pops/types/p_object_type.rb +36 -15
- data/lib/puppet/pops/types/type_calculator.rb +2 -1
- data/lib/puppet/pops/types/type_factory.rb +3 -1
- data/lib/puppet/pops/types/type_mismatch_describer.rb +19 -6
- data/lib/puppet/pops/types/type_parser.rb +7 -7
- data/lib/puppet/pops/types/types.rb +10 -4
- data/lib/puppet/pops/validation.rb +14 -12
- data/lib/puppet/property.rb +14 -6
- data/lib/puppet/property/ensure.rb +2 -2
- data/lib/puppet/provider.rb +4 -4
- data/lib/puppet/provider/group/aix.rb +4 -2
- data/lib/puppet/provider/ldap.rb +2 -2
- data/lib/puppet/provider/naginator.rb +1 -1
- data/lib/puppet/provider/nameservice.rb +7 -4
- data/lib/puppet/provider/nameservice/directoryservice.rb +4 -3
- data/lib/puppet/provider/package/aix.rb +1 -1
- data/lib/puppet/provider/package/nim.rb +7 -8
- data/lib/puppet/provider/package/opkg.rb +1 -1
- data/lib/puppet/provider/package/pkg.rb +9 -6
- data/lib/puppet/provider/package/pkgutil.rb +3 -3
- data/lib/puppet/provider/package/yum.rb +1 -1
- data/lib/puppet/provider/parsedfile.rb +4 -4
- data/lib/puppet/provider/selmodule/semodule.rb +5 -3
- data/lib/puppet/provider/service/base.rb +1 -1
- data/lib/puppet/provider/service/init.rb +1 -1
- data/lib/puppet/provider/service/launchd.rb +2 -2
- data/lib/puppet/provider/service/runit.rb +2 -1
- data/lib/puppet/provider/service/smf.rb +2 -0
- data/lib/puppet/provider/service/systemd.rb +1 -0
- data/lib/puppet/provider/service/upstart.rb +1 -1
- data/lib/puppet/provider/user/aix.rb +13 -6
- data/lib/puppet/provider/user/openbsd.rb +2 -1
- data/lib/puppet/provider/yumrepo/inifile.rb +2 -1
- data/lib/puppet/provider/zone/solaris.rb +2 -2
- data/lib/puppet/reference/configuration.rb +4 -2
- data/lib/puppet/relationship.rb +2 -1
- data/lib/puppet/reports/store.rb +1 -1
- data/lib/puppet/resource.rb +7 -5
- data/lib/puppet/resource/capability_finder.rb +14 -11
- data/lib/puppet/resource/catalog.rb +33 -18
- data/lib/puppet/resource/type.rb +5 -5
- data/lib/puppet/settings.rb +19 -13
- data/lib/puppet/settings/base_setting.rb +23 -8
- data/lib/puppet/settings/config_file.rb +14 -4
- data/lib/puppet/settings/environment_conf.rb +19 -9
- data/lib/puppet/ssl/base.rb +9 -4
- data/lib/puppet/ssl/oids.rb +8 -2
- data/lib/puppet/syntax_checkers/base64.rb +5 -6
- data/lib/puppet/transaction.rb +7 -3
- data/lib/puppet/transaction/persistence.rb +16 -1
- data/lib/puppet/transaction/report.rb +6 -0
- data/lib/puppet/type.rb +27 -35
- data/lib/puppet/type/file.rb +2 -1
- data/lib/puppet/type/file/data_sync.rb +2 -1
- data/lib/puppet/type/file/source.rb +1 -1
- data/lib/puppet/type/group.rb +1 -1
- data/lib/puppet/type/mount.rb +1 -1
- data/lib/puppet/type/resources.rb +1 -1
- data/lib/puppet/type/schedule.rb +26 -14
- data/lib/puppet/type/user.rb +9 -3
- data/lib/puppet/type/zone.rb +1 -1
- data/lib/puppet/util.rb +27 -21
- data/lib/puppet/util/at_fork/solaris.rb +6 -4
- data/lib/puppet/util/command_line.rb +5 -0
- data/lib/puppet/util/command_line/trollop.rb +6 -5
- data/lib/puppet/util/errors.rb +61 -8
- data/lib/puppet/util/fileparsing.rb +3 -5
- data/lib/puppet/util/http_proxy.rb +14 -6
- data/lib/puppet/util/instance_loader.rb +1 -3
- data/lib/puppet/util/ldap/manager.rb +6 -3
- data/lib/puppet/util/log.rb +19 -24
- data/lib/puppet/util/logging.rb +21 -28
- data/lib/puppet/util/methodhelper.rb +1 -1
- data/lib/puppet/util/nagios_maker.rb +1 -1
- data/lib/puppet/util/network_device/config.rb +21 -13
- data/lib/puppet/util/plist.rb +3 -1
- data/lib/puppet/util/posix.rb +1 -1
- data/lib/puppet/util/provider_features.rb +1 -1
- data/lib/puppet/util/rdoc/generators/puppet_generator.rb +1 -1
- data/lib/puppet/util/reference.rb +2 -3
- data/lib/puppet/util/selinux.rb +1 -1
- data/lib/puppet/util/storage.rb +2 -2
- data/lib/puppet/util/windows/eventlog.rb +10 -5
- data/lib/puppet/util/windows/file.rb +61 -9
- data/lib/puppet/util/windows/process.rb +1 -1
- data/lib/puppet/util/windows/taskscheduler.rb +2 -2
- data/lib/puppet/vendor/semantic_puppet/lib/semantic_puppet.rb +5 -1
- data/lib/puppet/version.rb +1 -1
- data/locales/en/puppet.po +19 -0
- data/locales/ja/puppet.po +2739 -809
- data/locales/puppet.pot +2367 -734
- data/spec/fixtures/unit/application/environments/production/data/common.yaml +2 -0
- data/spec/integration/agent/logging_spec.rb +2 -0
- data/spec/integration/faces/plugin_spec.rb +1 -0
- data/spec/integration/network/authconfig_spec.rb +2 -2
- data/spec/integration/parser/collection_spec.rb +2 -2
- data/spec/integration/parser/scope_spec.rb +16 -3
- data/spec/integration/provider/cron/crontab_spec.rb +1 -0
- data/spec/integration/transaction/report_spec.rb +5 -0
- data/spec/lib/matchers/json.rb +14 -13
- data/spec/unit/agent_spec.rb +33 -0
- data/spec/unit/application/config_spec.rb +4 -0
- data/spec/unit/application/lookup_spec.rb +30 -0
- data/spec/unit/application_spec.rb +18 -0
- data/spec/unit/configurer/downloader_factory_spec.rb +33 -0
- data/spec/unit/configurer/plugin_handler_spec.rb +71 -16
- data/spec/unit/environments_spec.rb +15 -0
- data/spec/unit/face/config_spec.rb +8 -9
- data/spec/unit/face/epp_face_spec.rb +2 -2
- data/spec/unit/face/plugin_spec.rb +50 -4
- data/spec/unit/file_serving/configuration/parser_spec.rb +2 -2
- data/spec/unit/file_serving/mount/locales_spec.rb +73 -0
- data/spec/unit/functions/break_spec.rb +108 -50
- data/spec/unit/functions/defined_spec.rb +2 -2
- data/spec/unit/functions/hiera_spec.rb +0 -1
- data/spec/unit/functions/lookup_spec.rb +85 -19
- data/spec/unit/functions/next_spec.rb +1 -1
- data/spec/unit/functions/return_spec.rb +2 -2
- data/spec/unit/gettext/config_spec.rb +125 -0
- data/spec/unit/gettext/module_loading_spec.rb +53 -0
- data/spec/unit/indirector/json_spec.rb +0 -11
- data/spec/unit/indirector/node/exec_spec.rb +1 -1
- data/spec/unit/info_service_spec.rb +1 -1
- data/spec/unit/interface_spec.rb +12 -0
- data/spec/unit/module_spec.rb +0 -28
- data/spec/unit/module_tool/tar/mini_spec.rb +34 -5
- data/spec/unit/network/http/factory_spec.rb +22 -0
- data/spec/unit/network/http/webrick_spec.rb +30 -29
- data/spec/unit/node/environment_spec.rb +16 -0
- data/spec/unit/node_spec.rb +102 -16
- data/spec/unit/parser/environment_compiler_spec.rb +1 -1
- data/spec/unit/parser/functions/sprintf_spec.rb +26 -0
- data/spec/unit/parser/resource/param_spec.rb +1 -1
- data/spec/unit/pops/evaluator/evaluating_parser_spec.rb +9 -9
- data/spec/unit/pops/loaders/static_loader_spec.rb +1 -1
- data/spec/unit/pops/parser/parse_containers_spec.rb +1 -1
- data/spec/unit/pops/types/type_calculator_spec.rb +40 -0
- data/spec/unit/pops/types/type_mismatch_describer_spec.rb +9 -0
- data/spec/unit/provider/selmodule_spec.rb +6 -0
- data/spec/unit/provider/service/init_spec.rb +1 -1
- data/spec/unit/provider/service/smf_spec.rb +2 -0
- data/spec/unit/provider/service/systemd_spec.rb +14 -0
- data/spec/unit/resource/catalog_spec.rb +12 -2
- data/spec/unit/settings/config_file_spec.rb +1 -1
- data/spec/unit/transaction/persistence_spec.rb +42 -0
- data/spec/unit/transaction/report_spec.rb +19 -4
- data/spec/unit/transaction_spec.rb +27 -0
- data/spec/unit/type/schedule_spec.rb +14 -0
- data/spec/unit/type_spec.rb +3 -3
- data/spec/unit/util/errors_spec.rb +1 -1
- data/spec/unit/util/http_proxy_spec.rb +37 -0
- data/spec/unit/util/log_spec.rb +3 -3
- data/spec/unit/util/logging_spec.rb +7 -7
- data/spec/unit/util/monkey_patches_spec.rb +6 -2
- metadata +3433 -3416
- checksums.yaml +0 -7
- data/spec/unit/gettext_config_spec.rb +0 -57
@@ -171,7 +171,7 @@ Puppet::Type.type(:service).provide :init, :parent => :base do
|
|
171
171
|
|
172
172
|
def texecute(type, command, fof = true, squelch = false, combine = true)
|
173
173
|
if type == :start && Facter.value(:osfamily) == "Solaris"
|
174
|
-
command = ["/usr/bin/ctrun -l
|
174
|
+
command = ["/usr/bin/ctrun -l child", command].flatten.join(" ")
|
175
175
|
end
|
176
176
|
super(type, command, fof, squelch, combine)
|
177
177
|
end
|
@@ -141,8 +141,8 @@ Puppet::Type.type(:service).provide :launchd, :parent => :base do
|
|
141
141
|
if job.has_key?("Label")
|
142
142
|
@label_to_path_map[job["Label"]] = filepath
|
143
143
|
else
|
144
|
-
|
145
|
-
|
144
|
+
#TRANSLATORS 'plist' and label' should not be translated
|
145
|
+
Puppet.warning(_("The %{file} plist does not contain a 'label' key; Puppet is skipping it") % { file: filepath })
|
146
146
|
next
|
147
147
|
end
|
148
148
|
end
|
@@ -89,7 +89,8 @@ Puppet::Type.type(:service).provide :runit, :parent => :daemontools do
|
|
89
89
|
# Work around issue #4480
|
90
90
|
# runsvdir takes up to 5 seconds to recognize
|
91
91
|
# the symlink created by this call to enable
|
92
|
-
|
92
|
+
#TRANSLATORS 'runsvdir' is a linux service name and should not be translated
|
93
|
+
Puppet.info _("Waiting 5 seconds for runsvdir to discover service %{service}") % { service: self.service }
|
93
94
|
sleep 5
|
94
95
|
end
|
95
96
|
sv "start", self.service
|
@@ -107,6 +107,8 @@ Puppet::Type.type(:service).provide :smf, :parent => :base do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
def stop
|
110
|
+
# Don't try to stop non-existing services (PUP-8167)
|
111
|
+
return if self.status == :absent
|
110
112
|
# Wait for the service to actually stop before returning.
|
111
113
|
super
|
112
114
|
self.wait('offline', 'disabled', 'uninitialized')
|
@@ -23,6 +23,7 @@ Puppet::Type.type(:service).provide :systemd, :parent => :base do
|
|
23
23
|
defaultfor :osfamily => :redhat, :operatingsystem => :fedora
|
24
24
|
defaultfor :osfamily => :suse
|
25
25
|
defaultfor :osfamily => :coreos
|
26
|
+
defaultfor :operatingsystem => :amazon, :operatingsystemmajrelease => ["2"]
|
26
27
|
defaultfor :operatingsystem => :debian, :operatingsystemmajrelease => ["8", "stretch/sid", "9", "buster/sid"]
|
27
28
|
defaultfor :operatingsystem => :ubuntu, :operatingsystemmajrelease => ["15.04","15.10","16.04","16.10"]
|
28
29
|
defaultfor :operatingsystem => :cumuluslinux, :operatingsystemmajrelease => ["3"]
|
@@ -12,7 +12,7 @@ Puppet::Type.type(:service).provide :upstart, :parent => :debian do
|
|
12
12
|
confine :any => [
|
13
13
|
Facter.value(:operatingsystem) == 'Ubuntu',
|
14
14
|
(Facter.value(:osfamily) == 'RedHat' and Facter.value(:operatingsystemrelease) =~ /^6\./),
|
15
|
-
Facter.value(:operatingsystem) == 'Amazon',
|
15
|
+
(Facter.value(:operatingsystem) == 'Amazon' and Facter.value(:operatingsystemmajrelease) =~ /\d{4}/),
|
16
16
|
Facter.value(:operatingsystem) == 'LinuxMint',
|
17
17
|
]
|
18
18
|
|
@@ -139,8 +139,10 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
|
|
139
139
|
def get_arguments(key, value, mapping, objectinfo)
|
140
140
|
# In the case of attributes, return a list of key=vlaue
|
141
141
|
if key == :attributes
|
142
|
-
|
143
|
-
|
142
|
+
unless value and value.is_a? Hash
|
143
|
+
raise Puppet::Error, _("Attributes must be a list of pairs key=value on %{class_name}[%{resource_name}]") %
|
144
|
+
{ class_name: @resource.class.name, resource_name: @resource.name }
|
145
|
+
end
|
144
146
|
return value.map { |k,v| k.to_s.strip + "=" + v.to_s.strip}
|
145
147
|
end
|
146
148
|
|
@@ -169,9 +171,11 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
|
|
169
171
|
def verify_group(value)
|
170
172
|
if value.is_a? Integer
|
171
173
|
groupname = groupname_by_id(value)
|
172
|
-
|
174
|
+
#TRANSLATORS 'AIX' is the name of the operating system and should not be translated
|
175
|
+
raise ArgumentError, _("AIX group must be a valid existing group") unless groupname
|
173
176
|
else
|
174
|
-
|
177
|
+
#TRANSLATORS 'AIX' is the name of the operating system and should not be translated
|
178
|
+
raise ArgumentError, _("AIX group must be a valid existing group") unless groupid_by_name(value)
|
175
179
|
groupname = value
|
176
180
|
end
|
177
181
|
groupname
|
@@ -207,8 +211,11 @@ Puppet::Type.type(:user).provide :aix, :parent => Puppet::Provider::AixObject do
|
|
207
211
|
#expiry_date = d.strftime("%Y-%m-%d")
|
208
212
|
expiry_date = "20#{$5}-#{$1}-#{$2}"
|
209
213
|
else
|
210
|
-
|
211
|
-
|
214
|
+
unless value == '0'
|
215
|
+
#TRANSLATORS 'AIX' is the name of an operating system and should not be translated
|
216
|
+
Puppet.warn(_("Could not convert AIX expires date '%{value}' on %{class_name}[%{resource_name}]") %
|
217
|
+
{ value: value, class_name: @resource.class.name, resource_name: @resource.name })
|
218
|
+
end
|
212
219
|
expiry_date = :absent
|
213
220
|
end
|
214
221
|
expiry_date
|
@@ -46,7 +46,8 @@ Puppet::Type.type(:user).provide :openbsd, :parent => :useradd do
|
|
46
46
|
begin
|
47
47
|
return unmunge(shadow_property, ent.send(method))
|
48
48
|
rescue => detail
|
49
|
-
|
49
|
+
#TRANSLATORS 'ruby-shadow' is a Ruby gem library
|
50
|
+
Puppet.warning _("ruby-shadow doesn't support %{method}") % { method: method }
|
50
51
|
end
|
51
52
|
end
|
52
53
|
end
|
@@ -189,7 +189,8 @@ Puppet::Type.type(:yumrepo).provide(:inifile) do
|
|
189
189
|
inifile.each_file do |file|
|
190
190
|
current_mode = Puppet::FileSystem.stat(file).mode & 0777
|
191
191
|
unless current_mode == target_mode
|
192
|
-
resource.info "changing mode of
|
192
|
+
resource.info _("changing mode of %{file} from %{current_mode} to %{target_mode}") %
|
193
|
+
{ file: file, current_mode: "%03o" % current_mode, target_mode: "%03o" % target_mode }
|
193
194
|
Puppet::FileSystem.chmod(target_mode, file)
|
194
195
|
end
|
195
196
|
end
|
@@ -81,7 +81,7 @@ Puppet::Type.type(:zone).provide(:solaris) do
|
|
81
81
|
elsif interface
|
82
82
|
"remove net physical=#{interface}"
|
83
83
|
else
|
84
|
-
raise ArgumentError, "can not remove network based on default router"
|
84
|
+
raise ArgumentError, _("can not remove network based on default router")
|
85
85
|
end
|
86
86
|
else self.fail action
|
87
87
|
end
|
@@ -155,7 +155,7 @@ Puppet::Type.type(:zone).provide(:solaris) do
|
|
155
155
|
command = "#{command(:cfg)} -z #{@resource[:name]} -f -"
|
156
156
|
r = exec_cmd(:cmd => command, :input => str)
|
157
157
|
if r[:exit] != 0 or r[:out] =~ /not allowed/
|
158
|
-
raise ArgumentError, "Failed to apply configuration"
|
158
|
+
raise ArgumentError, _("Failed to apply configuration")
|
159
159
|
end
|
160
160
|
end
|
161
161
|
|
@@ -48,7 +48,7 @@ config = Puppet::Util::Reference.newreference(:configuration, :depth => 1, :doc
|
|
48
48
|
end
|
49
49
|
|
50
50
|
config.header = <<EOT
|
51
|
-
## Configuration
|
51
|
+
## Configuration settings
|
52
52
|
|
53
53
|
* Each of these settings can be specified in `puppet.conf` or on the
|
54
54
|
command line.
|
@@ -67,6 +67,8 @@ config.header = <<EOT
|
|
67
67
|
combined with other units, and defaults to seconds when omitted. Examples are
|
68
68
|
'3600' which is equivalent to '1h' (one hour), and '1825d' which is equivalent
|
69
69
|
to '5y' (5 years).
|
70
|
+
* If you use the `splay` setting, note that the period that it waits changes
|
71
|
+
each time the Puppet agent is restarted.
|
70
72
|
* Settings that take a single file or directory can optionally set the owner,
|
71
73
|
group, and mode for their value: `rundir = $vardir/run { owner = puppet,
|
72
74
|
group = puppet, mode = 644 }`
|
@@ -75,7 +77,7 @@ config.header = <<EOT
|
|
75
77
|
|
76
78
|
See the [configuration guide][confguide] for more details.
|
77
79
|
|
78
|
-
[confguide]: https://
|
80
|
+
[confguide]: https://puppet.com/docs/puppet/latest/config_about_settings.html
|
79
81
|
|
80
82
|
* * *
|
81
83
|
|
data/lib/puppet/relationship.rb
CHANGED
@@ -30,7 +30,8 @@ class Puppet::Relationship
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def event=(event)
|
33
|
-
|
33
|
+
#TRANSLATORS 'NONE' should not be translated
|
34
|
+
raise ArgumentError, _("You must pass a callback for non-NONE events") if event != :NONE and ! callback
|
34
35
|
@event = event
|
35
36
|
end
|
36
37
|
|
data/lib/puppet/reports/store.rb
CHANGED
@@ -61,7 +61,7 @@ Puppet::Reports.register_report(:store) do
|
|
61
61
|
|
62
62
|
def validate_host(host)
|
63
63
|
if host =~ Regexp.union(/[#{SEPARATOR}]/, /\A\.\.?\Z/)
|
64
|
-
raise ArgumentError, "Invalid node name
|
64
|
+
raise ArgumentError, _("Invalid node name %{host}") % { host: host.inspect }
|
65
65
|
end
|
66
66
|
end
|
67
67
|
module_function :validate_host
|
data/lib/puppet/resource.rb
CHANGED
@@ -251,8 +251,10 @@ class Puppet::Resource
|
|
251
251
|
@sensitive_parameters.replace(type.sensitive_parameters)
|
252
252
|
else
|
253
253
|
if type.is_a?(Hash)
|
254
|
-
|
255
|
-
|
254
|
+
#TRANSLATORS 'Puppet::Resource.new' should not be translated
|
255
|
+
raise ArgumentError, _("Puppet::Resource.new does not take a hash as the first argument.") + ' ' +
|
256
|
+
_("Did you mean (%{type}, %{title}) ?") %
|
257
|
+
{ type: (type[:type] || type["type"]).inspect, title: (type[:title] || type["title"]).inspect }
|
256
258
|
end
|
257
259
|
|
258
260
|
environment = attributes[:environment]
|
@@ -289,9 +291,9 @@ class Puppet::Resource
|
|
289
291
|
|
290
292
|
if strict? && rt.nil?
|
291
293
|
if self.class?
|
292
|
-
raise ArgumentError, "Could not find declared class
|
294
|
+
raise ArgumentError, _("Could not find declared class %{title}") % { title: title }
|
293
295
|
else
|
294
|
-
raise ArgumentError, "Invalid resource type
|
296
|
+
raise ArgumentError, _("Invalid resource type %{type}") % { type: type }
|
295
297
|
end
|
296
298
|
end
|
297
299
|
|
@@ -588,7 +590,7 @@ class Puppet::Resource
|
|
588
590
|
elsif argtitle.nil? && argtype =~ /^([^\[\]]+)\[(.+)\]$/m then [ $1, $2 ]
|
589
591
|
elsif argtitle then [ argtype, argtitle ]
|
590
592
|
elsif argtype.is_a?(Puppet::Type) then [ argtype.class.name, argtype.title ]
|
591
|
-
else raise ArgumentError, "No title provided and
|
593
|
+
else raise ArgumentError, _("No title provided and %{type} is not a valid resource reference") % { type: argtype.inspect }
|
592
594
|
end
|
593
595
|
end
|
594
596
|
private_class_method :extract_type_and_title
|
@@ -23,7 +23,8 @@ module Puppet::Resource::CapabilityFinder
|
|
23
23
|
# @return [Puppet::Resource,nil] The found capability resource or `nil` if it could not be found
|
24
24
|
def self.find(environment, code_id, cap)
|
25
25
|
unless Puppet::Util.const_defined?('Puppetdb')
|
26
|
-
|
26
|
+
#TRANSLATOR PuppetDB is a product name and should not be translated
|
27
|
+
raise Puppet::DevError, _('PuppetDB is not available')
|
27
28
|
end
|
28
29
|
|
29
30
|
resources = search(nil, nil, cap)
|
@@ -40,10 +41,11 @@ module Puppet::Resource::CapabilityFinder
|
|
40
41
|
elsif code_id_resource = disambiguate_by_code_id(environment, code_id, cap)
|
41
42
|
resource_hash = code_id_resource
|
42
43
|
else
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
44
|
+
#TRANSLATOR PuppetDB is a product name and should not be translated
|
45
|
+
message = _("Unexpected response from PuppetDB when looking up %{capability}:") % { capability: cap }
|
46
|
+
message += "\n" + _("expected exactly one resource but got %{count};") % { count: resources.size }
|
47
|
+
message += "\n" + _("returned data is:\n%{resources}") % { resources: resources.inspect }
|
48
|
+
raise Puppet::DevError, message
|
47
49
|
end
|
48
50
|
|
49
51
|
if resource_hash
|
@@ -72,7 +74,8 @@ module Puppet::Resource::CapabilityFinder
|
|
72
74
|
['=', 'code_id', code_id]]]]
|
73
75
|
end
|
74
76
|
|
75
|
-
|
77
|
+
#TRANSLATOR PuppetDB is a product name and should not be translated
|
78
|
+
Puppet.notice _("Looking up capability %{capability} in PuppetDB: %{query_terms}") % { capability: cap, query_terms: query_terms }
|
76
79
|
|
77
80
|
query_puppetdb(query_terms)
|
78
81
|
end
|
@@ -95,15 +98,15 @@ module Puppet::Resource::CapabilityFinder
|
|
95
98
|
# The format of the response body is documented at
|
96
99
|
# https://docs.puppetlabs.com/puppetdb/3.0/api/query/v4/resources.html#response-format
|
97
100
|
unless result.is_a?(Array)
|
98
|
-
|
99
|
-
"Unexpected response from PuppetDB when looking up
|
100
|
-
|
101
|
+
#TRANSLATOR PuppetDB is a product name and should not be translated
|
102
|
+
raise Puppet::DevError, _("Unexpected response from PuppetDB when looking up %{capability}: expected an Array but got %{result}") %
|
103
|
+
{ capability: cap, result: result.inspect }
|
101
104
|
end
|
102
105
|
|
103
106
|
result
|
104
107
|
rescue JSON::JSONError => e
|
105
|
-
|
106
|
-
|
108
|
+
#TRANSLATOR PuppetDB is a product name and should not be translated
|
109
|
+
raise Puppet::DevError, _("Invalid JSON from PuppetDB when looking up %{capability}\n%{detail}") % { capability: cap, detail: e }
|
107
110
|
end
|
108
111
|
end
|
109
112
|
|
@@ -100,7 +100,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
100
100
|
resources.each do |resource|
|
101
101
|
other_title_key = title_key_for_ref(other.ref)
|
102
102
|
idx = @resources.index(other_title_key)
|
103
|
-
|
103
|
+
if idx.nil?
|
104
|
+
raise ArgumentError, _("Cannot add resource %{resource_1} before %{resource_2} because %{resource_2} is not yet in the catalog") %
|
105
|
+
{ resource_1: resource.ref, resource_2: other.ref }
|
106
|
+
end
|
104
107
|
add_one_resource(resource, idx)
|
105
108
|
end
|
106
109
|
end
|
@@ -112,7 +115,10 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
112
115
|
resources.each do |resource|
|
113
116
|
other_title_key = title_key_for_ref(other.ref)
|
114
117
|
idx = @resources.index(other_title_key)
|
115
|
-
|
118
|
+
if idx.nil?
|
119
|
+
raise ArgumentError, _("Cannot add resource %{resource_1} after %{resource_2} because %{resource_2} is not yet in the catalog") %
|
120
|
+
{ resource_1: resource.ref, resource_2: other.ref }
|
121
|
+
end
|
116
122
|
add_one_resource(resource, idx+1)
|
117
123
|
end
|
118
124
|
end
|
@@ -193,10 +199,17 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
193
199
|
# isn't sufficient.
|
194
200
|
if existing = @resource_table[newref]
|
195
201
|
return if existing == resource
|
196
|
-
resource_declaration =
|
197
|
-
|
198
|
-
|
199
|
-
|
202
|
+
resource_declaration = Puppet::Util::Errors.error_location(resource.file, resource.line)
|
203
|
+
msg = if resource_declaration.empty?
|
204
|
+
#TRANSLATORS 'alias' should not be translated
|
205
|
+
_("Cannot alias %{resource} to %{key}; resource %{newref} already declared") %
|
206
|
+
{ resource: ref, key: key.inspect, newref: newref.inspect }
|
207
|
+
else
|
208
|
+
#TRANSLATORS 'alias' should not be translated
|
209
|
+
_("Cannot alias %{resource} to %{key} at %{resource_declaration}; resource %{newref} already declared") %
|
210
|
+
{ resource: ref, key: key.inspect, resource_declaration: resource_declaration, newref: newref.inspect }
|
211
|
+
end
|
212
|
+
msg += Puppet::Util::Errors.error_location_with_space(existing.file, existing.line)
|
200
213
|
raise ArgumentError, msg
|
201
214
|
end
|
202
215
|
@resource_table[newref] = resource
|
@@ -271,7 +284,7 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
271
284
|
# Create a new resource and register it in the catalog.
|
272
285
|
def create_resource(type, options)
|
273
286
|
unless klass = Puppet::Type.type(type)
|
274
|
-
raise ArgumentError, "Unknown resource type
|
287
|
+
raise ArgumentError, _("Unknown resource type %{type}") % { type: type }
|
275
288
|
end
|
276
289
|
return unless resource = klass.new(options)
|
277
290
|
|
@@ -433,12 +446,14 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
433
446
|
edges.each do |edge_hash|
|
434
447
|
edge = Puppet::Relationship.from_data_hash(edge_hash)
|
435
448
|
unless source = result.resource(edge.source)
|
436
|
-
raise ArgumentError, "Could not intern from data: Could not find relationship source
|
449
|
+
raise ArgumentError, _("Could not intern from data: Could not find relationship source %{source} for %{target}") %
|
450
|
+
{ source: edge.source.inspect, target: edge.target.to_s }
|
437
451
|
end
|
438
452
|
edge.source = source
|
439
453
|
|
440
454
|
unless target = result.resource(edge.target)
|
441
|
-
raise ArgumentError, "Could not intern from data: Could not find relationship target
|
455
|
+
raise ArgumentError, _("Could not intern from data: Could not find relationship target %{target} for %{source}") %
|
456
|
+
{ target: edge.target.inspect, source: edge.source.to_s }
|
442
457
|
end
|
443
458
|
edge.target = target
|
444
459
|
|
@@ -572,7 +587,7 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
572
587
|
when "random"
|
573
588
|
Puppet::Graph::RandomPrioritizer.new
|
574
589
|
else
|
575
|
-
raise Puppet::DevError, "Unknown ordering type
|
590
|
+
raise Puppet::DevError, _("Unknown ordering type %{ordering}") % { ordering: Puppet[:ordering] }
|
576
591
|
end
|
577
592
|
end
|
578
593
|
|
@@ -591,12 +606,12 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
591
606
|
return unless existing_resource = @resource_table[title_key]
|
592
607
|
|
593
608
|
# If we've gotten this far, it's a real conflict
|
594
|
-
|
595
|
-
|
596
|
-
|
597
|
-
|
598
|
-
|
599
|
-
|
609
|
+
error_location_str = Puppet::Util::Errors.error_location(existing_resource.file, existing_resource.line)
|
610
|
+
msg = if error_location_str.empty?
|
611
|
+
_("Duplicate declaration: %{resource} is already declared; cannot redeclare") % { resource: resource.ref }
|
612
|
+
else
|
613
|
+
_("Duplicate declaration: %{resource} is already declared at %{error_location}; cannot redeclare") % { resource: resource.ref, error_location: error_location_str }
|
614
|
+
end
|
600
615
|
raise DuplicateResourceError.new(msg, resource.file, resource.line)
|
601
616
|
end
|
602
617
|
|
@@ -643,11 +658,11 @@ class Puppet::Resource::Catalog < Puppet::Graph::SimpleGraph
|
|
643
658
|
next if block_given? and yield edge.target
|
644
659
|
|
645
660
|
unless source = map[edge.source.ref]
|
646
|
-
raise Puppet::DevError, "Could not find resource
|
661
|
+
raise Puppet::DevError, _("Could not find resource %{resource} when converting %{message} resources") % { resource: edge.source.ref, message: message }
|
647
662
|
end
|
648
663
|
|
649
664
|
unless target = map[edge.target.ref]
|
650
|
-
raise Puppet::DevError, "Could not find resource
|
665
|
+
raise Puppet::DevError, _("Could not find resource %{resource} when converting %{message} resources") % { resource: edge.target.ref, message: message }
|
651
666
|
end
|
652
667
|
|
653
668
|
result.add_edge(source, target, edge.label)
|
data/lib/puppet/resource/type.rb
CHANGED
@@ -140,7 +140,7 @@ class Puppet::Resource::Type
|
|
140
140
|
|
141
141
|
def initialize(type, name, options = {})
|
142
142
|
@type = type.to_s.downcase.to_sym
|
143
|
-
raise ArgumentError, "Invalid resource supertype '
|
143
|
+
raise ArgumentError, _("Invalid resource supertype '%{type}'") % { type: type } unless RESOURCE_KINDS.include?(@type)
|
144
144
|
|
145
145
|
name = convert_from_ast(name) if name.is_a?(Puppet::Parser::AST::HostName)
|
146
146
|
|
@@ -223,7 +223,7 @@ class Puppet::Resource::Type
|
|
223
223
|
resource_type =
|
224
224
|
case type
|
225
225
|
when :definition
|
226
|
-
raise ArgumentError, 'Cannot create resources for defined resource types'
|
226
|
+
raise ArgumentError, _('Cannot create resources for defined resource types')
|
227
227
|
when :hostclass
|
228
228
|
:class
|
229
229
|
when :node
|
@@ -420,10 +420,10 @@ class Puppet::Resource::Type
|
|
420
420
|
name_to_type_hash.each do |name, t|
|
421
421
|
# catch internal errors
|
422
422
|
unless @arguments.include?(name)
|
423
|
-
raise Puppet::DevError, "Parameter '
|
423
|
+
raise Puppet::DevError, _("Parameter '%{name}' is given a type, but is not a valid parameter.") % { name: name }
|
424
424
|
end
|
425
425
|
unless t.is_a? Puppet::Pops::Types::PAnyType
|
426
|
-
raise Puppet::DevError, "Parameter '
|
426
|
+
raise Puppet::DevError, _("Parameter '%{name}' is given a type that is not a Puppet Type, got %{class_name}") % { name: name, class_name: t.class }
|
427
427
|
end
|
428
428
|
@argument_types[name] = t
|
429
429
|
end
|
@@ -463,7 +463,7 @@ class Puppet::Resource::Type
|
|
463
463
|
end
|
464
464
|
|
465
465
|
def parent_scope(scope, klass)
|
466
|
-
scope.class_scope(klass) || raise(Puppet::DevError, "Could not find scope for
|
466
|
+
scope.class_scope(klass) || raise(Puppet::DevError, _("Could not find scope for %{class_name}") % { class_name: klass.name })
|
467
467
|
end
|
468
468
|
|
469
469
|
def set_name_and_namespace(name)
|
data/lib/puppet/settings.rb
CHANGED
@@ -256,7 +256,7 @@ class Puppet::Settings
|
|
256
256
|
end
|
257
257
|
|
258
258
|
def initialize_global_settings(args = [])
|
259
|
-
raise Puppet::DevError, "Attempting to initialize global default settings more than once!" if global_defaults_initialized?
|
259
|
+
raise Puppet::DevError, _("Attempting to initialize global default settings more than once!") if global_defaults_initialized?
|
260
260
|
|
261
261
|
# The first two phases of the lifecycle of a puppet application are:
|
262
262
|
# 1) Parse the command line options and handle any of them that are
|
@@ -686,7 +686,7 @@ class Puppet::Settings
|
|
686
686
|
|
687
687
|
if type = hash[:type]
|
688
688
|
unless klass = SETTING_TYPES[type]
|
689
|
-
raise ArgumentError, "Invalid setting type '
|
689
|
+
raise ArgumentError, _("Invalid setting type '%{type}'") % { type: type }
|
690
690
|
end
|
691
691
|
hash.delete(:type)
|
692
692
|
else
|
@@ -830,7 +830,7 @@ class Puppet::Settings
|
|
830
830
|
when :environment
|
831
831
|
ValuesFromEnvironmentConf.new(source.name)
|
832
832
|
else
|
833
|
-
raise
|
833
|
+
raise Puppet::DevError, _("Unknown searchpath case: %{source_type} for the %{source} settings path element.") % { source_type: source.type, source: source}
|
834
834
|
end
|
835
835
|
end
|
836
836
|
|
@@ -892,16 +892,16 @@ class Puppet::Settings
|
|
892
892
|
section = section.to_sym
|
893
893
|
call = []
|
894
894
|
defs.each do |name, hash|
|
895
|
-
raise ArgumentError, "setting definition for '
|
895
|
+
raise ArgumentError, _("setting definition for '%{name}' is not a hash!") % { name: name } unless hash.is_a? Hash
|
896
896
|
|
897
897
|
name = name.to_sym
|
898
898
|
hash[:name] = name
|
899
899
|
hash[:section] = section
|
900
|
-
raise ArgumentError, "Setting
|
900
|
+
raise ArgumentError, _("Setting %{name} is already defined") % { name: name } if @config.include?(name)
|
901
901
|
tryconfig = newsetting(hash)
|
902
902
|
if short = tryconfig.short
|
903
903
|
if other = @shortnames[short]
|
904
|
-
raise ArgumentError, "Setting
|
904
|
+
raise ArgumentError, _("Setting %{name} is already using short name '%{short}'") % { name: other.name, short: short }
|
905
905
|
end
|
906
906
|
@shortnames[short] = tryconfig
|
907
907
|
end
|
@@ -1158,9 +1158,14 @@ Generated on #{Time.now}.
|
|
1158
1158
|
msg << " #{ref}" if ref
|
1159
1159
|
Puppet.deprecation_warning(msg)
|
1160
1160
|
when setting.completely_deprecated?
|
1161
|
-
|
1161
|
+
message = _("Setting %{name} is deprecated.") % { name: name }
|
1162
|
+
message += " #{ref}"
|
1163
|
+
Puppet.deprecation_warning(message, "setting-#{name}")
|
1162
1164
|
when setting.allowed_on_commandline?
|
1163
|
-
|
1165
|
+
#TRANSLATORS 'puppet.conf' is a file name and should not be translated
|
1166
|
+
message = _("Setting %{name} is deprecated in puppet.conf.") % { name: name }
|
1167
|
+
message += " #{ref}"
|
1168
|
+
Puppet.deprecation_warning(message, "puppet-conf-setting-#{name}")
|
1164
1169
|
end
|
1165
1170
|
end
|
1166
1171
|
|
@@ -1304,7 +1309,7 @@ Generated on #{Time.now}.
|
|
1304
1309
|
rescue InterpolationError => err
|
1305
1310
|
# This happens because we don't have access to the param name when the
|
1306
1311
|
# exception is originally raised, but we want it in the message
|
1307
|
-
raise InterpolationError, "Error converting value for param '
|
1312
|
+
raise InterpolationError, _("Error converting value for param '%{name}': %{detail}") % { name: name, detail: err }, err.backtrace
|
1308
1313
|
end
|
1309
1314
|
|
1310
1315
|
setting.munge(val)
|
@@ -1333,7 +1338,7 @@ Generated on #{Time.now}.
|
|
1333
1338
|
elsif !(pval = interpolate(varname.to_sym)).nil?
|
1334
1339
|
pval
|
1335
1340
|
else
|
1336
|
-
raise InterpolationError, "Could not find value for
|
1341
|
+
raise InterpolationError, _("Could not find value for %{expression}") % { expression: expression }
|
1337
1342
|
end
|
1338
1343
|
else
|
1339
1344
|
failed_environment_interpolation = true
|
@@ -1342,7 +1347,9 @@ Generated on #{Time.now}.
|
|
1342
1347
|
interpolated_expression
|
1343
1348
|
end
|
1344
1349
|
if failed_environment_interpolation
|
1345
|
-
|
1350
|
+
#TRANSLATORS '$environment' is a Puppet specific variable and should not be translated
|
1351
|
+
Puppet.warning(_("You cannot interpolate $environment within '%{setting_name}' when using directory environments.") % { setting_name: setting_name } +
|
1352
|
+
' ' + _("Its value will remain %{value}.") % { value: interpolated_value })
|
1346
1353
|
end
|
1347
1354
|
interpolated_value
|
1348
1355
|
else
|
@@ -1373,8 +1380,7 @@ Generated on #{Time.now}.
|
|
1373
1380
|
default = @defaults[name]
|
1374
1381
|
|
1375
1382
|
if !default
|
1376
|
-
raise ArgumentError,
|
1377
|
-
"Attempt to assign a value to unknown setting #{name.inspect}"
|
1383
|
+
raise ArgumentError, _("Attempt to assign a value to unknown setting %{name}") % { name: name.inspect }
|
1378
1384
|
end
|
1379
1385
|
|
1380
1386
|
# This little exception-handling dance ensures that a hook is
|