{"record":{"id":"9b529f6fe4fe080b","repo":"puppetlabs/puppet","slug":"could-not-action-module-name-version-9b529f","errorCode":null,"errorMessage":"Could not %{action} '%{module_name}' (%{version}); no version satisfies all dependencies","messagePattern":"Could not %(.+?) '%(.+?)' \\(%(.+?)\\); no version satisfies all dependencies","errorType":"exception","errorClass":"Puppet::ModuleTool::Errors::NoVersionsSatisfyError","httpStatus":null,"severity":"error","filePath":"lib/puppet/module_tool/applications/upgrader.rb","lineNumber":148,"sourceCode":"            graph.add_constraint('installed', installed_module, installed_range) do |node|\n              Puppet::Module.parse_range(installed_range).include? node.version\n            end\n\n            release.mod.dependencies.each do |dep|\n              dep_name = dep['name'].tr('/', '-')\n\n              range = dep['version_requirement']\n              graph.add_constraint(\"#{installed_module} constraint\", dep_name, range) do |node|\n                Puppet::Module.parse_range(range).include? node.version\n              end\n            end\n          end\n\n          begin\n            Puppet.info _(\"Resolving dependencies ...\")\n            releases = SemanticPuppet::Dependency.resolve(graph)\n          rescue SemanticPuppet::Dependency::UnsatisfiableGraph\n            raise NoVersionsSatisfyError, results.merge(:requested_name => name)\n          end\n\n          releases.each do |rel|\n            mod = installed_modules_source.by_name[rel.name.split('-').last]\n            next unless mod\n            next if mod.has_metadata? && mod.forge_name.tr('/', '-') == rel.name\n\n            if rel.name != name\n              dependency = {\n                :name => rel.name,\n                :version => rel.version\n              }\n            end\n\n            raise InstallConflictError,\n                  :requested_module => name,\n                  :requested_version => options[:version] || 'latest',\n                  :dependency => dependency,","sourceCodeStart":130,"sourceCodeEnd":166,"githubUrl":"https://github.com/puppetlabs/puppet/blob/e227c27540975c25aa22d533a52424a9d2fc886a/lib/puppet/module_tool/applications/upgrader.rb#L130-L166","documentation":"Raised by the Upgrader as Puppet::ModuleTool::Errors::NoVersionsSatisfyError when SemanticPuppet::Dependency.resolve throws UnsatisfiableGraph: no assignment of versions can satisfy every constraint in the dependency graph at once. The graph includes constraints from all installed modules' dependencies plus pinned versions (add_module_name_constraints_to_graph pins each installed module to its current version unless --force), so a single incompatible dependent module blocks the upgrade.","triggerScenarios":"Running `puppet module upgrade A` where A's newer releases require B >= 3.0, but an installed module C declares B < 3.0 in its metadata.json, and C is pinned to its installed version because --force was not given.","commonSituations":"Classic dependency hell between Forge modules (stdlib/translate/concat pins); an old module left in the environment pinning a shared dependency; upgrading one member of a tightly coupled set (e.g. puppetlabs-* profile modules) in isolation.","solutions":["Retry with `puppet module upgrade <name> --force` to relax the installed-version pinning constraints","Upgrade the conflicting dependents together in one pass so their constraints move in sync","Use `puppet module list --tree` to find which installed module pins the conflicting dependency, and upgrade or uninstall it","If a stale module no longer needs to be installed, uninstall it to remove its constraint from the graph"],"exampleFix":"# before\n$ puppet module upgrade puppetlabs-apache\n# Error: 'puppetlabs-apache' (latest) requested; no version satisfies all dependencies\n\n# after\n$ puppet module upgrade puppetlabs-apache --force","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"begin\n  result = Puppet::ModuleTool::Applications::Upgrader.new(name, options).run\nrescue Puppet::ModuleTool::Errors::NoVersionsSatisfyError => e\n  # escalate to force (drops installed-version pinning) or report the conflicting graph\n  Puppet::ModuleTool::Applications::Upgrader.new(name, options.merge(force: true)).run\nend","preventionTips":["Upgrade tightly coupled module sets together instead of one at a time","Keep dependents' metadata.json version_requirement ranges wide enough to admit shared-dependency upgrades","Prune abandoned modules from environments — stale pins are the usual unsatisfiable-graph culprit","Reproduce resolution locally with SemanticPuppet before proposing big jumps in code review"],"tags":["puppet","module-tool","upgrade","dependency-resolution","semver","constraint-graph"],"backgroundTag":"unsatisfiable-dependency-graph","analyzedSha":"e227c27540975c25aa22d533a52424a9d2fc886a","analyzedAt":"2026-08-21T20:49:46.650Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}