hashicorp/vagrant · error · VagrantPlugins::AtlasPush::Errors::UploaderNotFound
Vagrant was unable to find the Atlas uploader CLI. If your V
Error message
Vagrant was unable to find the Atlas uploader CLI. If your Vagrantfile specifies the path explicitly with "uploader_path", then make sure that path is valid. Otherwise, make sure that you have a valid install of Vagrant. If you installed Vagrant outside of the official installers, the "atlas-upload" binary must exist on your PATH.
What it means
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.
Source
Thrown at plugins/pushes/atlas/push.rb:17
# Copyright IBM Corp. 2010, 2025
# SPDX-License-Identifier: BUSL-1.1
require "vagrant/util/safe_exec"
require "vagrant/util/subprocess"
require "vagrant/util/which"
module VagrantPlugins
module AtlasPush
class Push < Vagrant.plugin("2", :push)
UPLOADER_BIN = "atlas-upload".freeze
def push
uploader = self.uploader_path
# If we didn't find the uploader binary it is a critical error
raise Errors::UploaderNotFound if !uploader
# We found it. Build up the command and the args.
execute(uploader)
return 0
end
# Executes the uploader with the proper flags based on the configuration.
# This function shouldn't return since it will exec, but might return
# if we're on a system that doesn't support exec, so handle that properly.
def execute(uploader)
cmd = []
cmd << "-debug" if !Vagrant.log_level.nil?
cmd << "-vcs" if config.vcs
cmd += config.includes.map { |v| ["-include", v] }
cmd += config.excludes.map { |v| ["-exclude", v] }
cmd += metadata.map { |k,v| ["-metadata", "#{k}=#{v}"] }
cmd += ["-address", config.address] if config.address
cmd += ["-token", config.token] if config.tokenView on GitHub (pinned to 35f3160f4a)
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
Example fix
# before config.push.define "atlas" do |p| p.app = "mycorp/myapp" # no uploader anywhere -> UploaderNotFound end # after config.push.define "heroku" do |p| p.app = "mycorp-myapp" end
Defensive patterns
Strategy: validation
Validate before calling
# wrapper check before `vagrant push`
abort "atlas-upload not found" if Vagrant::Util::Which.which("atlas-upload").nil? Type guard
def atlas_push_ready?(config)
path = config.uploader_path || Vagrant::Util::Which.which("atlas-upload")
!path.nil? && File.executable?(path)
end Try / catch
begin env.cli(%w(push atlas)) rescue VagrantPlugins::AtlasPush::Errors::UploaderNotFound abort "Set uploader_path in the push block or install atlas-upload" end
Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- The Git binary '%{bin}' could not be found. Please ensure yo
- The following path is not a valid Git repository: %{pat
- The following command exited with a non-zero exit status:
- The push strategy '%{name}' is not defined in the Vagrantfil
- There are no push strategies named '%{name}'. Please make su
AI-assisted analysis of hashicorp/vagrant@35f3160f4a (2026-08-21).
Data as JSON: /api/errors/c013b98d6874da38.
Report an issue: GitHub.