theforeman/foreman · error · Foreman::Exception

Duplicated inputs detected: %{duplicated_inputs}

Error message

Duplicated inputs detected: %{duplicated_inputs}

What it means

Error "Duplicated inputs detected: %{duplicated_inputs}" thrown in theforeman/foreman.

Source

Thrown at app/models/template.rb:187

  def render(renderer: Foreman::Renderer, host: nil, params: {}, variables: {}, mode: Foreman::Renderer::REAL_MODE, template_input_values: {}, source_klass: nil)
    source = Foreman::Renderer.get_source(template: self, host: host, klass: source_klass)
    scope = Foreman::Renderer.get_scope(host: host, params: params, variables: variables, mode: mode, template: self, source: source, template_input_values: template_input_values)

    renderer.render(source, scope)
  end

  def dup
    dup = super
    template_inputs.each do |input|
      dup.template_inputs.build input.attributes.except('template_id', 'id', 'created_at', 'updated_at')
    end
    dup
  end

  def validate_unique_inputs!
    duplicated_inputs = template_inputs.group_by(&:name).values.select { |values| values.size > 1 }.map(&:first)
    unless duplicated_inputs.empty?
      raise Foreman::Exception.new(N_('Duplicated inputs detected: %{duplicated_inputs}'), :duplicated_inputs => duplicated_inputs.map(&:name))
    end
  end

  def sync_inputs(inputs)
    inputs ||= []
    # Build a hash where keys are input names
    inputs = inputs.inject({}) { |h, input| h.update(input['name'] => input) }

    # Sync existing inputs
    template_inputs.each do |existing_input|
      if inputs.include?(existing_input.name)
        existing_input.assign_attributes(inputs.delete(existing_input.name))
      else
        existing_input.mark_for_destruction
      end
    end

    # Create new inputs

View on GitHub (pinned to 6b05625475)

When it happens

Trigger: Thrown at app/models/template.rb:187 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of theforeman/foreman@6b05625475 (2026-08-23). Data as JSON: /api/errors/3545e64f8153eb18. Report an issue: GitHub.