puppetlabs/puppet · error · ArgumentError
Invalid %{resource} provider '%{provider_class}'
Error message
Invalid %{resource} provider '%{provider_class}' What it means
Every resource type gets a provider parameter whose validate block resolves the given name through @resource.class.provider(provider_class). That lookup only returns providers that are confined/suitable on this node and actually declared; nil means the provider is unknown here, and ArgumentError 'Invalid <type> provider <name>' aborts the resource. The message also fires when the value is a Puppet::Provider instance of the wrong class or an Array.
Source
Thrown at lib/puppet/type.rb:1875
# provider's doc string, since markdown_definitionlist sanitizes its inputs.
scrub(@doc) + "Available providers are:\n\n" + parenttype.providers.sort_by(&:to_s).collect { |i|
markdown_definitionlist(i, scrub(parenttype().provider(i).doc))
}.join
end
# For each resource, the provider param defaults to
# the type's default provider
defaultto {
prov = @resource.class.defaultprovider
prov.name if prov
}
validate do |provider_class|
provider_class = provider_class[0] if provider_class.is_a? Array
provider_class = provider_class.class.name if provider_class.is_a?(Puppet::Provider)
unless @resource.class.provider(provider_class)
raise ArgumentError, _("Invalid %{resource} provider '%{provider_class}'") % { resource: @resource.class.name, provider_class: provider_class }
end
end
munge do |provider|
provider = provider[0] if provider.is_a? Array
provider = provider.intern if provider.is_a? String
@resource.provider = provider
if provider.is_a?(Puppet::Provider)
provider.class.name
else
provider
end
end
end
param.parenttype = self
end
View on GitHub (pinned to e227c27540)
Solutions
- List what the type actually offers on this node: puppet describe -p <type> | head, or `ruby -e "puts Puppet::Type.type(:package).suitable_provider_names"` style introspection
- Drop the explicit provider and let Puppet pick the default suitable provider — the most portable fix
- If the provider is required, install its dependency (apt-get install aptitude) and ensure its confine matches the node facts
- Fix typos/casing: provider names are downcased symbols ('zypper', not 'Zypper')
Example fix
# before
package { 'htop': ensure => installed, provider => 'aptitude' } # fails where aptitude absent
# after
package { 'htop': ensure => installed } # default provider auto-selected per platform Defensive patterns
Strategy: validation
Validate before calling
type = Puppet::Type.type(:package)
name = provider_value.to_s if provider_value.respond_to?(:to_s)
unless type.provider(name)
Puppet.warning "provider #{name} unsuitable on this node; using default"
provider_value = nil # let defaultto choose
end Try / catch
begin resource[:provider] = 'aptitude' rescue ArgumentError => e raise unless e.message =~ /Invalid .* provider/ resource[:provider] = nil # fall back to default provider end
Prevention
- Omit provider where possible; Puppet selects the suitable default per platform
- Check availability first: Puppet::Type.type(:package).suitable_provider_names
- Install provider dependencies (aptitude, yum-utils) before pinning to them
When it happens
Trigger: package { 'x': provider => 'aptitude' } where aptitude is not installed or the node is not Debian-family (suitability filtering removes it); a typo like provider => 'yum' spelled 'yuum'; exec's provider => 'shell' vs 'powershell' on the wrong platform; using a provider whose gem/dep (e.g., ruby-shadow for user) failed to load, dropping it from the registry.
Common situations: Porting manifests between OS families (apt vs yum vs dnf vs zypper); module code hardcoding a provider that the node's package set lacks; missing provider dependencies (aptitude, yum-utils, ruby libraries) after a minimal install or major OS upgrade.
Related errors
- Cannot manage owner permissions, because the provider for '%
- Cannot manage group permissions, because the provider for '%
- Could not find %{name} provider of %{provider}
- Unable to verify the SSL certificate at %{uri}
- Provider %{provider} must have features '%{needed_feature}'
AI-assisted analysis of puppetlabs/puppet@e227c27540 (2026-08-21).
Data as JSON: /api/errors/efd497943b3a3c33.
Report an issue: GitHub.