pulumi/pulumi · error
provider %v not found in snapshot
Error message
provider %v not found in snapshot
What it means
After parsing the provider reference, the importer searches the current program snapshot for a resource state whose URN and ID match the provider reference. If no match is found (provider == nil), it throws "provider %v not found in snapshot". This means the import input references a provider that doesn't exist in the stack's state.
Source
Thrown at pkg/importer/hcl2.go:162
}
// Otherwise we'll need to load the appropriate package for this resource. We'll do this by grabbing the resource's
// provider reference and looking up that provider resource in the current program snapshot. From there, we can build
// a package descriptor and load the package and its schema.
providerRef, err := sdkproviders.ParseReference(state.Provider)
if err != nil {
return nil, nil, fmt.Errorf("parse resource provider reference: %w", err)
}
var provider *pkgresource.State
for _, s := range importState.Snapshot {
if s.URN == providerRef.URN() && s.ID == providerRef.ID() {
provider = s
break
}
}
if provider == nil {
return nil, nil, fmt.Errorf("provider %v not found in snapshot", providerRef)
}
packageName := state.Type.Package()
if sdkproviders.IsProviderType(state.Type) {
// When the type is a provider type, the type triple is in the form
// pulumi:providers:pkg instead of pkg:mod:type, so use the token "name"
// position as the package instead.
packageName = tokens.Package(state.Type.Name())
}
pluginName, err := providers.GetProviderName(packageName, provider.Inputs)
if err != nil {
return nil, nil, fmt.Errorf("get provider name: %w", err)
}
pluginVersion, err := providers.GetProviderVersion(provider.Inputs)
if err != nil {
return nil, nil, fmt.Errorf("get provider version: %w", err)
}
downloadURL, err := providers.GetProviderDownloadURL(provider.Inputs)View on GitHub (pinned to 793f7b2e16)
Solutions
- Select the correct stack (`pulumi stack select <stack>`) so the snapshot contains the referenced provider.
- Run `pulumi refresh` and re-run import so provider IDs are current.
- Update the import definition's provider field to the provider URN+ID that actually exists in the snapshot (`pulumi stack export` to check).
Defensive patterns
Strategy: validation
Validate before calling
exported, _ := stack.Export(ctx)
for _, r := range exported.Resources {
if r.URN == providerRef.URN() && r.ID == providerRef.ID() {
found = true
}
}
if !found { /* select correct stack or refresh */ } Prevention
- Always run `pulumi stack select` for the intended stack before import.
- Refresh state before building import definitions so provider IDs are current.
- Cross-check provider URN+ID against `pulumi stack export`.
When it happens
Trigger: Running `pulumi import` when the provider reference in the import state points to a provider resource absent from the target stack's snapshot — e.g. wrong stack selected, provider deleted, or a stale/hand-crafted provider ID.
Common situations: Importing into a different stack than the one whose provider ID was captured; provider was replaced/refreshed so its ID changed; pointing at a stack whose state has never created that provider.
Related errors
- parse resource provider reference: %w
- get provider name: %w
- get provider version: %w
- get provider parameterization: %w
- snapshot integrity failure; refusing to use it: %w
AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31).
Data as JSON: /api/errors/26d95b55ce929285.
Report an issue: GitHub.