puppetlabs/puppet · error · ArgumentError

'%{exe}' is a %{klass}, not a file

Error message

'%{exe}' is a %{klass}, not a file

What it means

Error "'%{exe}' is a %{klass}, not a file" thrown in puppetlabs/puppet.

Source

Thrown at lib/puppet/provider/exec/posix.rb:37

    and the rest are passed as parameters to command with no shell expansion)
    This is a safer and more predictable way to execute most commands,
    but prevents the use of globbing and shell built-ins (including control
    logic like "for" and "if" statements).

    If the use of globbing and shell built-ins is desired, please check
    the `shell` provider

  EOT

  # Verify that we have the executable
  def checkexe(command)
    exe = extractexe(command)

    if File.expand_path(exe) == exe
      if !Puppet::FileSystem.exist?(exe)
        raise ArgumentError, _("Could not find command '%{exe}'") % { exe: exe }
      elsif !File.file?(exe)
        raise ArgumentError, _("'%{exe}' is a %{klass}, not a file") % { exe: exe, klass: File.ftype(exe) }
      elsif !File.executable?(exe)
        raise ArgumentError, _("'%{exe}' is not executable") % { exe: exe }
      end

      return
    end

    if resource[:path]
      Puppet::Util.withenv :PATH => resource[:path].join(File::PATH_SEPARATOR) do
        return if which(exe)
      end
    end

    # 'which' will only return the command if it's executable, so we can't
    # distinguish not found from not executable
    raise ArgumentError, _("Could not find command '%{exe}'") % { exe: exe }
  end

View on GitHub (pinned to e227c27540)

When it happens

Trigger: Thrown at lib/puppet/provider/exec/posix.rb:37 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of puppetlabs/puppet@e227c27540 (2026-08-21). Data as JSON: /api/errors/1afb38399829d296. Report an issue: GitHub.