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

The provisioner '%{name}' doesn't support provisioning on Wi

Error message

The provisioner '%{name}' doesn't support provisioning on
Windows guests via WinRM. This is likely not a limitation
of the provisioner itself but rather that Vagrant doesn't know
how to run this provisioner over WinRM.

If you'd like this provisioner to work over WinRM, please
take a look at the Vagrant source code linked below and try
to contribute back support. Thank you!

https://github.com/hashicorp/vagrant

What it means

The Salt provisioner raises Vagrant::Errors::ProvisionerWinRMUnsupported when the Vagrantfile enables install_master on a machine whose communicator is :winrm. The check fires in provision before any binaries are staged: running a Salt master over WinRM is unimplemented, so Vagrant aborts rather than run a bootstrap that can never work. The %{name} interpolated into the message is "salt.install_master".

Source

Thrown at plugins/provisioners/salt/provisioner.rb:67

      end

      def binaries_found
        if @machine.config.vm.communicator == :winrm
          which_cmd = "Get-Command"
        else
          which_cmd = "which"
        end

        ## Determine States, ie: install vs configure
        desired_binaries = []
        if !@config.no_minion
          desired_binaries.push('salt-minion')
          desired_binaries.push('salt-call')
        end

        if @config.install_master
          if @machine.config.vm.communicator == :winrm
            raise Vagrant::Errors::ProvisionerWinRMUnsupported,
              name: "salt.install_master"
          else
            desired_binaries.push('salt-master')
          end
        end

        if @config.install_syndic
          if @machine.config.vm.communicator == :winrm
            raise Vagrant::Errors::ProvisionerWinRMUnsupported,
              name: "salt.install_syndic"
          else
            desired_binaries.push('salt-syndic')
          end
        end

        found = true
        for binary in desired_binaries
          @machine.env.ui.info "Checking if %s is installed" % binary

View on GitHub (pinned to 35f3160f4a)

Solutions

  1. Remove install_master from the salt provisioner block for WinRM machines (Windows minions are supported; masters are not)
  2. Run the Salt master on a separate Linux VM and point the Windows minion at it via the master option in the minion config
  3. Install the Salt master manually with a shell/powershell provisioner instead of the salt provisioner
  4. Only if the guest truly runs an SSH server, set config.vm.communicator = "ssh" so the :winrm check no longer fires

Example fix

# before
config.vm.communicator = "winrm"
config.vm.provision :salt do |s|
  s.install_master = true   # -> ProvisionerWinRMUnsupported
end

# after
config.vm.communicator = "winrm"
config.vm.provision :salt do |s|
  s.minion_config = "salt/minion.conf"  # minion-only: supported over WinRM
end
Defensive patterns

Strategy: validation

Validate before calling

# Vagrantfile: gate master installs on the communicator
winrm = config.vm.communicator.to_s == "winrm"
config.vm.provision :salt do |s|
  s.install_master = !winrm
  s.minion_config = "salt/minion.conf"
end

Type guard

def salt_master_supported?(machine)
  machine.config.vm.communicator != :winrm
end

Try / catch

begin
  machine.provision
rescue Vagrant::Errors::ProvisionerWinRMUnsupported => e
  # e.extra_data[:name] == "salt.install_master"
  abort "Salt master cannot be installed over WinRM: #{e.message}"
end

Prevention

When it happens

Trigger: A Vagrantfile that sets config.vm.communicator = :winrm (or a Windows box defaulting to WinRM) combined with a salt provisioner block using install_master = true. The raise at provisioner.rb:67 fires when @machine.config.vm.communicator == :winrm, before 'salt-master' is pushed onto desired_binaries.

Common situations: Copying a Linux master+minion Salt Vagrantfile onto a Windows/WinRM guest; CI matrices that enable install_master across all platforms; switching a box from SSH to WinRM without pruning Salt master options.

Related errors


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