{"record":{"id":"2c6a6cf8132301f3","repo":"puppetlabs/puppet","slug":"attempt-to-assign-a-value-to-unknown-setting-nam","errorCode":null,"errorMessage":"Attempt to assign a value to unknown setting %{name}","messagePattern":"Attempt to assign a value to unknown setting %(.+?)","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/puppet/settings.rb","lineNumber":1566,"sourceCode":"  class Values\n    extend Forwardable\n\n    attr_reader :name\n\n    def initialize(name, defaults)\n      @name = name\n      @values = {}\n      @defaults = defaults\n    end\n\n    def_delegator :@values, :include?\n    def_delegator :@values, :[], :lookup\n\n    def set(name, value)\n      default = @defaults[name]\n\n      unless default\n        raise ArgumentError, _(\"Attempt to assign a value to unknown setting %{name}\") % { name: name.inspect }\n      end\n\n      # This little exception-handling dance ensures that a hook is\n      # able to check whether a value for itself has been explicitly\n      # set, while still preserving the existing value if the hook\n      # throws (as was existing behavior)\n      old_value = @values[name]\n      @values[name] = value\n      begin\n        if default.has_hook?\n          default.handle(value)\n        end\n      rescue Exception => e\n        @values[name] = old_value\n        raise e\n      end\n    end\n","sourceCodeStart":1548,"sourceCodeEnd":1584,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/settings.rb#L1548-L1584","documentation":"Puppet::Settings::Values#set (the value bag bound to one config source: a section, CLI, or code) raises ArgumentError when asked to store a value for a name that has no registered default in @defaults — i.e. the setting was never declared via Puppet.settings.define_settings/newsetting. This guards programmatic assignment and config parsing from inventing settings.","triggerScenarios":"Calling Puppet.settings[:colour] = true (real name is `color`); assigning a setting that exists only in another Puppet version (e.g. manifestdir after Puppet 5 removed it); wrapper code or ERB-templated tooling setting keys by string interpolation with a typo; code that did not run its define_settings block before setting values.","commonSituations":"Upgrading/downgrading Puppet while in-house tooling still sets old names; typos in settings names in scripts; settings renamed between versions (color/colour-class mistakes); test harnesses that stub settings.","solutions":["Verify the name exists: Puppet.settings.setting(:name) (nil means unknown) or list them via Puppet.settings.all_settings.map(&:name) / `puppet config print`.","Fix the name to the current Puppet version's spelling, or gate the assignment on the Puppet version.","If the setting is genuinely new and custom, declare it first with Puppet.settings.define_settings(:section, :name => {...})."],"exampleFix":"# before\nPuppet.settings[:manifestdir] = '/etc/puppet/manifests'  # removed in newer Puppet\n\n# after\nif Puppet.settings.setting(:manifestdir)\n  Puppet.settings[:manifestdir] = '/etc/puppet/manifests'\nelse\n  Puppet.warning('manifestdir no longer exists in this Puppet version')\nend","handlingStrategy":"validation","validationCode":"raise ArgumentError, \"#{name.inspect} is not a Puppet setting\" if Puppet.settings.setting(name.to_sym).nil?\nPuppet.settings[name] = value","typeGuard":"known_setting = ->(n) { !Puppet.settings.setting(n.to_sym).nil? }","tryCatchPattern":"begin\n  Puppet.settings[name] = value\nrescue ArgumentError => e\n  raise unless e.message.include?('unknown setting')\n  Puppet.err(\"#{e.message}; valid names via `puppet config print`\")\n  raise\nend","preventionTips":["Derive setting names from Puppet.settings.all_settings.map(&:name), never hand-typed strings","Gate version-sensitive assignments on Puppet.settings.setting(name) presence","Run `puppet config print` after upgrades to catch removed/renamed settings"],"tags":["puppet","settings","unknown-setting","argumenterror"],"backgroundTag":"unknown-config-key","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}