{"record":{"id":"b030707c95586ad3","repo":"puppetlabs/puppet","slug":"more-than-one-package-with-the-specified-name-s","errorCode":null,"errorMessage":"More than one package with the specified name [%{search_value}], please use the category parameter to disambiguate","messagePattern":"More than one package with the specified name \\[%(.+?)\\], please use the category parameter to disambiguate","errorType":"exception","errorClass":"Puppet::Error","httpStatus":null,"severity":"error","filePath":"lib/puppet/provider/package/portage.rb","lineNumber":229,"sourceCode":"        if search\n          package[:version_available] = eix_get_version_for_versions(package[:installable_versions], search)\n          package[:ensure] = eix_get_version_for_versions(package[:installed_versions], search)\n        elsif qatom[:slot]\n          package[:version_available] = eix_get_version_for_slot(package[:slot_versions_available], qatom[:slot])\n          package[:ensure] = eix_get_version_for_slot(package[:installed_slots], qatom[:slot])\n        end\n\n        package[:ensure] = package[:ensure] || :absent\n        packages << package\n      end\n\n      case packages.size\n      when 0\n        raise Puppet::Error, _(\"No package found with the specified name [%{name}]\") % { name: @resource[:name] }\n      when 1\n        @eix_result = packages[0]\n      else\n        raise Puppet::Error, _(\"More than one package with the specified name [%{search_value}], please use the category parameter to disambiguate\") % { search_value: search_value }\n      end\n    rescue Puppet::ExecutionFailure => detail\n      raise Puppet::Error, detail\n    end\n  end\n\n  def latest\n    query[:version_available]\n  end\n\n  private\n\n  def eix_get_version_for_versions(versions, target)\n    # [2.7.10-r1,2.7.12,3.4.3-r1,3.4.5,3.5.2] 3.5.2\n    return nil if versions.nil?\n\n    versions = versions.split(',')\n    # [2.7.10-r1 2.7.12 3.4.3-r1 3.4.5 3.5.2]","sourceCodeStart":211,"sourceCodeEnd":247,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/provider/package/portage.rb#L211-L247","documentation":"Raised in `query` (lib/puppet/provider/package/portage.rb:229) when a bare package name (no category) matches more than one package across categories/overlays in the eix results. The provider refuses to guess and raises Puppet::Error telling you to disambiguate with the category parameter.","triggerScenarios":"`package { 'openssl': provider => portage }` on a system where the name exists as dev-libs/openssl and also via another overlay's category; any duplicated port name across overlays.","commonSituations":"Common tool names (openssl, zlib) duplicated by overlays like gentoo vs local categories; overlays that re-add system packages.","solutions":["Use the fully qualified `category/name` form in the resource title: `dev-libs/openssl`.","Run `eix --exact <name>` to list the colliding categories and pick the right one.","Prune redundant overlays if the duplication is unintended."],"exampleFix":"# before\npackage { 'openssl':\n  ensure   => installed,\n  provider => portage,\n}\n\n# after\npackage { 'dev-libs/openssl':\n  ensure   => installed,\n  provider => portage,\n}","handlingStrategy":"validation","validationCode":"# Disambiguate up front: require a category when the bare name collides\n[ \"$(eix --exact --only-name \"${name}\" | wc -l)\" -gt 1 ] && echo \"use category/name form\" || echo OK","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always use `category/name` (e.g. dev-libs/openssl) in portage resources.","Audit overlays for duplicate copies of system packages.","Automate the eix collision check in profile tests."],"tags":["gentoo","portage","eix","ambiguous-name","category"],"backgroundTag":"package-name-ambiguous","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}