hashicorp/vagrant · error · Vagrant::Errors::CloneMachineNotFound

The clone environment hasn't been created yet. To clone from

Error message

The clone environment hasn't been created yet. To clone from
another Vagrantfile, it must already be created with `vagrant up`.
It doesn't need to be running.

Additionally, the created environment must be started with a provider
matching this provider. For example, if you're using VirtualBox,
the clone environment must also be using VirtualBox.

What it means

With `config.vm.clone` set, Vagrant loads the master environment and asks for its primary machine under the CURRENT project's provider. CloneMachineNotFound fires when that machine has no id — the master environment exists on disk but its VM was never created (no `vagrant up` run there), or it was created under a different provider so no machine exists for this provider.

Source

Thrown at lib/vagrant/action/builtin/prepare_clone.rb:29

          @app = app
          @logger = Log4r::Logger.new("vagrant::action::vm::prepare_clone")
        end

        def call(env)
          # If we aren't cloning, then do nothing
          if !env[:machine].config.vm.clone
            return @app.call(env)
          end

          # We need to get the machine ID from this Vagrant environment
          clone_env = env[:machine].env.environment(
            env[:machine].config.vm.clone)
          raise Errors::CloneNotFound if !clone_env.root_path

          # Get the machine itself
          clone_machine = clone_env.machine(
            clone_env.primary_machine_name, env[:machine].provider_name)
          raise Errors::CloneMachineNotFound if !clone_machine.id

          # Set the ID of the master so we know what to clone from
          env[:clone_id] = clone_machine.id
          env[:clone_machine] = clone_machine

          # Continue
          @app.call(env)
        end
      end
    end
  end
end

View on GitHub (pinned to 35f3160f4a)

Solutions

  1. Create the master first: `cd <config.vm.clone path> && vagrant up` (it may be halted afterwards; it just needs to exist).
  2. Ensure provider match: bring the master up with the same provider the clone project uses, e.g. `vagrant up --provider=virtualbox`.
  3. Then re-run `vagrant up` in the cloning project.

Example fix

# before
# clone project: config.vm.clone = "../master"; master never created
vagrant up   # => CloneMachineNotFound

# after
cd ../master && vagrant up --provider=virtualbox && vagrant halt
cd - && vagrant up
Defensive patterns

Strategy: validation

Validate before calling

# Shell: verify the master env is created for this provider before upping the clone
master="$CLONE_PATH"; provider="virtualbox"
idfile=$(find "$master/.vagrant/machines" -maxdepth 3 -name id -path "*/$provider/*" 2>/dev/null | head -n1)
[ -s "$idfile" ] || { echo "master not created for $provider; run: (cd $master && vagrant up --provider=$provider)"; exit 1; }

Prevention

When it happens

Trigger: `vagrant up` in the cloning project when the master environment's primary machine `.id` is nil: master never booted, master was `vagrant destroy`ed, or master runs VirtualBox while the clone uses another provider (lib/vagrant/action/builtin/prepare_clone.rb:27-30).

Common situations: Forgetting to boot the master first; provider mismatch between the two Vagrantfiles (the error text calls this out); switching providers in the clone project without re-creating the master.

Related errors


AI-assisted analysis of hashicorp/vagrant@35f3160f4a (2026-08-21). Data as JSON: /api/errors/4c38cfcc378d0901. Report an issue: GitHub.