{"record":{"id":"c013b98d6874da38","repo":"hashicorp/vagrant","slug":"vagrant-was-unable-to-find-the-atlas-uploader-cli","errorCode":null,"errorMessage":"Vagrant was unable to find the Atlas uploader CLI. If your Vagrantfile\nspecifies the path explicitly with \"uploader_path\", then make sure that\npath is valid. Otherwise, make sure that you have a valid install of\nVagrant. If you installed Vagrant outside of the official installers,\nthe \"atlas-upload\" binary must exist on your PATH.","messagePattern":"Vagrant was unable to find the Atlas uploader CLI\\. If your Vagrantfile\nspecifies the path explicitly with \"uploader_path\", then make sure that\npath is valid\\. Otherwise, make sure that you have a valid install of\nVagrant\\. If you installed Vagrant outside of the official installers,\nthe \"atlas-upload\" binary must exist on your PATH\\.","errorType":"exception","errorClass":"VagrantPlugins::AtlasPush::Errors::UploaderNotFound","httpStatus":null,"severity":"error","filePath":"plugins/pushes/atlas/push.rb","lineNumber":17,"sourceCode":"# Copyright IBM Corp. 2010, 2025\n# SPDX-License-Identifier: BUSL-1.1\n\nrequire \"vagrant/util/safe_exec\"\nrequire \"vagrant/util/subprocess\"\nrequire \"vagrant/util/which\"\n\nmodule VagrantPlugins\n  module AtlasPush\n    class Push < Vagrant.plugin(\"2\", :push)\n      UPLOADER_BIN = \"atlas-upload\".freeze\n\n      def push\n        uploader = self.uploader_path\n\n        # If we didn't find the uploader binary it is a critical error\n        raise Errors::UploaderNotFound if !uploader\n\n        # We found it. Build up the command and the args.\n        execute(uploader)\n        return 0\n      end\n\n      # Executes the uploader with the proper flags based on the configuration.\n      # This function shouldn't return since it will exec, but might return\n      # if we're on a system that doesn't support exec, so handle that properly.\n      def execute(uploader)\n        cmd = []\n        cmd << \"-debug\" if !Vagrant.log_level.nil?\n        cmd << \"-vcs\" if config.vcs\n        cmd += config.includes.map { |v| [\"-include\", v] }\n        cmd += config.excludes.map { |v| [\"-exclude\", v] }\n        cmd += metadata.map { |k,v| [\"-metadata\", \"#{k}=#{v}\"] }\n        cmd += [\"-address\", config.address] if config.address\n        cmd += [\"-token\", config.token] if config.token","sourceCodeStart":1,"sourceCodeEnd":35,"githubUrl":"https://github.com/hashicorp/vagrant/blob/35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5/plugins/pushes/atlas/push.rb#L1-L35","documentation":"The atlas push strategy requires the atlas-upload CLI. Push#push resolves it via uploader_path: config.uploader_path if set, else the installer's embedded bin/atlas-upload, else Which on PATH — and raises Errors::UploaderNotFound when nothing resolves. The push cannot transfer anything without that executable.","triggerScenarios":"vagrant push with strategy atlas when config.uploader_path is unset/invalid AND the binary is neither in the installer's embedded dir nor on PATH — typical for gem/zip installs of Vagrant or modern installs that no longer bundle atlas-upload.","commonSituations":"Legacy Vagrantfiles from the Atlas era (pre-2017) still carrying a config.push.define \"atlas\" block; Vagrant installed via package managers; uploader_path pointing at a moved/deleted file; Atlas/Vagrant Cloud deprecation removing the binary.","solutions":["Migrate off the atlas strategy — Atlas is deprecated/shut down; use heroku/local/ftp push or your normal deploy pipeline","If you must use it, set uploader_path in the push block to a working atlas-upload binary's absolute path","Confirm resolution with `which atlas-upload` on the host","For non-official installs, place atlas-upload on the PATH Vagrant inherits"],"exampleFix":"# before\nconfig.push.define \"atlas\" do |p|\n  p.app = \"mycorp/myapp\"   # no uploader anywhere -> UploaderNotFound\nend\n\n# after\nconfig.push.define \"heroku\" do |p|\n  p.app = \"mycorp-myapp\"\nend","handlingStrategy":"validation","validationCode":"# wrapper check before `vagrant push`\nabort \"atlas-upload not found\" if Vagrant::Util::Which.which(\"atlas-upload\").nil?","typeGuard":"def atlas_push_ready?(config)\n  path = config.uploader_path || Vagrant::Util::Which.which(\"atlas-upload\")\n  !path.nil? && File.executable?(path)\nend","tryCatchPattern":"begin\n  env.cli(%w(push atlas))\nrescue VagrantPlugins::AtlasPush::Errors::UploaderNotFound\n  abort \"Set uploader_path in the push block or install atlas-upload\"\nend","preventionTips":["Remove atlas push blocks while migrating Atlas-era projects","Always set an absolute uploader_path on non-official Vagrant installs","CI: assert the uploader resolves before invoking vagrant push"],"tags":["atlas","push","deploy","missing-binary","legacy"],"backgroundTag":"cli-executable-not-found","analyzedSha":"35f3160f4ad6edc3a9f3aa9570adfc1a4d73aaa5","analyzedAt":"2026-08-21T13:34:32.514Z","schemaVersion":2},"datasetVersion":"2026-08-21T18:17:14.833Z"}