pulumi/pulumi · error

source snapshot is missing extension blob(s) %v referenced b

Error message

source snapshot is missing extension blob(s) %v referenced by moved resources

What it means

After collecting moved resources, `pulumi state move` calls `deploy.MapExtensions` to carry extension blobs from the source snapshot into the destination (state_move.go:474-479). If a moved resource references an ExtensionRef whose blob is absent from the source snapshot's Extensions map, the move aborts listing the missing blobs, since the moved resource would otherwise reference an unresolvable extension in the destination.

Source

Thrown at pkg/cmd/pulumi/state/state_move.go:478

		options := []string{
			yes,
			no,
		}

		switch response := ui.PromptUser(msg, options, no, cmdutil.GetGlobalColorization()); response {
		case yes:
		// continue
		case no:
			fmt.Fprintln(cmd.Stdout, "Confirmation denied, not proceeding with the state move")
			return nil
		}
	}

	// Carry extension blobs across the move so any moved resource's ExtensionRef
	// still resolves on the destination. Drop blobs the source no longer references.
	destExts, missing := deploy.MapExtensions(destSnapshot.Resources, destSnapshot.Extensions, sourceSnapshot)
	if len(missing) > 0 {
		return fmt.Errorf("source snapshot is missing extension blob(s) %v referenced by moved resources", missing)
	}
	destSnapshot.Extensions = destExts
	sourceSnapshot.Extensions, _ = deploy.MapExtensions(sourceSnapshot.Resources, sourceSnapshot.Extensions, nil)

	err = destSnapshot.VerifyIntegrity()
	if err != nil {
		return fmt.Errorf(`failed to verify integrity of destination snapshot: %w

This is a bug! We would appreciate a report: https://github.com/pulumi/pulumi/issues/`, err)
	}

	err = sourceSnapshot.VerifyIntegrity()
	if err != nil {
		return fmt.Errorf(`failed to verify integrity of source snapshot: %w

This is a bug! We would appreciate a report: https://github.com/pulumi/pulumi/issues/`, err)
	}

View on GitHub (pinned to 793f7b2e16)

Solutions

  1. Restore the source stack from a checkpoint backup that still contains the extension blobs (backend history or `~/.pulumi/backups`)
  2. Re-export/re-import the source state carefully (`pulumi stack export`/`import`) ensuring the `extensions` entries are preserved, then retry
  3. Remove or recreate the affected moved resource so it no longer references the missing extension blob (e.g. `pulumi state delete` the resource and re-create it via `pulumi up`)
  4. If blobs are legitimately absent, report it at https://github.com/pulumi/pulumi/issues — a source snapshot referencing missing blobs usually indicates corruption or a bug

Example fix

// before
$ pulumi state move dest 'urn:pulumi:src::proj::pkg:type::res'
error: source snapshot is missing extension blob(s) [sha256:abcd...] referenced by moved resources

// after: restore source snapshot with extension blobs intact
$ pulumi stack select src && pulumi stack import --file restored-state.json
$ pulumi state move dest 'urn:pulumi:src::proj::pkg:type::res'
Defensive patterns

Strategy: validation

Validate before calling

# Ensure the source snapshot retains its extension blobs before moving
$ pulumi stack select <src> && pulumi stack export | jq '.extensions // empty | length'
# every moved resource's extensionRefs must have a matching entry; a length of 0 with extension refs present is a red flag

Try / catch

if err := runStateMove(dest, urns); err != nil &&
    strings.Contains(err.Error(), "missing extension blob") {
    return fmt.Errorf("source state lost extension blobs; restore from backup before moving")
}

Prevention

When it happens

Trigger: A resource selected for the move carries an ExtensionRef, but the source snapshot's `Extensions` map lacks the corresponding blob hash — typically a corrupted or hand-edited source checkpoint, or state written by code that dropped extension blobs.

Common situations: Source state manually edited or truncated (extension blobs stripped by export/import tooling); state manipulated by an older/buggy CLI that didn't persist extension blobs; merging snapshots from different sources where blobs were lost.

Related errors


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