{"record":{"id":"2c095db35e17ecc2","repo":"puppetlabs/puppet","slug":"error-converting-value-for-param-name-deta","errorCode":null,"errorMessage":"Error converting value for param '%{name}': %{detail}","messagePattern":"Error converting value for param '%(.+?)': %(.+?)","errorType":"exception","errorClass":"Puppet::Settings::InterpolationError","httpStatus":null,"severity":"error","filePath":"lib/puppet/settings.rb","lineNumber":1500,"sourceCode":"        setting.print(val)\n      end\n    end\n\n    private\n\n    def lookup_and_convert(name, &block)\n      val = lookup(name)\n      # if we interpolate code, all hell breaks loose.\n      if name == :code\n        val\n      else\n        # Convert it if necessary\n        begin\n          val = convert(val, name)\n        rescue InterpolationError => err\n          # This happens because we don't have access to the param name when the\n          # exception is originally raised, but we want it in the message\n          raise InterpolationError, _(\"Error converting value for param '%{name}': %{detail}\") % { name: name, detail: err }, err.backtrace\n        end\n\n        yield val\n      end\n    end\n\n    def convert(value, setting_name)\n      case value\n      when nil\n        nil\n      when String\n        failed_environment_interpolation = false\n        interpolated_value = value.gsub(/\\$(\\w+)|\\$\\{(\\w+)\\}/) do |expression|\n          varname = ::Regexp.last_match(2) || ::Regexp.last_match(1)\n          interpolated_expression =\n            if varname != ENVIRONMENT_SETTING || ok_to_interpolate_environment(setting_name)\n              if varname == ENVIRONMENT_SETTING && @environment\n                @environment","sourceCodeStart":1482,"sourceCodeEnd":1518,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/settings.rb#L1482-L1518","documentation":"On the settings read path, lookup_and_convert calls convert(value, name) to expand a setting's value; if conversion raises Puppet::Settings::InterpolationError, this wrapper re-raises it with the offending parameter's name attached (the inner error has no setting context). The value of :code is passed through unconverted. The underlying cause is nearly always an unresolvable $variable inside a setting value (see the 'Could not find value for' error).","triggerScenarios":"Reading Puppet.settings[:some_setting] (or any code path that resolves settings) where the value or its default contains $var/${var} and var is not a defined setting, run_mode, or environment; CLI overrides injecting strings with $ into a setting value.","commonSituations":"Typo'd variable references in puppet.conf discovered only at runtime; settings referencing variables removed in a Puppet upgrade; templated puppet.conf deployed with unresolved placeholders.","solutions":["Take the param name from the message, locate that setting in puppet.conf (all sections plus CLI overrides), and inspect its value for $ references.","Fix the referenced name to a real setting, or declare the missing setting so interpolation can resolve it.","If the $ is literal data rather than a reference, move the value out of settings or split it so no $name token appears."],"exampleFix":"# before (puppet.conf)\n[main]\ncertdir = $ssldirf/certs   # typo: no setting named ssldirf\n\n# after\n[main]\ncertdir = $ssldir/certs","handlingStrategy":"try-catch","validationCode":"# pre-resolve every $var token in a setting value before Puppet reads it\nvalue.scan(/\\$(?:\\{(\\w+)\\}|(\\w+))/).flatten.compact.each do |name|\n  next if %w[environment run_mode].include?(name)\n  raise Puppet::Error, \"unresolvable $#{name} in setting value\" if Puppet.settings.setting(name.to_sym).nil?\nend","typeGuard":null,"tryCatchPattern":"begin\n  Puppet.settings[:mysetting]\nrescue Puppet::Settings::InterpolationError => e\n  Puppet.err(\"#{e.message} — fix the $variable in the named setting's value\")\n  raise\nend","preventionTips":["Lint generated puppet.conf for $-tokens and verify each names a real setting","Keep templates that write setting values free of unresolved placeholders","After Puppet upgrades, grep configs for interpolations of removed settings"],"tags":["puppet","settings","interpolation","interpolationerror"],"backgroundTag":"setting-interpolation-failure","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}