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

  1. Select the correct stack (`pulumi stack select <stack>`) so the snapshot contains the referenced provider.
  2. Run `pulumi refresh` and re-run import so provider IDs are current.
  3. 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

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


AI-assisted analysis of pulumi/pulumi@793f7b2e16 (2026-08-31). Data as JSON: /api/errors/26d95b55ce929285. Report an issue: GitHub.